-2
我有以下Verilog代码。当我创建一个测试台来测试它时,reg ACC在整个波形中的值为X.我相信这是因为它没有正确实例化,我试图将其添加到自身中。我怎样才能做到这一点?我不想在always @块中将其设置为0,因为我希望它的值可以继续传递,除非我手动重置它。我已经使用初始开始块,但导致寄存器全部为Z.在Verilog中实例化
`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
您想让ACC成为触发器还是组合? – Morgan 2014-10-20 07:51:09
您正在向自己添加ACC。它的初始值是X,因此将它加到它本身导致值保持在x。你为什么不使用带复位信号的if语句?重置为1时,将ACC设置为已知值。 – Ari 2014-10-20 17:58:55