Forum: FPGA, VHDL & Co. VHDL-Code strukturieren (Untermodule) Aber WIE?


von Boris M. (borism)


Lesenswert?

Hallo,
ich arbeite mich gerade in VHDL ein. Dazu habe ich ein Board von Xilinx 
(Spartan-3A DSP 1800A). Jetzt habe ich ein erstes Programm in VHDL 
geschrieben (siehe Anhang). Jetzt möchte ich den Taktteiler als 
Untermodul (eigene Entity) in das Projekt einfügen. (Hört sich für mich 
als Einsteiger erstmal einfach an - jedoch habe ich nach einiger Zeit 
rausgefunden, dass das gar nicht so einfach ist...) Ich benutze die ISE 
10.1. Jetzt habe ich als erstes im Fenster Sources mit Rechtsklick auf 
mein toplevel geklickt und da dann eine neue Source erstellt (genannt 
habe ich die Taktteiler) mit zwei Eingängen (Clock und gewünschte 
Frequenz) und dem Ausgang (bis wohin gezählt werden muss). (Ob das 
richtig ist kann ich leider nicht sagen. Hier wollte ich dann den Code 
meines Taktteilers einfügen - aber wie verbinde ich die neue Source 
(Takteiler) mit meinem toplevel?
Da ich an dem Beispiel viel lernen will, muss (oder besser soll) mir 
hier nicht der Code vorgekaut werden. Aber ich kann mit der 
Such-Funktion hier im Forum leider nichts passendes finden. Meine Suche 
mit google blieb leider auch ohne Erfolg:(
Falls jemand eine kurze Erklärung parat hat oder einen Link kennt, würde 
ich mich sehr darüber freuen!
Gruß Boris
P.S.: Es ist schon ärgerlich, dass es bei uns an der FH keinen VHDL-Kurs 
gab!

von Boris M. (borism)


Angehängte Dateien:

Lesenswert?

Habe doch glatt den Anhang vergessen...

von Satt (Gast)


Lesenswert?

Geh in der ISE auf deinen Taktteiler, und dann nimm bei "Design 
Utilities" den Punkt "View HDL Instantiation Template".
Damit kriegst du den Text, den du dann in dein Top-Level einfügen musst.
Evtl. musst du da noch in den Einstellungen von Verilog auf VHDL 
umstellen.
Den Component-Abschnitt fügst du dann bei der architecture ein, und den 
Inst...-Teil nach "Begin" in der Top-Ebene. Dann musst du nur noch die 
Ein- und Ausgänge mit entsprechenden Signalen aus der Top-Ebene 
verbinden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du machst ein zweites VHDL-Modul mit einer eigenen Entity und bindest 
das dan als component in dein top-Level Modul ein.

Ein Tipp:
1
   sig <= signed(DIP_Switches);  -- sig ist HILFS-Variable da man STD_LOGIC_VECTOR nicht direkt in INTEGER wandeln kann 
2
   int <= to_integer(sig);    -- int ist der Wert der gewandelten DIP_Switches
mach das doch einfach so:
1
   int <= to_integer(signed(DIP_Switches));    -- int ist der Wert der gewandelten DIP_Switches

> Es ist schon ärgerlich, dass es bei uns an der FH keinen VHDL-Kurs gab!
Kauf dir Reichardt/Schwarz VHDL-Synthese, das Buch ist zum anfangen und 
nachschlagen ideal (nach wie vor).

von Boris M. (borism)


Lesenswert?

Danke für eure schnellen Antworten - werde mich gleich mal an die Sache 
ran machen:)

>Kauf dir Reichardt/Schwarz VHDL-Synthese, das Buch ist zum anfangen und
>nachschlagen ideal (nach wie vor).
Das habe ich mir am Wochenende bei Amazon bestellt - aber trotzdem DANKE 
für den Tip!

von Boris M. (borism)


Angehängte Dateien:

Lesenswert?

>Den Component-Abschnitt fügst du dann bei der architecture ein, und den
>Inst...-Teil nach "Begin" in der Top-Ebene. Dann musst du nur noch die
>Ein- und Ausgänge mit entsprechenden Signalen aus der Top-Ebene
>verbinden.

Das habe ich gemacht - aber wie rufe ich jetzt mein Untermodul auf?
Oder habe ich mal wieder etwas Grundsätzlich falsch gemacht?

Habe mal mein toplevel und mein Taktteiler als pdf angehängt (ich glaube 
das ist übersichtlicher als eine Textdatei).

PS: Ich will ja nicht nerven, habe aber leider hier niemanden der mir 
das erklären kann. (Mein Kollege der sonst VHDL macht ist leider die 
nächsten Wochen krank und ich muss mich jetzt alleine einarbeiten.)

von Boris M. (borism)



Lesenswert?

und hier das Untermodul

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Eine Frage:
Hat das Ganze (in einem Modul) schon mal funktioniert und du willst es 
jetzt aufteilen?
Oder meinst du, durch das Aufteilen wird es dann schon funktionieren?

Das Modul Taktteiler hat seinen Namen nicht so richtig verdient. Ein 
besserer Name wäre "TeilerwertBerechnen"  ;-)
Ein Taktteiler im landläufigen Sinn hat einen Eingangstakt und einen 
daraus abgeleiteten Ausgangstakt.

Der Ansatz an sich ist richtig:
du hast ein VHDL-Modul, bindest das als component mit ein, und erzeugst 
eine Instanz. Im ISE-Projekt mußt du dann noch "Add Source..." machen, 
damit das Modul überhaupt mit übersetzt wird.


Ein Tipp:
mach erst mal ein "Hello World", dessen Blinkfrequenz (irgendwie) mit 
den DIP-Schaltern umschaltbar ist.

inout im Entity-Port sollte nur für wirkliche bidirektionale Signale 
(z.B. Datenbus) verwendet werden.

> Habe mal mein toplevel und mein Taktteiler als pdf angehängt (ich glaube
> das ist übersichtlicher als eine Textdatei).
Häng den VHDL-Sourcecode als *.vhd Datei an. Dann wird der zur Anzeige 
gleich richtig formatiert.

von Boris M. (borism)


Lesenswert?

Hallo Lothar,

ich danke Dir mal wieder für deine schnelle Antwort.

>Hat das Ganze (in einem Modul) schon mal funktioniert und du willst es
>jetzt aufteilen?
Ja, das ganze funktioniert in einem Modul wunderbar. Ich soll in dieser 
Übung lernen wie man z.B. in großen Projekten Untermodule schreibt und 
auch einbindet.
Ich werde den "Taktteiler" mal überarbeiten, dass es einen "richtigen" 
gibt mit einem Ein- und einem Ausgang.

>Häng den VHDL-Sourcecode als *.vhd Datei an. Dann wird der zur Anzeige
>gleich richtig formatiert.
Werde das demnächst so machen...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ich werde den "Taktteiler" mal überarbeiten, dass es einen "richtigen"
> gibt mit einem Ein- und einem Ausgang.
Nur Eingänge und Ausgänge, also definierte Richtungen, das ist der 
korrekte Ansatz.

Irgendwelche Parameter, die sich nicht zur Laufzeit ändern (z.B. die 
Taktfrequenz des Systems, Busbreiten...), übergibt man in einer 
Generic-Map (ähnlich wie die Signale in einer Port-Map).

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.