Forum: FPGA, VHDL & Co. Place and Route partially locked IO bus


von MW (Gast)


Lesenswert?

Hallo,

ich versuche gerade, das Beispiel zum Generieren einer eigenen IP für 
den Microblaze nachzuvollziehen.

http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/edk_ctt.pdf

(Anleitung zum EDK 11, da ich ein Spartan3e Starter Board benutze und 
dort ein Spartan3a Board verwendet wird, die neueren Anleitungen 
verwenden den AXI-Bus.)

Kurzbeschreibung:
Es gibt eine PWM-HW-IP mit 8 Ausgängen für die LEDs, im ucf so 
angegeben:
1
Net pwm_lights_0_LEDs_pin<0> LOC=F9  |  IOSTANDARD = LVCMOS33;
2
Net pwm_lights_0_LEDs_pin<1> LOC=E9  |  IOSTANDARD = LVCMOS33;
3
Net pwm_lights_0_LEDs_pin<2> LOC=D11  |  IOSTANDARD = LVCMOS33;
4
Net pwm_lights_0_LEDs_pin<3> LOC=C11  |  IOSTANDARD = LVCMOS33;
5
Net pwm_lights_0_LEDs_pin<4> LOC=F11  |  IOSTANDARD = LVCMOS33;
6
Net pwm_lights_0_LEDs_pin<5> LOC=E11  |  IOSTANDARD = LVCMOS33;
7
Net pwm_lights_0_LEDs_pin<6> LOC=E12  |  IOSTANDARD = LVCMOS33;
8
Net pwm_lights_0_LEDs_pin<7> LOC=F12  |  IOSTANDARD = LVCMOS33;

Die Synthese erstellt dann ein ncf-file, darin steht u.a.
1
Net pwm_lights_0_LEDs_pin<0> LOC=F9  |  IOSTANDARD = LVCMOS33;
2
Net pwm_lights_0_LEDs_pin<1> LOC=E9  |  IOSTANDARD = LVCMOS33;
3
Net pwm_lights_0_LEDs_pin<2> LOC=D11  |  IOSTANDARD = LVCMOS33;
4
Net pwm_lights_0_LEDs_pin<3> LOC=C11  |  IOSTANDARD = LVCMOS33;
5
Net pwm_lights_0_LEDs_pin<4> LOC=F11  |  IOSTANDARD = LVCMOS33;
6
Net pwm_lights_0_LEDs_pin<5> LOC=E11  |  IOSTANDARD = LVCMOS33;
7
Net pwm_lights_0_LEDs_pin<6> LOC=E12  |  IOSTANDARD = LVCMOS33;
8
Net pwm_lights_0_LEDs_pin<7> LOC=F12  |  IOSTANDARD = LVCMOS33;

Nach Translate+Map wird ein pcf-file erstellt, darin steht plötzlich nur 
noch
1
COMP "pwm_lights_0_LEDs_pin<0>" LOCATE = SITE "F12" LEVEL 1;

, d.h. die Pins 1 bis 7 sind weg.

Das PAR gibt dann schließlich die Fehlermeldung
1
Phase 2.7  Design Feasibility Check
2
WARNING:Place:837 - Partially locked IO Bus is found. 
3
    Following components of the bus are not locked: 
4
      Comp: pwm_lights_0_LEDs_pin<1>
5
      Comp: pwm_lights_0_LEDs_pin<2>
6
      Comp: pwm_lights_0_LEDs_pin<3>
7
      Comp: pwm_lights_0_LEDs_pin<4>
8
      Comp: pwm_lights_0_LEDs_pin<5>
9
      Comp: pwm_lights_0_LEDs_pin<6>
10
      Comp: pwm_lights_0_LEDs_pin<7>
11
12
WARNING:Place:838 - An IO Bus with more than one IO standard is found.
13
   Components associated with this bus are as follows: 
14
      Comp: pwm_lights_0_LEDs_pin<7>   IOSTANDARD = LVCMOS25
15
      Comp: pwm_lights_0_LEDs_pin<6>   IOSTANDARD = LVCMOS25
16
      Comp: pwm_lights_0_LEDs_pin<5>   IOSTANDARD = LVCMOS25
17
      Comp: pwm_lights_0_LEDs_pin<4>   IOSTANDARD = LVCMOS25
18
      Comp: pwm_lights_0_LEDs_pin<3>   IOSTANDARD = LVCMOS25
19
      Comp: pwm_lights_0_LEDs_pin<2>   IOSTANDARD = LVCMOS25
20
      Comp: pwm_lights_0_LEDs_pin<1>   IOSTANDARD = LVCMOS25
21
      Comp: pwm_lights_0_LEDs_pin<0>   IOSTANDARD = LVCMOS33
22
23
24
INFO:Place:834 - Only a subset of IOs are locked. Out of 51 IOs, 44 are locked and 7 are not locked.  The following is
25
   the list of components that are not locked.
26
   pwm_lights_0_LEDs_pin<1>    NOT LOCKED 
27
   pwm_lights_0_LEDs_pin<2>    NOT LOCKED 
28
   pwm_lights_0_LEDs_pin<3>    NOT LOCKED 
29
   pwm_lights_0_LEDs_pin<4>    NOT LOCKED 
30
   pwm_lights_0_LEDs_pin<5>    NOT LOCKED 
31
   pwm_lights_0_LEDs_pin<6>    NOT LOCKED 
32
   pwm_lights_0_LEDs_pin<7>    NOT LOCKED 
33
   Rest of the IOs are LOCKED 
34
ERROR:Place:207 - Due to SelectIO banking constraints, the IOBs in your design cannot be automatically placed.

Also ein Fehler, weil es die Pins 1 bis 7 der PWM nicht kennt und dort 
einen anderen IO-Standard nimmt.

Waum bleiben die auf der Strecke bzw. was muss ich tun, damit die aus 
der ucf korrekt weiterverarbeitet werden? Die Synthese erkennt es ja 
offenbar korrekt, erst danach läuft irgendwas schief.

Markus

von Duke Scarring (Gast)


Lesenswert?

Müssen die Pinlocations nicht ins mhs-File zu Deiner IP?

Duke

von MW (Gast)


Lesenswert?

Hallo Duke,

danke für deine Antwort.

Im mhs finde ich
1
PORT pwm_lights_0_LEDs_pin = pwm_lights_0_LEDs, DIR = O, VEC = [0:7]
2
.
3
.
4
.
5
PORT fpga_0_Buttons_4Bit_GPIO_IO_I_pin = fpga_0_Buttons_4Bit_GPIO_IO_I_pin, DIR = I, VEC = [0:3]
6
.
7
.
8
.
9
BEGIN pwm_lights
10
 PARAMETER INSTANCE = pwm_lights_0
11
 PARAMETER HW_VER = 1.00.a
12
 PARAMETER C_BASEADDR = 0xc4600000
13
 PARAMETER C_HIGHADDR = 0xc460ffff
14
 BUS_INTERFACE SPLB = mb_plb
15
 PORT LEDs = pwm_lights_0_LEDs
16
END
17
.
18
.
19
.
20
BEGIN xps_gpio
21
 PARAMETER INSTANCE = Buttons_4Bit
22
 PARAMETER C_ALL_INPUTS = 1
23
 PARAMETER C_GPIO_WIDTH = 4
24
 PARAMETER C_INTERRUPT_PRESENT = 0
25
 PARAMETER C_IS_DUAL = 0
26
 PARAMETER HW_VER = 2.00.a
27
 PARAMETER C_BASEADDR = 0x81420000
28
 PARAMETER C_HIGHADDR = 0x8142ffff
29
 BUS_INTERFACE SPLB = mb_plb
30
 PORT GPIO_IO_I = fpga_0_Buttons_4Bit_GPIO_IO_I_pin
31
END

Die Buttons habe ich zum Vergleich mit hier reingenommen, die werden 
auch bis zum PAR korrekt mitgenommen.
Meiner Meinung nach sieht das an dieser Stelle richtig aus oder?

von MW (Gast)


Lesenswert?

Leider geht es immer noch nicht. Nehme ich nur den Pin 0 (F9) ins Design 
läuft PAR durch, sobald ich Pin 1 (E9) dazunehme nicht mehr, wegen 
obigen Fehlers.

An falscher Spannung für die Bank mit E9 kann es nicht liegen, da es mit 
dem Standard-LED-Modul für den Microblaze an denselben Pins funktioniert 
und ich dieses nur ersetzt habe. Außerdem hängen F9 und E9 an derselben 
Bank. Doppelt belegt ist es auch nicht, da wie schon gesagt das 
Standardmodul nur ersetzt wurde (wie auch im Xilinx-Beispiel empfohlen).

Hat jemand das Beispiel vielleicht schonmal durchexerziert und erinnert 
sich, ob es funktioniert hat?

Nutze ISE 13.2 und das Spartan3E Starter Board.

von Duke Scarring (Gast)


Lesenswert?

Kannst Du evtl. mal die reports (als Anhang) hier reinstellen?

Duke

von MW (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe die reports angehangen. Es wird ziemlich viel über den SDRAM 
gemeckert, aber das wird es auch wenn es ohne die LEDs bzw. mit dem 
Standard-LED-Modul ohne sonstige Fehler durchläuft.

von Duke Scarring (Gast)


Lesenswert?

Hmm. Bug or Feature.
Die fehlen definitiv in der .pcf-Datei:
1
        Number of LOCed External Output IOBs     24 out of 31     77%
Kannst Du P&R testweise mal mit einer modifizieren .pcf-Datei laufen 
lassen?
Die Aufrufparameter stehen im Logfile ganz oben.

Wenn Du mir die .mhs-Datei (oder braucht man da noch mehr?) zu Verfügung 
stellst, kann ich das Ganze mit der 13.3 mal probieren.

Duke

von MW (Gast)


Lesenswert?

Hallo Duke,

danke für deine Mühe.

Man braucht noch einige andere Dateien als nur die mhs-Datei, um das 
ganze zu implementieren. Da das Gebiet Microblaze recht neu für mich 
ist, kann ich aber auch nicht genau sagen, welche. Daher würde ich 
sagen, verbuche ich es erstmal als Bug und lasse mir einen Workaround 
einfallen.

Falls jemand den Bug bestätigen kann oder eine Lösung anzubieten hat, 
kann er diese ja noch posten.

von MW (Gast)


Angehängte Dateien:

Lesenswert?

Mit der modifizierten pcf habe ich es auch getestet. Dabei "locked" er 
zwar alle IOBs, allerdings auf den falschen Pegel, so dass das auch nix 
wird (siehe Anhang).

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.