module fulladder( input wire in_1,
input wire in_2,
input wire cin, //进位
output wire sum,
output wire count
);
wire hfsum1;
wire hfcount1;
wire hfcount2;
halfadder halfadder_inst1
( .in_1(in_1),
.in_2(in_2),
.sum(hfsum1),
.count(hfcount1)
);
halfadder halfadder_inst2
( .in_1(cin),
.in_2(hfsum1),
.sum(sum),
.count(hfcount2)
);
assign count = hfcount1 | hfcount2; //或运算
endmodule
半加器:
module halfadder( input wire in_1,
input wire in_2,
output wire sum,
output wire count
);
assign {count,sum} = in_1+in_2;
endmodule
module vtf_fulladder;
// Inputs
reg in_1;
reg in_2;
reg cin;
// Outputs
wire sum;
wire count;
// Instantiate the Unit Under Test (UUT)
fulladder uut (
.in_1(in_1),
.in_2(in_2),
.cin(cin),
.sum(sum),
.count(count)
);
initial begin
// Initialize Inputs
in_1 = 0;
in_2 = 0;
cin = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always #10 in_1<= {$random} %2; //取随机数对2求余(0或者1)
always #10 in_2<= {$random} %2;
always #10 cin <= {$random} %2;
endmodule
该博客详细介绍了如何使用Verilog进行全加器和半加器的模块化设计。通过实例展示了全加器的组合逻辑实现,包括两个半加器的级联以及或运算来确定最终的进位。此外,还提供了一个用于测试全加器模块的测试平台,通过随机输入来验证其正确性。
7068

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



