在前面的系列文章中,已基本闡述了Pipeline中的用法,本篇做個(gè)總結(jié),重點(diǎn)針各方法的優(yōu)先級(jí)
》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 }
對(duì)應(yīng)的真值表是:
那么在使用pipeline中,你可能會(huì)這么來寫:
when(cond1){ haltIt() } when(cond2){ spawnIt() }
參照上面所述的Lastvalid assignment wins的語法特征,你可能認(rèn)為spawnIt的優(yōu)先級(jí)是高于haltIt的~
然而,并非如此。
Pipeline的構(gòu)建并不是我們?cè)谥苯訕?gòu)建,而是我們描述了流水線的規(guī)則之后交由Pipeline的build函數(shù)來搭建起整個(gè)的流水線結(jié)構(gòu)。既然不是我們直接搭建電路,那么就要注意下在流水線構(gòu)建過程中這些方法的優(yōu)先級(jí)了。
回到Pipeline的組成結(jié)構(gòu):
Pipeline包含Stage和Connection兩大主體。在Pipeline的build構(gòu)建中,分別對(duì)應(yīng)了Internal Connection及InInterconnect Connection兩部分。
》Internal Connection中的優(yōu)先級(jí)
來看下在Pipeline中關(guān)于Internal Connection的處理:
在之前的文章系列中已基本分析了每個(gè)小單元的用法(forks暫時(shí)不考慮)。對(duì)于每一級(jí)Stage,默認(rèn)情況下Stage的output端口和input端口是直連的。而后自上到下對(duì)應(yīng)的API處理分別是:
spawnIt
flushIt(root為true)
throwIt(root為true)
haltIt
按照Last valid assignment wins的原則,那么上面對(duì)應(yīng)的API則是優(yōu)先級(jí)從高到低的。
》Interconnect Connection中的優(yōu)先級(jí)
這里還是以Pipeline中常用的M2S為例來看待Interconnect Connection中的處理方式:
這里我們要區(qū)分來看:
m.ready存在(對(duì)應(yīng)前一級(jí)Stage的output.ready)
m.ready不存在
先來看m.ready不存在的場(chǎng)景。當(dāng)m.ready不存在時(shí),上面的處理流程牽涉到的API有:
flushIt(line30)
flushNext(line31)
按照Last valid assignment wins的原則,那么上面對(duì)應(yīng)的API則是優(yōu)先級(jí)從高到低的。
而當(dāng)m.ready存在時(shí),則牽涉到的API有:
throwIt(line19)
flushIt(line 30)
flushNext(line 31)
按照Last valid assignment wins的原則,那么上面對(duì)應(yīng)的API則是優(yōu)先級(jí)從高到低的。
》寫在最后
對(duì)于SpinalHDL Pipeline這個(gè)“勇者的游戲”系列,至此基本總結(jié)的差不多了。寫文章相比于看代碼還是要費(fèi)事一些。對(duì)于Pipeline這個(gè)系列,最開始驅(qū)使我去研究來源于想對(duì)Cache的了解,看著dolu的代碼如看天書。不得不說Pipeline的這個(gè)設(shè)計(jì)簡(jiǎn)直“驚為天人”!對(duì)于邏輯設(shè)計(jì)來講無非兩大核心:狀態(tài)機(jī),流水線。在看Pipeline之前覺得這個(gè)Lib真抽象,真正看完分析后覺得真香,之前自己的設(shè)計(jì)簡(jiǎn)直太Low了,這里簡(jiǎn)直把高效描述電路發(fā)揮到了極致~
審核編輯:劉清
-
Verilog
+關(guān)注
關(guān)注
28文章
1352瀏覽量
110466 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28454 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27681 -
Pipeline
+關(guān)注
關(guān)注
0文章
28瀏覽量
9384 -
HDL語言
+關(guān)注
關(guān)注
0文章
47瀏覽量
8960
原文標(biāo)題:pipeline高端玩法(十二)—優(yōu)先級(jí)
文章出處:【微信號(hào):Spinal FPGA,微信公眾號(hào):Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于優(yōu)先級(jí)搶占系統(tǒng)的QNX調(diào)度算法
RTOS應(yīng)用中的優(yōu)先級(jí)反轉(zhuǎn)問題
stm32的中斷優(yōu)先級(jí)基本原理介紹
路由優(yōu)先級(jí)
![路由<b class='flag-5'>優(yōu)先級(jí)</b>](https://file1.elecfans.com//web2/M00/A5/00/wKgZomUMNoOAFnDNAABdh7Nwrd0256.jpg)
STM32F10X的中斷優(yōu)先級(jí)
stm32定時(shí)器優(yōu)先級(jí)
DSP中斷如何設(shè)置優(yōu)先級(jí)
cortex M內(nèi)核優(yōu)先級(jí)設(shè)置
![cortex M內(nèi)核<b class='flag-5'>優(yōu)先級(jí)</b>設(shè)置](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
2.FreeRTOS中斷優(yōu)先級(jí)和任務(wù)優(yōu)先級(jí)
![2.FreeRTOS中斷<b class='flag-5'>優(yōu)先級(jí)</b>和任務(wù)<b class='flag-5'>優(yōu)先級(jí)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32F103芯片中斷優(yōu)先級(jí)以及FreeRTOS優(yōu)先級(jí)設(shè)置
![STM32F103芯片中斷<b class='flag-5'>優(yōu)先級(jí)</b>以及FreeRTOS<b class='flag-5'>優(yōu)先級(jí)</b>設(shè)置](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
uC/OS-II學(xué)習(xí)筆記——優(yōu)先級(jí)反轉(zhuǎn)與優(yōu)先級(jí)繼承機(jī)制
![uC/OS-II學(xué)習(xí)筆記——<b class='flag-5'>優(yōu)先級(jí)</b>反轉(zhuǎn)與<b class='flag-5'>優(yōu)先級(jí)</b>繼承機(jī)制](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
中斷優(yōu)先級(jí)處理的原則及配置 搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的區(qū)別
![中斷<b class='flag-5'>優(yōu)先級(jí)</b>處理的原則及配置 搶占<b class='flag-5'>優(yōu)先級(jí)</b>和響應(yīng)<b class='flag-5'>優(yōu)先級(jí)</b>的區(qū)別](https://file.elecfans.com//web2/M00/44/58/pYYBAGKEneuAEc56AABlzIctiLU453.png)
FreeRTOS任務(wù)的優(yōu)先級(jí)示例
Free RTOS的優(yōu)先級(jí)翻轉(zhuǎn)
![Free RTOS的<b class='flag-5'>優(yōu)先級(jí)</b>翻轉(zhuǎn)](https://file.elecfans.com/web2/M00/90/54/pYYBAGPl8pqASUmmAAD4JaNeSLc099.png)
什么是優(yōu)先級(jí)反轉(zhuǎn)
![什么是<b class='flag-5'>優(yōu)先級(jí)</b>反轉(zhuǎn)](https://file1.elecfans.com/web2/M00/82/2F/wKgaomRGDLeAWFLYAACZgR4NAMM252.png)
評(píng)論