編 者 按
避不開的場景 如果熟悉SpinalHDL設(shè)計(jì),那么都應(yīng)該清楚在SpinalHDL設(shè)計(jì)里,如果輸出端口沒有給明確賦值的話,那么在生成RTL代碼時會報錯提示我們沒有為端口賦值。想想如果你在設(shè)計(jì)一個AXI4的測試邏輯,但你并不需要使用里面的全部信號(要知道AXI4總線配置里面的哪個信號使用哪個不使用可使一大堆參數(shù)),如果想要做的模塊在任何場景下都能直接連接使用的話,最早對于我沒有使用的信號我是這么來處理的:
if(axi4Port.useRegion)axi4Port.clearAll() if(axi4Port.useLock) axi4Port.lock.clear() ……是不是寫起來很啰嗦?~ 還有一個場景就是在FPGA里面在制作PR版本時對于動態(tài)區(qū)和靜態(tài)區(qū)之間的接口信號為了方便后續(xù)Impl版本的時序收斂,對于沒有使用到的信號以及賦常值的信號都建議添加約束:
對于輸入沒有使用到的信號,內(nèi)部定義一個寄存器來鎖存信號,并把這個寄存器的屬性設(shè)置為nopurne
對于暑促好信號,則建議將輸出信號必須為reg類型,并將該輸出信號配置為preserve屬性。
對于這種使用不到的信號,一個個的follow這些原則不免有點(diǎn)兒太過于“體力活”~ 而在SpinalHDL里,我們可以通過DataAnalyzer來快速地實(shí)現(xiàn)這些沒有使用到的端口信號。 》DataAnalyzer
考慮下面這個簡單的模塊:
在這個模塊里,對于輸入的data1接口我們并沒有用,而對于輸出out2端口,我們也并沒有輸出賦值。
現(xiàn)在,如果我們想要實(shí)現(xiàn)針對PR那種場景的需求,我們可以通過DataAnalyzer來寫一個通用的處理代碼:
這里我們?yōu)槟K添加一個PrePopTask。對于io里面的每個信號,都例化一個DataAnalyzer,對于接口為輸入信號(port.isInput),并且其沒有任何扇出信號(analysier.getFanOut.isEmpty),則將其賦值給一個寄存器,并對該寄存器添加“nopurne”屬性。而如果接口信號為輸出信號(port.isOutput),并且沒有任何的信號給他賦值(analysier.getFanIn.isEmpty),則將其設(shè)置為寄存器,賦值為0并添加“preserve”屬性。最終生成的代碼:
完全符合我們的需求~
結(jié)語
能省功夫就省功夫,在Boss的許可下,選擇盡可能高效的工具,這周工作里修改一個Verilog代碼,在SpinalHDL里面五分鐘能實(shí)現(xiàn)的需求Verilog里改了小半天,極大打擊工作熱情~
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
603017 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120235 -
信號
+關(guān)注
關(guān)注
11文章
2790瀏覽量
76731 -
總線
+關(guān)注
關(guān)注
10文章
2878瀏覽量
88053 -
端口
+關(guān)注
關(guān)注
4文章
964瀏覽量
32052
原文標(biāo)題:三分鐘教你快速處理沒有使用的端口信號
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論