我正在重新學習VHDL。遇到一些問題後,我又回到了鬧鐘等小事。我猜想在Java等多年之後,我有一個基本的誤解和錯誤的方法,而不是硬件。請告訴我關於我的一般問題的正確方向(通常指的是微不足道的情況,我使用的是Xilinx ISE和Spartan3,但我的問題與實際硬件無關)。
由於位切換,計數器在硬件(模擬)中產生毛刺。這是可以預料的。如何彌補設計中的缺陷? 例如過程中的一部分將是:
if rising_edge(clk_base) then if(set_time='1') if (sec_enable= '1') then sec1 <= sec1+1; if(sec1 = 59) then sec1<=0; end if; end if; ....
的處理之後,我寫output_seconds < = SEC1;顯然,在這個過程之外的非順序(?)語句中,我總是直接在輸出端口獲得毛刺。有沒有辦法抑制這一點?某種通用的同步設置的所有端口?
創建日期時,day_enable來自時鐘組件的時鐘使能,就像sec_enable來自時鐘分頻器一樣,我會有一個過程來計算日期和第30天(或31或.. 。取決於月份和閏年)的月份是< =月份+ 1,依此類推。我最初檢查了if day_enable ='1'部分的天數,但仿真表明,如果我的時鐘在閏年的2月28日開始,它仍然採用默認值(is_leap ='0'),因爲結果的檢查「if(year1 mod 4 = 0)」只適用於下一個週期。反之亦然30/31選擇。如果在「如果rising_edge(clk_base)then」之後檢查這個權限,那麼它可以工作,但是如果天(以及因此幾個月)很少改變,那麼每檢查一次X ns似乎就會過度。我的思想在哪裏走了?
在我的腦海裏,不知何故級聯,整個事情就解決問題1和問題2,但我不知道,如果它實際上是這樣做的方式,如果是這樣,如何。避免剛剛描述的問題的標準做法是什麼?我相信答案是相當微不足道的,但請在這裏幫助我。
這實在是兩個問題。你應該單獨發佈它們。 –
如果您的FPGA/IC輸出它們,毛刺是個壞消息。毛刺會導致輸出單元中的大晶體管迅速導通和關斷,從而吸收過量電流並引起干擾。觸發器的輸出是_coherent_。也就是說,它不會產生小故障。因此,您應該始終直接從觸發器驅動任何FPGA/IC的輸出,而不是通過組合邏輯。 –
在你的例子中,你似乎直接從觸發器驅動FPGA的輸出。 'sec'將合成爲觸發器,因爲在鍾控過程中分配的任何信號都將合成爲觸發器_。如果執行_unconically_(即不是從其他條件語句內部執行),那麼'output_seconds <= sec1;'行不會添加任何邏輯。 –