下面先介紹幾個簡單的Verilog HDL程式,然后從中分析Verilog HDL程式的特性。
例[3.1.1]:module adder ( count,sum,a,b,cin );
input [2:0] a,b;
input cin;
output count;
output [2:0] sum;
assign {count,sum} = a + b + cin;
endmodule
這個例子通過連續賦值陳述句描述了一個名為adder的三位加法器可以根據兩個三位元數a、b和進位(cin)計算出和(sum)和進位(count)。 從例子中可以看出整個Verilog HDL程式是嵌套在module和 endmodule 宣告陳述句里的。
例[3.1.2]:module compare ( equal,a,b );
output equal; //宣告輸出信號equal
input [1:0] a,b; //宣告輸入信號a,b
assign equal=(a==b)?1:0;
/*如果a、b 兩個輸入信號相等,輸出為1。否則為0*/
endmodule
這個程式通過連續賦值陳述句描述了一個名為compare的比較器。對兩位元數 a、b 進行比較,如a與b相等,則輸出equal為高電平,否則為低電平。在這個程式中,/*........*/和//.........表示注釋部分,注釋只是為了方便程式員理解程式,對編譯是不起作用的。
例[3.1.3]:module trist2(out,in,enable);
output out;
input in, enable;
bufif1 mybuf(out,in,enable);
endmodule
這個程式描述了一個名為trist2的三態驅動器。程式通過呼叫一個在Verilog語言庫中現存的三態驅動器實體元件bufif1來實作其功能。
例[3.1.4]: module trist1(out,in,enable);
output out;
input in, enable;
mytri tri_inst(out,in,enable);
//呼叫由mytri模塊定義的實體元件tri_inst
endmodule
module mytri(out,in,enable);
output out;
input in, enable;
assign out = enable? in : 'bz;
endmodule
這個程式例子通過另一種方法描述了一個三態門。在這個例子中存在著兩個模塊。模塊trist1呼叫由模塊mytri定義的實體元件tri_inst。模塊trist1是頂層模塊。模塊mytri則被稱為子模塊。
通過上面的例子可以看到:
? Verilog HDL程式是由模塊構成的。每個模塊的內容都是嵌在module和endmodule兩個
陳述句之間。每個模塊實作特定的功能。模塊是可以進行層次嵌套的。正因為如此,才可
以將大型的數字電路設計分割成不同的小模塊來實作特定的功能,最后通過頂層模塊
呼叫子模塊來實作整體功能。
? 每個模塊要進行埠定義,并說明輸入輸出口,然后對模塊的功能進行行為邏輯描述。
? Verilog HDL程式的書寫格式自由,一行可以寫幾個陳述句,一個陳述句也可以分寫多行。
? 除了endmodule陳述句外,每個陳述句和資料定義的最后必須有分號。
? 可以用/*.....*/和//.......對Verilog HDL程式的任何部分作注釋。一個好的,有使
用價值的源程式都應當加上必要的注釋,以增強程式的可讀性和可維護性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230467.html
標籤:其他硬件開發
上一篇:基于路由協議的VoIP業務下載
