Forum: FPGA, VHDL & Co. Modelsim: module input als output benutzt aber keine Warning.


von Andi M. (andi6510) Benutzerseite


Lesenswert?

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
von Duke Scarring (Gast)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.