您好,登錄后才能下訂單哦!
這篇文章主要講解了“Verilog Basics的使用方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Verilog Basics的使用方法有哪些”吧!
Control Statements
Verilog中的if, else, repeat, while, for, case看起來完全像C語言!
但是Verilog是HDL,我們需要用這些關鍵字來描述硬件,這意味著如果不小心對待這些控制語句,我們的硬件可能會出現問題。
If-else
if-else語句根據不同的條件來決定是否執行哪一部分代碼。
// begin and end act like curly braces in C/C++.if (enable == 1'b1) begin data = 10; // Decimal assigned address = 16'hDEAD; // Hexadecimal wr_enable = 1'b1; // Binaryend else begin data = 32'b0; wr_enable = 1'b0; address = address + 1;end
和C語言一樣,我們可以在Verilog條件語句中使用任何運算符,甚至嵌套if else語句。
但是在對組合邏輯進行Verilog HDL建模時,我們需要防止生成Latch。
Case
當需要檢查多個值的變量的情況下使用Case語句,而不是使用多個嵌套的if-else語句。
case(address)0 : $display ("It is 11:40PM");1 : $display ("I am feeling sleepy");2 : $display ("Let me skip this tutorial");default : $display ("Need to complete");endcase
case語句以關鍵字case開頭,以關鍵字endcase結尾。
在這兩個關鍵字中列出了這些case條件和相應的希望執行的語句。
和if-else一樣,建議在case語句中添加default case語句,因為如果組合邏輯Verilog HDL建模時,if-else和case-endcase語句中沒有涵蓋所有的情況(在If中沒有'else'或者在Case中沒有'default'),那么綜合工具可能會推斷出Latch。
While
如果判斷的條件返回true,則while語句將重復執行語句塊中的代碼。While循環通常不用于實際的硬件建模,但是它們用于測試平臺(驗證)。與其他語句塊一樣,它們由begin和end分隔。
while (free_time) begin$display ("Continue with webpage development");end
只要設置free_time變量為true,就會一直執行begin和end中的代碼。即打印“Continue with webpage development”。
module counter (clk,rst,enable,count);input clk, rst, enable;output [3:0] count;reg [3:0] count; always @ (posedge clk or posedge rst)if (rst) begincount <= 0;end else begin : COUNTwhile (enable) begincount <= count + 1;disable COUNT;endendendmodule
上面的例子使用了Verilog的大多數結構。我們可以注意到其中有一個名為always的語句,這也說明了Verilog的一個關鍵特性:
大多數軟件語言都是按順序執行的,而Verilog程序通常會并行執行許多語句塊。
在上面的示例中,當rst或clk達到上升沿時,always語句塊將會一直運行。在同一個verilog模塊中,可以同時執行多個always語句塊。
For loop
Verilog中的For循環與C或C ++中的循環幾乎相同。唯一的區別是Verilog不支持++和 -- 運算符,我們必須寫出完整的i = i + 1。
for (i = 0; i < 16; i = i +1) begin$display ("Current value of i is %d", i);end
上述代碼將按順序打印0到15之間的數字。
使用for循環進行寄存器傳輸級(RTL)建模時,我們需要確保我們的代碼在硬件上可以實現,既保證我們的循環次數是有限且確定的。
Repeat
Repeat和上面的for循環類似。我們在Repeat中直接明確運行了多少次。
repeat (16) begin$display ("Current value of i is %d", i);i = i + 1;end
Variable Assignment
在數字IC中,有兩種類型的元素,組合元素和時序元素。
我們如何用Verilog建模這兩 中元素呢?Verilog提供了兩種方法來建模組合邏輯,提供了一種方法來建模時序邏輯。
使用assign和always語句對組合邏輯建模。
使用always語句對時序邏輯進行建模。
另外,在測試平臺中還可以使用 Initial 語句對變量進行賦值。
Initial Blocks
顧名思義,Initial語句塊僅在仿真開始時執行一次,用于初始化變量。
initial beginclk = 0;reset = 0;req_0 = 0;req_1 = 0;end
在上面的例子中,在仿真開始時(即當t= 0時),begin和end塊內的所有變量都被初始化為零。
感謝各位的閱讀,以上就是“Verilog Basics的使用方法有哪些”的內容了,經過本文的學習后,相信大家對Verilog Basics的使用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。