与门、或门都具有一个标量输出端和多个标量输入端。
同属与/或门类的门术语有:
逻辑符号如下

其真值表

Verilog实例引用
// 定义端口
wire OUT,IN1,IN2;
// 基本门的实例引用
and a1(OUT,IN1,IN2);
nand na1(OUT,IN1,IN2);
or or1(OUT,IN1,IN2);
nor nor1(OUT,IN1,IN2);
xor x1(OUT,IN1,IN2);
xnor nx1(OUT,IN1,IN2);
// 超过两个,三输入端与非门
nand nal_3inp(OUT,IN1,IN2,IN3);
//实例引用门,不给实例命名,也是合法的
and (OUT,IN1,IN2);
buf/not门具有一个标量输入和多个标量输出(与and/or门相反)。我们只讨论一个输入和一个输出的buf/not门,对于具有多个输出端的,所有输出端的值都是相同的。
两个基本门的术语
逻辑符号

真值表

注意:buf和not可以具有多个输出端口,但只能有一个输入端口,输入端口必须是端口列表中的最后一个。
实例引用
buf b1(OUT1,IN);
not n1(OUT1,IN);
// 两个输出端口
buf b1_2out(OUT1,OUT2,IN);
// 实例不命名的引用,合法
not (OUT1,IN);
带控制端的缓冲器和非门(bufif/notif)
4个带有控制信号端口的buf/not门
只有在控制信号有效的情况下才能传送数据,如果控制端无效,则输出为高阻抗z。
逻辑符号

真值表
实例引用
bufif1 b1(out, in ,ctrl);
bufif0 b0(out, in ,ctrl);
notif1 n1(out, in ,ctrl);
notif0 n0(out, in ,ctrl);
在某些情况下,例如当一个信号由多个驱动器驱动时,我们设计驱动源的时候,把控制信号的有效时间相互错开,避免一条信号线同时被两个源驱动。这时就需要带有控制端的缓冲器/非门来搭电路。
门级多路选择器






四位脉动进位全加器
实现一个脉动进位加法器,它的基本组成部分是一个全加器,全加器的数学表示如下: s u m = ( a ⊗ b ⊗ c i n ) sum=(a\otimes b \otimes cin ) sum=(a⊗b⊗cin) c o u t = ( a ⋅ b ) + c i n ⋅ ( a ⊗ b ) cout=(a\cdot b)+ cin \cdot (a \otimes b ) cout=(a⋅b)+cin⋅(a⊗b)
一位全加器的逻辑图

一位全加器的Verilog描述

四位脉动进位全加器可以用四个一位全加器构成,如下图

Verilog实现

仿真激励
`timescale 1ns/1ps
module fulladd4_tb();
reg [3:0] A,B;
reg C_IN;
wire [3:0] SUM;
wire C_OUT;
fulladd4 FAL_4(SUM, C_OUT, A, B, C_IN);
// 设置信号监视
initial
begin
$monitor($time,"A=%b,B=%b,C_IN=%b, --- C_OUT=%b,SUM=%b\n", A,B,C_IN,C_OUT,SUM);
end
// 输入激励信号
initial
begin
A=4'd0;
B=4'd0;
C_IN=1'b0;
#5 A=4'd3;
B=4'd4;
#5 A=4'd2;
B=4'd5;
#5 A=4'd9;
B=4'd9;
#5 A=4'd10;
B=4'd15;
#5 A=4'd10;
B=4'd5;
C_IN=1'b1;
end
endmodule
仿真结果




