门级建模
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了门级建模相关的知识,希望对你有一定的参考价值。
学习目标
学习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
以上是关于门级建模的主要内容,如果未能解决你的问题,请参考以下文章