mixed VHDL und Verilog

Gast #418376
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?
Angehängte Dateien:
Gast #418377
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?
Gast #418378
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.
Gast #418380
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.
Gast #418381
Sende mal den ModelSim output. Dann mal "assign   sig1 = 1'bZ;" raus.
Und nenne Port und Signal abweichend, damit man beide unterscheiden
kann.
Gast #418382
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.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.