在Verilog中实例化

时间:2014-10-19 23:53:50

标签: verilog

我有以下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

1 个答案:

答案 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