?
學習目標
學習Verilog提供的門級原語
理解門的實例引用、門的符號以及and/or,buf/not類型的門的真值表
學習如何根據電路的羅技圖來生成Verilog描述
講述門級設計中的上升、下降和關斷延遲
解釋門級設計中的最小、最大和典型延遲
?1.門的類型
1.1與門(and)和或門(or)
具有一個標量輸出端和多個標量輸入端。端口列表中的第一個端口必定是輸出端口,其后為輸入端
可以使用的屬于與/或門類的其他門的術語包括:
and(與門) or(或門) xor(異或門) nand(與非門) nor(或非門) xnor(同或門)
?
?
wire OUT,IN1,IN2; //基本門的實例引用 and a1(OUT,IN1,IN2); nand na1(OUT,IN1,IN2); or or1(OUT,IN1,IN2); nor nor1(OUT,IN1,IN2); xnor nx1(OUT,IN1,IN2);//輸入端超過兩個,三輸入端的與非門 nand na1_3inp(OUT,IN1,IN2,IN3);//實例引用門時,不給實例命名 and(OUT,IN1,IN2);//合法的門實例引用
?
基本門的真值表
and | 0 | 1 | x | z |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | x | x |
x | 0 | x | x | x |
z | 0 | x | x | x |
?
nand | 0 | 1 | x | z |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | x | x |
x | 1 | x | x | x |
z | 1 | x | x | x |
?
or | 0 | 1 | x | z |
0 | 0 | 1 | x | x |
1 | 1 | 1 | 1 | 1 |
x | x | 1 | x | x |
z | x | 1 | x | x |
?
nor | 0 | 1 | x | z |
0 | 1 | 0 | x | x |
1 | 0 | 0 | 0 | 0 |
x | x | 0 | x | x |
z | x | 0 | x | x |
?
xor | 0 | 1 | x | z |
0 | 0 | 1 | x | x |
1 | 1 | 0 | x | x |
x | x | x | x | x |
z | x | x | x | x |
?
xnor | 0 | 1 | x | z |
0 | 1 | 0 | x | x |
1 | 0 | 1 | x | x |
x | x | x | x | x |
z | x | x | x | x |
1.2緩沖器/非門
buf/not門具有一個標量輸入和多個標量輸出。
?緩沖門(buf)/非門(not)
輸入端口必須是在實例端口列表的最后一個。
//基本門的實例引用 buf b1(OUT1,IN); not n1(OUT1,IN);//輸出端多余兩個 buf b1_2out(OUT1,OUT2,IN);//實例引用門時,不給實例命名 not (OUT1,IN );//合法的門實例引用
?真值表
buf | in | out |
? | 0 | 0 |
? | 1 | 1 |
? | x | x |
? | z | z |
?
not | in | out |
? | 0 | 1 |
? | 1 | 0 |
? | x | x |
? | z | x |
帶控制端的緩沖器/非門(bufif/notif)
Verilog提供了其他4個帶有控制信號端口的buf/not門
bufif1 bufif0 notif1 notif0
真值表
? | ? | ctrl | |||
? | bufif1 | 0 | 1 | x | z |
in | 0 | z | 0 | L | L |
1 | z | 1 | H | H | |
x | z | x | x | x | |
z | z | x | x | x |
?
? | ? | ctrl | |||
? | bufif0 | 0 | 1 | x | z |
in | 0 | 0 | z | L | L |
1 | 1 | z | H | H | |
x | x | z | x | x | |
z | x | z | x | x |
?
? | ? | ctrl | |||
? | notif1 | 0 | 1 | x | z |
in | 0 | z | 1 | H | H |
1 | z | 0 | L | L | |
x | z | x | x | x | |
z | z | x | x | x |
?
? | ? | ctrl | |||
? | notif0 | 0 | 1 | x | z |
in | 0 | 1 | z | H | H |
1 | 0 | z | L | L | |
x | x | z | x | x | |
z | x | z | x | x |
2.門延遲
2.1上升、下降、關斷延遲
上升延遲
門的輸出從0,x,z變化為1所需的時間稱為上升延遲。
下降延遲
門的輸出從1,x,z變化為0所需的時間
關斷延遲
關斷延遲是指門的輸出從0,1,x變化為z所需的時間
PS如果值變化到不確定值x,則所需的時間可以看成是以上三種延遲值中最小的那個。
延遲值說明的類型
//以下三種延遲都等于delay_time所表示的延遲時間 and #(delay_time) a1(out,i1,i2);//說明上升延遲和下降延遲 and #(rise_val,fall_val) a2(out,i1,i2);//說明上升延遲,下降延遲和關斷延遲 bufif0 #(rise_val,fall_val, turnoff_val) b1(out,in,control);
2.2最小/典型/最大延遲
//一個延遲 //若最小延遲=4 //若典型延遲=5 //若最大延遲=6 and #(4:5:6) a1(out,i1,i2);//兩個延遲 //若最小延遲,上升延遲=3,下降延遲=5,關斷延遲=min(3,5) //若典型延遲,上升延遲=4,下降延遲=6,關斷延遲=min(4,6) //若最小延遲,上升延遲=5,下降延遲=7,關斷延遲=min(5,7) and #(3:4:5,5:6:7) a2(out,i1,i2);//三個延遲 //若最小延遲,上升延遲=2,下降延遲=3,關斷延遲=4 //若最小延遲,上升延遲=3,下降延遲=4,關斷延遲=5 //若最小延遲,上升延遲=4,下降延遲=5,關斷延遲=6 and #(2:3:4,3:4:5,4:5:6) a3(out,i1,i2);//啟動仿真器,使用最大延遲進行仿真 >verilog test.v +maxdelays//啟動仿真器,使用最小延遲進行仿真 >verilog test.v +mindelays//啟動仿真器,使用典型延遲進行仿真 >verilog test.v +typedelays
?