《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > Verilog HDL語言的一些重要概念
Verilog HDL語言的一些重要概念
摘要: 基本Verilog中的變量有線網(wǎng)類型和寄存器類型,。線網(wǎng)型變量綜合成wire,,而寄存器可能綜合成WIRE,,鎖存器和觸發(fā)器,。二:verilog語句結(jié)構(gòu)到門級的映射1,、連續(xù)
關(guān)鍵詞: 開發(fā)工具 FPGA Verilog HDL
Abstract:
Key words :

轉(zhuǎn)自:21IC XILINX FPGA 論壇   作者:金猴


一:基本

Verilog中的變量有線網(wǎng)類型和寄存器類型,。線網(wǎng)型變量綜合成wire,,而寄存器可能綜合成WIRE,,鎖存器和觸發(fā)器,。

二:verilog語句結(jié)構(gòu)到門級的映射
1,、連續(xù)性賦值:assign
連續(xù)性賦值語句邏輯結(jié)構(gòu)上就是將等式右邊的驅(qū)動左邊的結(jié)點(diǎn)。因些連續(xù)性賦值的目標(biāo)結(jié)點(diǎn)總是綜合成由組合邏輯驅(qū)動的結(jié)點(diǎn),。Assign語句中的延時綜合時都將忽視,。

2、過程性賦值
過程性賦值只出現(xiàn)在always語句中,。

阻塞賦值和非阻塞賦值就該賦值本身是沒有區(qū)別的,,只是對后面的語句有不同的影響。

建議設(shè)計組合邏輯電路時用阻塞賦值,,設(shè)計時序電路時用非阻塞賦值,。

過程性賦值的賦值對象有可能綜合成wire,latch,和flip-flop,取決于具體狀況,。如,,時鐘控制下的非阻塞賦值綜合成flip-flop。

過程性賦值語句中的任何延時在綜合時都將忽略,。

建議同一個變量單一地使用阻塞或者非阻塞賦值,。

3、邏輯操作符:
邏輯操作符對應(yīng)于硬件中已有的邏輯門

4,、算術(shù)操作符:
Verilog中將reg視為無符號數(shù),,而integer視為有符號數(shù)。因此,,進(jìn)行有符號操作時使用integer,使用無符號操作時使用reg,。

5、進(jìn)位:
通常會將進(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)位。

6、關(guān)系運(yùn)算符:
關(guān)系運(yùn)算符:<,>,<=,>=
和算術(shù)操作符一樣,,可以進(jìn)行有符號和無符號運(yùn)算,,取決于數(shù)據(jù)類型是reg ,net還是integer,。

7,、相等運(yùn)算符:==,,!=
注意:===和,!==是不可綜合的。
可以進(jìn)行有符號或無符號操作,,取決于數(shù)據(jù)類型

8,、移位運(yùn)算符:
左移,右移,,右邊操作數(shù)可以是常數(shù)或者是變量,,二者綜合出來的結(jié)果不同。

9,、部分選擇:
部分選擇索引必須是常量,。

10、BIT選擇:
BIT選擇中的索引可以用變量,,這樣將綜合成多路(復(fù)用)器,。
11、敏感表:
Always過程中,,所有被讀取的數(shù)據(jù),,即等號右邊的變量都要應(yīng)放在敏感表中,不然,,綜合時不能正確地映射到所用的門,。

12、IF:
如果變量沒有在IF語句的每個分支中進(jìn)行賦值,,將會產(chǎn)生latch,。如果IF語句中產(chǎn)生了latch,則IF的條件中最好不要用到算術(shù)操作,。Case語句類似,。Case的條款可以是變量。

如果一個變量在同一個IF條件分支中先贖值然后讀取,,則不會產(chǎn)生latch,。如果先讀取,后贖值,,則會產(chǎn)生latch,。

13、循環(huán):
只有for-loop語句是可以綜合的。

14,、設(shè)計時序電路時,,建議變量在always語句中賦值,而在該always語句外使用,,使綜合時能準(zhǔn)確地匹配,。建議不要使用局部變量。

15,、不能在多個always塊中對同一個變量贖值

16,、函數(shù)
函數(shù)代表一個組合邏輯,所有內(nèi)部定義的變量都是臨時的,,這些變量綜合后為wire,。

17、任務(wù):
任務(wù)可能是組合邏輯或者時序邏輯,,取決于何種情況下調(diào)用任務(wù),。

18、Z:
Z會綜合成一個三態(tài)門,,必須在條件語句中賦值

19、參數(shù)化設(shè)計:
優(yōu)點(diǎn):參數(shù)可重載,,不需要多次定義模塊

四:模塊優(yōu)化
1,、資源共享:
當(dāng)進(jìn)程涉及到共用ALU時,要考慮資源分配問題,??梢怨蚕淼牟僮鞣饕校宏P(guān)系操作符、加減乘除操作符,。通常乘和加不共用ALU,,乘除通常在其內(nèi)部共用。

2,、共用表達(dá)式:
如:C=A+B;
D=G+(A+B);
兩者雖然有共用的A+B,,但是有些綜合工具不能識別.可以將第二句改為:D=G+C;這樣只需兩個加法器.

3,、轉(zhuǎn)移代碼:
如循環(huán)語句中沒有發(fā)生變化的語句移出循環(huán).

4,、避免latch:
兩種方法:1、在每一個IF分支中對變量賦值,。2,、在每一個IF語句中都對變量賦初值。

5:模塊:
綜合生成的存儲器如ROM或RAM不是一種好方法,。最好用庫自帶的存儲器模塊,。

五、驗(yàn)證:
1、敏感表:
在always語句中,,如果敏感表不含時鐘,,最好將所有的被讀取的信號都放在敏感表中。

2,、異步復(fù)位:
建議不要在異步時對變量讀取,,即異步復(fù)位時,對信號贖以常數(shù)值,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。