Problem bei der Simulation (Buskonflikt)

OP #1891566
Lesenswert?

Hallo Zusammen,

ich habe da ein kleines Problem mit meinem Projekt...
Das Signal dIn_neu ist in der Simulation immer mit einem 'X' versehen, 
also Buskonflikt, aber ich finde meinen Fehler nicht, da der SD-Wandler 
alleine getestet funktioniert und auch der Sinusgenerator geht, kann mal 
einer draufschauen, ob er einen Fehler findet,

danke schonmal
Angehängte Dateien:
Gast #1892393
Lesenswert?

Es ist etwas schwierig sich durch deine Files durchzusehen,
ich denke es wäre gut die Datei und die entity jeweils
gleich zu benennen. (z.B.: Entity "SDModulator" == Datei
                     "SDModulator.vhd").

nun sah ich bei kurzem durchsehen dies hier:
1
-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
2
          
3
with clk select 
4
     dIn_alt <=   dIn_neu when '1',
5
     dIn_alt when others;

Da wird, so glaub ich, kein Flipflop daraus, sondern
ein Multiplexer der durch "clk" gesteuert wird.

ein Flipflop sieht eher so aus:
1
process begin
2
  wait until rising_edge(clk);
3
    dIn_alt <=   dIn_neu;
4
end process;

Weitere Beispiele hier
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
Moderator (Firma: Titel) Persönliche Seite #1892637
Lesenswert?

Florian Z. schrieb:
> nein da wird schon auch ein flip-flop draus.
Garantiert niemals!
1
-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
2
with clk select 
3
     dIn_alt <=   dIn_neu when '1',
4
     dIn_alt when others;
Was passiert denn bei dieser Beschreibung mit dIn_alt, wenn clk='1' ist 
und dIn_neu sich ändert?

bko schrieb:
> Da wird, so glaub ich, kein Flipflop daraus, sondern
> ein Multiplexer der durch "clk" gesteuert wird.
Schlimmer noch: es ist ein zurückgekoppelter Multiplexer.
Besser bekannt und berüchtigt unter dem Namen Latch... :-o


>>> immer mit einem 'X' versehen
> Undefine zustand am Anfang
Ja, was denn jetzt:  'U' oder 'X'?
Moderator (Firma: Titel) Persönliche Seite #1892691
Lesenswert?

Florian Z. schrieb:
> Aber es gibt da einen Undefine zustand am Anfang den ich nicht mehr los
> werde.
Probier mal das:
1
Entity DDFS is
2
   Port ( CLK       : in  std_logic;
3
          Freq_Data : in  std_logic_vector (7 downto 0);
4
          Dout      : out std_logic_vector (7 downto 0):=(others=>'0')
5
        );
6
   end DDFS;
Und überleg dir dann, warum das hilft...

Und ersetz diese Zeilen:
1
-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
2
with clk select 
3
     dIn_alt <=   dIn_neu when '1',
4
     dIn_alt when others;
Durch diese hier:
1
-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
2
     dIn_alt <=   dIn_neu when rising_edge(clk);
Erst dann passt der Kommentar...  :-/

BTW:
Bei sowas hier:
1
Sub: process ( dOutm_conv, dIn_conv)
2
  begin
3
    dIn_temp <= '0' & dIn_conv - dOutm_conv ;
4
  end process;
Kannst du drei Zeilen streichen:
1
        dIn_temp <= '0' & dIn_conv - dOutm_conv ;
Gast #1893792
Lesenswert?

@lkmiller
ja der ise (10.1) macht daraus ein Latch:
>with clk select
>     dIn_alt <=   dIn_neu when '1',
>     dIn_alt when others;

Staun - hab das eben mal  eingegeben
>-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
>     dIn_alt <=   dIn_neu when rising_edge(clk);
... und das ise erzeugt ein Flipflop, tja man lernt nicht aus:

Aber hier noch ein Zusatz zur Schrittkette
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
(aus dem ise-xst-Manual 10. Seite 494)

[vhdl]
architecture ARCH of EXAMPLE is
begin
process begin
SEQ_LOOP : loop
wait until CLK'EVENT and CLK = '1';
exit SEQ_LOOP when RST = '1';
RESULT <= DATA1;
wait until CLK'EVENT and CLK = '1';
exit SEQ_LOOP when RST = '1';
RESULT <= DATA2;
wait until CLK'EVENT and CLK = '1';
exit SEQ_LOOP when RST = '1';
RESULT <= DATA3;
wait until CLK'EVENT and CLK = '1';
exit SEQ_LOOP when RST = '1';
RESULT <= DATA4;
end loop;
end process;
[\vhdl]

Die Beispiel geb ich bei Gelegenheit mal ins unser S..teures
Synopsys Synthese tool ein ...
end ARCH;
Angehängte Dateien:

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