【问题标题】:Behavioral module for Adder that adds two 64-bit inputs and carry in Input. How to assign carry-out to MSB of the sum?Adder 的行为模块,用于添加两个 64 位输入并进位输入。如何将结转分配给总和的 MSB?
【发布时间】:2021-03-12 19:25:17
【问题描述】:

我想要的功能是添加 A、B 和 cin(其中 A 和 B 是 64 位,而 cin 是一位)。所以实际总和(实际结果)可以是 64 位甚至 65 位,对吧?所以我希望输出“sum”为 64 位,然后进位输出“cout”将保存结果的最高有效位。尝试通过assign 声明执行此操作,但我想这不是您的操作方式,因为它会给出错误。还有什么办法吗?

module addsub(A, B, cin, sum, cout);
input [63:0] A, B;
input cin;
output reg [63:0] sum; 
output cout;


reg [64:0] actualsum; // the actual result of the addition, which I want to then "split" into cout & sum

always @(A or B or cin) begin
actualsum = A + B + cin;
sum <= actualsum[63:0];
cout <= actualsum[64];
end


endmodule

【问题讨论】:

    标签: verilog fpga intel-fpga


    【解决方案1】:

    我得到的编译错误是由于对cout 的程序分配(在always 块内)。要解决这个问题,您可以将 cout 声明为 reg

    良好的编码实践建议您对组合逻辑使用阻塞赋值 (=) 而不是非阻塞赋值 (&lt;=)。

    一种更简单、更传统的编码方式是:

    module addsub (
        input [63:0] A, B,
        input cin,
        output [63:0] sum, 
        output cout
    );
    
    assign {cout, sum} = A + B + cin;
    
    endmodule
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多