Forum: FPGA, VHDL & Co. Problem bei der Simulation (Buskonflikt)


von Florian Z. (floz)


Angehängte Dateien:

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

von bko (Gast)


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

von Florian Z. (floz)


Lesenswert?

Morgen,

nein da wird schon auch ein flip-flop draus.
Aber es gibt da einen Undefine zustand am Anfang den ich nicht mehr los 
werde.

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


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'?

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


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 ;

von bko (Gast)


Angehängte Dateien:

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;

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.