Popcount255
always过程快中运用阻塞赋值语句可以实现顺序执行。
module top_module(
input [254:0] in,
output reg [7:0] out );
integer i;
always @(*)
begin
out = 8'd0;//初始化
for (i = 0; i < 255; i = i + 1)
begin
out = out + in[i];
end
end
endmodule
Bcdadd100
全加器,下一个adder输入时上一个adder输出,因此只需要一个寄存器加loop就可以实现迭代的效果
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
reg [100:0] cin_mid;
always @(*) cin_mid[0] = cin;
generate
genvar i;
for (i = 0; i < 100; i = i + 1)
begin : loop
bcd_fadd bcd (.a(a[(4 * i + 3): 4*i]),
.b(b[(4 * i + 3): 4*i]),
.cin(cin_mid[i]),
.cout(cin_mid[i + 1]),
.sum(sum[(4 * i + 3): 4*i]) );
end
endgenerate
assign cout = cin_mid[100];
endmodule