|
本帖最后由 51黑黑黑 于 2016-2-23 03:55 編輯
一:基本
Verilog中的變量有線網(wǎng)類型和寄存器類型。線網(wǎng)型變量綜合成wire,而寄存器可能綜合成WIRE,鎖存器和觸發(fā)器。
二:verilog語句結(jié)構(gòu)到門級(jí)的映射
過程性賦值:
過程性賦值只出現(xiàn)在always語句中。
阻塞賦值和非阻塞賦值就該賦值本身是沒有區(qū)別的,只是對(duì)后面的語句有不同的影響。
建議設(shè)計(jì)組合邏輯電路時(shí)用阻塞賦值,設(shè)計(jì)時(shí)序電路時(shí)用非阻塞賦值。
過程性賦值的賦值對(duì)象有可能綜合成wire,latch,和flip-flop,取決于具體狀況。如,時(shí)鐘控制下的非阻塞賦值綜合成flip-flop。
過程性賦值語句中的任何延時(shí)在綜合時(shí)都將忽略。
建議同一個(gè)變量單一地使用阻塞或者非阻塞賦值。 進(jìn)位:
通常會(huì)將進(jìn)行運(yùn)算操作的結(jié)果比原操作數(shù)擴(kuò)展一位,用來存放進(jìn)位或者借位。如:
Wire [3:0] A,B;
Wire [4:0] C;
Assign C=A+B;
C的最高位用來存放進(jìn)位。 IF:
如果變量沒有在IF語句的每個(gè)分支中進(jìn)行賦值,將會(huì)產(chǎn)生latch。如果IF語句中產(chǎn)生了latch,則IF的條件中最好不要用到算術(shù)操作。Case語句類似。Case的條款可以是變量。如果一個(gè)變量在同一個(gè)IF條件分支中先贖值然后讀取,則不會(huì)產(chǎn)生latch。如果先讀取,后贖值,則會(huì)產(chǎn)生latch。 設(shè)計(jì)時(shí)序電路時(shí),建議變量在always語句中賦值,而在該always語句外使用,使綜合時(shí)能準(zhǔn)確地匹配。建議不要使用局部變量。 不能在多個(gè)always塊中對(duì)同一個(gè)變量贖值
三:模塊優(yōu)化
四、驗(yàn)證:
1. 敏感表:
在always語句中,如果敏感表不含時(shí)鐘,最好將所有的被讀取的信號(hào)都放在敏感表中。
2. 異步復(fù)位:
建議不要在異步時(shí)對(duì)變量讀取,即異步復(fù)位時(shí),對(duì)信號(hào)贖以常數(shù)值。
|
|