Forum: FPGA, VHDL & Co. ISE Schematic: nur ein Bit von UCF-Bus verwenden


von Maik F. (sabuty) Benutzerseite


Angehängte Dateien:

Lesenswert?

Gibt es eine Möglichkeit, in einem Xilinx ISE 11.2 Schematic von einem 
im ucf-File definierten Bus ohne das im angehängten Screenshot 
notwendige Konstrukt nur ein Bit zu verwenden?

Einen IO-Marker zu erstellen, der einfach "btn(0)" enthält, wird mit 
folgendem Fehler bestraft:
1
ERROR:DesignEntry:215 - toplevel.sch Net 'btn(0)' is an illegal name, because there is no corresponding bit bus for this bit bus member.

Ausweg wäre, die ucf-Datei mit doppelten Einträgen zu überfüllen, um die 
Busse aufzulösen, aber besonders schön fände ich das nicht.

ucf-file (digilent nexys2)
1
# Buttons
2
3
NET "btn<0>" LOC = "B18"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = BTN0
4
NET "btn<1>" LOC = "D18"; # Bank = 1, Pin name = IP/VREF_1, Type = VREF, Sch name = BTN1
5
NET "btn<2>" LOC = "E18"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = BTN2
6
NET "btn<3>" LOC = "H13"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = BTN3

Unschön an dem Konstrukt im Screenshot ist auch, dass für alle nicht 
verwendeten Bits eine Warnung generiert wird.

von Michael Sauron (Gast)


Lesenswert?

Die einfachste und schönste Lösung wäre, den ganzen Schematischen 
quatsch sein zu lassen, und auf VHDL umzusteigen. Als ich mit FPGA 
angefangen habe, habe ich auch mit den Schematics begonnen, und hab mir 
da auch nicht reinreden lassen. Ich hab ein halbes Jahr lang Bildchen 
gemalt und am ende alles in die Tonne gekloppt und VHDL gelernt. 
Eigentlich machst du dadurch den Job der Synthese, denn du beschreibst 
WIE etwas Funktioniert. VHDL beschreibt WAS Passieren soll, und das WIE 
mach die Synthese, und glaub mir, die kann das viel besser als du. 
Ausserdem werden Programme durch VHDL kompakter und übersichtlicher, 
denn was du hier schon über 2 Schematische seiten verteilt hast, passt 
in ein paar Zeilen VHDL Code:
1
process (clkgood) begin
2
   if rising_edge (clkgood) then
3
      conv_help <= btn(0);
4
      conv_start <= conv_help;
5
   end if;
6
end process;

Hat Ausserdem noch den vorteil, von Xilinx unabhängig zu sein.

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Ich verwende die Schematics nur, um meine VHDL-Dateien untereinander und 
mit der Außenwelt zu verbinden. Aus diesen Verbindungs-Schematics wird 
ja auch nur wieder VHDL erzeugt, das dann für die Synthese verwendet 
wird. Das asyncinput im obigen Screenshot ist ja auch nur eine 
VHDL-Datei mit dazu erzeugtem Symbol.

Die Schematics nehmen einem meiner Meinung nach sehr viel idiotische 
Arbeit ab. Das "Problem", das ich hier habe, ist mir das allemal wert, 
nicht seitenweise VHDL-Code zur Komponenten-Verdrahtung schreiben zu 
müssen.

Als Übergangslösung habe ich mir nun eben Netze wie led0 und btn0 
zusätzlich mit in das ucf-file aufgenommen.

von Christian R. (supachris)


Lesenswert?

Wenn es hilft, kannst du diesen Bus-"Abzweig" auch weglassen. Den Bus 
irgendwohin zeichnen und dann an dein Modul nur eine Leitung mit BTN(0) 
z.B. bezeichnet. Das klappt auch und machts etwas übersichtlicher.

Allerdings beschreibe ich das Top-Level auch mit VHDL, da kann man 
schnell mal was austauschen. Und die ISE liefert die passenden 
Instanziierungs-Volagen ja sowieso zu den Modulen. Mit Copy Paste ist 
man da schnell am Ziel.

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Christian R. schrieb:
> Wenn es hilft, kannst du diesen Bus-"Abzweig" auch weglassen. Den Bus
> irgendwohin zeichnen und dann an dein Modul nur eine Leitung mit BTN(0)
> z.B. bezeichnet. Das klappt auch und machts etwas übersichtlicher.

Danke :)

Diese Busse in Verbindung mit vorgegebenen ucf-Files machen mich langsam 
sowieso verrückt. Da man selten alle Pins verwendet, schaltet man ja die 
Option ein, das nicht erfüllte LOC-Constraints nur noch eine Warnung und 
keinen Error mehr erzeugen. Dadurch bin ich allerdings am Wochenende in 
die Falle getappt: Auf meinem Digilent Nexys2 gibt es einen MemAdr-Bus, 
der 23 Bit breit ist und clevererweise als MemAdr(23:1) definiert ist. 
Auch in den Schaltplänen vom Board ist das konsequent so weitergeführt. 
Wenn man allerdings nur mal schnell etwas ausprobieren will und dann 
MemAdr(23:0) verwendet... ihr ahnt, wo das hinführt. Irgendwo in den 158 
anderen Warnungen bezüglich der nicht erfüllten constraints war nun eben 
noch einer bezüglich MemAdr(0) ;)

von Christian R. (supachris)


Lesenswert?

Maik F. schrieb:

> Diese Busse in Verbindung mit vorgegebenen ucf-Files machen mich langsam
> sowieso verrückt. Da man selten alle Pins verwendet, schaltet man ja die
> Option ein, das nicht erfüllte LOC-Constraints nur noch eine Warnung und
> keinen Error mehr erzeugen. Dadurch bin ich allerdings am Wochenende in
> die Falle getappt: Auf meinem Digilent Nexys2 gibt es einen MemAdr-Bus,
> der 23 Bit breit ist und clevererweise als MemAdr(23:1) definiert ist.
> Auch in den Schaltplänen vom Board ist das konsequent so weitergeführt.
> Wenn man allerdings nur mal schnell etwas ausprobieren will und dann
> MemAdr(23:0) verwendet...

Naja, das Denken nimmt dir keiner ab. Und bei einem 16-Bit Zugriff macht 
es schon Sinn, die A0 wegzulassen. Kommentier doch die nicht benötigten 
Sachen im UCF aus. ISE beherrscht doch sogar Block-Kommentare per 
Mausklick, also ist doch ganz einfach...

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Christian R. schrieb:
> Kommentier doch die nicht benötigten
> Sachen im UCF aus. ISE beherrscht doch sogar Block-Kommentare per
> Mausklick, also ist doch ganz einfach...

Das werde ich jetzt auch wieder so machen, wie am Anfang auch. Trotzdem 
könnte sich Xilinx bezüglich Usability wirklich mal etwas von Visual 
Studio oder eclipse abschauen. Bei denen beiden funktioniert immerhin 
das Mausrad, so wie es soll ;)

Nun aber genug gemeckert, danke für eure Antworten.

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.