www.mikrocontroller.net

Forum: FPGA, VHDL & Co. inout Signal und die Simulation


Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich probiere 2 Bytes parallel einzulesen (auf Clock getaktet), wenn die 
Werte der beiden dem entsprechen, was ich erwarte, möchte ich auf die 
gleiche Leitung ein Byte ausgeben, welches beim nächsten Clock vom µC 
eingelesen werden soll. Die Simulation geht aber bis zu dem Punkt, wo 
ich die 2 Bytes eingelesen habe und wo das Byte ausgegeben werden soll, 
ist alles vorbei. Mach ich was falsch mit dem "inout"? Zum Anfang 
initialisiere ich die Leitung als T-State:
DATA : inout STD_LOGIC_VECTOR(7 downto 0);
...
ext_rw_data: process(CLK, CLEAR)
...
begin
DATA  <=(others =>'Z');

.............
if (RW='0') then
byte_count := byte_count + 1;

if byte_count   = 1 then
  var_start   := DATA;
end if;
          
 if var_start = X"AA" then 
  if byte_count = 2 AND DATA < 16 then
      var_addr   := DATA;
      TEMP_ADDR  :=  conv_integer(var_addr);
    else
    byte_count  := 0;
    end if;
                            
  if byte_count   = 3 then
    var_data := MEM(TEMP_ADDR);
    DATA   <= var_data;  

    byte_count :=  0;  
  end if;  
              
  else 
    byte_count :=  0;
 end if;            
end if;

  

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du mit "ist alles vorbei"? Gibt es Fehlermeldungen im 
Simulator, wird das Byte einfach nicht auf den Bus gelegt, stürzt dein 
PC ab oder naht das Ende der Welt?

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Simulation ist dann vorbei.
Da wo das Byte ausgegeben werden muss, hören die Signale in Modelsim 
auf.

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

Bewertung
0 lesenswert
nicht lesenswert
Da wo ich die Stelle rot markiert habe, sollte in der Simulation das 
Byte ausgegeben werden, da hört die Simu. aber auf.

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf deinem Screenshot sehe ich aber noch, dass die Simulation 
weiterläuft.

µController-seitig hast du den Bus auch auf HIGH-Z gesetzt? Ich würde 
dir vorschlagen den Tristate-Bus folgendermaßen zu beschreiben:
signal WriteEnable : std_ulogic;
signal WriteData   : std_logic_vector(7 downto 0);
signal ReadData    : std_logic_vector(7 downto 0);

als Concurrent Statement:
DATA     <= WriteData when WriteEnable = '1' else (others => 'Z');
ReadData <= DATA;

Danach nur mehr mit Write/ReadData und WriteEnable arbeiten, so hast du 
eine saubere Beschreibung des Tri-States.

Gibt der Simulator Meldungen aus?

Autor: noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem besteht hauptsächlich darin, dass ich in einem 
"Write-Zustand" zuerst aber 2 Bytes einlesen muss und erst auf die 
Leitung beim 3ten Byte schreibe und danach diese Leitung wieder als "in" 
haben muss.

Clk'event -> Byte_1 (DATA ist in)
Clk'event -> Byte_2 (DATA ist in)
Clk'event -> Byte_3 (DATA ist out)
. jetzt muss DATA wieder als "in" fundieren...
Clk'event -> Byte_1 (DATA ist in)
Clk'event -> Byte_2 (DATA ist in)
Clk'event -> Byte_3 (DATA ist out)

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.