數(shù)字門級電路可分為兩大類:組合邏輯和時序邏輯。鎖存器是組合邏輯和時序邏輯的一個交叉點,在后面會作為單獨的主題處理。
組合邏輯描述了門級電路,其中邏輯塊的輸出直接反映到該塊的輸入值的組合,例如,雙輸入AND門的輸出是兩個輸入的邏輯與。如果輸入值發(fā)生變化,輸出值將反映這一變化,組合邏輯的RTL模型需要反映這種門級行為,這意味著邏輯塊的輸出必須始終反映該邏輯塊當(dāng)前輸入值的組合。
SystemVerilog有三種在可綜合RTL級別表示組合邏輯的方法:連續(xù)賦值語句、always程序塊和函數(shù)。接下來幾篇文章將探討每種編碼風(fēng)格,并推薦最佳實踐編碼風(fēng)格。

使用函數(shù)表示組合邏輯
當(dāng)編碼正確時,函數(shù)的行為和綜合就像組合邏輯一樣。
| 最佳實踐指南7-7 |
|---|
| 將RTL模型中使用的函數(shù)聲明為自動automatic。 |
為了表示組合邏輯行為,每次調(diào)用函數(shù)時都必須計算一個新的函數(shù)返回值。如果調(diào)用了靜態(tài)函數(shù),但沒有指定返回值,則靜態(tài)函數(shù)將隱式返回其上一次調(diào)用的值。這是鎖存邏輯的行為,而不是組合邏輯。通過將RTL模型中使用的所有函數(shù)聲明為自動函數(shù)(automatic),可以避免這種編碼錯誤。
例7-2定義了一個使用Russian Peasant Multiplication算法(一系列加法和移位運算)計算乘法運算的函數(shù)。該函數(shù)被定義在一個包中,任何模塊都可以使用該乘法器算法。
SystemVerilog會推斷出一個與函數(shù)名稱和數(shù)據(jù)類型相同的變量,示例7-2中的代碼就是利用了這一點。函數(shù)名multiply_f被用作臨時變量來保存for循環(huán)中的中間計算結(jié)果,函數(shù)名中存儲的最終值在函數(shù)退出時成為函數(shù)返回值。
圖7-2顯示了綜合該函數(shù)的結(jié)果,以及從連續(xù)賦值語句調(diào)用該函數(shù)的模塊。
示例7-2:定義乘法運算的算法函數(shù)
//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords packagedefinitions_pkg; timeunit1ns;timeprecision1ns; //RussianPeasantMultiplicationAlgorithm functionautomatic[7:0]multiply_f([7:0]a,b); multiply_f=0; for(inti=0;i<=3;?i++)?begin? ??????if?(b?==?0)?continue;?//?all?done,?finish?looping ??????else?begin? ?????????if?(b?&?1)?multiply_f?+=?a; ?????????a?<<=?1;??//?multiply?by?2 ?????????b?>>=1;//divideby2 end end endfunction endpackage:definitions_pkg //`end_keywords //`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords modulealgorithmic_multiplier importdefinitions_pkg::*; (inputlogic[3:0]a,b, outputlogic[7:0]result ); timeunit1ns;timeprecision1ns; assignresult=multiply_f(a,b); endmodule:algorithmic_multiplier //`end_keywords圖7-2:示例7-2的綜合結(jié)果:作為組合邏輯的函數(shù)

| 最佳實踐指南7-8 |
|---|
| 在可能的情況下,使用SystemVerilog運算符,如*,而不是使用循環(huán)和其他編程語句。 |
算法乘法器的示例7-2還說明了為什么在乘法和除法等復(fù)雜運算中最好使用SystemVerilog運算符。如果在示例7-2中使用了乘法運算符(*),則綜合編譯器可以將該運算符映射到ASIC或FPGA的最有效的乘法器。
設(shè)計工程師在使用算術(shù)運算符或算法來表示復(fù)雜操作時需要謹(jǐn)慎。RTL模型不是在具有大量內(nèi)存資源的通用計算機上運行的軟件程序。RTL模型是門級實現(xiàn)的抽象。所表示的功能需要在物理上適合目標(biāo)ASIC或FPGA,并且在時間上在有限的數(shù)量或時鐘周期內(nèi)。之前的文章有詳細(xì)介紹了在RTL模型中使用算術(shù)運算符(如乘法和除法)的指導(dǎo)原則。
審核編輯:郭婷
-
鎖存器
+關(guān)注
關(guān)注
8文章
952瀏覽量
43844 -
組合邏輯
+關(guān)注
關(guān)注
0文章
48瀏覽量
10323 -
and
+關(guān)注
關(guān)注
0文章
36瀏覽量
7689
原文標(biāo)題:使用函數(shù)表示組合邏輯
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
定點數(shù)表示實數(shù)的方法以及定點數(shù)在硬件上的運算驗證
電壓放大器驅(qū)動的混凝土組合結(jié)構(gòu)界面損傷高靈敏檢測方法研究
C語言中的內(nèi)聯(lián)函數(shù)與宏
深入理解C語言:函數(shù)—編程中的“積木塊”藝術(shù)
實用電子電路設(shè)計(全6本)——數(shù)字邏輯電路的ASIC設(shè)計
WP4000變頻功率分析儀的精度表示與常規(guī)儀表精度表示方法有什么不同?
數(shù)字電路—22、時序邏輯電路
數(shù)字電路—6、邏輯函數(shù)的表示方法
迅為RK3568開發(fā)板篇Openharmony配置HDF控制UART-實操-HDF驅(qū)動配置UART-UART應(yīng)用開發(fā)-UART驅(qū)動API接口介紹
復(fù)合光纜型號怎么表示
解鎖TSMaster fifo函數(shù):報文讀取的高效方法
迅為RK3568開發(fā)板篇Openharmony配置HDF控制UART-實操-HDF驅(qū)動配置UART-UART應(yīng)用開發(fā)-UART驅(qū)動API接口介紹
請問AFE5801 AD轉(zhuǎn)換后數(shù)字信號是用有符號數(shù)還是無符號數(shù)表示的?
解密邏輯單元與CoreScore得分的關(guān)系

使用函數(shù)表示組合邏輯的方法
評論