我有以下Verilog代码。当我创建一个测试平台来测试它时,reg ACC在整个波形中的值为X.我相信这是因为它没有正确实例化,我试图将它添加到自身。我怎样才能做到这一点?我不想在always @ block中将它设置为0,因为除非我手动重置它,否则我希望它的值继续存在。我已经使用了一个初始开始块,但这导致寄存器的值全部为Z。
`timescale 1ns / 1ps
module AccAdder_Behavioral(IN, ADD, CLC, CLB, IAC, X2, ACC, CARRY
);
input[3:0] IN;
input ADD, CLC, CLB, IAC;
wire [3:0] SEL;
input X2;
output reg [3:0] ACC;
output reg CARRY;
always @(SEL) begin
case(SEL)
1: ACC = ACC + 4'b0001; //IAC
2: CARRY = CARRY & 0; //CLC
4: begin
ACC = ACC & 4'b0000;
CARRY = CARRY & 0;
end //CLB
8: ACC = ACC + IN;//ADD
endcase
end
endmodule
答案 0 :(得分:1)
如果要递增信号,则需要时钟参考。否则,您推断复杂的锁存逻辑。时钟示例:
always @(posedge CLK) begin
case(1'b1)
IAC: ACC <= ACC + 4'b1;
CLC: CARRY <= 1'b0;
CLB: begin
ACC <= 4'b0;
CARRY <= 1'b0;
end
ADD: ACC <= ACC + IN;
endcase
end