verilog入门-----门电平模块化

Posted 1mpanda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog入门-----门电平模块化相关的知识,希望对你有一定的参考价值。

1.内置基本门
(1)多输入门:and,nand,nor,xor,xnor
(2)多输出门:buf,not
(3)三态门:bufif0,bufif1,notif0,notif1
(4)上拉、下拉电阻:pullup、pulldown
(5)MOS开关:cmos、nmos、pmos、rnmos、rpmos
(6)双向开关:tran、tranif0、tranif1、rtranif0、rtranif1
门级逻辑设计描述中可使用具体的门实例语句,格式如下:get_type[instance_name] (term1,term2,......,termN);
instance_name是可选的,gate_type为前面所列举的门类型。term用于表示与门的输入输出端口连接的线网或寄存器。
 
 
2.输入多门:and nand  nor  or  xor  xnor
这些逻辑门只有单个输出,1个或多个输入
技术分享图片
 技术分享图片

 

多输入门的语法:multiple_input_gate_type [instance_name] (OutputA,input1,input2,...,inputN);第一个端口是输出,其他端口是输入。
具体实例:
and A1 (Out1,In1,In2);
技术分享图片
 技术分享图片

 

and RBX(Sty,Rib,Bro,Qit,Fix);
技术分享图片
 技术分享图片

 

xor (Bar,Bud[0],Bud[1],Bud[2]),
      (Car,Cut[0],Cut[1]),
      (Sar,Sut[2],Sut[1],Sut[0],Sut[3]);
 技术分享图片
技术分享图片
这些门的真值表如下,在输入端的z与对x的处理方法相同,多输入们的输出绝不能是z:
技术分享图片
 技术分享图片

 

3.多输出门:buf、not
多输出门的特点是单个输入,一个或多个输出。基本语法如下:multiple_output_gate_type [instance_name] (Out1,Out2,...,OutN,InputA);
例如:buf B1(Fan[0],Fan[1],Fan[3],Clk);   not N1(PhA,PhB,Ready);
技术分享图片
 技术分享图片
buf和not的真值表如下:
技术分享图片
 技术分享图片
4.三态门:bufif0 bufif1 notif0 notif1
这些门用于对三态驱动器建模。有一个输出、一个数据输入和一个控制输入。
三态门实例基本语法如下:tristate_gate [instance_name] (OutputA,InputB,ControlC);
根据控制输入,输出可被驱动到高阻状态。对于bufif0,若通过控制输入为1,则输出为z,否则数据被传输至输出端。
对于bufif1,若控制输入为0,则输出为z。对于notif0,如果控制输出为1,那么输出位z,否则输入数据值的非传输到传输端。
对于notif1,若控制输入为0,则输出为z。
三态门实例如图:
技术分享图片
 技术分享图片
三态门真值表如下:
  技术分享图片

 

5.上拉、下拉电阻:pullup  pulldown
没有输入只有输出。上拉电阻将输出置为1,下拉电阻将输出置为0。
语句如下:pull_gate [instance_name] (OutputA)
 
6.MOS开关:cmos pmos nmos rcmos rpmos rnmos
这类门用来为单向开关建模。即数据从输入流向输出,并且可以通过设置合适的控制输入关闭数据流
pmos、nmos、rnmos和rpmos开关有一个输出、一个输入和一个控制输入。基本语法如下:gate_type [instance_name] (OutputA,InputB,ControlC);
如果nmos和rnmos开关的控制输入为0,pmos和rpmos开关的控制为1,那么开关关闭,即输出为z;如果控制是1,输入数据传输至输出。与nmos和pmos相比,rnmos和rpmos在输入引线和输出引线之间存在高阻抗。因此当数据从输入传输至输出时,对于rpmos和rmos存在数据信号强度衰减。
 技术分享图片
技术分享图片
开关的真值表如下:
技术分享图片
 技术分享图片
cmos和rcmos开关有一个数据输出,一个数据输入和两个控制输入。开关实例语句语法如下:
(r)cmos [instance_name] (OutputA,InputB,NControl,PControl);
 技术分享图片
 
7.双向开关:tran、rtran、tranif0、rtranif0、tranif1、rtranif1
开关是双向的,即数据可以双向流动,并且当数据在开关中传播时没有时延。后4个开关能够通过设置合适的控制信号来关闭。
tran、rtran开关不能被关闭。
tran或rtran开关实例语法:
(r)tran [instance_name] (signalA,SignalB);端口表只有两个端口,并且无条件地双向流动即SignalA->SignalB,SignalB->SignalA
其他双向开关的实例如下:
gate_type [instance_name] (SignalA,SignalB,ControlC);
如果对tranif0和rtranif0,ControlC是1;对tranif1和rtranif1,ControlC是0;那么禁止双向数据流动。
对于rtran、rtranif0和rtranif1,当信号通过开关传输时,信号强度减弱。
 
8.门时延
使用门时延定义门从任何输入到输出的信号传输时延。门时延可以在门自身实例语句中定义。带有时延定义的门实例语法:gate_type [delay] [instance_name] (terminal_list);
时延规定了门时延,即从门的任意输入到输出的传输时延。当没有强调门时延时,缺省的时延值为。
门时延由三类时延值组成:上升时延、下降时延、截至时延
不同时延取值说明:
技术分享图片
 技术分享图片
注意转换到x的时延(to_x)不但被显示地定义,还可以通过其他定义的值决定。
例如:and #(3,5) (Out,In1,In2,In3);    上升时延被定义为3,下降时延为5,转换到x的时延是3和5中间的最小值,即3.
notif1 #(2,8,6) (Dout,Din1,Din2);       上升时延被定义为2,下降时延为8,截止时延为6,转换到x的时延是2、8、6中的最小值,即2。
多输出门和多输入门总共能定义2个时延,三态门总共有3个时延,上拉下拉电阻不能有时延。
9.实例数组
例如:nand Gang [3:0] (Out,InA,InB);等同于
nand
     Gang3 (Out[3],InA[3],InB[3]),
     Gang2 (Out[2],InA[2],InB[2]),
     Gang1 (Out[1],InA[1],InB[1]),
     Gang0 (Out[0],InA[0],InB[0]);
 
10.隐式线网
如果Verilog HDL模型中一个线网没有特别说明,那么它被缺省声明为1位线网。
‘default_nettype编译指令能够用于取代缺省线网类型。

以上是关于verilog入门-----门电平模块化的主要内容,如果未能解决你的问题,请参考以下文章

verilog 在写RTL代码时,要尽量避免锁存器吗?做芯片和FPGA有区别吗?

Verilog语法--Gate门

脚本推荐-verilog自动对齐

verilog中为啥锁存器要在电平触发方式下生成

FPGAVerilog语法入门

FPGAVerilog语法入门