verilog - 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
解决方案
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
在我发布此答案后,模块代码已从问题中删除。
推荐阅读
- z3py - z3-solver 安装的功能不起作用
- android - Cyrillic(Ionic cordova)(乌克兰语)(Android 终端)的热敏打印机代码页问题
- android - RoomDB 无法转换类型 Map
> 即使使用类型转换器。安卓/科特林 - python-3.x - 为什么当我没有调用另一个函数时调用另一个函数的一部分?
- ruby-on-rails - 如何覆盖新功能,以便我可以发送参数
- node.js - Puppeteer node.js:下载图像时访问被拒绝
- python - web3.isConnected = False
- php - 如何自动将数据字段添加到 Wordpress 数据库表?
- sql - DB2 11.5 领先滞后忽略空值
- reactjs - 如何优化 Flatlist 性能