www.mikrocontroller.net

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


Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
          
with clk select 
     dIn_alt <=   dIn_neu when '1',
     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:
process begin
  wait until rising_edge(clk);
    dIn_alt <=   dIn_neu;
end process;

Weitere Beispiele hier
http://www.lothar-miller.de/s9y/categories/34-Geta...

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> nein da wird schon auch ein flip-flop draus.
Garantiert niemals!
-- Erzeugen des D-FlipFlop zum Zwischenspeichern --
with clk select 
     dIn_alt <=   dIn_neu when '1',
     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'?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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

BTW:
Bei sowas hier:
Sub: process ( dOutm_conv, dIn_conv)
  begin
    dIn_temp <= '0' & dIn_conv - dOutm_conv ;
  end process;
Kannst du drei Zeilen streichen:
        dIn_temp <= '0' & dIn_conv - dOutm_conv ;

Autor: bko (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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-Geta...
(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;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.