verilog文字規則
在verilog程式中,其值不能被隨意改變的量被稱為常量或者常數。常數主要有三種型別,整數型別(integer)、實數型別(real)和字串型別(string)。整數型別是可以綜合的,實數型和字串型不可綜合。
整數
為了提高可讀性,在較長的數間可用下劃線分開,下劃線可以隨意用在整數或實數中,本身不代表任何意義,但是數字最高位前不能用,也不能用在進製和位寬處
若不註明位寬和進製,或僅用d註明進製時,都是十進位制數字,預設為32位
若未註明某整數的位寬,僅標註了數制,則位寬即為此數制規定的數值中對應的位數
整數可以在左面帶正負號,但是不能放在數值內
如果定義的位寬比實際的要短,則多餘位數從高位被截,如果定義的位寬要長,則從高位補0位
實數
通常表述必須帶有小數點,小數點兩側必須有數字,verilog可以將實數轉化為整數,通過四捨五入。
字串
文字字串和數字字串,需放在雙引號中。字串不能分成多行書寫。數字字串也成為位向量,代表的是二進位制、八進位制或十六進製制的陣列
識別符號
識別符號是最常用的操作符。
資料型別
net網線型別
net型資料的值取決於驅動的值。
net變數的另一適用場合是在結構描述中將其連線到乙個門元件或者模組的輸出端。
net變數沒有連線到驅動,其值為高阻態z。
verilog程式模組中,輸入輸出型變數都預設為net型別的一種子型別wire型別。
子型別:
wire、tri(訊號綜合後的電路具有三態的功能)、supply0(地線或邏輯0)、supply1(電源線或邏輯1)、tri0(下拉型別)、tri1)(上拉型別)、wand(線與型別驅動)、wor(線或型別驅動)、trior(三態線或型別)。僅前四種可綜合
register暫存器型別
除可描述組合電路外還具有寄存特性,即具有在接受下一次賦值前,可以保持原值不變的特性。必須放在過程語句中,如initial、always引導的語句中。即在always和initial等過程結構內被賦值的變數必須定義成register型別。
子型別:
reg、integer(整數暫存器型別)、time(時間暫存器型別,32位帶符號整型暫存器變數)、real(實數暫存器型別,64位帶符號實數型暫存器變數)、realtime(實數時間暫存器型別,64位帶符號實數型暫存器變數),僅前兩種可綜合,後三種主要用於**。
memory儲存器型別
儲存器型別memory實際上是reg型別的暫存器的擴充套件類。儲存器可看成由reg定義的二維向量,即由一組暫存器構成的陣列
操作符
分為單目操作符、雙目操作符、三目操作符三類
邏輯操作符:&&、||、! 1&z=z 0&z=0 1|z=1 0|z=z
縮位操作符:&、~&、|、~|、^、^~、~^
常用語句補充
initial過程語句
initial過程語句沒有敏感訊號表,不帶觸發條件。該語句沿時間方向軸只執行一次,最常用於**模組中對激勵向量的描述,或用於給暫存器變數賦初始值。
`timescale **時間單位/**精度
forever迴圈語句
可以連續不斷的執行其後的語句或語句塊,從而產生週期性的波形,作為**激勵訊號。因此通常在initial過程語句中。
編譯指示語句
檔案包含語句`include
條件編譯語句`ifdef、`else、`endif
任務和函式語句
任務(task)語句
表述方式:
定義:task 《任務名》;
埠及資料型別宣告語句
begin 過程語句; end
endtask
呼叫:《任務名》(埠1,埠2,...,埠n);
任務的呼叫必須在主程式的過程結構中。
任務語句中不能出現有always或initial語句引導的過程語句結構,在任務中無法描述時序電路,只能描述組合電路
任務語句中的過程語句為順序語句,若有多條,需要用塊語句括起來
函式(function)語句
表述方式:
定義:function《位寬範圍宣告》函式名;
輸入埠說明,其他型別變數定義;
begin 過程語句; end
endfunction
呼叫:《函式名》(輸入引數1,輸入引數2,...,輸入埠n);
《位寬範圍宣告》是乙個引數或位寬說明,制定函式返回值的型別或位寬,如果沒有則返回值為1的暫存器型別的資料。
應該至少含有乙個輸入埠,不允許有常規意義上的輸出埠和雙向埠。
函式語句中不能出現有always或initial語句引導的過程語句結構,在任務中無法描述時序電路,只能描述組合電路
函式的呼叫必須在主程式的過程結構中。
函式定義語句只能放在模組中,不能放在過程結構中;函式內部可以呼叫函式,但不可呼叫任務;由於被呼叫的函式相當於乙個運算元,所以過程語句和連續賦值語句都可以呼叫函式,但是不能作為語句單獨出現
庫元件實現結構描述
26個基本元件,呼叫方法與例化語句的使用方法完全相同
《模組元件名》《例化元件名》(.例化元件埠(例化元件外接埠名),...);
基本門元件名 《門例化名》 (《埠關聯列表:輸出,輸入1,輸入2,...>);
三態門 bufif1 u1(out,in,enable); bufif2(out,a,ctr1);
not ic1 (out1,out2,in); buf ic2 (out1,out2,out3,in); 允許有多個輸出,但是只能有乙個輸入
Verilog語法總結
1.阻塞賦值 與非阻塞賦值 的區別 一條非阻塞過程賦值語句對應的賦值操作執行完之前,下一語句也可以開始執行。各條阻塞型過程賦值語句將以他們在順序塊中的排列次序得到執行。2.關係運算子 關係運算子的優先順序比算數運算子的優先順序低.3.縮減運算 縮減運算的過程 第一步將運算元的第一位與第二位進行與或非...
verilog語法隨記
module host cpld 宣告host cpld的輸入輸出變數 input a0,b0,c0 宣告輸入埠a0,b0和c0 output a1,b1,c1 宣告輸出埠a1,b1和c1 reg x 0 reg是暫存器型別,表示需要觸發,無輸入時可保持原來數值 wire x wire是網線型別,表...
Verilog語法簡介
常量 正數常量 含義8 b11001100 寬度為8位的二進位制數 8 hff 寬度為8位的十六進製制數 7 o15 寬度為7位的八進位制數 6 d10 寬度為6位的十進位制數 變數net型變數相當於硬體電路中各種物料連線其特點是輸出的值緊跟輸入值的變化而變化。wire是最常用的net型變數。wir...