Verilog入門學(xué)習(xí)筆記——第二彈
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一、Verilog內(nèi)部的基本門級(jí)元件
-
多輸入的邏輯門:多個(gè)輸入,一個(gè)輸出。多輸出門……
-
多輸入門的輸出不為高阻態(tài)z
-
多輸入與門調(diào)用例舉:
1and A1(out, in1, in2, ..., inN);
-
多輸出門調(diào)用形式:
1buf B1(out1, out2, ..., outN, in); 2not N2(out1, out2, ..., outN, in);
-
三態(tài)門:一個(gè)門輸出、一個(gè)數(shù)據(jù)輸入、一個(gè)輸入控制
輸入控制信號(hào)無效時(shí),輸出為高阻態(tài)z -
三態(tài)門調(diào)用形式:
1bufif1 B1(out, in, ctrl);bufif0 B0(out, in, ctrl); 2notif1 N1(out, in, ctrl);notif0 N0(out, in, ctrl);
二、Verilog基本結(jié)構(gòu)
1、模塊module
-
定義模塊基本語法結(jié)構(gòu)
1module模塊名(端口名1, 端口名2,端口名3,...); 2端口模式說明(input, output, inout); //說明部分 inout雙向端口 3參數(shù)定義(可選); 4數(shù)據(jù)類型定義(wire, reg等); 5 6實(shí)例化低層次模塊或基本門級(jí)元件; //邏輯功能描述部分,排序任意 7連續(xù)賦值語句(assign); 8過程塊結(jié)構(gòu)(initial和always) 9 行為描述語句; 10endmodule
-
例
-
門級(jí)描述
1/*module mux2to1(D0, D1, S, Y); //2選1數(shù)據(jù)選擇器 2 input D0, D1, S; //輸入端口聲明 3 output Y; //輸出... 4 */ 5module mux2to1(input D0, D1, S, output Y); 6 wire Snot, A, B; //內(nèi)部節(jié)點(diǎn)... 7 //↓描述邏輯功能 8 not U1(Snot, S); 9 and U2(A, D0, Snot); 10 and U3(B, S, D1); 11 or U4(Y, A, B); 12endmodule
-
數(shù)據(jù)流描述
1module mux2to1_dataflow(D0, D1, S, Y); 2 input D0, D1, S; 3 output Y; 4 wire Y; 5 //電路功能描述 6 assign Y = (~S & D0)|(S & D1); //★表達(dá)式左邊變量的數(shù)據(jù)類型必須為wire 7endmodule
-
行為描述(工作效率更高)

S=0時(shí),Y=D0;S=1時(shí),Y=D1
1/*module mux2to1_bh(D0, D1, S, Y); 2 input D0, D1, S; 3 output Y; 4 reg Y; //變量的數(shù)據(jù)類型聲明 5 always@(S or D0 or D1) //S、D0、D1中有任何一個(gè)輸入端信號(hào)變動(dòng)都會(huì)執(zhí)行 6 if(S==1) //if(S) Y=D1; 7 Y=D1; 8 else 9 Y=D0; //★表達(dá)式的左邊必須為reg型數(shù)據(jù)類型 10endmodule 11*/
可簡化為↓
1module mux2to1_bh( 2 input D0, D1, S, 3 output reg Y 4); 5 always@(D0, D1, S) 6 begin 7 if(S) Y=D1; 8 else Y=D0; 9 end 10endmodule
-
always@(S or D0 or D1)無分號(hào),表示括號(hào)中任一個(gè)變量發(fā)生變化時(shí),下面的賦值語句會(huì)被執(zhí)行一次,執(zhí)行完最后一條語句后,執(zhí)行掛起,always再次等待變量發(fā)生變化。
括號(hào)內(nèi)的為敏感變量
-
組合邏輯電路中所有輸入信號(hào)皆為敏感變量。都應(yīng)寫在括號(hào)內(nèi)。
-
過程賦值語句只能賦值寄存器型變量,輸出Y的數(shù)據(jù)類型定義為reg。
always@(*)對(duì)比assign
-
被assign賦值的信號(hào)為wire型
被always@(*)結(jié)構(gòu)塊下的信號(hào)定義為reg型,這里的reg并不是一個(gè)真正的觸發(fā)器,只有敏感列表為上升沿出發(fā)的寫法才會(huì)綜合為觸發(fā)器,在仿真時(shí)才具有觸發(fā)器的特性。 -
連續(xù)賦值語句assign可以并行執(zhí)行,相當(dāng)于描述的是連線
always@(*)描述組合邏輯時(shí),begin和end之間是串行,一條一條語句執(zhí)行
三、仿真
搭建測試平臺(tái)Test Bench
矢量波形文件(.vwf)





