verilog學習(二)語法之資料基礎
一、關於模組
Verilog 的基本設計單元是“模組” (block)。一個模組是由兩部分組 成的 ,一部分描述接 口,另一部分描述邏輯功能 ,即定義輸入是如何影響輸出的 。
如圖,verilog 程式包括 4 個主要部分 : 端 口定義 、I/ O 說明、內部訊號宣告和功能定義 。
引用模組的兩種方式:
( 1) 在引用時,嚴格按照模組定義的埠順序來連線 ,不用標明原模組定義時規定的埠名,例如 :
模組名( 連線端 口 1訊號名 ,連線端 口2 訊號名 ,連線端 口 3 訊號名 , 。。。)
( 2 ) 在引用時用“.”符號,標明原模組是定義時規定的埠名,例如:
模組名(.端 口 1名( 連線訊號 1名), . 端 口2 名( 連線訊號 2 名), •.•••..• )'
這樣表示的好處在於可以用埠名與被 引用模組 的埠相對應 ,而不必嚴格按埠順序對應 ,提高了程式的可讀性和可移植性 。
模組中最重要 的部分是邏輯功能定義部分。有 3 種方法可在模組中產生邏輯 :
1) 用“assign ”宣告語句
如 :assign a = b & c;這種方法的句法很 簡單,只需寫一個“assign”,後面再加一個方程式 即可 。例中的方程式 描述了一個有兩個輸入的與門。
2 ) 用例項元件
如 :and #2 u1 ( q , a , b ) ;
採用例項元件的方法像在電路圖輸入方式下調入庫元件一樣 ,鍵入元件的名字和相連的引腳即可,這表示在設計中用到一個跟與 門(and) 一樣的名為u1的與門,其輸人端為 a , b,輸出 為 q。輸出延遲為 2 個單位時間 。要求模組中每個具體化後的例項元件 的名字必須是惟一的,以避免與其他呼叫與門( and) 的例項混淆 。
3) 用“always”塊
如 :always @ (posedge clk or posedge clr);
begin
if ( clr) q <= 0 ;
else if ( en) q <= d ;
end
PS:總結
( 1) 在 Verilog 模組中所有過程塊(如 :initial 塊 、always 塊) 、連續賦值語句 、例項引用都 是並行的;在模組內部,語句是順序執行的
(2) 它們表示的是一種通過變數名互相連線的關係 ;
( 3) 在同一模組中這三者 出現的先後順序沒有關係 ;
( 4 ) 只有連續賦值語句 assign 和例項引用語句可以獨立於過程塊而存在於模組的功能定義部分 。
二、資料型別及其常量和變數
verilog中共有19種資料型別,最常用的有4種:reg型、wire型、integer型、parameter型
(1)常量
1、數字
1)整數
8’ b10101100 //位寬為 8 的數的二進位制表示 ,’ b 表示二進位制
8’ ha2 //位寬為 8 的數的十六進位制是示,’ h表示十六進位制
2)x和z值
在數位電路中,x代表不定值,z代表高阻值
3)負數
-8 'd5 //這個表示式代表 5 的補數(用八位二進位制數表示)
4)下畫線
16 ’ h l 010_1011_1111_1010 //合法格式
2、引數型(parameter)
格式: parameter 引數名1=表示式,引數名2=表示式,。。。。。
parameter msb= 7 ; //定義引數 msb 為常量 7
parameter e= 25 , f = 29 ;//定義兩個常數引數
paramete rr = 5.7 ;//宣告 r 為一個實型引數
parameter hyte_ size= 8 , byte_msb= byte_size- l ;//用常數表示式賦值
parameter average_delay = ( r+ f )/2 ; //用常數表示式賦值
(2)變數
1、wire型
wire型資料長用來表示用以assign關鍵字指定的組合邏輯訊號。 網路型別的變數不能儲存值,而且它必須受到驅動器(例如門或連續賦值語句,assign)的驅動。
wire a; //定義了一個 1位的 wire 型資料
wire [7:0] b;//定義了一個 8 位的 wire 型資料
wire [4:1] c,d;//定義了兩個4位的wire型資料 ;
2、reg型別
reg型別資料的預設初始值為不定值X。
reg型資料常用來表示“always”模組內的指定訊號,常代表觸發器。
always模組內被賦值的每一個訊號都必須定義為reg型別
reg 型資料的預設初始值是不定值 。reg 型資料可以賦正值 ,也可以賦負值。但當一個reg 型資料是一個表示式中的運算元時,它的值被 當作是無符號值 ,即正值。例如 ,當一個 4 位的暫存器用做表示式中 的運算元時,如果開始暫存器被 賦以值 -1,則在表示式中進行運算時,其值被認為是十 15 。
3、memory型
通過對 reg 型變數建立陣列來對儲存器建模,可以 描述 RAM 型儲存器、 ROM 儲存存和 reg 檔案 。陣列 中的每一個單元通 過一個數組索引進行定址 。在 verilog語言中沒有多維陣列存在。memory 型資料是通過擴充套件 reg 型資料的地址範圍來生成的 。其格式如下:
reg [n-1:0] 儲存器名 [m-1:0];
或 reg [n -1:0] 儲存器名[m :1],
例如: reg [7 :0] mema[255 :0];
這個例子定義了一個名為 mema 的儲存器 ,該儲存器 有 256 個 8 位的儲存器 。該儲存器 的地址沮圍是 0 到 255 。