门级建模

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

 

以上是关于门级建模的主要内容,如果未能解决你的问题,请参考以下文章

Verilog门级建模

门级建模

Verilog HDL门级建模

No.5 门级建模

正边缘检测器Verilog行为代码

CPNtools协议建模安全分析---实例变迁标记