Forum: FPGA, VHDL & Co. korrekte Signal Zuweisung in Vhdl


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von New C. (wunderlampe)


Bewertung
0 lesenswert
nicht lesenswert
1
entity e1 is
2
  port (
3
    i1 : in std_logic; 
4
    i2 : in std_logic; 
5
    o1 : out std_logic
6
  );
7
end entity; 
8
9
architecture of e1 is
10
  signal o1_Reg : std_logic;
11
  
12
begin
13
  o1 <= o1_Reg;
14
15
  process (clk, rst) is 
16
  begin
17
    if rising_edge(i1) then
18
      if i1 = '1' then
19
    o1_Reg           <= '1';
20
      end if;
21
    end if;
22
  end process;
23
end architecture;
was ist der korrekte Signalzuweisung?
wie in obige Beispiel über ein interne signal oder
darf ich ohne o1_Reg
direkt
1
o1 <= '1';
schreiben

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Beides ist "korrekt".

Du kannst den Ausgang o1 aber eben nicht mehr irgendwo anders lesend 
verarbeiten. Dafür müsste der ein buffer oder ein inout sein. Und diese 
beiden für zu schreibfaulen Lesen von Ausgängen zu verwenden, das ist 
schlechter Stil.

von New C. (wunderlampe)


Bewertung
0 lesenswert
nicht lesenswert
lkmiller, Herzlichen Dank

von Blechbieger (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Du kannst den Ausgang o1 aber eben nicht mehr irgendwo anders lesend
> verarbeiten.

Seit VHDL-2008 geht das.

VHDL-2008 hat generell viele schöne Verbesserungen und mittlerweile ist 
die Unterstützung in den Tools dafür gut genug um es immer zu nutzen.

von Dussel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
New C. schrieb:
1
15 process (clk, rst) is
2
16  begin
3
17    if rising_edge(i1) then
4
18      if i1 = '1' then
5
19    o1_Reg           <= '1';
6
20      end if;
7
21    end if;
8
22  end process;
Unabhängig von der Zuweisung ist das aber auch nicht ganz sinnvoll. 
Erstens ist i1 nach einer rising_edge 1, zweitens müssten in clk und i1 
im gleichen Deltazyklus eine Flanke haben, damit das ausgewertet wird 
(geht das eigentlich?) und drittens ist clk und rst gar nicht definiert.
Ich nehme an, das ist nur ein Flüchtigkeitsfehler beim Erstellen dieses 
kurzen Beispiels, aber auf sowas sollte man achten.

: Bearbeitet durch Moderator
von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Dussel schrieb:
> drittens ist clk und rst gar nicht definiert.
Es ist eigentlich andersrum: die Sensitivliste ist falsch. Dort muss 
passend zum Code i1 rein.
Viele Anfänger meinen, dass man mit der Sensitivliste irgend etwas 
"steuern" könnte. Dabei ist es schlicht so, dass man erst den Code 
schreibt, und dann schaut, welche Signale davon in die Sensitivliste 
gehören.

Dussel schrieb:
> zweitens müssten in clk und i1 im gleichen Deltazyklus eine Flanke
> haben, damit das ausgewertet wird (geht das eigentlich?)
Das interessiert überhaupt nur den Simulator. Und dort können sich einem 
Deltazyklus durchaus mehrere Signale gleichzeitig ändern. Z. B. bei 
einem parallelen Bus, oder hier, wenn clk und i1 im selben Prozess von 0 
auf 1 gesetzt werden. Denn dann werden diese Änderungen gleichzeitig für 
beide beim nächsten wait oder beim Prozessende relevant.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [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 Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.