mikrocontroller.net

Forum: FPGA, VHDL & Co. Anfängerfrage - Problem mit bidirektionalen Ports


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Bin noch völliger Neuanfänger, was programmierbare Hardware angeht. Habe 
auch leider kein Studium in dieser Richtung gemacht.

Trotzdem wollte ich mal versuchen, ein eigenes kleines Design zu 
schreiben. Ich habe mich der Einfachheit halber für Verilog entschieden, 
da es näher an C in der Syntax zu sein scheint.

Bücher habe ich leider keine hier. Ich habe mir vieles aus dem Netz 
runtergeladen. Aber trotzdem muss ich wohl zugeben, dass ich so ziemlich 
keine Ahnung habe.

Weshalb die lange Vorrede: Ich habe ein Verständnisproblem, und es kann 
sein, dass die Antwort offensichtlich ist und ich sie eben nur nicht 
wegen meiner Unkenntnis weiss (schäm).

Frage ist folgende:

Ich habe ein Design, dass mit einen bidirektionalen FIFO "spricht". Den 
Bus habe ich zunächst wie folgt angelegt (Auszug):
module mein_erstes_design (FD, ... );

inout [7:0] FD;

reg [7:0] FD, ioshifter;

in der State Machine wurde FD dann wie folgt beladen:
      // FIFO_DATAOUT
        if ( (fstate == Wait_not_FF) || (fstate == Strobe_WR) )
                FD <= ioshifter;
        else
                FD <= 8'hZZ;

Also, das Design funktioniert wunderbar auf einen kleinen FPGA. Aber als 
ich es dann für einen CPLD (MAX7064) kompilieren wollte, habe ich von 
Quartus eine Fehlermeldung erhalten, dass das Design acht Output Enable 
benötige, der Chip aber nur sechs habe.

Ich hatte nicht verstanden, wieso das Design überhaupt acht Output 
Enables braucht. Ich habe nur Grund für einen gesehen.

Ich habe das Design dann wie folgt geändert:
module mein_erstes_design (FD, ... );

inout [7:0] FD;

reg [7:0] ioshifter;
reg OE = 1'b0;

assign  FD = OE ? ioshifter : 8'hZZ;

in der State Machine wurde FD dann wie folgt beladen:
      // FIFO_DATAOUT
        if ( (fstate == Wait_not_FF) || (fstate == Strobe_WR) )
                OE <= 1'b1;
        else
                OE <= 1'b0;

Das funktioniert glücklicherweise genau so gut wie die erste Version, 
erzeugt beim Kompilieren aber anscheinend tatsächlich nur einen Output 
Enable.

Da ich eben keine Ahnung habe, wollte ich fragen, ob mir jemand erklären 
kann, wieso das so ist?

Vielen Dank

Michael

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Michael,

Michael wrote:
>
>       // FIFO_DATAOUT
>         if ( (fstate == Wait_not_FF) || (fstate == Strobe_WR) )
>                 OE <= 1'b1;
>         else
>                 OE <= 1'b0;
> 
>
> Das funktioniert glücklicherweise genau so gut wie die erste Version,
> erzeugt beim Kompilieren aber anscheinend tatsächlich nur einen Output
> Enable.
>
> Da ich eben keine Ahnung habe, wollte ich fragen, ob mir jemand erklären
> kann, wieso das so ist?

Gute Frage. Auf den ersten Blick sieht beides für mich in Ordnung aus. 
Ich tippe darauf, dass Dein Synthese Tool (Quartus?) einfach nicht 
erkennt, dass immer alle acht Ausgänge auf einmal gesetzt werden, wenn 
Du das mit dem sequentiellen if entscheidest. Hätte erwartet, das beides 
geht...

Muss das mal XST vorwerfen, was der daraus dreht. :)

Gruss, Torsten

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.