半加器half_adder
半加器:用于计算两个一位二进制相加,且不考虑低位进位。
控制框图、真值表和波形:
其中count
表示进位,sum
表示和数。
根据真值表可以得到输入输出关系
异或符号
count = a ^ b
,即a异或b:(-a&b)+(-b&a)
。sum = a & b
,即a与b
实验代码
module half_adder
(
input wire in_1,
input wire in_2,
output wire sum,
output wire count
);//端口列表
//进行赋值
assign {count,sum}=in_1+in_2;//位拼接的方式进行赋值
endmodule
位拼接
-
使用重复数字法简化拼接表达式的书写
{4{w}} //等同于{w,w,w,w}
-
使用嵌套方式简化书写
{a,{3{b,c}}}//等同于{a,b,c,b,c,b,c}
-
位拼接表达式中若不指明元素具体位数,否则默认32位
仿真代码
`timescale 1ns/1ns
module tb_half_adder();
reg in_1;
reg in_2;
wire sum;
wire count;
initial
begin
in_1<=1'b0;
in_2<=1'b0;
end
always #10 in_1<={$random}%2;
always #10 in_2<={$random}%2;
initial
begin
$timeformat(-9,0,"ns",6);
$monitor("@time %t:in_1=%b,in_2=%b,sum=%b,count=%b",$time,in_1,in_2,sum,count);
end
half_adder half_adder_inst
(
.in_1(in_1),
.in_2(in_2),
.sum(sum),
.count(count)
);
endmodule