Ну я бы делал примерно так:
Код:
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;
flck - некий клок системы, в домене которого находятся все сигналы модуля. Например 14 мгц.
При этом, дабы избежать метастабов, если сигналы 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;