2016-05-11 6 views
1

Использование ModelSim. Попытка смоделировать двухбитовый счетчик вверх. Компилирует хорошо, но когда я пытаюсь запустить симуляцию, я получаю следующее сообщение об ошибке:Verilog - Ошибка: «Unresolved reference» при имитации

** Error: (vsim-3043) D:/ModelSim/examples/Lab7.v(46): Unresolved reference to 'state'.

Модуль является:

module TwoBitCounter(input Dir, clock, reset); 

reg[1:0] state; 

parameter S0 = 2'b00, S1=2'b01, S2=2'b10, S3 = 2'b11; 

always @(posedge clock or negedge reset) 
    if (reset == 0) state<=S0; 

    else case(state) 
     S0: if(Dir) state = S1; else state = S3; 
     S1: if(Dir) state = S2; else state = S0; 
     S2: if(Dir) state = S3; else state = S1; 
     S3: if(Dir) state = S0; else state = S2; 
    endcase 

endmodule 

Testbench является:

module Counter_TB; 

reg Dir, clock, reset; 


TwoBitCounter DA0(.Dir(Dir), .clock(clock), .reset(reset)); 

initial begin 

reset = 0; 
Dir = 1; 

#5 reset = 1; 

forever #205 Dir = ~Dir; 

end 

initial begin 
clock = 0; 
forever #25 clock = ~clock; 
end 



initial #800 $stop; 

initial $monitor ("State AB: %b", state); 

endmodule 

Я гугле, но я обнаружил, что эта ошибка возникает при использовании вещи в всегда блоке, но я не использую ее в блоке всегда.

Спасибо!

+0

'S0: state <= (Dir)? : S1: S3; 'и т. Д. – toolic

ответ

2

С state является внутренней переменной модуля TwoBitCounter, вы получаете сообщение об ошибке при попытке получить к нему доступ непосредственно в модуле testbench в инструкции $ monitor. Вы можете получить доступ к нему с иерархическим спецификатором:

initial $monitor(DA0.state); 

Или, вы можете объявить state как output порта модуля TwoBitCounter и подключиться к нему в тестбенче.