【问题标题】:16 -bit CLA instantiation16 位 CLA 实例化
【发布时间】:2021-04-17 06:31:40
【问题描述】:

制作 16 位 CLA 还需要什么其他东西吗??????

到目前为止,我实例化了 4 个(4 位 CLA 以制作 16 位 CLA)

但我认为我缺少进位我只是不明白如何将它添加到我所拥有的内容中,因为 8 位 CLA 只是实例化 2(4 位 CLA)我不明白为什么不能只是实例化 4(4 位 CLA 一起得到 16 位 CLA)。谁能帮我弄清楚如何完成 16 位 CLA?

//CLA16Top.sv

module CLA4Bit(ain, bin, cin, sum, cout);
timeunit 1ns/1ns;
input [3:0] ain,bin;
input cin;
    output logic [3:0] sum;
    output logic cout;

  logic [3:0] G,P,C;

// Carry propagate 
assign P = ain ^ bin;

//Carry generate
assign G = ain & bin;

// Calculating each stage of the carry out 
assign    C[0] = cin;
assign #4 C[1] = (G[0] | (C[0] & P[0]));
assign #6 C[2] = (G[1] | (G[0] & P[1]) | (C[0] & P[1] & P[0]));
assign #8 C[3] = (G[2] | (G[1] & P[2]) | (G[0] & P[1] & P[2]) | (C[0] & 
                  P[2] & P[1] & P[0]));

 assign sum = P ^ C;

assign #13 cout= (G[3] | (G[2]&P[3]) | (G[1]&P[2]&P[3]) | 
                  (G[0]&P[1]&P[2]&P[3]) | (C[0]&P[0]&P[1]&P[2]&P[3])); 

endmodule                                    


/*
   module CLA16Top;
  timeunit 1ns/1ns;
  parameter nBITS = 16;
  logic [nBITS - 1 : 0] ain, bin, sum;
  logic in;
  logic cout;

  logic c4, c8, c12, c16;

  assign cout = c16;

  // instantiating the 16 bit CLA
    
  CLA4Bit uut1(
    .ain(ain[3:0]),
    .bin(bin[3:0]),
    .cin(cin),
    .sum(sum[3:0]),
    .cout(c4)
    );

    CLA4Bit uut2(
    .ain(ain[7:4]),
    .bin(bin[7:4]),
    .cin(c4),
    .sum(sum[7:4]),
    .cout(c8)
    );

    CLA4Bit uut3(
    .ain(ain[11:8]),
    .bin(bin[11:8]),
    .cin(c8),
    .sum(sum[11:8]),
    .cout(c12)
     );

     CLA4Bit uut4(
    .ain(ain[15:12]),
    .bin(bin[15:12]),
    .cin(c12),
    .sum(sum[15:12]),
    .cout(c16)
    );
    

    // SIMULATE (CLA16Top)
    //
    test #(16) TB(.*);
    
    endmodule: CLA16Top

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    我在您的 test 模块中遇到编译错误。变化:

      output in;
    

    到:

      output cin;
    

    另外,双引号字符串必须在一行:

    $display("For inputs: ain = %b, bin = %b, cin = %b :: Actual outputs: cout = %1b, sum = %b :: Expected outputs: cout = %1b, sum = %b", ain, bin, cin, cout, 
    

    test_count 可能太大而无法放入 int 变量中。使用real%g

      real test_count;
    
        $display("***Congratulations, No errors found after %g tests***", test_count);
    

    在这些更改之后,代码将为我编译并运行。嵌套循环完成大约需要 2 小时,并且只显示最终消息:

    ***Congratulations, No errors found after 8.58993e+09 tests***
    

    这表明加法器工作正常。

    如果您想查看更多中间结果,请在循环中添加更多显示。


    注意:在我发布此答案后,test 模块代码已从问题中删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      相关资源
      最近更新 更多