【发布时间】:2021-08-28 12:45:56
【问题描述】:
老实说,考虑到我只创建过一次幼稚的简单项目,我对 Verilog 尤其是测试台还有些陌生。我不确定如何为我制作的 Verilog 文件制作测试平台,因此无法测试它是否有效。这是我的代码:
`timescale 1ns/1ps
module adder_4bit_cla(sum, Cout, A, B, S);
input [3:0] A, B;
input S;
output [3:0] sum;
output Cout;
wire P0, G0, P1, G1, P3, G3;
wire C4, C3, C2, C1;
assign
P0 = A[0] ^ B[0],
P1 = A[1] ^ B[1],
P2 = A[2] ^ B[2],
P3 = A[3] ^ B[3];
assign
G0 = A[0] & B[0],
G1 = A[1] & B[1],
G2 = A[2] & B[2],
G3 = A[3] & B[3];
assign
C1 = G0 | (P0 & S),
C2 = G1 | (P1 & G0) | (P1 & P0 & S),
C3 = G2 | (P2 & G1) | (P2 & P1 & G0) | (P2 & P1 & P0 & S),
C4 = G3 | (P3 & G2) | (P3 & P2 & G1) | (P3 & P2 & P1 & G0) | (P3 & P2 & P1 & P0 & S);
assign
sum[0] = P0 ^ S,
sum[1] = P1 ^ C1,
sum[2] = P2 ^ C2,
sum[3] = P3 ^ C3;
assign Cout = C4;
endmodule
老实说,我真正需要做的是使用进位先行的 4 位加减法器,但我不知道如何实现进位先行,所以我在这里。如果有人可以帮助我,那就太好了:
编辑:我已经冷静下来,我终于可以确定确切的问题:测试台的 A 和 B 的值。虽然我可以暴力破解它,但我怎样才能使用循环来增加 A 和 B 以便它会是这样的:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
同时更新M?
【问题讨论】:
-
在测试台中,您只需要考虑输入和输出信号。根据给定的输入信号,您可以验证输出信号的行为是否符合预期。
-
@KavinduVIndika 对 @KavinduVIndika 感到抱歉,但如果您仍然有兴趣帮助我解决问题,我已经编辑了帖子。
-
很好,这意味着您想使用循环在测试台中提供输入数据吗?