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?
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?
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.
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.
Sende mal den ModelSim output. Dann mal "assign sig1 = 1'bZ;" raus. Und nenne Port und Signal abweichend, damit man beide unterscheiden kann.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.