latch im Quartus

OP #1022984
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;
Gast #1023080
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.
Gast #1023322
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.
Gast #1027765
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

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