Forum: FPGA, VHDL & Co. Verständnisfrage zu "process"


von Samuel J. (capstrovor)


Lesenswert?

Hallo!

Ich habe mir jetzt einiges zu VHDL angesehen und durchgelesen, komme 
aber immer noch nicht ganz damit zurecht.

Es heißt ja, dass bei einem
1
process
 alle Ausgänge erst geupdatet werden, wenn der ganze process durchlaufen 
ist. Aber wie kann das sein, wenn alles im FPGA als Logik realisiert 
wird?

Kleines Beispiel:
1
...
2
port
3
(
4
   a: in std_logic_vector(2 downto 0);
5
   b: in std_logic_vector(2 downto 0);
6
   q: out std_logic_vector(2 downto 0)
7
);
8
...
9
process
10
begin
11
   for i in 2 downto 0 loop
12
      q(i) = a(i) XOR b(i);
13
   end loop;
14
end process;
15
...

Jetzt müsste doch vom Synthesewerkzeug eine Schaltung entworfen werden, 
die einfach alle Bits von a und b einzeln ver-xort-t, oder? Dann würde 
sich aber jedes einzelne Ausgangsbit ändert, sobald sich an einem von 
den beiden Eingangsbits was ändert oder?

: Bearbeitet durch User
von Christian R. (supachris)


Lesenswert?

Das werden hier einfach 3 XOR Gatter, das ist richtig. Aber bei dem was 
du meinst gehts eher um Zwischenergebnisse, wenn du jetzt eine 
komplizierte Berechnung auf mehrere Zeilen aufteilst um es 
übersichtlicher zu beschreiben. Dann zählt nur das was am Ende steht.

von Samuel J. (capstrovor)


Lesenswert?

Noch eine Frage:
1
entity register1bit is
2
port
3
(
4
  inp0: in std_logic;
5
  load: in std_logic;
6
  clk: in std_logic;
7
  clr: in std_logic;
8
  q0: out std_logic
9
);
10
end register1bit;
11
12
architecture register1bit_arch of register1bit is
13
signal D, q: std_logic;
14
begin
15
  D <= (q AND (not load)) OR (inp0 AND load);
16
  process(load)
17
  begin
18
    if clr = '0' then
19
      q <= '0';
20
      else if clk'event AND clk = '1' then
21
        q <= D;
22
      end if;
23
    end if;
24
  end process;
25
  q0 <= q;
26
end register1bit_arch;

Das ist ein 1 Bit breites Register.

Wieso wird D vor dem process definiert? Könnte man das auch im process 
machen, und macht es nicht, weil es dann bis zum Ende des processes 
dauert, bis D geupdatet wird?

von Samuel J. (capstrovor)


Lesenswert?

OK danke Christian!

Das bedeutet, dass sich der Ausgang, der in einem process berechnet 
wird, sich noch ändern KANN? Also dass man erst am Ende des process den 
100% richtigen Wert hat..

von Christian R. (supachris)


Lesenswert?

Signale müssen nun mal außerhalb von Prozessen deklariert werden und 
zwar genau in der architecture, weil sie wie architecture vermuten 
lässt, das Grundgerüst darstellen, das sijnd nämlich einfach Drähte. Du 
musst bei VHDL in Hardware denken, du beschreibst damit eine Berdrahtung 
von Grundelementen. Sicher gibts es viele Schreibweisen die an 
Programmiersprachen erinnern und einiges einfacher machen, aber am Ende 
kommt eine Schaltung heraus. So ein kombinatorischer Prozess wie im 
ersten Beispiel ist einfach nur ein Stück Logik der in LUTs des FPGA 
gemapt wird. So ein sequenzieller Prozess wie im zweiten Beispiel sind 
speichernde Elemente, die FlipFlops hinter den LUTs. Da passiert immer 
nur was an den Flanken, davor müssen alle kombinatorischen Verknüpfungen 
durchlaufen sein. Die Tools sagen dir, ob der Takt zu schnell ist. Dein 
asynchroner Reset oben wirkt natürlich sofort, er steht ja außerhalb des 
vom Takt gesteuerten Blocks. Im Übrigen ist die Sensitivitätsliste des 
Prozesses falsch, denn da muss clr und der Clock rein.

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


Lesenswert?

Samuel J. schrieb:
> Das bedeutet, dass sich der Ausgang, der in einem process berechnet
> wird, sich noch ändern KANN? Also dass man erst am Ende des process den
> 100% richtigen Wert hat..
Nur der Simulator "berechnet" da wirklich was. Und er berechnet den Wert 
ohne die Zeit hochzuzählen.
In der realen Hardware geht das nicht in der Zeit 0, daher glitcht das 
Ergebnis des Prozesses eine zeitlang, und nach ein paar ns ist Ruhe und 
das Ergebnis steht fest.

von Samuel J. (capstrovor)


Lesenswert?

Ok ich verstehe. Danke! :)

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.