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):
1 | module mein_erstes_design (FD, ... );
|
2 |
|
3 | inout [7:0] FD;
|
4 |
|
5 | reg [7:0] FD, ioshifter;
|
in der State Machine wurde FD dann wie folgt beladen:
1 | // FIFO_DATAOUT
|
2 | if ( (fstate == Wait_not_FF) || (fstate == Strobe_WR) )
|
3 | FD <= ioshifter;
|
4 | else
|
5 | 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:
1 | module mein_erstes_design (FD, ... );
|
2 |
|
3 | inout [7:0] FD;
|
4 |
|
5 | reg [7:0] ioshifter;
|
6 | reg OE = 1'b0;
|
7 |
|
8 | assign FD = OE ? ioshifter : 8'hZZ;
|
in der State Machine wurde FD dann wie folgt beladen:
1 | // FIFO_DATAOUT
|
2 | if ( (fstate == Wait_not_FF) || (fstate == Strobe_WR) )
|
3 | OE <= 1'b1;
|
4 | else
|
5 | 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