在Verilog中实例化
我有下面的Verilog代码。当我创建一个测试台来测试它时,reg ACC在整个波形中的值为X。我相信这是因为它没有被正确地实例化,我正在尝试将它添加到自身中。我该怎么做?我不想在always@block中将它设置为0,因为我希望它的值能够继续,除非我手动重置它。我已经使用了初始开始块,但这导致寄存器的值都是Z在Verilog中实例化,verilog,Verilog,我有下面的Verilog代码。当我创建一个测试台来测试它时,reg ACC在整个波形中的值为X。我相信这是因为它没有被正确地实例化,我正在尝试将它添加到自身中。我该怎么做?我不想在always@block中将它设置为0,因为我希望它的值能够继续,除非我手动重置它。我已经使用了初始开始块,但这导致寄存器的值都是Z `timescale 1ns / 1ps module AccAdder_Behavioral(IN, ADD, CLC, CLB, IAC, X2, ACC, CARRY ); in
`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
如果要增加信号,则需要时钟参考。否则,您将推断出复杂的锁存逻辑。计时示例:
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
始终@(posedge CLK)开始
箱子(1'b1)
IAC:ACC您希望ACC是触发器还是组合?您正在将ACC添加到自身中。它的初始值是X,因此,将其添加到自身会使该值保持在X。为什么不使用带有重置信号的if语句呢。重置为1时,将ACC设置为已知值。