Verilog实现BCD码加法器,求帮看下我的代码输入的num1,num2是两个加数,out1是输出加法结果的十进制个位数字,out2是输出加法结果的十进制十位数字.(加数为两个四位的8421BCD码,结果也是两个8421BCD
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 14:21:32
Verilog实现BCD码加法器,求帮看下我的代码输入的num1,num2是两个加数,out1是输出加法结果的十进制个位数字,out2是输出加法结果的十进制十位数字.(加数为两个四位的8421BCD码,结果也是两个8421BCD
Verilog实现BCD码加法器,求帮看下我的代码
输入的num1,num2是两个加数,out1是输出加法结果的十进制个位数字,out2是输出加法结果的十进制十位数字.(加数为两个四位的8421BCD码,结果也是两个8421BCD码)
例如输入二进制BCD码1000 ,1000 (十进制8,8)应当输出out2 = 0001 ,out1 = 0100(也就是1和6,合起来看就是16)
没有仿真软件,急求达人帮忙看看下面的代码有没有问题?
module bcd_add(num1,num2,out1,out2);
\x05input [3:0]num1,num2;
\x05output [3:0]out1,out2;
\x05reg [3:0]out1,out2;
\x05reg [4:0]tmp; //以多一位寄存器确保加法不会溢出
\x05always@(num1 or num2)
\x05begin
\x05\x05tmp = num1 + num2;
\x05\x05if(tmp > 5'd9)
\x05\x05\x05begin
\x05\x05\x05\x05out2 = 4'd1;
\x05\x05\x05\x05out1 = tmp[3:0] - 4'd10;
\x05\x05\x05end
\x05\x05else
\x05\x05\x05out2 = 4'd0;
\x05\x05out1 = tmp[3:0];
\x05end
endmodule
关键是想知道tmp = num1 + num2;这句话,后面两个四位的数字相加,赋值给五位的寄存器,就比如例子中的1000 + 1000,能否把正确的结果1 0000赋给寄存器tmp?
Verilog实现BCD码加法器,求帮看下我的代码输入的num1,num2是两个加数,out1是输出加法结果的十进制个位数字,out2是输出加法结果的十进制十位数字.(加数为两个四位的8421BCD码,结果也是两个8421BCD
这个是可以的,要说明一点的是你这里虽然定义成了reg类型,但是在实际综合时会变成组合电路,但是功能是正确的.