Объясните пожалуйста, почему реверсивный счетчик в виде:
Код
always @ (posedge UP, posedge DW) begin
if(UP)
counter <= counter + 1'b1;
else if(DW)
counter <= counter - 1'b1;
end
if(UP)
counter <= counter + 1'b1;
else if(DW)
counter <= counter - 1'b1;
end
работает хаотично, неправильно (в симуляторе Quartus, а в Modelsim работает правильно). Хотя сигналы UP и DW выделяются синхронизирующим сигналом clk.
А если сделать так:
Код
always @ (negedge clk) begin
if(UP) begin
ck <= 1;
end
else if (DW) begin
ck <= 1;
end
else
ck <= 0;
end
always @ (posedge ck) begin
if(UP)
counter <= counter + 1'b1;
else if(DW)
counter <= counter - 1'b1;
end
if(UP) begin
ck <= 1;
end
else if (DW) begin
ck <= 1;
end
else
ck <= 0;
end
always @ (posedge ck) begin
if(UP)
counter <= counter + 1'b1;
else if(DW)
counter <= counter - 1'b1;
end
то работает отлично, и ресурсы на много меньше использует. Микросхема MAX II.