數(shù)字門級(jí)電路可分為兩大類:組合邏輯和時(shí)序邏輯。鎖存器是組合邏輯和時(shí)序邏輯的一個(gè)交叉點(diǎn),在后面會(huì)作為單獨(dú)的主題處理。
組合邏輯描述了門級(jí)電路,其中邏輯塊的輸出直接反映到該塊的輸入值的組合,例如,雙輸入AND門的輸出是兩個(gè)輸入的邏輯與。如果輸入值發(fā)生變化,輸出值將反映這一變化,組合邏輯的RTL模型需要反映這種門級(jí)行為,這意味著邏輯塊的輸出必須始終反映該邏輯塊當(dāng)前輸入值的組合。
SystemVerilog有三種在可綜合RTL級(jí)別表示組合邏輯的方法:連續(xù)賦值語句、always程序塊和函數(shù)。接下來幾篇文章將探討每種編碼風(fēng)格,并推薦最佳實(shí)踐編碼風(fēng)格。
always和always_ff
通用的always程序可以用來為任何類型的邏輯建模,包括組合邏輯、時(shí)序邏輯(觸發(fā)器)和電平感應(yīng)的時(shí)序邏輯(鎖存器)。為了讓通用的always程序?qū)τ|發(fā)器行為進(jìn)行建模,always關(guān)鍵字后面必須緊跟一個(gè)敏感度列表,指定時(shí)鐘信號(hào)的posedge或negedge,如:。
盡管這個(gè)例子在功能上是準(zhǔn)確的,但是通用的always程序并不要求也不強(qiáng)制執(zhí)行前面一節(jié)中列出的任何綜合要求。下一個(gè)例子在語法上是合法的,但是不可綜合。
這個(gè)例子可以在仿真中編譯和運(yùn)行,沒有任何警告或錯(cuò)誤提示,但是綜合編譯器在試圖編譯這個(gè)例子時(shí),會(huì)報(bào)告一個(gè)錯(cuò)誤。它不符合要求,即除了時(shí)鐘和異步置位或復(fù)位的邊沿之外,其他信號(hào)都不能包含在靈敏度列表中。對(duì)RTL仿真的仔細(xì)驗(yàn)證會(huì)發(fā)現(xiàn),即使在沒有發(fā)生時(shí)鐘觸發(fā)的情況下,觸發(fā)器的狀態(tài)也會(huì)在每次enable改變值時(shí)更新其內(nèi)部存儲(chǔ)。門級(jí)的觸發(fā)器沒有這個(gè)功能。
always_ff過程也需要一個(gè)敏感度列表,指定一個(gè)時(shí)鐘的posedge或negedge,但是always_ff也執(zhí)行上一節(jié)中列出的許多綜合要求。SystemVerilog標(biāo)準(zhǔn)要求所有軟件工具在以下情況下報(bào)告錯(cuò)誤。
過程的主體包含#,wait,或者@時(shí)間控制延遲時(shí),將阻止過程的執(zhí)行,直到要求的仿真時(shí)間。
在程序中,有一個(gè)對(duì)任務(wù)的調(diào)用(因?yàn)槿蝿?wù)可以包含延遲)。
任何其他存儲(chǔ)過程、連續(xù)賦值或輸入端口的賦值與always_ff存儲(chǔ)過程的變量相同。
IEEE標(biāo)準(zhǔn)還建議(但不要求)軟件工具檢查其他綜合限制,如不正確的靈敏度列表。設(shè)計(jì)工程工具,如綜合編譯器和lint檢查器(檢查編碼風(fēng)格)執(zhí)行這些可選的檢查,但大多數(shù)仿真器不對(duì)always_ff程序執(zhí)行額外的檢查。這些錯(cuò)誤和可選的額外檢查有助于確保具有時(shí)序邏輯的RTL模型既能正確仿真,又能正確綜合(仿真和綜合后功能相同)。
always_ff過程之后必須有一個(gè)符合綜合要求的敏感性列表。靈敏度列表不能像always_comb可以推斷靈敏度列表那樣從程序的主體中推斷出來。原因很簡(jiǎn)單:時(shí)鐘信號(hào)在always_ff過程的主體中沒有命名。時(shí)鐘的名稱,以及時(shí)鐘的哪個(gè)邊沿觸發(fā)了存儲(chǔ)過程,必須由設(shè)計(jì)工程師在靈敏度列表中明確指定。
最佳實(shí)踐指南8-1 |
---|
使用SystemVerilog always_ff RTL專用存儲(chǔ)過程來模擬RTL時(shí)序邏輯。請(qǐng)不要使用通用的always過程。 |
always_ff RTL專用程序強(qiáng)制執(zhí)行上一篇文章中所要求的綜合風(fēng)格,以正確模擬時(shí)序邏輯行為。
審核編輯:劉清
-
鎖存器
+關(guān)注
關(guān)注
8文章
906瀏覽量
41556 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59859 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8281 -
門級(jí)電路
+關(guān)注
關(guān)注
0文章
15瀏覽量
1995
原文標(biāo)題:數(shù)字硬件建模SystemVerilog-時(shí)序邏輯建模(2)always和always_ff
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論