2017-11-04 5 views
0

Ich habe gerade mit VHDL begonnen, und ich habe ein Problem zu verstehen, wie genau Prozess funktioniert. Hier ist ein Beispiel eines einfachen Oszillators:Einfacher Oszillator in 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 ist ein Eingang (Takt) Signal mit 50 MHz Frequenz und Tastverhältnis von 50%.

Nun, wie ich es verstehe, wird der Prozess timer_1Hz wird auf jede Änderung des clk Signal ausgelöst werden, ob das ein Übergang 0-1 sein, oder 1-0.

Ich erwartete von dem obigen Beispiel, LEDs mit einer Frequenz von 0.5 Hz zu blinken, da der rising_edge Test auskommentiert wurde. Mit anderen Worten, ich erwartete, dass der Körper zweimal in einer einzigen Taktperiode ausgelöst wird, bei einer steigenden und einer fallenden Flanke. Dies scheint jedoch nicht zu funktionieren, d. H. LEDs sind niemals eingeschaltet.

Wenn ich den rising_edge Test einschließe, blinken LEDs mit einer Frequenz von 1 Hz, genau wie ich es erwartet hatte.

Kann mir bitte jemand erklären, was ich im unerwarteten Fall vermisse.

+0

FPGA-Register können nicht sowohl auf steigende und fallende Flanke ausgelöst werden. Sie müssen nur eine Kante verwenden. – JHBonarius

Antwort

1

Der Code funktioniert nicht ohne den ansteigenden Teil, den Sie entfernt haben. Es könnte in der Simulation funktionieren, aber nicht in einem echten FPGA-Board. Warum? Denn Sensitivitätsliste ist (meistens) wichtig für die Simulation und nicht (so sehr) für die Synthese.

Für die Synthese müssen Sie immer über die Hardware nachdenken, die Sie implementieren würden. In einem praktischen Sinn wird ein Prozess NICHT "ausgeführt", wenn bestimmte Ereignisse auftreten.

Wenn Sie wirklich 0,5 Hz ausgeben möchten, verwenden Sie einfach 25E6 statt 50E6 mit dem ursprünglichen Code ..

+1

Zur Vervollständigung - Registrare, die zur Implementierung dieses Projekts verwendet werden, sind oft nur für eine Taktflanke empfindlich. Manchmal können Sie wählen, welche, manchmal müssen Sie bei einer bleiben. – Staszek