

module half_addr
module half_addr
(
input wire in1,
input wire in2,
output reg sum,
output reg count
);
always@(*)
case({in1,in2})
2'b00:begin sum <=0;count<=0; end
2'b01:begin sum <=1;count<=0; end
2'b10:begin sum <=1; count<=0; end
2'b11:begin sum <=0; count<=1; end
default:begin sum <=0;count<=0; end
endcase
//assign{count,sum} = in1 + in2;
endmodule
tb_module
`timescale 1ns/1ns
module tb_half_addr
reg in1;
reg in2;
wire sum;
wire count;
initial
begin
in1 <= 1'b0;
in2 <= 1'b0;
end
always #10 in1 <={$random}%2;
always #10 in2 <={$random}%2;
initial
begin
$timeformat(-9,0,"ns");
$monitor("@time %t:in1= %b,in2 = %b,sum=%b,count=%b",$time,in1,in2,sum,count);
end
half_addr half_addr_inst
(
.in1(in1),
.in2(in2),
.sum(sum),
.count(count)
);
endmodule

本文展示了使用Verilog语言编写的half_addr模块,该模块根据输入的两个位(in1和in2)计算它们的异或值,并通过输出reg sum和count记录异或结果。测试模块tb_half_addr用于模拟输入并观察输出,通过随机数生成器改变输入值,同时使用$monitor显示当前时间、输入和输出状态。
7370

被折叠的 条评论
为什么被折叠?



