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