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!
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.
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).
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!
>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.)
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.
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...
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.