0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

pipeline高端玩法—优先级介绍

Spinal FPGA 来源:Spinal FPGA 2023-11-04 10:13 次阅读

在前面的系列文章中,已基本阐述了Pipeline中的用法,本篇做个总结,重点针各方法的优先级

》last Win

无论是SystemVerilog还是SpinalHDL,都有Last valid assignment wins的语法特征。如在SpinalHDL-Doc中所描述:

// Every clock cycle evaluation starts here
val paramIsFalse = false
val x, y = Bool() // Define two combinational signals
val result = UInt(8bits) // Define a combinational signal

result := 1
when(x) {
result := 2
when(y) {
result := 3
}
}
if(paramIsFalse) { // This assignment should win as it is last, but it was never elaborated
result := 4// into hardware due to the use of if() and it evaluating to false at the time
}

对应的真值表是:

4ff96b58-7ab5-11ee-939d-92fbcf53809c.jpg

那么在使用pipeline中,你可能会这么来写:

when(cond1){
haltIt()
}
when(cond2){
spawnIt()
}

参照上面所述的Lastvalid assignment wins的语法特征,你可能认为spawnIt的优先级是高于haltIt的~

然而,并非如此。

Pipeline的构建并不是我们在直接构建,而是我们描述了流水线的规则之后交由Pipeline的build函数来搭建起整个的流水线结构。既然不是我们直接搭建电路,那么就要注意下在流水线构建过程中这些方法的优先级了。

回到Pipeline的组成结构:

500919ea-7ab5-11ee-939d-92fbcf53809c.jpg

Pipeline包含Stage和Connection两大主体。在Pipeline的build构建中,分别对应了Internal Connection及InInterconnect Connection两部分。

》Internal Connection中的优先级

来看下在Pipeline中关于Internal Connection的处理:

5012aabe-7ab5-11ee-939d-92fbcf53809c.png

在之前的文章系列中已基本分析了每个小单元的用法(forks暂时不考虑)。对于每一级Stage,默认情况下Stage的output端口和input端口是直连的。而后自上到下对应的API处理分别是:

spawnIt

flushIt(root为true)

throwIt(root为true)

haltIt

按照Last valid assignment wins的原则,那么上面对应的API则是优先级从高到低的。

》Interconnect Connection中的优先级

这里还是以Pipeline中常用的M2S为例来看待Interconnect Connection中的处理方式:

5029edb4-7ab5-11ee-939d-92fbcf53809c.png

这里我们要区分来看:

m.ready存在(对应前一级Stage的output.ready)

m.ready不存在

先来看m.ready不存在的场景。当m.ready不存在时,上面的处理流程牵涉到的API有:

flushIt(line30)

flushNext(line31)

按照Last valid assignment wins的原则,那么上面对应的API则是优先级从高到低的。

而当m.ready存在时,则牵涉到的API有:

throwIt(line19)

flushIt(line 30)

flushNext(line 31)

按照Last valid assignment wins的原则,那么上面对应的API则是优先级从高到低的。

》写在最后

对于SpinalHDL Pipeline这个“勇者的游戏”系列,至此基本总结的差不多了。写文章相比于看代码还是要费事一些。对于Pipeline这个系列,最开始驱使我去研究来源于想对Cache的了解,看着dolu的代码如看天书。不得不说Pipeline的这个设计简直“惊为天人”!对于逻辑设计来讲无非两大核心:状态机,流水线。在看Pipeline之前觉得这个Lib真抽象,真正看完分析后觉得真香,之前自己的设计简直太Low了,这里简直把高效描述电路发挥到了极致~








审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1345

    浏览量

    110028
  • Cache
    +关注

    关注

    0

    文章

    129

    浏览量

    28323
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27499
  • Pipeline
    +关注

    关注

    0

    文章

    28

    浏览量

    9349
  • HDL语言
    +关注

    关注

    0

    文章

    47

    浏览量

    8912

原文标题:pipeline高端玩法(十二)—优先级

文章出处:【微信号:Spinal FPGA,微信公众号:Spinal FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于优先级抢占系统的QNX调度算法

    调度算法,是基于优先级的。QNX的线程优先级,是一个0-255的数字,数字越大优先级越高。所以,优先级0是内核中的idle线程。同时,优先级
    发表于 10-31 09:17 715次阅读

    RTOS应用中的优先级反转问题

    在嵌入式系统中,如果使用基于优先级调度算法的RTOS,系统中可能发生优先级反转现象。优先级反转用来描述系统中高优先级任务由于等待低优先级任务
    发表于 12-14 11:00 1187次阅读

    stm32的中断优先级基本原理介绍

    stm32的中断具有不同的优先级,可以使用NVIC(嵌套向量中断控制器,Nested Vectored Interrupt Controller)来控制。 一、基本原理介绍 stm32的中断优先级
    发表于 08-13 08:46

    路由优先级

    路由优先级 前面讲过,各个路由协议都有自己的标准来衡量路由的好坏(
    发表于 06-09 23:47 2960次阅读
    路由<b class='flag-5'>优先级</b>

    STM32F10X的中断优先级

    STM32(Cortex-M3)中有两个优先级的概念抢占式优先级和响应优先级,有人把响应优先级称作亚优先级或副
    发表于 11-04 15:02 41次下载

    stm32定时器优先级

    什么是优先级 优先级是具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套
    发表于 10-13 11:48 5335次阅读

    DSP中断如何设置优先级

    原以为2812中断不能设置优先级。实际上硬件上优先级是做好的。但软件上有办法来设置优先级
    发表于 04-08 17:20 20次下载

    cortex M内核优先级设置

    Cortex M内核中每个中断都有一个8位的优先级设置寄存器这个8位的寄存器可以分为抢占优先级和子优先级两个部分(通过设置优先级组设置)抢占优先级
    发表于 12-01 11:51 4次下载
    cortex M内核<b class='flag-5'>优先级</b>设置

    2.FreeRTOS中断优先级和任务优先级

    FreeRTOS中断优先级和任务优先级架构:Cortex-M3版本:FreeRTOS V9.0.0前言:最开始,我并没有搞清楚什么是中断优先级和任务优先级,但看了部分资料后发现这两个并
    发表于 12-04 20:21 9次下载
    2.FreeRTOS中断<b class='flag-5'>优先级</b>和任务<b class='flag-5'>优先级</b>

    STM32F103芯片中断优先级以及FreeRTOS优先级设置

    STM32F103只用了4个位来表达优先级,因此最多支持16的可编程优先级(0~15),15为最低优先级
    发表于 01-25 18:59 1次下载
    STM32F103芯片中断<b class='flag-5'>优先级</b>以及FreeRTOS<b class='flag-5'>优先级</b>设置

    uC/OS-II学习笔记——优先级反转与优先级继承机制

    优先级反转,是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推迟被调度执行的现象。
    发表于 02-09 10:33 2次下载
    uC/OS-II学习笔记——<b class='flag-5'>优先级</b>反转与<b class='flag-5'>优先级</b>继承机制

    中断优先级处理的原则及配置 抢占优先级和响应优先级的区别

    首先我们需要知道什么是中断优先级:中断优先级是CPU响应中断的先后顺序
    的头像 发表于 05-18 15:10 2.7w次阅读
    中断<b class='flag-5'>优先级</b>处理的原则及配置 抢占<b class='flag-5'>优先级</b>和响应<b class='flag-5'>优先级</b>的区别

    FreeRTOS任务的优先级示例

    任务的优先级:0~24之间。数字越大,任务优先等级越高。高优先级的任务优先执行。
    的头像 发表于 09-15 11:13 2770次阅读

    Free RTOS的优先级翻转

    优先级翻转简介:就是高优先级的任务运行起来的效果好像成了低优先级,而低优先级比高优先级先运行;
    的头像 发表于 02-10 15:31 1287次阅读
    Free RTOS的<b class='flag-5'>优先级</b>翻转

    什么是优先级反转

    假设现在有三个任务TaskA(优先级高)、TaskB(优先级中)、TaskC(优先级低),一个信号量(Semaphore),此信号量用于任务之间争夺某个资源。在某一时刻,高优先级的Ta
    的头像 发表于 04-24 13:01 2240次阅读
    什么是<b class='flag-5'>优先级</b>反转