簡體   English   中英

VHDL中的簡單振盪器

[英]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信號的任何變化(無論是從01還是從10的轉變)都會觸發流程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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM