Verständnisfrage zu "process"

OP #3766029
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?
#3766043
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.
OP #3766045
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?
#3766083
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.
Moderator (Firma: Titel) Persönliche Seite #3766090
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.