Ich bastel gerade an meinem ersten komplexeren Design, wo ich ein Top-Level Modul sowie ein paar instantisierte Module habe. Diese untergeordneten Module steuern Peripherie (SRAM, Display, Taster etc.) Nun habe ich aber festgestellt, das im Pin Planner nur Signale der Top-Level Instanz angeboten werden - also mühsamer Workaround: alle Pin-Signale auf Top-Level definieren, bis nach unten durchreichen bzw. von unten nach ganz oben. Ich find das ziemlich sperrig. Wenn das SRAM-Controller Modul als einziges mit dem SRAM "redet" sollten die Ports besser auch dort bleiben und nur dort. Ist das so gewollt bei HDL, dass alle externe I/O über Top Level geht? Muss dazusagen, ich verwende die Quartus II Entwicklungsumgebung und schreibe in Verilog.
Micha schrieb: > Ist das so gewollt bei HDL, dass alle externe I/O über Top Level geht? Ja, darum heißt es ja auch Top Level. Das Top-Level bildet dein Design im Gesamten auf die Hardware ab und muss alle I/Os beinhalten. Gruß Marius
Micha schrieb: > Ist das so gewollt bei HDL, dass alle externe I/O über Top Level geht? Es ist sogar GUT, dass das so sein muss, denn sonst würde/könnte dir jedes beliebige Submodul an deinen Pins rumfroschen. Das ist schon in der Software für uCs ein arges Übel, dass man da vom untersten Sumpf aus zu jedem beliebigen Zeitpunkt an die Pins rankommt. Und wer hat so einen Fehler mit einem doppelt verwendeten Pin nicht schon mal gehabt?
Lothar Miller schrieb: >...rumfroschen... >...vom untersten Sumpf... Quak! Quak! Gestern nacht sind sie rausgekommen. :-) @ Micha (Gast) Das ist ja eben der Witz. Du hast die Möglichkeit entweder eine gestaffelte bzw. hierarchische Struktur zu erstellen, bei der eben gewisse innere Signale nach aussen nicht sichtbar sein müssen oder eine flache Struktur bei der alles nach aussen sichtbar ist (oder sein kann) oder Du musst die Signale durch alle Instanzen nach oben durchreichen. Zugegeben, das ist beim debuggen etwas mühsam, lässt sich aber mit CopyNPaste der Port-Liste doch recht schnell erledigen.
Hmm schrieb: > Zugegeben, das ist beim debuggen etwas mühsam, lässt sich aber mit > CopyNPaste der Port-Liste doch recht schnell erledigen. Verwegenere machen das, indem sie mit Records arbeiten, dann hat man alle Signale überall und immer zur Verfügung. Siehe die Links im Beitrag "Re: VHDL-Code und Modularisierung"
etwas off-topic, da es nicht direkt mit Pins zur Aussenwelt zu tun hat: Im weiteren Verlauf der Bastelei am selben Projekt wollte ich zwischen zwei Sub-Modulen einen 8 Bit breiten Bus durchreichen. Der heisst in den Portlisten beider Module identisch DataX. Der Compiler hat das auch übersetzt ohne (mehr als üblich) zu meckern. Allerdings war dann nachher bloss eine Leitung durchverbunden, nämlich das LSB. Bei genauerem Nachsehen in den Warnungen gab es so was wie "implicit wiring blablabla". Nachdem ich dann im Top Level Modul den Bus explizit definiert hatte: wire [7:0] DataX; ging es dann. Ich glaub mit Verilog muss man sich wirlich sehr sehr vorsehen, das ist fast so wie früher bei Basic, wo man Variablen nicht explizit definieren musste...
Gegen vergessene Deklarationen oder Tippfehler in der Portmap hilft bei Verilog: `default_nettype none
Das ist eine sehr gute Sache! Werd ich mir umgehend angewöhnen. Wenn ich ab und zu kleinere Sachen mit VBA programmiere hab ich mir dort auch angewöhnt, als erstes OPTION EXPLICIT zu schreiben. So ne Zwangsjacke hat manchmal auch ihre guten Seiten. In dem Lehrbuch, anhand dessen ich Verilog lerne ist dieses Feature leider nicht beschrieben (oder ich habs noch nicht gefunden).
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.