8位流水燈程式verilog_閱讀筆記:《Verilog HDL入門》第3章 Verilog語言要素
技術標籤:8位流水燈程式verilog
3.1識別符號
1.Verilog中的Identifier是由任意字母、數字、下劃線和$符號組成的,第一個字元必須是字母或者下劃線。區分大小寫。
2.Escaped Identifier是為了解決簡單識別符號不能以數字和$符號開頭的缺點。如下所示:
3.關鍵字。我的理解是保留字包括關鍵字,verilog中關鍵字都是小寫的。
3.2註釋
- /* */
2. //
3.3格式
語句結構既可以跨越多行編寫,也可以在一行內編寫。
3.4系統任務和系統函式
以$開頭的識別符號被認為是系統任務或者系統函式。任務可以返回0個或者多個值,函式只能返回一個值。函式的執行不允許由任何延遲,任務可以有延遲。但是系統任務不能有延遲。簡單做個測試,但是發現控制檯沒有輸出。
3.5編譯器指令
某些以`(反引號)開頭的標誌符是編譯器指令。
1. `define和`undef指令:巨集定義以及取消前面的巨集。
2.`ifdef、`ifndef、`else、`elseif和`endif:條件編譯。
3.`default_nettype:該指令用於為隱式線網指定線網型別。
4.`include:可以包含其他檔案的內容(替換的方式)。絕對路徑和相對路徑都可以。
5.`resetall:將所有的編譯指令重新設定為預設值。
6.`timescale:一般放在模組宣告的外部,影響其後所有的延遲值。直到遇到另一個`timescale指令或者`resetall指令。
3.6值集合
Verilog中有四種基本值:0,1,x,z。其中x、z是不區分大小寫的。這四種基本值構成了Verilog語言中3種類型的常數:Integer、Real和String。下劃線可以自由地在整數中或者實數中使用,用來改進常量的易讀性。
3.6.1整數型
1.簡單的十進位制:+、-這兩個操作符只能作用於十進位制,不能作用於其他進位制。
2.基數格式表示法:
[size] '[signed] base value
基數格式的數通常為無符號數。若某整型數的位寬沒有定義,則預設是32位的。無符號數在左邊補零,有符號數在左邊補符號位。若數的最左邊是x或者z,則補x或z。
base是必須要有的。
3.6.2實數
1.十進位制:小數點兩側必須有數字。
2.科學計數法:23_5.1e2。
Verilog將實數隱式地轉換成整數。
3.6.3字串
字串是雙引號括起的字元序列。字串是8位ASCII值的序列。
3.7資料型別
Verilog有兩大資料型別:Net Type和Variable Type。
3.7.1線網型別
關於這部分,多個激勵源驅動的線網,線網的值有效值由表決定。
3.7.2未宣告的線網
3.7.3向量線網和標量線網
3.7.4變數型別
1.reg變數型別
使用了關鍵詞signed的reg變數,會以補碼的形式儲存。
2.儲存器
儲存器是由reg變數組成的陣列。儲存器宣告格式如下:
reg[[msb : lsb]] memory1[upper1 : lower1], ...;
儲存器中的每一個元素被稱為字,對儲存器賦值可以分別對儲存器中的每個字進行賦值。文中提到了使用for迴圈對儲存器進行賦值。還可以使用$readmemb和$readmemh這兩個函式對儲存器進行賦值。
3.整型變數
整型變數的宣告格式如下所示:
integer integer1, integer2, ... integerN[msb : lsb];
[msb : lsb]指定了整型陣列的範圍。一個整形數至少有32位。
整型能被當作向量處理。可以通過賦值將整數型轉換為位向量。
4.time變數
5.real和realtime變數
3.7.5陣列
看一下二維陣列的宣告:
integer a[0:15][0:15]; //16*16的陣列,其中每個元素都是整型變數。
一維reg變數的陣列也被稱為儲存器。不能對整個陣列進行賦值。只能對陣列的一個元素進行賦值。
3.8引數
引數宣告語句的格式如下:
parameter [signed][msb : lsb] param1 = const_expr,...;
引數值在編譯的時候可以使用defparam進行改變。引數是區域性的,只能在其定義的模組內部其作用,而巨集定義對同時編譯的多個檔案起作用。