Hallo ihr Experten, in einem Design habe ich im Toplevel verschiedene Busse (Adressbus / Datenbus / usw.) die im Toplevel jeweils als std_logic_vector zusammengefasst als IN oder OUT oder INOUT deklariert sind. Bei IN sowie INOUT sind diese im LPF-File (Constraint-File für Lattice Diamond) zusätzlich mit PULLUPs und einer Eingangshysterese versehen, bei OUT geht das nicht, da das FPGA diese Pins ja "immer" treibt. Soweit funktioniert dies auch einwandfrei. Im Projekt gab es nun eine Änderung, dass in einem Bus der bisher komplett INOUT war, nun eine Leitung nur noch als IN und eine nur noch als OUT verwendet wird, die restlichen Signale bleiben weiterhin INOUT. Da ich die Pinbelegungen als busxyz : INOUT std_logic_vector(20 downto 0); deklariert habe nun die Frage, wie kann ich dies dem Synthesetool am geschicktesten klar machen, dass z.B. busxyz(5) nur noch als IN und busxyz(7) nur noch als OUT betrieben werden, der Rest aber INOUT bleibt? -> Müsste ich nicht im Toplevel angeben, welcher Bereich des Busses als IN, welche als OUT und welcher als INOUT verwendet wird? Falls ja, wie muss dies genau erfolgen, denn ich habe ein paar Sachen ausprobiert - leider hatte die Synthese bzw. spätstens der Mapper immer etwas zu meckern. Hintergrund: ------------ Obwohl ich die restlichen Signale als INOUT verwende, erscheint folgende Fehlermeldung für die restlichen INOUT-Signale, obwohl alle mit einem internen PULLUP versehen sein sollten: WARNING - Invalid PULLMODE assignment of 'UP' for output PIO buffer 'busxyz_pad[0]' (for busxyz[0] port). PULLMODE cannot be assigned to output buffers and will be ignored. Wäre echt klasse, wenn mir einer von euch einen Tipp geben kann ;-)
Michi schrieb: > erscheint folgende Fehlermeldung... > WARNING Naja, ein Fehler ist das ja nun nicht. Und ein Design ohne Warnung ist schwer zu schaffen (zumindest, wenn das Design über den obligatorischen Dreizeiler rausgeht). Eine elegante Lösung für dein Problem kenne ich nicht. Ich könnte mir bestenfalls vorstellen, du definierst den Bus als einzelne Signale (oder Signalblöcke) und fasst die im Toplevel zu einem einzigen Vektor zusammen... Du könntest aber im Constraint-File nur den Signalen, die auch Eingang sein können, Pullups zuweisen. Denn das Problem kommt ja nicht aus der VHDL Beschreibung, sondern tritt erst später beim P&R auf...
:
Bearbeitet durch Moderator
Wieso ist es nicht möglich, die Ein-Ausgänge individuell zu beschreiben, was pulls angeht? Wenn es da Daerivate gibt, könnte man es gfs von HDL aus per generate steuern, was gelten soll.
Michi schrieb: > Da ich die Pinbelegungen als > busxyz : INOUT std_logic_vector(20 downto 0); Ich glaube, Du solltest Dir überlegen, die einzelnen Signal vom Bus je nach funktion zu benennen, also nicht
1 | busxyz : INOUT std_logic_vector(20 downto 0); |
sondern
1 | busxyz_clk : OUT std_logic; |
2 | busxyz_rd : IN std_logic; |
3 | busxyz_wr : OUT std_logic; |
4 | busxyz_data : INOUT std_logic_vector(15 downto 0); |
Das ist einfach viel lesbarer. Wenn einmal jemand anderes Dein Code zu verstehen versucht(oder Du in 2 Jahren), muss er sich immer merken, dass busxyz[5] das RD Signal ist/war. Das löst dann auch Dein IN/INOUT Problem.
Herzlichen Dank für eure schnellen und qualifizierten Rückmeldungen. Ich splitte den Bus jetzt auf, ein Bereich mit nur IN / ein Bereich mit nur OUT / ein Bereich mit INOUT. -> Ist zwar nicht meine Wunschlösung, aber es funktioniert und der Mapper meckert nicht mehr rum, sondern lässt das Projekt ohne Probleme weiter bauen :-) Habe die Variante wie von Klaus F beschrieben umgesetzt > Ich glaube, Du solltest Dir überlegen, die einzelnen Signal vom Bus je > nach funktion zu benennen, also nicht busxyz : INOUT > std_logic_vector(20 downto 0); > sondern busxyz_clk : OUT std_logic; > busxyz_rd : IN std_logic; > busxyz_wr : OUT std_logic; > busxyz_data : INOUT std_logic_vector(15 downto 0);
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.