Jörg W. schrieb:
> Wo und wie passiert das?
Am übersichtlichsten im Toplevel. Denn nur dort, im "Toplevel" des
FPGAs, also aussen an den Pins, existiert diese Funktion real.
Duke Scarring schrieb:
> Jörg W. schrieb:
>> (ggf. auch pullup, aber das ist erstmal egal)
> Leider haben die FPGA-Hersteller vergessen, den Pullup dynamisch
> aktivieren zu können.
Ja, das könnte man glatt "kollektives Versagen" nennen. Denn der
Pullup(fet) ist ja eh' schon da und sogar schaltbar...
Unbekannter schrieb:
> Die machen das genauso: intern pro Datenrichtung ein Bus, nach extern
> ein inout mit Richtungsumschaltung.
Wow!
Hat das ein Erstsemesteraushilfspraktikant aus der SW-Abteilung gemacht?
Da findet man sowas:
1 | PROCESS (oe, bidir) -- Behavioral representation
|
2 | BEGIN -- of tri-states.
|
3 | IF( oe = '0') THEN
|
4 | bidir <= "ZZZZZZZZ"
|
5 | b <= bidir;
|
6 | ELSE
|
7 | bidir <= a;
|
8 | b <= bidir;
|
9 | END IF;
|
10 | END PROCESS;
|
Falsch ist hier, dass a in der Sensitivliste fehlt --> Simu passt nicht
zur Realität.
Und unnötig ist ein bidir, das sich unabhängig von oe immer auf b
auswirkt.
Und ebenso unnötig ist ein Prozess für eine if-Abfrage.
Darüber hinaus könnte man die Beschreibung mit einem (others->'Z')
wesentlich generischer machen.
Und abschließend sind Output-Enable Signale, die von aussen kommen, gern
mal low-aktiv.
Ich würde das wie jedes meiner bidirektionalen Bussignale so schreiben:
1 | bidir <= a when oen='0' else (others->'Z');
|
2 | b <= bidir;
|