Verilog HDL是一種用于數字邏輯電路設計的語言。用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型。Verilog HDL既是一種行為描述的語言,也是一種結構描述的語言。也就是說,既可以用電路的功能描述,也可以用元器件和它們之間的連接來建立所設計電路的Verilog HDL模型。Verilog模型可以是實際電路的不同級別的抽象。這些抽象的級別和它們對應的模型類型共有以下5種。
本文引用地址:http://butianyuan.cn/article/189534.htm- 系統(tǒng)級(system):用高級語言結構實現(xiàn)設計模塊的外部性能的模型。
- 算法級(algorithm):用高級語言結構實現(xiàn)設計算法的模型。
- RTL級(Register Transfer Level):描述數據在寄存器之間流動和如何處理這些數據的模型。
- 門級(gate-level):描述邏輯門以及邏輯門之間的連接的模型。
- 開關級(switch-level):描述器件中三極管和儲存節(jié)點以及它們之間連接的模型。
一個復雜電路系統(tǒng)的完整Verilog HDL模型是由若干個Verilog HDL模塊構成的,每一個模塊又可以由若干個子模塊構成。其中有些模塊需要綜合成具體電路,而有些模塊只是與用戶所設計的模塊交互的現(xiàn)存電路或激勵信號源。利用Verilog HDL語言結構所提供的這種功能就可以構造一個模塊間的清晰層次結構來描述極其復雜的大型設計,并對所作設計的邏輯電路進行嚴格的驗證。
Verilog HDL行為描述語言作為一種結構化和過程性的語言,其語法結構非常適合于算法級和RTL級的模型設計。這種行為描述語言具有以下功能。
- 可描述順序執(zhí)行或并行執(zhí)行的程序結構。
- 用延遲表達式或事件表達式來明確地控制過程的啟動時間。
- 通過命名的事件來觸發(fā)其他過程里的激活行為或停止行為。
- 提供了條件、if-else、case、循環(huán)程序結構。
- 提供了可帶參數且非零延續(xù)時間的任務(task)程序結構。
- 提供了可定義新的操作符的函數結構(function)。
- 提供了用于建立表達式的算術運算符、邏輯運算符、位運算符。
- Verilog HDL語言作為一種結構化的語言也非常適合于門級和開關級的模型設計。因其結構化的特點又使它具有以下功能。
- 提供了完整的一套組合型原語(primitive);
- 提供了雙向通路和電阻器件的原語;
- 可建立MOS器件的電荷分享和電荷衰減動態(tài)模型。
Verilog HDL的構造性語句可以精確地建立信號的模型。這是因為在Verilog HDL中,提供了延遲和輸出強度的原語來建立精確程度很高的信號模型。信號值可以有不同的強度,可以通過設定寬范圍的模糊值來降低不確定條件的影響。
Verilog HDL作為一種高級的硬件描述編程語言,有著類似C語言的風格。其中if語句、case語句等和C語言中的對應語句十分相似。如果讀者已經掌握C語言編程的基礎,那么學習Verilog HDL并不困難,只要對Verilog HDL某些語句的特殊方面著重理解,并加強上機練習就能很好地掌握它,利用它的強大功能來設計復雜的數字邏輯電路。下面將介紹Verilog HDL中的基本結構和語法。
Verilog HDL程序入門
首先來看幾個Verilog HDL程序,然后從中分析Verilog HDL程序的特性。
例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; //加法器算法實現(xiàn)
endmodule
這個例子通過連續(xù)賦值語句描述了一個名為adder的三位加法器可以根據兩個三比特數a、b和進位(cin)計算出和(sum)和進位(count)。從例子中可以看出整個Verilog HDL程序是嵌套在module和endmodule聲明語句里的。
例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
這個程序通過連續(xù)賦值語句描述了一個名為compare的比較器。對兩比特數a、b進行比較,如a與b相等,則輸出equal為高電平,否則為低電平。在這個程序中,“/*........*/”和“//.........”表示注釋部分,注釋只是為了方便程序員理解程序,對編譯是不起作用的。
例3:使用原語的三態(tài)驅動器。
module trist2(out,in,enable); //三態(tài)啟動器模塊端口聲明
output out; //端口說明
input in, enable;
bufif1 mybuf(out,in,enable); //實例化宏模塊bufif1
endmodule
這個例子描述了一個名為trist2的三態(tài)驅動器。程序通過調用一個在Verilog語言庫中現(xiàn)存的三態(tài)驅動器實例元件bufif1來實現(xiàn)其功能。
評論