Forum: FPGA, VHDL & Co. VHDL Sequentielle Anweisungen, wie schnell


von Spice (Gast)


Lesenswert?

Hi Zusammen,

ich bin gerade dabei meine ersten Gehversuche in VHDL zu bewältigen. ICh 
habe eine kurz Frage: Mich interessiert, wie schnell die Sequentielle 
Abarbeitung in VHDL Prozessen durchgeführt wird. Wenn ich beispielsweise 
eine IF ELSIF ELSE Abfrage habe, wird jede Anweisung mit einem 
Clockcycle durchgeführt, oder werden innerhalb eines Clockcycles mehrere 
Anweisungen abgearbeitet? Was passiert, wenn ich eine IF Abfrage mit 
mehreren Zuweisungen und Anweisungen habe?
Danke und Gruß
Spice

von abc123 (Gast)


Lesenswert?

VHDL ist eine Hardwarebeschreibungssprache. Du beschreibst damit 
Logik-Gatter und FlipFlops.

In der Regel werden die If THen Else in einem (!) Takt (Clock Cycle) 
"abgearbeitet". Aber es kommt auf deine Beschreibung der Hardware an, 
was wirklich passiert.

Mein Tipp: Hol dir irgendwo ein Buch oder ein gutes Tutorial und mach 
deine ersten Gehversuche damit. Wenn du nämlich hier noch mehr so Fragen 
stellst, dann wird man dich ganz schnell "zerfetzen" ;-) Nur zu deinem 
Selbstschutz ;-)


Vg

von Thomas P. (daelectrictick)


Angehängte Dateien:

Lesenswert?

Hallo, bin selber noch Anfänger in VHDL.

Soweit ich verstanden habe wird der process sequentiell abgearbeitet, 
wenn es sich um eine Simulation handelt. (Ist ja logisch weil der 
Prozessor des PC auch sequentiell arbeitet)

Bei der Synthese ist es definitiv nicht der Fall. Du solltest dich mit 
Digitaltechnik auskennen um VHDL zu schreiben. (so ist mein Eindruck).

Ich habe ein Schaltplan als png hochgeladen. Dieses Schaltplan ist eine 
FPGA Beschreibung mit einer If-Anweisung. Wie du sehen kannst geht das 
CLOCK Signal an alle RS-Flipflops gleichzeitig.

Der Code:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
4
entity lfsr1 is
5
  port(LEDR: out std_logic_vector(4 downto 0);
6
       SW: in std_logic_vector(1 downto 0);
7
       CLOCK_50: in std_logic);
8
end entity lfsr1;
9
10
architecture lfsr2 of lfsr1 is
11
12
  signal lfsr_array: std_logic_vector(4 downto 0);
13
  
14
begin
15
16
  lfsr: process
17
    begin
18
    wait until rising_edge(CLOCK_50);
19
    if SW(1)='1' then
20
      lfsr_array <= (others => '0');
21
    else
22
      lfsr_array(0) <= SW(0) xor lfsr_array(4);
23
      lfsr_array(1) <= lfsr_array(0);
24
      lfsr_array(2) <= lfsr_array(1) xor lfsr_array(4);
25
      lfsr_array(3) <= lfsr_array(2);
26
      lfsr_array(4) <= lfsr_array(3);
27
    end if;
28
    LEDR(0) <= lfsr_array(4);
29
    end process lfsr;
30
end lfsr2;

Der Code beinhaltet einen asynchronen Reset und sollte noch 
Einsynchronisiert werden. Für dein Problem reicht es denke ich als 
klares Beispiel.

Gruß
Thomythehomie

von Thomas (Gast)


Lesenswert?

Thomas P. schrieb:
> Soweit ich verstanden habe wird der process sequentiell abgearbeitet,
> wenn es sich um eine Simulation handelt.

Nö, Du hast gar nichts verstanden; Nichtmal die Frage des TOs.

von Thomas P. (daelectrictick)


Lesenswert?

Wird die IF-Anweisung nicht sequentiell abgearbeitet, sondern in 
digitale Komponenten umgewandelt, die gleichzeitig getaktet werden. So 
ist eine simple Schlussfolgerung, dass es bei einem elsif genauso ist.

Falls ich mich irre werde ich mich in mein Keller verkriechen und erst 
wieder rauskommen, wenn ich VHDL beherrsche! ;)

Mit der Simulation war nur irgendwo aufgeschnappt. Habe bisher noch 
nichts simuliert.

Gruß
Thomythehomie

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas P. schrieb:
> Habe bisher noch nichts simuliert.
Daran solltest du arbeiten...  ;-)

Spice schrieb:
> Was passiert, wenn ich eine IF Abfrage mit mehreren Zuweisungen und
> Anweisungen habe?
Jede "If-Abfrage" wird in Logik umgesetzt. Und mit einem Takt werden 
"nur" irgendwelche logischen Werte in Flipflops gespeichert.

> mehrere Anweisungen abgearbeitet
Genau da liegt dein Problem: es wird nichts irgendwie "abgearbeitet", 
sondern in Hardware umgesetzt.

> Mich interessiert, wie schnell die Sequentielle Abarbeitung in VHDL
> Prozessen durchgeführt wird.
Die Antwort darauf lautet: so schnell wie möglich. Die tatsächliche 
Geschwindigkeit hängt von Durchlaufzeiten durch LUTs, Routingdelays, 
Temperatur und Versorgungsspannung ab...

Du merkst: mit VHDL bist du SEHR nah dran an richtiger Hardware. Du 
musst diese Hardware kennen, wenn du mit VHDL Funktionen und Schaltungen 
dafür beschreiben willst.
Bitte frag nach, wenn du den vorhergehenden Satz nicht so richtig 
verstehst!

Thomas P. schrieb:
> Der Code beinhaltet einen asynchronen Reset und sollte noch
> Einsynchronisiert werden.
Er beinhaltet keinen asynchronen Reset. Aber ein asynchrones Signal 
namens SW, das für einen synchronen Reset verwendet wird. Dieses 
asynchrone Signal MUSS einsynchronisiert werden!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.