天天看點

Verilog HDL語言學習筆記

Verilog HDL語言

Verilog HDL是一種硬體描述語言(HDL:Hardware Discription Language),是一種以文本形式來描述數字系統硬體的結構和行為的語言。

用它可以表示邏輯電路圖、邏輯表達式,還可以表示數字邏輯系統所完成的邏輯功能。

是由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發。

Verilog HDL和VHDL是目前世界上最流行的兩種硬體描述語言,都是在20世紀80年代中期開發出來的。兩種HDL均為IEEE标準。

Verilog HDL就是在用途最廣泛的C語言的基礎上發展起來的一種件描述語言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首創的,最初隻設計了一個仿真與驗證工具,之後又陸續開發了相關的故障模拟與時序分析工具。1985年Moorby推出它的第三個商用仿真器Verilog-XL,獲得了巨大的成功,進而使得Verilog HDL迅速得到推廣應用。1989年CADENCE公司收購了GDA公司,使得VerilogHDL成為了該公司的獨家專利。1990年CADENCE公司公開發表了Verilog HDL,并成立LVI組織以促進Verilog HDL成為IEEE标準,即IEEE Standard 1364-1995.

  Verilog HDL的最大特點就是易學易用,如果有C語言的程式設計經驗,可以在一個較短的時間内很快的學習和掌握,因而可以把Verilog HDL内容安排在與ASIC設計等相關課程内部進行講授,由于HDL語言本身是專門面向硬體與系統設計的,這樣的安排可以使學習者同時獲得設計實際電路的經驗。與之相比,VHDL的學習要困難一些。但Verilog HDL較自由的文法,也容易造成初學者犯一些錯誤,這一點要注意。

  這是一個初學者最常見的問題。其實兩種語言的差别并不大,他們的描述能力也是類似的。掌握其中一種語言以後,可以通過短期的學習,較快的學會另一種語言。選擇何種語言主要還是看周圍人群的使用習慣,這樣可以友善日後的學習交流。當然,如果您是內建電路(ASIC)設計人員,則必須首先掌握verilog,因為在IC設計領域,90%以上的公司都是采用verilog進行IC設計。對于PLD/FPGA設計者而言,兩種語言可以自由選擇。

  設計人員通過計算機對HDL語言進行邏輯仿真和邏輯綜合,友善高效地設計數字電路及其産品。

  常用的Verilog HDL語言開發軟體有Altera公司的MAX+PLUS II,Quartus II和Xilinx公司的Foundation ISE。

 任何新生事物的産生都有它的曆史沿革,早期的硬體描述語言是以一種進階語言為基礎,加上一些特殊的約定而産生的,目的是為了實作RTL級仿真,用以驗證設計的正确性,而不必像在傳統的手工設計過程中那樣,必須等到完成樣機後才能進行實測和調試。 

1、1981年Gateway Automation(GDA)硬體描述語言公司成立。

2、1983年該公司的Philip Moorby首創了Verilog HDL,Moorby後來成為Verrlog HDL-XL的主要設計者和Cadence公司的第一合夥人。

3、1984-1985年Moorby設計出第一個關于Verilog HDL的仿真器。

4、1986年Moorby對Verilog HDL的發展又做出另一個巨大的貢獻,提出了用于快速門級仿真的XL算法。

5、随着Verilog HDL-XL的成功,Verilog HDL語言得到迅速發展。

6、1987年Synonsys公司開始使用Verilog HDL行為語言作為綜合工具的輸入。

7、1989年Cadence公司收購了Gateway公司,Verilog HDL成為Cadence公司的私有财産。

8、1990年初Cadence公司把Verilong HDL和Verilong HDL-XL分開,并公開釋出了Verilog HDL.随後成立的OVI(Open Verilog HDL International)組織負責Verilog HDL的發展,OVI由Verilog HDL的使用和CAE供應商組成,制定标準。

9、1993年,幾乎所有ASIC廠商都開始支援Verilog HDL,并且認為Verilog HDL-XL是最好的仿真器。同時,OVI推出2.0版本的Verilong HDL規範,IEEE接收将OVI的Verilong HDL2.0作為IEEE标準的提案。

10、1995年12月,IEEE制定了Verilong HDL的标準IEEE1364-1995.   

  // Verilog Example

  // User-Defined Macrofunction

  module reg12 ( d, clk, q);

  define size 11

  input [`size:0]d;

  input clk;

  output [`size:0]q;

  reg [`size:0]q;

  always @(posedge clk)

  q = d;

  endmodule

繼續閱讀