学习记录 HDLBits Day7

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)中需要1i的类型用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值