首页 > 解决方案 > 16 位 CLA 实例化

问题描述

我还需要什么来制作 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

标签: verilogsystem-verilog

解决方案


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在我发布此答案后,模块代码已从问题中删除。


推荐阅读