门级逻辑设计描述中可使用具体的门实例语句。下面是简单的门实例语句的格式。
注意,instance_name是可选的;gate_type为前面列出的某种门类型。各term用于表示与门的输入/输出端口相连的线网或寄存器。
第一个门实例语句是单元名为A1、输出为Out1、并带有两个输入In1和In2的两输入与门。第二个门实例语句是四输入与门,单元名为RBX,输出为Sty,4个输入为Rib、Bro、Qit和Fix。第三个门实例语句是异或门的具体实例,没有单元名。它的输出是Bar,三个输入分别为Bud[0]、Bud[1]和Bud[2]。同时,这一个实例语句中还有两个相同类型的单元。
在第一个门实例语句中,Clk是缓冲门的输入。门B1有4个输出:Fan[0]到Fan[3]。在第二个门实例语句中,Ready是非门的唯一输入端口。门N1有两个输出:PhA和PhB。
这些门用于对三态驱动器建模。这些门有一个输出、一个数据输入和一个控制输入。三态门实例语句的基本语法如下:
第一个端口OutputA是输出端口,第二个端口InputB是数据输入,ControlC是控制输入。根据控制输入,输出可被驱动到高阻状态,即值z。对于bufif0,若通过控制输入为1,则输出为z;否则数据被传输至输出端。对于bufif1,若控制输入为0,则输出为z。对于notif0,如果控制输出为1,那么输出为z;否则输入数据值的非传输到输出端。对于notif1,若控制输入为0;则输出为z。
这类门设备没有输入只有输出。上拉电阻将输出置为1。下拉电阻将输出置为0。门实例语句形式如下:
这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流。
pmos(p类型MOS管)、nmos(n类型MOS管),rnmos(r代表电阻)和rpmos开关有一个输出、一个输入和一个控制输入。实例的基本语法如下:
第一个端口为输出,第二个端口是输入,第三个端口是控制输入端。如果nmos和rnmos开关的控制输入为0,pmos和rpmos开关的控制为1,那么开关关闭,即输出为z;如果控制是1,输入数据传输至输出;如图5-5所示。与nmos和pmos相比,rnmos和rpmos在输入引线和输出引线之间存在高阻抗(电阻)。因此当数据从输入传输至输出时,对于rpmos和rmos,存在数据信号强度衰减。信号强度将在第10章进行讲解。
第一个实例为一个实例名为P1 的pmos开关。开关的输入为SmallBus,输出为BigBus,控制信号为GateControl。
第一个端口为输出端口,第二个端口为输入端口,第三个端口为n通道控制输入,第四个端口为是P通道控制输入。cmos(rcmos)开关行为与带有公共输入、输出的pmos(rpmos)和nmos(rnmos)开关组合十分相似。
这些开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有延时。后4个开关能够通过设置合适的控制信号来关闭。tran和rtran开关不能被关闭。
端口表只有两个端口,并且无条件地双向流动,即从SignalA向SignalB,反之亦然。
可以使用门时延定义门从任何输入到其输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语句的语法如下:
时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为0。
门时延定义可以包含0个、1个、2个或3个时延值。下表为不同个数时延值说明条件下,各种具体的时延取值情形。
注意转换到x的时延(to_x)不但被显式地定义,还可以通过其它定义的值决定。
下面是一些具体实例。注意Verilog HDL模型中的所有时延都以单位时间表示。单位时间与实际时间的关联可以通过`timescale编译器指令实现。在下面的实例中,
所有时延均为6,即上升时延和下降时延都是6。因为输出决不会是高阻态,截止时延不适用于与非门。转换到x的时延也是6。
在这个实例中,上升时延被定义为3,下降时延为5,转换到x的时延是3和5中间的最小值,即3。在下面的实例中,
上升时延为2,下降时延为8,截止时延为6,转换到x的时延是2、8和6中的最小值,即2。
对多输入门(例如与门和非门)和多输出门(缓冲门和非门)总共只能够定义2个时延(因为输出决不会是z)。三态门共有3个时延,并且上拉、下拉电阻实例门不能有任何时延。
最小值、典型值和最大值必须是常数表达式。下面是在实例中使用这种形式的实例。
选择使用哪种时延通常作为模拟运行中的一个选项。例如,如果执行最大时延模拟,与非门单元使用上升时延4和下降时延7。
当需要重复性的实例时,在实例描述语句中能够有选择地定义范围说明(范围说明也能够在模块实例语句中使用)。这种情况的门描述语句的语法如下:
leftbound和rightbound值是任意的两个常量表达式。左界不必大于右界,并且左、右界两者都不必限定为0。示例如下。
如果在Verilog HDL模型中一个线网没有被特别说明,那么它被缺省声明为1位线网。但是
`default_nettype编译指令能够用于取代缺省线网类型。编译指令格式如下:
`default_nettype编译指令在模块定义外出现,并且在下一个相同编译指令或`resetall编译指令出现前一直有效。
下面是4-1多路选择电路的门级描述。注意因为实例名是可选的(除用于实例数组情况外),在门实例语句中没有指定实例名。
注意实例名还是Z,并且连接到实例输出的线网也是Z。这种情况在Verilog HDL中是不允许的。在同一模块中,实例名不能与线解码器电路的门级描述如下:
硬件描述语言Verilog HDL设计进阶之:自动转换量程频率计控制器
硬件描述语言Verilog HDL设计进阶之:有限状态机的设计原理及其代码风格
硬件描述语言Verilog HDL设计进阶之: 逻辑综合的原则以及可综合的代码设计风格
硬件描述语言Verilog HDL设计进阶之:使用函数实现简单的处理器