Hallo Leute,
ich habe folgenden Code und dazu den Schaltplan im Anhang "vhdl_RW.PNG",
will aber den Schaltplan wie es im Anhang "vhdl_RW_1.PNG".
Habe einige Sachen ausprobiert, aber ohne Erfolg. Ich will quasi den
Block bis zu 32 mal verfielfachen können. Die Ports EN und DATA sollen
bei allen gleich sein, die restlichen aber nur dem jeweiligen Block
zugeordnet.
Block 1: EN, DATA, MR1, MW1, SR1, SR1
Block 2: EN, DATA, MR2, MW2, SR2, SR2
Block n: EN, DATA, MRn, MWn, SRn, SRn etc.
Eingänge und Ausgänge MR, MW, SR, SW sollen dabei jeweils [31:0] breit
sein.
Ist das überhaupt in der Art und Weise möglich? Bin über jeden Ratschlag
dankbar.
Gruß
Thomas D. schrieb:> Bin über jeden Ratschlag dankbar.
Dann gleich den ersten: bitte Formatierung verwenden.
Thomas D. schrieb:> MR: in std_logic
Da passen doch die Datentypen und Vektorbreiten nicht so richtig zum
Bild...
Ja das mit der Formatierung stimmt :) sorry dafür.
wichtig ist nur, dass irgendwie das 2.Bild entsteht. Da stimmen bei
meinen Anfänger sein bestimmt noch Einige Sachen nicht.
Cool wäre, wenn ich halt ein so ein Block erstellen und den bis zu 32
mal instanziieren könnte, aber eben, dass bei allem Blöcken der EN und
DATA Port gleichgeschaltet werden, aber die MR, MW, SR, SW Ports für
alle Blöcke mit einer Breite von [31:0] separat sind. Ich kam nur bis
dahin, dass ich die Blöcke nach Belieben vervielfachen konnte, nur aber
waren auch die MR, MW, SR und SW Ports auch mit allen Blöcken
gleichzeitig verbunden und das soll nicht sein.
Thomas D. schrieb:> Ich kam nur bis dahin, dass ich die Blöcke nach Belieben vervielfachen> konnte, nur aber waren auch die MR, MW, SR und SW Ports auch mit allen> Blöcken gleichzeitig verbunden und das soll nicht sein.
Mein Vorschlag: verdrahte einfach mal ein paar dieser Komponenten
"manuell" ohne generate Schleife.
Und wenn du dann nach 5 oder 6 oder 17 verdrahteten Komponenten die
Gemeinsamkeiten und das Fortlaufende siehst, dann ist es einfach, eine
Schleife daraus zu bilden...
Hi danke für Eure antworten:
also wenn ich Arrays mit einem selbstdefinierten Datentyp verwende,
erscheint bei mir folgender Fehler:
"mr is already declared in this region"
Und wenn ich es wie ganz oben mit den Aliases ausprobiere, sagt der mir,
dass MR kein std_logic ist.
Thomas D. schrieb:> also wenn ich Arrays mit einem selbstdefinierten Datentyp verwende,> erscheint bei mir folgender Fehler:> "mr is already declared in this region"
Das kommt vermutlich darauf an, wie du das machst. Lass doch mal
sehen. Am Besten hängst du einfach VHDL Dateien an, die das Problem in
einem Dreizeiler zusammenfassen...
Thomas D. schrieb:> @Thomas W. anbei der VHDL Code. Wahrscheinlich platziere ich es nur> falsch.>> Danke für die Hilfe!
Du wolltest doch eine Beschreibung für Bild 2. Deine Top entity in der
Datei bezieht sich aber auf Bild 1. Dort ist MR schon definiert.
Deswegen die Fehlermeldung. Laut Bild 2 gibt es aber kein Signal MR
sondern nur MR1 und MR2 als 32bit Vectoren. Soll wohl letztlich bis MR32
gehen wenn ich dein Problem richtig verstehe.
Thomas D. schrieb:> "mr is already declared in this region"
Du musst den Typ in einem eigenen VHDL-Package deklarieren. Dieses
bindest Du mit 'use' in Deinen code ein, genau wie die anderen packages
(z.B. ieee.irgendwas). Damit ist dieser Typ definiert und Du kannst ihn
in der Portdeklaration der Entity benutzen wie einen normalen Signaltyp
Einen Package habe ich nun erstellt und erfolgreich in meine eigentliche
top vhdl datei eingebunden, aber bekomme jetzt Fehlermeldungen bezüglich
des Datentypen wie im Screenshot (Anhang) zu sehen ist. Ich wüsste jetzt
auch nicht wie und was ich alles im Quelltext umändern müsste, damit es
passt.
ganz unen bei der Signalzuweisung wird es am Ende dann gar nicht mehr
passen?
SR <= (DATA and (not EN)) or (MR and EN);
Das eine ist std_logic/vector das andere ein Array. Damit wird er
sicherlich auch nicht klarkommen.
Werde es weiter ausprobieren.
Ich wünsche Euch noch einen angenehmen Feiertag
Noch nicht ganz die Lösung :)
Wenn man sich den Anhang "elaborated_design.png" anschaut, geht das
schon in die richtige Richtung. Allerdings sollte ich erwähnt haben,
dass ich letztlich aus dem Ganzen einen IP-Package für Vivado Projekte
erstellen wollte und da meckert der, weil nur std_logic oder nur
std_logic_vector Datentypen erlaubt sind. Selbstdefinierte Typen kennt
er nicht oder man kann es einpflegen, weiss an der Stelle aber nicht wie
das gehen sollte.
Nochmal genauer zu meinem Problem: Ich will ein IP-Core erstellen (siehe
instanziierung.png) die an eine bestimmte Anzahl an Modulen angebunden
werden kann. Wenn nur ein Modul daran angeschlossen wird, soll nur EN,
DATA1, MR1, MR2, SR1, SW1 als Ports erscheinen. Cool wäre, wenn man das
IP-Core direkt in Vivado durch einen Doppelklick konfigurieren könnte.
Z.B. will man nun 2 Module ans IP-Core hängen, dann solle die
Möglichkeit bestehen "2" auszuwählen und der IP-Core ändert bzw. ergänzt
seine Ports zu
EN, DATA1, MR1, MR2, SR1, SW1,
DATA2, MR2, MW2, SR2, SW2.
EN sollte bei allen gleich bleiben und alle Signale haben jeweils 32bit.