【问题标题】:Possible to build a 32bit adder from 32 1-bit adders?可以从 32 个 1 位加法器构建 32 位加法器吗?
【发布时间】:2014-03-18 05:44:56
【问题描述】:

我应该通过创建 32 个赋值语句来完成下面的模块 似乎不是这样做的正确方法。我知道我必须把cout扛起来, 但是当使用客户端模块创建和测试 yAdder 时,我得到的错误大约是 1 + 1 = 40 亿。哈哈。我知道它应该做什么,我只是不知道如何在verilog中做到这一点。

    module yAdder(z,cout,a,b,cin);
output [31:0] z;
output cout;
input[31:0] a, b;
input cin;
wire[31:0] in,out;
yAdder1 mine[31:0](z,out,a,b,in);

assign in[0] = cin;
assign in[1] = out[0];
assign in[2] = out[0];
assign in[3] = out[0];
assign in[4] = out[0];
assign in[5] = out[0];
assign in[6] = out[0];
assign in[7] = out[0];
assign in[8] = out[0];
assign in[9] = out[0];
assign in[10] = out[0];
assign in[11] = out[0];
assign in[12] = out[0];
assign in[13] = out[0];
assign in[14] = out[0];
assign in[15] = out[0];
assign in[16] = out[0];
assign in[17] = out[0];
assign in[18] = out[0];
assign in[19] = out[0];
assign in[20] = out[0];
assign in[21] = out[0];
assign in[22] = out[0];
assign in[23] = out[0];
assign in[24] = out[0];
assign in[25] = out[0];
assign in[26] = out[0];
assign in[27] = out[0];
assign in[28] = out[0];
assign in[29] = out[0];
assign in[30] = out[0];
assign in[31] = out[0];
assign cout = out[0];


endmodule

和 1 位加法器模块。

module yAdder1(z,cout,a,b,cin);
output z, cout;
input a, b, cin;

xor left_xor(tmp,a,b);
xor right_xor(z,cin,tmp);
and left_and(outL,a,b);
and right_and(outR,tmp,cin);
or my_or(cout,outR,outL);

endmodule

【问题讨论】:

    标签: module add verilog


    【解决方案1】:

    将out[0] 分配给所有 in 电线可能不是最好的主意。您正在寻找的可能是这样的:

    assign {cout,in} = {out,cin};
    

    【讨论】:

    • 所以这将 cout 与 out 和 in 与 cin 连接起来?
    【解决方案2】:

    对于这个预实验,你应该想象 32 位加法器就像我们在上一个实验中做 4 位加法器一样,并像这样连接进位/进位线:

        assign in[0] = cin;
        assign in[1] = out[0];
        assign in[2] = out[1];
        assign in[3] = out[2];
        assign in[4] = out[3];
        assign in[5] = out[4];
        assign in[6] = out[5];
        assign in[7] = out[6];
        assign in[8] = out[7];
        assign in[9] = out[8];
        assign in[10] = out[9];
        assign in[11] = out[10];
        assign in[12] = out[11];
        assign in[13] = out[12];
        assign in[14] = out[13];
        assign in[15] = out[14];
        assign in[16] = out[15];
        assign in[17] = out[16];
        assign in[18] = out[17];
        assign in[19] = out[18];
        assign in[20] = out[19];
        assign in[21] = out[20];
        assign in[22] = out[21];
        assign in[23] = out[22];
        assign in[24] = out[23];
        assign in[25] = out[24];
        assign in[26] = out[25];
        assign in[27] = out[26];
        assign in[28] = out[27];
        assign in[29] = out[28];
        assign in[30] = out[29];
        assign in[31] = out[30];
        assign cout = out[31];
    

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多