[英]Simple oscillator in VHDL
我剛開始使用VHDL,但在理解過程如何精確運行方面存在問題。 這是一個簡單振盪器的示例:
timer_1Hz: process(clk) is
variable timer : integer := 0;
constant period : integer := 50E6;
begin
--if rising_edge(clk) then
timer := (timer+1) rem period;
if (timer=0) then
led <= not led;
end if;
--end if;
end process timer_1Hz;
clk是具有50 MHz頻率和50%占空比的輸入(時鍾)信號。
現在,據我所知, clk
信號的任何變化(無論是從0
到1
還是從1
到0
的轉變)都會觸發流程timer_1Hz
。
從上面的示例中,我期望以0.5 Hz
的頻率對LED進行閃爍,因為注釋掉了rising_edge
測試。 換句話說,我希望在一個時鍾周期內,在上升沿和下降沿觸發兩次該主體。 但是,這似乎不起作用,即LED永遠不會打開。
如果我包括了rising_edge
測試,LED rising_edge
以1 Hz的頻率閃爍,正如我所期望的那樣。
有人可以解釋一下意外情況下我缺少的內容嗎?
沒有刪除的上升沿部分,代碼將無法工作。 它可能在仿真中起作用,但在實際的fpga板上卻不起作用。 為什么? 因為靈敏度列表對於仿真而言(主要)是重要的,而對於合成而言則不那么重要。
出於綜合目的,您必須始終考慮要實現的硬件。 從實際意義上講,當某些事件發生時,流程不是“運行”的。
如果您確實想要0.5 Hz的輸出,只需使用25E6而不是原始代碼的50E6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.