HDLBits Day7
翻转
Generate语句:定义循环变量 用genvar 在后续for循环中 需要使用begin 需要加名称作为后续标签
genvar i;
generate
for(i=0;i<100;i=i+1)
begin:a
assign out[i] = in[99-i];
end
endgenerate
Always语句:
b
i
t
s
(
)
信号宽度本题中
o
u
t
信号宽度为
100
,所以在
(
2
)
中需要
−
1
,
i
的类型用
i
n
t
定义
a
l
w
a
y
s
@
(
∗
)
b
e
g
i
n
f
o
r
(
i
n
t
i
=
0
;
i
<
bits()信号宽度 本题中 out信号宽度为100,所以在(2)中需要-1,i的类型用int定义 always @(*) begin for (int i=0;i<
bits()信号宽度本题中out信号宽度为100,所以在(2)中需要−1,i的类型用int定义always@(∗)beginfor(inti=0;i<bits(out);i++) (1)
out[i] = in[$bits(out)-i-1]; (2)
end
初始化out
全加器 sum = abcin;
Cout =(a&b)|(a&cin)|(b&cin);
由于全加器连接方式为 cout[i-1]=cin[i]
所以在100全加器 sum[99:0]和cout[99:0] 按位用for循环依次计算
always @(*)
begin
cout[0] = (a[0]&cin)|(b[0]&cin)|(a[0]&b[0]);
sum[0] = a[0]b[0]cin;
for(int i=1;i<100;i++)begin
sum[i] = a[i]b[i]cout[i-1];
cout[i] = (a[i]&cout[i-1])|(b[i]&cout[i-1])|(a[i]&b[i]);
end
end
BCD加法器
wire [99:0] cout_temp;
genvar i;
generate
for(i=0;i<100;i++)
begin:bcd_fadd
if(!i)
bcd_fadd bcd_inst(a[3:0],b[3:0],cin,cout_temp[0],sum[3:0]);
else
bcd_fadd bcd_inst(a[4i+3:4i],b[4i+3:4i],cout_temp[i-1],cout_temp[i],sum[4i+3:4i]);
end
assign cout = cout_temp[99];
endgenerate
BCD加法器还是没太明白
数电还是要再看 好多基本器件都忘记了
开始circuits部分
2022/7/27/19:54