Forum: FPGA, VHDL & Co. Verilog Code in VHDL umschreiben


von unwissender_Neuling (Gast)


Lesenswert?

Hallo,

bin gerade dabei ein Programm welches in Verilog geschrieben wurde in 
VHDL umzuschreiben und bin an eine Stelle gerade die ich nicht wirklich 
verstehe.

Verilog Code:

>>IBUF_LVCMOS25 SW0 (.I(dip_switches[0]), .O(dipsw[0]));
>>-- synthesis attribute LOC of SW0 is R4;

das ist ja ein sogenannter "Input buffer" und wenn ich im user guide 
nachschaue müsste ich diese Zeilen so übersetzen:

component IBUF
-- synthesis translate_off
generic (
IOSTANDARD: bit_vector := "LVTTL");
-- synthesis translate_on
port (O : out STD_ULOGIC;
I : in STD_ULOGIC);
end component;

attribute IOSTANDARD : string;
attribute IOSTANDARD of IBUF_LVCMOS25 SW0 : label is "LVTTL";

IBUF_LVCMOS25 SWO : IBUF
-- synthesis translate_off
generic map (
IOSTANDARD => “string_value”)
-- synthesis translate_on
port map (O => dipsw(0),
          I => dip_switches(0));

Erstmal verwundert mich der Zeilenunterschied der beiden Sprachen und 
dann ist ja das synthese attribute in Verilog R4 und kein string. Ist 
damit ein PIN LOC eines PE Models gemeint?

Wie muss ich dann diesen Teil umschreiben.

Danke

unwissender_neuling

von Klaus Falser (Gast)


Lesenswert?

Am besten Du schreibst überhaupt nichts um, sondern läßt es weg.
Das einfügen von Input- und Output buffern kann man getrost dem 
Synthese-tool überlassen.
Im UCF-File legst Du dann den I/O Standard und die Pin-Zuweisung fest.
Übrigends deutet IBUF_LVCMOS25 wohl eher darauf hin, daß der gewünschte 
I/O Standard LVCMOS mit 2.5 V ist und nicht LVTTL wie Du geschrieben 
hast.

Grüße
Klaus

von unwissender_Neuling (Gast)


Angehängte Dateien:

Lesenswert?

Danke erstmal für die Antwort,

allerdings ist die nicht so wie erhofft.

Weglassen find ich irgendwie komisch, der Programmierer hat sich ja was 
dabei gedacht diesen Teil in den Quelltext mit hineinzuschreiben.

Außerdem könnte ich ja dann die hälfte des Quelltextes im Anhang 
weglassen.

Gibt es denn nicht noch andere Möglichkeiten oder kann man general alle 
In- und Output buffer weglassen?

>>daß der gewünschte I/O Standard LVCMOS mit 2.5 V ist und nicht LVTTL wie Du 
>>geschrieben hast.

das hab ich auch festgestellt, darum hatte ich ja gefragt wie die 
entsprechenden Zeilen oben umgeschrieben werden müssten.

Gruss

unwissender_Neuling

von Klaus Falser (Gast)


Lesenswert?

Nun, wenn eine Antwort immer gewünscht ausfallen würde, bräuchte man 
nicht zu fragen.

Es gibt ein paar Argumente, die dafür sprechen, I/O Buffer nicht manuell 
zu instanzieren :
- Der Compiler macht es automatisch, man spart sich Arbeit
- Man kann das Design besser wiederverwerten, z.B. wenn man die aktuelle 
Top Level Einheit als Untereinheit eines größeren Designs verwendet. 
Dann sind die Signale keine I/O's mehr und die IBUFs und OBUFs müssen 
entfernt werden
- Man vermischt Funktion und Implementierung, wenn man in VHDL (oder 
Verilog) schon die Pin-Zuweisung oder den I/O Standard festlegt. 
Üblicherweise beschreibt man daher mit VHDL die Funktion und legt die 
Implementierungsdetails im UCF-File fest.

In deinem Fall macht das Top-Level anscheinend auch nicht viels anderes, 
als um das effektive Design herum die I/O bufs zu instanzieren, etwas 
das man im  UCF ebenso machen könnte und sollte.
Eine Ausnahme sind die verwendeten LVDS Ports, diese müssen meines 
Wissens instanziert werden, weil aus einem digital Signal zwei 
Port-Signale werden.
Aus diesem Grund braucht es wahrscheinlich auch diese Top Level.

Mich wundert nur,
- wenn Du dich genügend auskennst um zu erkennen was IOSTANDARD ist und 
daß  LVCMOS25 nicht LVTTL ist
- wenn Du genügend gestöbert hast um herauszufinden wie man einen IBUF 
instanziert,
dann ist es doch eigentlich nur ein kleiner Schritt um zu ahnen und in 
der Dokumentation nachzusehen
- daß man wahrscheinlich das Generic IOSTANDARD auf einen string mit dem 
Wert "LVCMOS25" (oder so ähnlich) setzen muß
- oder daß man das attribute IOSTANDARD auf "LVCMOS25" anstatt auf 
"LVTTL"  setzen muß

Grüße
Klaus


von unwissender_Neuling (Gast)


Lesenswert?

Da ich in der ganzen VHDL bzw. Verilog Sache noch ein Neuling bin, denke 
ich wahrscheinlich zu kompliziert und vermute hinter allen immer etwas 
aufwendiges.

Aber wenn du sagst das"LVTTL" einfach durch "LVCMOS25" ersetzt werden 
kann bzw. der Rest aus genannten Gründen vereinfacht werden kann, werde 
ich es einmal versuchen.

Danke & eine guten Rutsch

unwissender_Neuling

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.