在Verilog中实例化

在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

我有下面的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

如果要增加信号,则需要时钟参考。否则,您将推断出复杂的锁存逻辑。计时示例:

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设置为已知值。