verilog之基本結構


verilog語法的基本結構

1、verilog的定義

verilog,一種硬件描述語言,致力於提高數字電路,尤其是大規模數字電路的描述規范。從描述就可以看出,這個語言和C不同,不是高級語言。但是,這個語言也不像匯編。其本身能夠完成許多高級語言的功能,比如判斷、計算、選擇等操作。這就容易讓人誤以為這是一門高級語言。其實,有人想將高級語言引入硬件設計的,只不過現在還沒有成功。高級語言和硬件語言之間的差距還是比較大的。

2、verilog的基本語法

想學一門語言,自然要了解語法。對於高級語言來說,其本身源自人類的邏輯,所以學習者可以更具自身的邏輯來實現功能。但是對於硬件語言來說,必須掌握一套內在的規律才能設計。目前在學習了一些基本的verilog模塊后,個人覺得初級的verilog語言遵循的就是信號。verilog實現了信號的輸入,處理和輸出。每一個信號都必須與設計相關聯。對於無關信號編譯器會自動排除並發出警告。與此同時,每一個信號都占用着實際的硬件資源,越少的信號使用,硬件的規模就會越小。verilog的語法原則就是信號正確。

3、verilog的基本關鍵字

想寫verilog,首先要做的就是了解關鍵字,這是開始的材料。

第一個就是module,用於聲明硬件主體。在一個verilog代碼中寫一個module,並且模塊名與文件名保持一致。加上endmodule就構成了一個閉合。這里類似與HTML中的標簽。

第二個就是input 和 output,前面提到verilog是以處理信號為目標的,那么就會有信號的聲明。input和output就是聲明這個模塊的外部連接信號。當然,還有inout,這里就不做介紹。其他在內部聲明的都是內部信號。

第三個就是wire和reg,這部分則是信號的類別。和C語言中的數據類型類似,reg和wire是兩種不同類型的變量。

第四個就是assign和always,這兩個就是信號的處理函數了,可以對應到C中的printf等等系統函數。

有了這四個部分,實際上就可以設計出具有基本帶你路功能的verilog代碼了。

4、verilog的基本設計

verilog的設計,我個人習慣從信號的角度入手設計,通過實現描述信號的變化來設計。例如led燈閃爍就可以描述為一個周期變化的信號。依次執行事件1、2、3等就可以描述為狀態機信號模型。這里實際上是對應到了數字設計的部分。利用verilog,完全可以設計出一個帶有IO、計算器、控制器、存儲器的小型處理器。當然,也可以按照事件的發生來設計,這里自己選擇就好。

還是附上一段簡單的代碼吧

module mux(out, a, b, sel);
    input a, b, sel;
    output out;
    reg out;
    always @(a or b or sel)
        if (!sel) out = a;
        else out = b;
endmodule

上面的代碼是描述了一個選擇器。即sel=0,out=a,否則out=b。

代碼的設計大體的思路就是這樣,嘗試一下就可以快速的理解。

5、仿真文件

前面說的都是設計文件。但是verilog還有一個重要的作用就是數字仿真。學過數電就會知道,電路仿真在軟件上實現時需要自己去找合適的激勵,這一步不斷的調整還是比較費力的。而對於使用verilog的設計而言,雖然可以綜合為rtl級電路,但是仿真時不可能將其轉化為原理圖,這樣太費時間了。對於大型項目來說,基本不可能。所以,既然激勵源也是由電路構成的,自然而然可以使用verilog去描述。所以這里產生了仿真verilog文件。

和設計時verilog語法不同,仿真時語法更為隨意,不對應電路,會有許多系統函數可以使用。具體的設計還是要在實踐中理解。

插入一段代碼:

module RelationTest;
reg a; reg [1:0]b; reg [5:0] c;
initial begin
a=1'b1; b=2'b00; c=6'b101001;
$displayb({a, b}); //??3?b100
$displayb({c[5:3], a}); // 4?b1011
$displayb({4{a}}); // 4?b1111
end
endmodule

這里就是仿真文件,可以看到設計中多了許多其他的語法。這些語法有時間再講吧。這里就是了解一下代碼結構。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM