目录
参考《Verilog 编程艺术》魏家明著
Verilog共有14中逻辑门和12种开关,用于提供门级和开关级模型。
门和开关的声明
1.门和开关的类型由关键字命名。
2.可选驱动强度(Drive strength)
3.可选传输延迟(Propagation delay)
4.门和开关的实例名(Instance name)是可选的
5.实例化时可以使用实例数组(Instance array)
6.同一类型的多个实例在声明时可以使用逗号分隔,所有这样的实例具有同样的驱动强度和延迟要求。
门和开关类型
支持驱动强度的门
and,or,xor,nand,nor,xnor,buf,bufif0,bufif1,not,notif0,notif1,pulldown, pullup
它们可以使用的驱动强度分为两类strength0和strength1,分别对应驱动0和1的强度:
strength0: supply0,strong0,pull0,weak0
strength1: supply1,strong1,pull1,weak1
例子:
nor (highz1, strong0) n1(out1, in1, in2);
延迟
and #(10) a1 (out, in1, in2); // only one delay
and #(10, 12) a2 (out, in1, in2); // rise and fall delays
bufif0 #(10, 12, 11) (out, in, ctrl); // rise fall and turn-off delays
实例数组
可以通过实例数组一次实例化多个门或开关的实例。
例子:
module driver (
input en,
input [3:0] in,
output [3:0] out
);
bufif0 ar[3:0] (out, in, en); // array of three-state buffers
endmodule
module busdriver (
input [15:0] busin,
output [7:0] bushigh, buslow,
input enh, enl
);
driver busar3 (busin[15:12], bushigh[7:4], enh);
driver busar2 (busin[11:8], bushigh[3:0], enh);
driver busar1 (busin[7:4], bushigh[7:4], enl);
driver busar3 (busin[3:0], bushigh[3:0], enl);
endmodule
and,nand,nor,or,xor,xnor
1.它们都只能有一个输出端口,可以有多个输入端口,其中输出端口是第一个端口。
2.从逻辑上 nand = ~and,nor = ~or,xnor = ~xor;
例子:
and a1 (out, in1, in2, in3);
buf,not
1.它们都只能有一个输入端口,可以有多个输出端口,其中输入端口是最后的端口。
2.从逻辑上 nut = ~buf;
例子:
buf b1 (out1, out2, out3, in);
bufif1,bufif0,notif1,notif0
1.它们都只能有一个数据输出端口,一个数据输入端口和一个控制输入端口,第一个端口是数据输出端口,第二个端口是数据输入端口,第三个端口是控制输入端口。
2.对于bufif1和notif1,当控制等于1时,数据通过;当控制等于0时,输出为z
3.对于bufif0和notif0,当控制等于0时,数据通过;当控制等于1时,输出为z
例子:
bufif1 bf1 (outw, inw, controlw);
MOS switches
MOS开关有cmos,nmos,pmos,rcmos,mmos,rpmos
例子:
pmos p1 (out, data, control);
cmos (w, datain, ncontrol, pcontrol);
// is equivalent to
nmos (w, datain, ncontrol);
pmos (w, datain, pcontrol);
Bidirectional pass switches
双向开关有tran,tranif1,tranif0,rtran,rtranif1,rtranif0
1.对于tran和rtran,它们有两个端口,都是双向数据端口。
2.对于tranif1,tranif0,rtranif1,rtranif0,它们都有三个端口,前两个端口是双向数据端口,第三个端口是控制输入端口。
3.对于tranif1和rtranif1,当控制端口等于1时,数据通过;当控制端口等于0时,输出为z;
4.对于tranif0和rtranif0,当控制端口等于0时,数据通过;当控制端口等于1时,输出为z;
例子:
tranif1 t1 (inout1, inout2, control1);
pullup,pulldown
pullup (strong1) p1 (meta), p2(netb);
标签:输出,--,端口,开关,实例,Verilog,bufif0,门级,out
From: https://blog.csdn.net/qq_53922164/article/details/137171023