Forum: FPGA, VHDL & Co. mixed VHDL und Verilog


von Joerg (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich vermute, dass mein Simulationswerkzeug (Xilinx ISE 8.2.) einen Bug
hat, und inout Ports nicht richtigt handhabt.

Der Beispielcode:

In Verilog geschriebenes modul "Test" hat inout-port "sig1" uns
setzt diesen auf 'Z'. Testbench (VHDL) drumherum setzt eben dieses
Signal auf '1', aber in "Test" kommt das nicht an.


Mache ich etwas falsch, oder ist es mein Werkzeug?

von Axel (Gast)


Lesenswert?

Also ich bin wie gesagt schon einige Zeit nicht mehr am Programmieren,
aber sig1 => sig1 sieht mir sehr falsch aus. Portpin kann doch nicht
gleich Signal sein oder?

von Jürgen Schuhmacher (Gast)


Lesenswert?

Ne, das ist ja nur die Portzuweisung, wenngleich ich ebenfalls der
Ansicht bin, daß eine Zuweisung dieser Art nur verwirrt: In-zuweisungen
sollten sich von Out-zuweisungen in der Pfeilrichtung unterschieden. Das
tut VHDL aber nicht - ein Umstand den ich schon vor über 10 Jahren
angemeckert habe. Aber wer hört schon auf mich ...

Diese Zeile ist also ok. Aber das Submodule macht so keinen Sinn:
Sicher sollte erst da interne Signal gesetzt, dann dem nach aussen
gehenden zugewiesen werden. Wenn es Dir aber um das wire geht, hast Du
im Modelsim gfs das faslche Signal genommen: Man sollte immer zusehen,
daß signale und port pins  NICHT denselben Namen haben. Das ist sonst
nicht nur nutzlose Info, sondern noch verwechslungsgefährdend.

Daher nochmal anhand von 3 Beispielen für Top-SubModuel und Signal:

Port-Pins immer so deklarieren, daß klar wird, was dieser pin in diesem
Modul macht (IO), z:B.  "sram_data_io" , "i2C_adr_in" oder
"strt_module_in" (IO)

Die korespondieren Signale in den Top- oder Submodulen dann kohärent
oder komplmentät- je nach Sinn, hier also
"sram_data_out", "i2c_adr_make" oder "start_module".

Die verbindenen Signal immer so, daß erkennbar ist, von wo das Signal
wohin läuft, also
"s_ram_bus" (bidirketional) "adr_i2ctoRom" (vom I2C-Controller zum
ROM) und "CTRL2MOD" also Startsignal vom Controller zum Modul.

von Jürgen Schuhmacher (Gast)


Lesenswert?

über die obigen Rechtschreipfehlä bitte hinwegsähen ...

von Joerg (Gast)


Lesenswert?

Hallo,

das die Signalbenennung so nicht richtig Sinn macht gebe ich gerne zu.

Ich wollte nur moeglichst kurzen Code haben, bei dem mein Problem,
auftaucht. Konkret also, dass das Top-Modul sig1 auch '1' setzt, das
aber im Sub-Modul nie ankommt.

Ich habe keine Erfahrung mit Verilog, moechte aber ein DDR-RAM Model
benutzen... und das ist dummerweise in Verilog.

Ich habe mir das Modell jetzt so umgepatched, dass es nur reine "in"
und "out" ports benutzt, und niemals "inout", da "inout"
(scheinbar) nicht funktioniert.


Und das problem tritt schon bei dem kleinen Beispielcode oben auf....


  j.

von Jürgen Schuhmacher (Gast)


Lesenswert?

Sende mal den ModelSim output. Dann mal "assign   sig1 = 1'bZ;" raus.
Und nenne Port und Signal abweichend, damit man beide unterscheiden
kann.

von Joerg (Gast)


Angehängte Dateien:

Lesenswert?

Habe nur den Simulator von Xilinx ISE.

Screenshot anbei. Man sieht, dass das interne Signal weiter auf 'Z'
bleibt, obwohl ich erwarten wuerde dass es auf '1' geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.