www.mikrocontroller.net

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


Autor: Boris M. (borism)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Boris M. (borism)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe doch glatt den Anhang vergessen...

Autor: Satt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
   sig <= signed(DIP_Switches);  -- sig ist HILFS-Variable da man STD_LOGIC_VECTOR nicht direkt in INTEGER wandeln kann 
   int <= to_integer(sig);    -- int ist der Wert der gewandelten DIP_Switches
mach das doch einfach so:
   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).

Autor: Boris M. (borism)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Boris M. (borism)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.)

Autor: Boris M. (borism)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und hier das Untermodul

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Boris M. (borism)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.