Только сейчас заметил разговор. Список чувствительности always без posedge/negedge по большому счету пишется для самоуспокоения, на синтез он не влияет и можно просто писать always @*.
Так у меня сперва стоит always @(nRESET or CLOCK) - т.е. чувствительность к любым перепадам клока, а потом в условии else if(CLOCK), т.е. когда клок находится в единице. Что же не так?
В продолжение мысли — такой always не имеет никаких чувствительностей. Все чуствительности в выражениях, а то, что в скобочках always — это то, что может повлиять на состояние схемы внутри и по крайней мере квартусу это не более чем повод выдать предупреждение (странно, что он на переводы строк их не выдает). Но непосредственного влияния список чувствительности always не определяет.
Код:
process(nRESET,CLOCK)
begin
if( nRESET = '0' ) then DOS <= '0';
elsif (CLOCK'event and CLOCK = '1') and nM1 = '0' and nRD = '0' and nMREQ = '0' and (ADRESS(15 downto 8) = "00111101") and ROMSEL = '1' then DOS <= '1';
elsif (CLOCK'event and CLOCK = '1') and nM1 = '0' and nRD = '0' and nMREQ = '0' and (ADRESS(14) = '1' or ADRESS(15) = '1') then DOS <= '0';
end if;
end process;
в верилоге должен превратиться в такое:
Код:
always @(negedge nRESET or posedge CLOCK) begin: lolprocess
if (~nRESET)
DOS <= 1'b0;
else begin
if (~nM1 && ~nRD && ~nMREQ && ROMSEL && ADRESS[15:8] == 8'b00111101) DOS <= 1'b1;
if (~nM1 && ~nRD && ~nMREQ && |ADRESS[15:14]) DOS <= 1'b0;
end
end
В доказательство привожу две очень по-моему похожие друг на друга картинки. Мейкает сенс? Код на VHDL по большому счету изначально некорректно написан и, кстати, Квартус не очень-то рад такой записи.