|
模塊特點(diǎn)
Verilog HDL程序是由模塊構(gòu)成的。每個(gè)模塊的內(nèi)容都是嵌在module和endmodule兩個(gè)語(yǔ)句之間。每個(gè)模塊實(shí)現(xiàn)特定的功能。模塊可以進(jìn)行層次嵌套。
每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出口,然后對(duì)模塊的功能進(jìn)行行為邏輯描述。
Verilog HDL程序的書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分寫(xiě)多行。
除了endmodule語(yǔ)句外,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)。
可以用/…../和//…….對(duì)Verilog HDL程序的任何部分作注釋。一個(gè)好的,有使
用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。
模塊的結(jié)構(gòu)
module <模塊名> (<端口列表>)
<I/O說(shuō)明>
<內(nèi)部信號(hào)聲明>
<功能定義>
endmodule
1
2
3
4
5
模塊的端口定義:
模塊的端口聲明了模塊的輸入輸出口。格式:
module 模塊名(口1,口2,口3,口4,......)
1
模塊的內(nèi)容:
I/O說(shuō)明
輸入口(input 端口名1,端口名2,……端口名n)
輸出口(output 端口名1,端口名2,……端口名n)
I/O\說(shuō)明也可以卸載端口聲明語(yǔ)句中: module module_name(input port1,input port2,…output port1,output port2…)
內(nèi)部信號(hào)說(shuō)明
在模塊內(nèi)用到的和與端口有關(guān)的wire和reg變量的聲明,比如:reg[width-1:0] R1,R2…; wire[width-1:0] W1,W2…
功能定義
模塊中最重要的部分是邏輯功能定義部分。有三種方法可在模塊中產(chǎn)生邏輯:
用“assign”聲明語(yǔ)句
“assign”,后面再加一個(gè)方程式即可
assign a = b & c;//兩個(gè)輸入的與門(mén)
1
“assign”語(yǔ)句是描述組合邏輯最常用的方法之一
用實(shí)例元件
and and_inst( q, a, b );
1
采用實(shí)例元件的方法象在電路圖輸入方式下,調(diào)入庫(kù)元件一樣。鍵入元件的名字和相連的引腳即可,
表示在設(shè)計(jì)中用到一個(gè)跟與門(mén)(and)一樣的名為and_inst的與門(mén),其輸入端為a, b,輸出為q。要求
每個(gè)實(shí)例元件的名字必須是唯一的,以避免與其他調(diào)用與門(mén)(and) 的實(shí)例混淆。
用“always”塊
always @(posedge clk or posedge clr)
begin
if(clr) q <= 0;
else if(en) q <= d;
end
//帶有異步清除端的D觸發(fā)器
1
2
3
4
5
6
“always”塊既可用于描述組合邏輯也可
描述時(shí)序邏輯.“always”模塊內(nèi),邏輯是按照指定的順序執(zhí)行的,兩個(gè)或更多的“always”模塊也是同時(shí)執(zhí)行的,但是模塊內(nèi)部的語(yǔ)
句是順序執(zhí)行的
|
|