Ну я бы делал примерно так:
flck - некий клок системы, в домене которого находятся все сигналы модуля. Например 14 мгц.Код:process (flck)
begin
if (fclk'event and fclk = '1')
begin
if (clr_flag = '1') then
rd_sig <= '0';
elsif (ram_rd = '1') then
rd_sig <= '1';
end if;
end
end process;
При этом, дабы избежать метастабов, если сигналы clr_flag и ram_rd в другом клоковом домене, их бы нефигово пересинхрить на клок flck.
В общем проблему надо разделить на две:
1. (главная!) НИКОГДА не использовать выход комбинаторики как клок, а только как клок енабле, да и то желательно пересинхренный.
2. Пересинхривать любые сигналы другого клокового домена на текущий.
---------- Post added at 01:43 ---------- Previous post was at 01:41 ----------
Сорри, в вхдл могут быть ошибки, я в нем никогда не писал, езык для мну иностраннише.
---------- Post added at 01:44 ---------- Previous post was at 01:43 ----------
На уютном верилоге так:
Код:always @(posedge fclk)
if (clr_flag)
rd_sig <= 1'b0;
else if (ram_rd)
rd_sig <= 1'b1;

