16 位 CLA 实例化
16 -bit CLA instantiation
制作 16 位 CLA 还需要什么吗??????
到目前为止,我实例化了 4(4 位 CLA 以生成 16 位 CLA)
但我想我缺少进位我只是不明白如何将它添加到我所拥有的东西中,因为 8 位 CLA 只是实例化 2(4 位 CLA)我不明白为什么不能' t 只是实例化 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
我在您的 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
模块代码已从问题中删除。
制作 16 位 CLA 还需要什么吗??????
到目前为止,我实例化了 4(4 位 CLA 以生成 16 位 CLA)
但我想我缺少进位我只是不明白如何将它添加到我所拥有的东西中,因为 8 位 CLA 只是实例化 2(4 位 CLA)我不明白为什么不能' t 只是实例化 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
我在您的 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
模块代码已从问题中删除。