Hilfe wie triggere ich auf steigende und lallende flanke

Gast #2927250
Lesenswert?
• ▲
▼
Hallo liebes Forum,
ich muss mich seit kurzem mit einer FPGA Firmware auseinandersetzen, 
habe aber eigentlich noch nichts auf diesem Gebiet gemach, komme 
eigentlich mehr aus de µC ecke. Nun zu meinem Problem ich habe einen 
FPGA (Xilinx Virtex), dieser wird in VHDl programmiert. Nun möchte ich 
wenn ein Signal(pa_on) eingeschaltet wird ein Timer auf einen wert x 
setzen, diese nennt sich timer1, wird das Signal pa_on nun wieder 
ausgeschaltet so soll auf die fallende Flanke getriggert werden und ein 
andere Timer(timer2) gestartet werden. Wie stelle ich das an? wäre für 
jeden hinweis dankbar.
Moderator (Firma: Titel) Persönliche Seite #2927259
Lesenswert?
• ▲
▼
Dominik schrieb:
> Wie stelle ich das an?
Du baust dir erst mal 2 Timer und dann nimmst du eine Flankeerkennung 
und triggerst die Timer damit...
> wäre für jeden hinweis dankbar.
http://www.lothar-miller.de/s9y/categories/18-Flankenerkennung

> Nun möchte ich wenn ein Signal(pa_on) eingeschaltet wird ein Timer
> auf einen wert x setzen, diese nennt sich timer1,
Das kannst du gleich am Anfang machen, denn sonst passiert in deiner 
Beschreibung ja nichts mit dem Timer1...  :-o
> wird das Signal pa_on nun wieder ausgeschaltet so soll auf die fallende
> Flanke getriggert werden und ein andere Timer(timer2) gestartet werden.
Wie schnell und woher kommen die Flanken?

Noch was zur Terminologie:
> komme eigentlich mehr aus de µC ecke. Nun zu meinem Problem ich habe
> einen FPGA (Xilinx Virtex), dieser wird in VHDl programmiert.
Ein Feldprogrammierbares Gate Array wird nicht programmiert. Sondern 
es wird mit VHDL (das ist eine Hardware-Beschreibungssprache) eine 
Schaltung beschrieben, die dann von der Toolchain auf ein FPGA 
umgesetzt wird.

lüsterklemme schrieb:
> Aber vielleicht hilft das?
> Beitrag "CLK'event oder rising_edge(clk)"
Nein, das ist hier mit 99,999% Sicherheit der falsche Weg...
Gast #2927268
Lesenswert?
• ▲
▼
Dominik schrieb:
> Wie stelle ich das an? wäre für
> jeden hinweis dankbar.

Zum Bleistift:
1
signal pa_on_synced     : std_logic := '0';
2
signal pa_on_synced_old : std_logic := '0';
3

4
process(CLK)
5
begin
6
  if (rising_edge(CLK)) then
7
    -- Signal "pa_on" zum Takt synchronisieren
8
    pa_on_synced <= pa_on;         
9
    if    ((pa_on_synced = '1') and (pa_on_synced_old = '0')) then
10
      -- Steigende Flanke
11
    elsif ((pa_on_synced = '0') and (pa_on_synced_old = '1')) then
12
      -- Fallende Flanke
13
    end if;
14
     -- Aktuellen Zustand für den nächsten Takt merken
15
     pa_on_synced_old <= pa_on_synced;  
16
  end if;
17
end process;

Noch ein paar Tips:
- Wenn irgend möglich nur einen einzigen Takt (CLK) benutzen
- Der Takt muß natürlich schnell genug sein, um Dein Signal abzutasten
- Falls "pa_on" prellt, mußt Du noch eine Entprellung vorsehen

Lösung wie
1
if (rising_edge(pa_on)) then
sind nicht zielführend!
Im FPGA sollte alles mit einem einzigen Takt laufen, damit sämtliche 
Vorgänge synchron zu einander sind.
Im µC passiert das explizit durch die CPU (ein Befehl nach dem anderen), 
aber im FPGA muß darauf wirklich genau achten!
Gast #2927305
Lesenswert?
• ▲
▼
Hallo und vielen Dank schon mal für eure schnelle Hilfe.
Noch als Zusatzinformation ich habe einen Systemtakt von 140Mhz, und das 
pa_on Signal ist kein hardwaresignal sondern es wird aus einem SPI 
Register gebildet. @Bronco deinen Lösungsweg kann ich nachvollziehen, 
ich werde es mal so versuchen in mein Projekt einzubinden. @Lothar auch 
danke für deine Berichtigung ;)


Gruß

Dominik
#2931187
Lesenswert?
• ▲
▼
Bronco schrieb:
> Immer diese Erbsenzählerei!

Ach, wenn wir schon dabei sind. :)

Marcus Harnisch schrieb:
> Lothar Miller schrieb:
>> Ein Feldprogrammierbares Gate Array wird nicht programmiert.
>
> Genau. Daher auch der Name :)

Sehen wir es halt so, dass man in den Sprachen VHDL, Verilog, etc. keine 
Programme schreibt sondern Schemata. Der Programmiervorgang überträgt 
diese auf das FPGA, das im Betrieb diesen Vorgaben folgt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren