Forum: FPGA, VHDL & Co. latch im Quartus


von Mido M. (mido80)


Angehängte Dateien:

Lesenswert?

hallo leute
könnte jemand mir erklären
wieso der Ausgang bei der Simulation am Anfang für Latch im Quartus ist 
undefiniert. obwohl ich es im Entity schon deklariert:
 Q : out std_logic:='0';

danke

von Morin (Gast)


Lesenswert?

Poste mal den ganzen Code. Versuch auch mal rauszufinden, welche Art von 
undefiniert das ist (X, U, ...)

von Mido M. (mido80)


Lesenswert?

hier ist den Code für einfaches Latchs

library ieee ;
use ieee.std_logic_1164.all;

entity D_latch is
port(  data_in:  in std_logic;
  enable  :in std_logic;
  q       :  out std_logic:='0'
);
end D_latch;


architecture behv of D_latch is
begin
   process(data_in, enable)
    begin
        if (enable='1') then
      q <= data_in;
  end if;
    end process;

von Morin (Gast)


Lesenswert?

Mhm... du definierst zwar einen Startwert für q, aber vorerst keinen für 
data_in und enable. Außerdem werden diese Eingänge von irgendeiner 
Quelle getrieben. Damit hast du zwar kurzzeitig  '0' auf dem Ausgang, 
aber das wird sofort durch 'undefiniert' überschrieben weil die Eingänge 
undefiniert sind.

von Mido M. (mido80)


Lesenswert?

hi
danke für eure Antworte
ich habe jetzt die Eingänge definiert aber trozdem ändert sich nicht.
vielleicht wegen altera Board de2
ich muss nur den Grund wissen?
danke

von Morin (Gast)


Lesenswert?

> ich habe jetzt die Eingänge definiert aber trozdem ändert sich nicht.

Bedenke dass die Eingänge nicht nur anfangs definiert sein müssen, 
sondern auch definiert bleiben müssen.

> vielleicht wegen altera Board de2

Dazu müsste der Simulator das Board kennen, was ich eher nicht vermute, 
d.h. ich vermute, die Quelle für den unbekannten Wert liegt im FPGA. 
Poste mal etwas mehr Code, am besten ein Minimalbeispiel an dem man den 
Fehler sehen kann, und insbesondere die Testbench.

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


Angehängte Dateien:

Lesenswert?

Welchen Simulator verwendest du?

Bei Modelsim Xilinx Edition geht das...
Baisis: dein Code, keine weiteren Initialisierungen.

von Mido M. (mido80)


Lesenswert?

Lothar Miller wrote:
> Welchen Simulator verwendest du?
>
Wavevector QuartusII 7.

von daniel (Gast)


Lesenswert?

1
library ieee ;
2
use ieee.std_logic_1164.all;
3
4
entity D_latch is
5
port(  data_in:  in std_logic;
6
  enable  :in std_logic;
7
  q       :  out std_logic:='0'
8
);
9
end D_latch;
10
11
12
architecture behv of D_latch is
13
begin
14
   process(data_in, enable)
15
    begin
16
        if (enable='1') then
17
      q <= data_in;
18
  end if;
19
    end process;

jeder Process wird bei einem Simulationsstart ausgeführt
unabhängig von seiner sensitivity liste.
jedes Signal wird mit dem 'linken' Wert aus seinem Definitionsbereich
initialisiert => enable und data_in sind 'U'

=> beim Prozessdurlauf wird q nicht durch 'U' überschrieben.
Modelsim macht also richtig

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.