Forum: FPGA, VHDL & Co. Muss man Pin-Signale immer bis zur Tol-Level Instanz durchfädeln?


von Micha (Gast)


Lesenswert?

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.

von Marius W. (mw1987)


Lesenswert?

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

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


Lesenswert?

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?

von Hmm (Gast)


Lesenswert?

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.

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


Lesenswert?

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"

von Micha (Gast)


Lesenswert?

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...

von bko (Gast)


Lesenswert?

Gegen vergessene Deklarationen oder Tippfehler in der Portmap hilft
bei Verilog:

`default_nettype none

von Micha (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.