第一章 Verilog语言和Vivado初步使用
第一章 Verilog語言和Vivado初步使用
在這一章我將總結Verilog語言的基本語法,并對Vivado軟件使用進行說明。
1.1Verilog基本結構
簡單的組合邏輯實例
下面以一個簡單的組合邏輯來說明Verilog的基本結構
module AND(a, b, out);output[3:0] out; // 4位輸出 input [3:0] a, b; // 4位輸入a, bassign out = a & b; // out <- a & b endmodule從模塊的聲明開始,最開始的關鍵詞為module,模塊名為AND,模塊結束的關鍵詞為endmodule。除了以上寫法還有一種頗為常見的寫法如下:
module AND (output[3:0] out,input [3:0] a, b, );assign out = a & b; endmodule簡單的時序邏輯實例
下面介紹一個簡單的時序邏輯,時序邏輯比組合邏輯復雜且要考慮的的東西更多。
module fenpin (input clk_in,output clk_out );reg c_out = 0;assign clk_out = c_out;Valways @ (posedge clk_in) beginc_out = ~c_out;end endmodule上述時序邏輯的時序圖如下:
? Verilog HDL不同于我們常見的C語言,clk_out = c_out是建立了一種電路上的連接,將c_out的值輸出到clk_out中,不僅僅是在assign clk_out = c_out這個賦值語句發生時才進行,而是之后無論c_out變為何值clk_out都要為之改變。為了更好的描述這層關系,用如下電路圖來表示上面這段代碼。
? 可以看到c_out和clk_out的確建立了永久性的連接,而不是在語句結束后就釋放這種連接,這點是要和C語言或者其他語言區別開的,不能忘記HDL是用來描述電路的。
Verilog HDL結構要求
在編寫Verilog代碼的時候需要注意以下幾點
塊中對端口或其他wire型變量的賦值,必須在always塊的外部使用assign語句,通常是將寄存器的值送出。
1.2 數據類型及變量、常量
Verilog HDL中有兩種常見的數據類型線網類型和變量類型。對于線網類型我們主要介紹wire型,對于變量類型則主要介紹reg型。
1.2.1 邏輯值與常量
邏輯值
| 000 | 邏輯0 |
| 111 | 邏輯1 |
| xxx | 邏輯值未知 |
| zzz | 高阻態 |
常量表示方法
| <位寬>'<進制><數字> | 完整的表達方式 | 4'b0101 or 4'h5 |
| <進制><數字> | 缺省位寬,位寬由機器決定,最小是32位 | h05 |
| <數字> | 缺省進制則默認為10進制,位寬默認為32位 | 5 |
📢說明:
1.2.2 線網型wire
? 1.1節的例子中clk_in和clk_out變量是wire類型,如果沒有接觸過Verilog HDL對這個類型會感到很不適應,可以先這樣想wire類型就是電路中的一條線,可以隨著端口的改變而改變電線中的邏輯值,之后進行項目設計的時候會對這些變量有更深刻的理解。
給出wire型變量的兩種定義方法:
1.2.3 寄存器型reg
? 當定義一個reg類型就相當于使用了一個D觸發器,只有在時鐘有效邊沿到來時,保存的值才能改變。
給出reg型變量的兩種定義方法:
1.2.4 符號常量
? 如果使用關鍵字parameter來定義一個標識符來代表一個常量,這個常量就被成為符號常量。
例如:parameter width = 3;將程序中的所有width用3替換。
調用模塊的時候也可以改變parameter常量的值
module add(sum, a, b);parameter time_dl = 5, time_cnt = 10;... endmodulemodule top;wire[2:0] a1, b1;wire[3:0] a2, b2, sum1;wire[4:0] sum2;add # (4, 3) AD1(sum1, a1, b1); //使time_dl=4,time_cnt=8add # (12) AD2(sum2, a2, b2); //time_dl=12,time_cnt=10 endmodule1.2.5 存儲器型變量
? 存儲器其實就是一個寄存器數組,我們寫MIPS CPU的時候接觸過寄存器堆,其實就是這個。可以使用如下方法定義
reg [msb:lsb] mem[upper1:lower1]例如:
總結
以上是生活随笔為你收集整理的第一章 Verilog语言和Vivado初步使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: amazons3 检查连接是否_钢筋机械
- 下一篇: linux系统下安装两个或多个tomca