Hallo Leute, im Moment aergere ich mich gerade ueber ein spezielles Verhalten von Modelsim (kostenlose Altera-Version). Als Sprachstandard ist Systemverilog eingestellt. gegeben sei nun folgender Code: modul meins ( input clk, input eingang, input ausgang ); reg ff; always @(posedge clk) begin ff <= eingang; end assign ausgang = ff; endmodule Wie man sieht, ist der port ausgang versehentlich als input deklariert. Ausserhalb des moduls wird er aber zum Treiben weiterer Logik verwendet und der code innerhalb des moduls meins treibt die Leitung ja auch aus dem always block heraus. Trotz dieses Fehlers uebergeht Modelsim dies stillschweigend beim Compilieren, Laden der Simulation und zur Laufzeit der Simulation. Es macht ueberhaupt keinen Unterschied, ob bei ausgang ein input oder ein output davor steht. Nirgendwo kommt die kleinste warning, geschweige denn ein error. Ich frage mich jetzt, warum Modelsim das so klaglos hinnimmt. Fuer mich ist der Code syntaktisch falsch, denn ein input Signal hat ja per Definition von aussen einen Treiber und darf intern nicht mehr getrieben werden. Oder ist der, als eher esoterisch anzusehende Fall, dass man ja aussen auch 1'bz anschliessen kann und man in diesem Fall innen ja treiben darf dafuer verantwortlich, dass da keine Meldungen kommen? Aber selbst dann duerfte das Signal doch nicht nach aussen durchgereicht werden, wenn die Signalrichtung nicht stimmt. Und die naechste Frage: gibt es ein setting in Modelsim, welches fuer diesen Fall eine Warning oder einen Fehler erzeugt?
:
Bearbeitet durch User
Andi M. schrieb: > Ich frage mich jetzt, warum Modelsim das so klaglos hinnimmt. Vermutlich, weil es lt. verilog-Standard erlaubt ist. Der Gegensatz dazu ist VHDL, wo es nicht erlaubt ist von einem Ausgang zu lesen. Mit Deinem Beispiel hätte man die folgende Meldung bekommen:
1 | ** Error: test_write_input.vhd(15): Cannot drive signal 'data' of mode IN. |
> Und die naechste Frage: gibt es ein setting in Modelsim, welches fuer > diesen Fall eine Warning oder einen Fehler erzeugt? Vielleicht. Schau Dir doch mal die Kommandozeilenparameter vom Compiler an:
1 | vlog -h |
Sind auch nur 360 Zeilen Text... ;-) Duke
Schau mal bei den ModelSIM Einstellungen. Da gibt es ein SystemVerilog-Tab gfs kann man da wie bei VHDL auch einen Synthesis Check anklicken.
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.