2 Verilog语言
2.5 更多特点
2.5.4 组合for循环
翻转输出一个长度为100的向量(使用组合always块)
module top_module(
input [99:0] in,
output [99:0] out
);
integer i;
always@(*)begin
for (int i=0;i<=99;i=i+1)begin
out[i]=in[99-i];
end
end
endmodule
2.5.5 组合for循环:255位总体计数
建立一个255bit输入的矢量来判断输入中 ’1‘ 的个数
module top_module(
input [254:0] in,
output [7:0] out );
integer i;
always @ (*)
begin
out = 8'b0000_0000; //为了后面的计数累加,此处先初始化为0.
for (i=0; i<255; i++)
begin
if(in[i] == 1'b1)
out = out + 1'b1;
else
out = out;
end
end
endmodule
module top_module(
input [254:0] in,
output [7:0] out );
integer i;
always @(*)begin
out = 8'd0;
for(i=0;i<255;i=i+1)
out=in[i]?out+8'd1:out;
end
endmodule
2.5.6 生成for循环:100位二进制加法器
通过实例化100个全加器来创建一个100位二进制波纹进位加法器。加法器将两个 100 位数字和一个进位相加,产生一个 100 位和并执行。为了鼓励您实际实例化全加器,还要输出纹波进位加法器中每个全加器的进位。cout[99] 是最后一个全加器的最终进位,也是通常看到的进位。
module top_module(
input [99:0] a, b,
input cin,
output [99:0] cout,
output [99:0] sum );
genvar i;
generate
for(i=0;i<100;i++) begin:adder
if(i==0)
assign {cout[0],sum[0]} = a[0]+b[0]+cin;
else
assign {cout[i],sum[i]} = a[i]+b[i]+cout[i-1];
end
endgenerate
endmodule
generate语句:
2.5.6 生成for循环:100位BCD加法器
本题已经提供了一个名为bcd_fadd的BCD一位全加器,他会添加两个BCD码和一个cin,并产生一个cout和sum。
module bcd_fadd {
input [3:0] a,
input [3:0] b,
input cin,
output cout,
output [3:0] sum );
实例化100个bcd_fadd来实现100位的BCD进位加法器。该加法器应包含两个100bit的BCD码(包含在400bit的矢量中)和一个cin, 输出产生sum 和 cout
标签:HDLBits,module,99,加法器,output,input,10.13,100 From: https://www.cnblogs.com/LhTian/p/16788472.html