Verilog中的简单添加

时间:2017-12-10 15:50:52

标签: hex logic verilog add addition

我对Verilog来说相对较新,所以我希望能够正确理解我的想法。我试图实现一个基本的十六进制计算器。到目前为止,我可以使用两个7段显示来显示要添加的整数(A和B)。我还能够表示从十六进制#00到十六进制#10的数字

以下是我迄今为止汇总的重要代码片段。

我的FourBitAdder的一部分:

// Four Bit Adder
module FourBitAdder (A, B, Aout1, Aout0, Bout1, Bout0, Cout3, Cout2, Cout1, 
Cout0, Sum, PrintSum, Carry);
output Carry;
output [4:0] Sum;
output [4:0] PrintSum;
input  [3:0] A;             // SW15-SW8
input  [3:0] B;             // SW7-SW0
assign PrintSum = A+B;

我使用" Printsum"因为它不会让我宣布" Sum"两次...

我相应的FullAdder:

// Full Adder
module FullAdder (A, B, C, Sum, Carry);
output Sum;
output Carry;
input A;
input B;
input C;
assign Sum = A^B^C;   
assign Carry = (A&B) | (B&C) | (C&A);
endmodule

最后,我的7段显示中的总和的案例陈述。我以为我可以使用PrintSum,范围从5' b00000到5' b11110(1E,最大总和)。

// Hex 1 (MSB)
always@*
case(PrintSum)
5'b0???? : Cout1 = 7'b1000000;  //0
5'b1???? : Cout1 = 7'b1111001;  //1 if S[4] = 1
default
Cout1 = 7'b1000000;     //0 by default
endcase 

// Hex 0 (LSB)
always@*
case(PrintSum)
5'b?0000 : Cout0 = 7'b1000000;  //0
...
5'b?1111 : Cout0 = 7'b0001110;  //F
default
Cout0 = 7'b1000000;     //0 by default
endcase 
endmodule

提前感谢大家:)

1 个答案:

答案 0 :(得分:1)

  

也许我可以采取A [3-0]和B [3-0]的逻辑值,并以某种方式   将其转换为十六进制。

逻辑值以十六进制表示。您所要做的就是将矢量分成4位,从LS开始到MS。 (最后你可能还有不到4位。) 至于你的代码:你正在使用高级语言而不是门。因此,要添加两个数字,您只需使用加法运算符:'+'。无需实例化一系列完整加法器:

$.ajax({
        type: "POST",
        url: "http://www.mod-fusion.fr/console",
        //dataType: 'json',
        data: {"model_id":model_id},
        success: function(data){
            $('#result').html(data); // work fine
        }
    });

但是你有一个问题,你添加了两个4位数字,可以得到5位结果。所以Sum应该是5位宽。这也意味着你的两个十六进制显示的MS只显示0或1(结果介于0x00和0x1E之间,或仅适用于凡人:0到30)

  

用例语句类似于我用来显示输入A和B

的语句

我无法检查你的case语句,因为我不知道哪个位控制显示的哪个部分。但原则是对的。
额外:您必须决定要显示A,B或Sum的内容。对你来说,一个不错的下一个挑战可能是显示一个序列:A,然后是B然后是Sum。