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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren