korrekte Signal Zuweisung in Vhdl

OP #6586395
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
Gast #6586450
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.
Moderator (Firma: Titel) Persönliche Seite #6586637
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.