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
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.