Verilog入門學(xué)習(xí)筆記——第一彈
掃描二維碼
隨時隨地手機看文章
Verilog HDL是一種硬件描述語言,以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能,一起來學(xué)習(xí)吧。
1、邏輯
四值電平邏輯:0(假)、1(真)、x(不確定)、z(高阻/浮動)
x和z代表的位數(shù):十六進制-4位、八進制-3位、二進制-1位
數(shù)的最高位是x、z、0時,自動賦值擴展剩余更高位;數(shù)的最高位是1時,用0擴展剩余更高位。
2、常量
使用帶基數(shù)的形式表示常量:<+/-><位寬><基數(shù)符號><數(shù)值>
-
指明位數(shù)的數(shù)字( '):
用十進制數(shù)表示位寬; 基數(shù)格式包括十進制(d)、十六進制(h)、二進制(b)、八進制(o); 0~1、a/A~f/F
-
不指明位數(shù)的數(shù)字 :不指定基數(shù)格式時默認為十進制數(shù);默認位寬與計算機有關(guān)(最小32位)。
3、定義標識符來表示常量
公式:parameter 參數(shù)名=常量表達式
例子:
parameter BIT=1,BYTE=8,PI=3.14; parameter DELAY=(BYTE+BIT)/2;
4、強度值:supply(驅(qū)動)、strong(驅(qū)動)、pull(驅(qū)動)、large(存儲)、weak(驅(qū)動)、medium(存儲)、small(存儲)、highz(高阻) 按程度由強到弱排序
-
各類線網(wǎng)中,只有trireg類型可以存儲強度(large、medium、small三等級)
-
強度值解決不同強度驅(qū)動源之間的賦值沖突。
-
不同強度信號驅(qū)動同一個線網(wǎng),結(jié)果服從高強度信號。同強度多個信號競爭,結(jié)果為不確定值。
5、線網(wǎng)類型 net type
線網(wǎng)net:硬件單元間的連接。由連接器件輸出端連續(xù)驅(qū)動。
數(shù)據(jù)類型:wire,wand,wor,tri,triand,trior,trireg....
線網(wǎng)用wire聲明,值由驅(qū)動源決定。默認值為z(trireg類型線網(wǎng)默認值為x),默認位寬為1。
定義格式:wire[n-1:0]變量名1,變量名2,...,變量名n;
wire a,b; //聲明兩個線網(wǎng)類型變量a,b wire [7:0] databus; //聲明一個8位寬的線網(wǎng)類型變量databus wire [32:1] busA,busB,busC; //聲明3個位寬為32的線網(wǎng)類型變量busA,busB,busC
6、寄存器類型 register type
寄存器:存儲元件,被改寫前保持原數(shù)值。
寄存器型變量只能在initial或always內(nèi)部被賦值。
寄存器未被賦值前,默認為x。
| 寄存器類型 | 功能說明 |
|---|---|
| reg | 用于行為描述中對寄存器型變量的說明。無符號數(shù) |
| integer | 32位帶符號的整數(shù)型變量。默認位寬是宿主機的位數(shù),域具體實現(xiàn)有關(guān),最小32位。計算中認為是有符號的數(shù),用二進制補碼的形式儲存。不可使用位矢量integer [3:0] num;× |
| real | 64位帶符號的實數(shù)型變量,實數(shù)不帶范圍,默認為0。用十進制或科學(xué)計數(shù)法(3e6=3000000)當實數(shù)值被賦給一個integer型變量時,只保留整數(shù)部分的值,小數(shù)點后面的值被截掉。 |
| time | 64位無符號的時間型變量 ,時間寄存器用time來聲明,寬度與具體實現(xiàn)有關(guān),最小為64位。用于存儲仿真的時間,只存無符號數(shù)。每個time型變量存儲一個至少64位的時間值。調(diào)用$time可得當前的仿真時間 |
如果沒有明確地說明寄存器型變量reg是多位寬的矢量,則寄存器變量的位寬為1位。
定義格式:reg[n-1:0]變量名1,變量名2,...,變量名n;
reg clock; //聲明一個寄存器變量clock reg [3:0] counter; //聲明一個4位寬的寄存器變量counter
integer型變量例子:
integer counter; //聲明一個整型變量counter initial counter=-1; //將-1以補碼的形式存儲在counter中 //只有寄存器類型的變量才能在initial內(nèi)部被賦值
real型變量例子:
real delta; //聲明一個實數(shù)型變量delta initial begin delta=4e10; //給delta賦值 delta=2.13; end integer i; //聲明一個整型變量i initial i=delta; //i得到的值是2(只將實數(shù)2.13的整數(shù)部分賦給i)
time型變量例子:
time current_time; //聲明一個事件類型的變量 current_time initial current_time=$time; //保存當前的仿真時間到變量current_time中





