mikrocontroller.net

Forum: FPGA, VHDL & Co. Signale in ModelSIM werden falsch dargestellt (?)


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt jemand das Problem, daß Signale, die infolge eines Eintaktvorgangs 
eigentlich einen Takt verzögern ändern müssten, bereits zum Takt mit der 
Quelle mitändern ?

Es scheint ein Darstellungsproblem zu sein, denn die Reaktion auf das 
scheinbar falsche Signal stimmt.

Woran kann es liegen ?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Gast (Gast)

>Kennt jemand das Problem, daß Signale, die infolge eines Eintaktvorgangs
>eigentlich einen Takt verzögern ändern müssten, bereits zum Takt mit der
>Quelle mitändern ?

Ja.

>Es scheint ein Darstellungsproblem zu sein,

Nö.

> denn die Reaktion auf das
>scheinbar falsche Signal stimmt.

>Woran kann es liegen ?

Deine Testbench ist falsch. Deine Eingangssignale dürfen sich erst NACH 
der Taktflanke ändern, 10ps reichen schon. Wenn sie sich genau parallel 
mit der Taktflanke ändern knallts.

MFG
Falk

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, die TB ist in Ordnung. Es passiert auch nur bei DIESEM Signal, 
alles andere in der Schaltung läuft. Ich versuche das mal zu 
extrahieren, auf AE/XE zu packen und zu posten.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es mal rauskopiert und entschärft. So sieht der Code aus:
input: process (reset, clk)                
begin
  if (reset = '1') then
    instream <= (others => '1');
    wen <= '0';
    error <= '0';
  elsif rising_edge(clk) then                
    if (localreset = '1') then      
      instream <= (others => '1');
      wen <= '0';
      error <= '0';
    elsif (data_new = '1') then -- new data coming
      if (ram_full = '1') then -- ok to write ?      
        instream <= (others => '1');
        wen <= '0';
        error <= '1';              
      else -- ram not full, write !
        if (test = '1') then -- select data
          instream <= test_data;
        else
          instream <= datainput;  
        end if;
        wen <= '1';
        error <= '0';
      end if;
    else -- no local reset
      instream <= (others => '1');      
      wen <= '0';
    end if;
  end if;
end process input;

Sowohl instream als auch wen wechseln mit der Taktflanke, wenn auch das 
data_new ändert und nicht, wenn es bereits 1 war, also einen Takt 
später- Ich sehe nur noch nicht, ob es nicht das datanew ist, das zu 
spät dargestellt wird.

Die Reaktion auf den localreset funktioniert, wie erwartet: localreset 
geht auf 1, die Signale bleiben und wechseln erst zur nächsten 
Taktflanke auf Startzustand. Auch der asynchrone Reset läuft. Dieser 
kommt, wie auch das localreset und der clk aus der testbench, während 
das datanew aus einer anderen Schaltung produziert wird. Das sieht aber 
logisch und korrekt aus. (?)

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche mal Dein Problem zusammen zu fassen:
instream und wen ändern sich mit der gleichen Flanke wie auch data_new, 
obwohl sie sich erst ändern sollen wenn data_new 1 ist?

Die Frage ist, woher kommt das data_new? Wird es in der gleichen 
Taktdomäne erzeugt?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist ein file. Dierekter Ausgang des FF mit demselben Takt. Ich 
reduziere / anonymisiere jetzt mal das Design und die Testbench und 
simuliere es noch mal. Wenn das soweit ist, dann kriegt das Mentor als 
Hausaufgabe. Es ist übrigens nicht das erste mal, dass ich sowas habe.

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.