我沒有用VHDL太多的經驗,所以原諒我,如果這是愚蠢無聊的問題,但我找不到合適的答案會產生錯誤的結果。我的代碼在這裏有點簡化。VHDL邏輯當使用頻率較高
process (sys_clk, reset):
begin
if reset = '0' then
-- reseting code
elsif rising_edge(sys_clk) then
if data_ready = '1' and old_data_ready = '0' then -- rising edge of asynchronous sig
-- update few registers, and assigning values to few signals
elsif error_occured = '1' and old_error_occurred = '0' then
-- update few registers, and assigning values to few signals (same registers and signal as above)
end if;
old_data_ready <= data_ready;
old_error_occured <= error_occured;
end if;
end process;
信號保存時間比sys_clk的週期長得多,但它不知道多長時間。它有所不同。這些IF產生兩個(每個)寄存器和一個AND電路。我相信你知道這一點。 這工作,但非常糟糕。往往是錯誤。所以我用兩個過程做了特殊的項目。一個在data_ready的上升沿有效,另一個在error_occured上有效。但我可以用它來增加和減少分開的計數器。我用它來驗證我的代碼的問題是,有時這種上升沿檢測不起作用。 sys_clk是27MHz,我使用相同的頻率製作了更大的項目,並且運行良好。但是這種方式沒有檢測到異步信號的上升沿。所以我把頻率降低到100kHz,因爲我不需要更高的頻率。這解決了我的問題。
但只是出於好奇,什麼是測試異步信號的上升沿時,一些這些信號的影響相同的寄存器和設備需要工作在更高頻率的最好方法?
我使用Altera的Quartus II和Cyclone II FPGA。
@Marko:一開始,先確定是亞穩態的問題,通過簡單地將同步觸發器兩個'data_ready'和'error_occured'。有關該主題的更多信息,請參見[Wikipedia Metastability in electronics](https://en.wikipedia.org/wiki/Metastability_in_electronics)和相關外部鏈接。 –
謝謝你們兩位。我在哪裏可以找到如何在VHDL中實現同步觸發器(以及如何在電路圖中查找)?你有什麼建議嗎? – Marko
@Marko我編輯我的帖子用一個例子 – ni9e