Если я правильно понимаю защелку, она создается в комбинационном блоке, в котором объявляются не все возможные условия при присвоении переменной значения. Как получить защелку в моем последовательном блоке?Verilog Latch in always @ (posedge clk)
Когда я скомпилировал свой код через Quartus, он убрал 2 Fmax, что указывает на то, что у меня есть защелка.
[email protected](posedge clk or negedge nreset) begin
case(counter)
0: begin
if(state == IDLE) begin
// DOES SOMETHING
end
end
1: begin
// DOES ASSIGNMENT
end // PROLOG
81: begin
// DOES ASSIGNMENT
end // EPILOG
82: begin
// DOES ASSIGNMENT
end // POSTPROC
default: begin
// DOES ASSIGNMENT
end // ROUNDS
endcase
Я проверил каждый из случаев и удостоверился, что все назначения не блокируются. Любая идея, почему я могу защелкнуться?
Мой код вычисления SHA1
У меня 2 всегда @ (posedge CLK), один вычисляет следующий Wt, и выше, вычисляет следующий A, B, C, D, E значение.
Вы используете nreset в своем блоке всегда? – toolic
@toolic, Nope. Я достал нресет, и защелка ушла. Благодарю. – Sugihara
Этот блок всегда не является комбинационным блоком. Он запускается часовым событием, поэтому синтезатор не будет вызывать защелки, а регистры (триггеры с часами). Если это намеренно является комбинационной частью FSM, список чувствительности будет записан как: 'always @ (*)' –