数电基础
半加器有两个二进制的输入,其将输入的值相加,并输出结果到和(Sum)和进位(Carry)。半加器虽能产生进位值,但半加器本身并不能处理进位值。
和B是相加的两个数,数据输出SUM和数(半加和)、进位Carry。
所谓半加就是不考虑进位的加法,它的真值表如下 (见表):
被加数A | 加数B | 和数SUM | 进位数Carry |
0 0 1 1 | 0 1 0 1 | 0 1 1 0 | 0 0 0 1 |
表中: SUM = A ⊕ B Carry = A · B
代码
//半加器
module half_adder (
input wire [0:0] A, //输入只能是wire型 [0:0]表示一位宽,不写则为默认值
input B,
output Sum, //和可以是reg型也可以是wire型
output Carry
);
//Sum
assign Sum = A ^ B; //连续赋值语句,使用异或完成和计算
//Carry
assign Carry = A & B;
endmodule
测试脚本
//半加器仿真
`timescale 1ps/1ps
module half_adder_tb();
//定义输入输出信号
reg A; //输入reg型,输出wire型
reg B;
wire Sum;
wire Carry;
//例化模块
half_adder half_adder_tb(
.A (A),
.B (B),
.Sum (Sum),
.Carry (Carry)
);
//激励信号
initial begin //阻塞赋值 =
A = 0;
B = 0;
#20;
A = 0;
B = 1;
#20;
A = 1;
B = 0;
#20;
A = 1;
B = 1;
#20;
$stop;//结束仿真
end
endmodule