Hallo guten Tag, habe eine große entity. Wollte ihre Ein - und Ausgangsports mit Signalen in meiner Testbench verbinden. Dafür möchte ich Signale anlegen, aber es sind viel zu viele um das per Hand zu schreiben. Wie macht ihr das in so einem Fall? Danke
Schwummrig2000 schrieb: > Wie macht ihr das in so einem Fall? Emacs Vhdl-mode: erst VHDL->Port->Copy dann VHDL->Port->Paste as testbench Ohne man nimmt einen anderen Editor der einen Macrorekorder hat und bastelt sich eine Umwandlung entity zu signel decl. resp port map. Oder man arbeitet im Spalten/Block/rectangle(Emacs-Bezeichnung) mode (das kann der notepad++). Merke: wer den Editor nicht ehrt ist das Quelltextschreiben nicht wert.
Schwummrig2000 schrieb: > Wie macht ihr das in so einem Fall? Copy + Paste + Block edit mode + ordentliche Formatierung
Innerhalb des Designs kann man schön VHDL-records verwenden. Auf dem top-Level verwende ich aber nur einfache Signale (std_logic) und Vektoren (std_logic_vector). Ja, bei größeren FPGA zieht sich die top-Level entity dann über mehrere 100 Zeilen Code... Duke
Ich habe mir ein Excel gebaut, das anhand der Signalart und -Typ automatisch das "downto" macht, In/Out und einiges mehr und auf Folgeblättern einen Wrapper ausgibt, sowie Vorlagen zur Instanzierung von Komponenten und Mappern mit Signalen zum verbinden nach Standarddeklaration. ab da geht es Copy und Paste, je nachdem, was man jeweils braucht.
Jürgen S. schrieb: > Ich habe mir ein Excel gebaut ja hab ich gestern auch kurz mal getestet. Wusste aber nicht, ob man das so macht.
Schwummrig2000 schrieb: > ja hab ich gestern auch kurz mal getestet. Wusste aber nicht, ob man das > so macht. Ich mache das so. Der Vorteil ist, man hat gleich eine Doku in den Fällen, in denen mehr Doku benötigt wird, als üblich. Man kann auch gut ähnliche Komponenten leichter duplizieren. Excel bietet genau für solche von Duke angesprochenen Fälle die Möglichkeit, Nummerierung und Benamung von sehr ähnlichen redundanten Ports zu automatisieren. Damit kriegt man auch Strukturen hin, die mit Generate nicht mehr abzubilden sind.
Machen kann man vieles. Wir hatten mal einen Guru, der hat aus einem Skript Schnittstellen und Datenstrukturen generiert. Damit war Software, Hardware und Dokumentation in sich konsistent. Man muß halt herausfinden, ab welcher Projektgröße (bezogen auf Mitarbeiter, Lines of code oder Komplexität) sich das lohnt. Duke
Man kann doch sicher schnell ein Script schreiben, das die Richtungsangaben (in, out, inout, buffer) entfernt und vor jedes Signal ein 'signal' einsetzt. Bisher bin ich aber auch gut mit dem Rechteckauswahlmodus ausgekommen. Bei mir waren es aber bisher auch 'nur' etwa 150 Signale im Port. Schlimmer finde ich da die Zuweisung in der Port Map, weil man den Typ des Signals entfernen und dann den Zuweisungspfeil und den jeweiligen Signalnamen anfügen muss. Das kann je nach Formatierung etwas nervig sein, geht aber auch.
Notepad hat doch einen Block-Edit Modus mit dem man direkt mehrzeilig schreiben kann. Damit lassen sich auch mappings leicht modifizieren. Das Wichtige dabei ist, dass alle Einrückungen stimmen und die Signalnamen so sind dass sie leicht zu kopieren und zu editieren sind. Aber bringe das mal allen Entwicklern bei.
Dussel schrieb: > Man kann doch sicher schnell ein Script schreiben, das die > Richtungsangaben (in, out, inout, buffer) entfernt und vor jedes Signal > ein 'signal' einsetzt. Man kann auch gleich eine gut wiederverwertbare HDL einsetzen, bei der die Interfaces wie bei VHDL-2019 genau einmal definiert werden, beispielsweise MyHDL oder amaranth. Wenn man natürlich mit externen Primitiven arbeiten muss, die jeden Pin einzeln aufführen, wird's spezifisch, d.h. man muss sich eigene Klassen ableiten. Lohnt nur für grössere FPGA-Libraries. Wenn ich solche copy&paste-Aktionen noch machen muss, dann mit vim. Ctrl-V, Pfeiltasten, yank, paste. Schneller geht's nicht, aber man muss sich mit vim anfreuden.
Fitzebutze schrieb: > Dussel schrieb: >> Man kann doch sicher schnell ein Script schreiben, das die >> Richtungsangaben (in, out, inout, buffer) entfernt und vor jedes Signal >> ein 'signal' einsetzt. > > Man kann auch gleich eine gut wiederverwertbare HDL einsetzen, bei der > die Interfaces wie bei VHDL-2019 genau einmal definiert werden Zeig mal ein Beispiel, wie das in VHDL(-2019) aussieht.
Sep 23, 2021 Xilinx currently does not support VHDL-2019. Xilinx might consider adding VHDL-2019 support based on customer demand in future. aus: https://support.xilinx.com/s/article/76460?language=en_US
Dussel schrieb: > Zeig mal ein Beispiel, wie das in VHDL(-2019) aussieht. Da steht "*wie bei* VHDL-2019". Und wie fpgakuechle schon schrieb: Das heisst eigentlich, dass es Vivado in 10 Jahren noch nicht unterstützt. Deswegen macht es keinen Sinn, auf VHDL-2019 als Standard näher einzugehen. In Python definiert man ein solches Interface einfach per Klasse:
1 | class Bla: |
2 | def __init__(self, param): |
3 | self.p = param |
4 | self.a = Signal(bool()) |
5 | self.b = Signal(intbv()[8:]) |
Wie das Interface in der resultierenden Form (z.B. VHDL als record, oder ausgerollt) umgesetzt wird und welche Namen dafür vergeben werden, bestimmt ein optionaler Dekorator oder ist Sache des Target-Konverters. Aber wir weichen vom Luxusproblem ab, und man sollte sich gut überlegen, welche Baustelle man nun wirklich aufmachen will.
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.