Forum: FPGA, VHDL & Co. Microblaze - pins im UCF enabled - altes geht nicht


von Tobi (Gast)


Lesenswert?

Hi zusammen

komischer Fehler und ich hab keine Dämmerung was schiefgeht.

Ich hab an meinem Microblaze einen LED bus mit 5 LEDS und einen input 
bus der 12 bit breit ist angeschlossen.

Dazu kommt dann noch ein UART.

Für die ersten Tests hab ich den UART und den input port nicht im UCF 
file aktiviert - alles klappte prima. Led liess sich anschalten.

Code siehe hier:
1
############################################################################
2
## This system.ucf file is generated by Base System Builder based on the
3
## settings in the selected Xilinx Board Definition file. Please add other
4
## user constraints to this file based on customer design specifications.
5
############################################################################
6
7
Net sys_clk_pin LOC=P52;
8
Net sys_rst_pin LOC=P2 | PULLUP;
9
## System level constraints
10
Net sys_clk_pin TNM_NET = sys_clk_pin;
11
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 20000 ps;
12
Net sys_rst_pin TIG;
13
14
## IO Devices constraints
15
16
#### Module RS232 constraints
17
18
Net fpga_0_RS232_RX_pin LOC=P78;
19
Net fpga_0_RS232_TX_pin LOC=P77 |DRIVE = 12;
20
21
#### Module LEDS constraints
22
23
Net fpga_0_LEDS_GPIO_d_out_pin<0> LOC=P130 |DRIVE = 12;
24
Net fpga_0_LEDS_GPIO_d_out_pin<1> LOC=P25 |DRIVE = 12;
25
Net fpga_0_LEDS_GPIO_d_out_pin<2> LOC=P27 |DRIVE = 12;
26
Net fpga_0_LEDS_GPIO_d_out_pin<3> LOC=P30 |DRIVE = 12;
27
Net fpga_0_LEDS_GPIO_d_out_pin<4> LOC=P1 |DRIVE = 12;
28
29
#### Module Push_Buttons constraints
30
31
#Net fpga_0_Push_Buttons_GPIO_in_pin<0> LOC=P21 | PULLDOWN;
32
#Net fpga_0_Push_Buttons_GPIO_in_pin<1> LOC=P23 | PULLDOWN;
33
#Net fpga_0_Push_Buttons_GPIO_in_pin<2> LOC=P17 | PULLDOWN;
34
#Net fpga_0_Push_Buttons_GPIO_in_pin<3> LOC=P15 | PULLDOWN;
35
#Net fpga_0_Push_Buttons_GPIO_in_pin<4> LOC=P14 | PULLDOWN;
36
#Net fpga_0_Push_Buttons_GPIO_in_pin<5> LOC=P11 | PULLDOWN;
37
#Net fpga_0_Push_Buttons_GPIO_in_pin<6> LOC=P13 | PULLDOWN;
38
#Net fpga_0_Push_Buttons_GPIO_in_pin<7> LOC=P10 | PULLDOWN;
39
#Net fpga_0_Push_Buttons_GPIO_in_pin<8> LOC=P12 | PULLDOWN;
40
#Net fpga_0_Push_Buttons_GPIO_in_pin<9> LOC=P8 | PULLDOWN;
41
#Net fpga_0_Push_Buttons_GPIO_in_pin<10> LOC=P6 | PULLDOWN;
42
#Net fpga_0_Push_Buttons_GPIO_in_pin<11> LOC=P7 | PULLDOWN;
43
44
Net adcclock LOC = P32;

Das Problem ist nun wenn ich die Pushbuttons aktiviere und genau den 
gleichen C code ausführe wie vorher (nur das UCF file geändert) geht
die LED nicht mehr an.

Es scheint so als würde der Prozessor einfrieren und ich hab keine 
Ahnung wieso? Irgendjemand eine Idee?

Tobi

von Tobi (Gast)


Lesenswert?

Nachtrag

witzigerweise läuft es wieder wenn ich die unterste Zeile 
auskommentiere.

Also
1
#Net adcclock LOC = P32;

adcclock ist ein künslich erzeugter port (also nicht via wizard) der 1 
bit breit ist und dazu dient das Clock signal was in den FPGA reingeht 
an Pad 32 wieder auszuspucken um damit den ADC zu füttern.

Aber warum macht das den Unterschied?

von Andreas (Gast)


Lesenswert?

Hallo Tobi,

wenn Du den Clock wieder herausgibst, wird das zugehörige Clocksignal 
nicht auf einer dedizierten Clockleitung geroutet sondern auf 
allgemeinen Verbindungsresourcen.
Das erzeugt im Normalfall ( Clockeingang läuft über einen GCLK-Buffer, 
bzw. DCM Ausgang geht über GCLK-Buffer weiter ) eine Fehlermeldung!
Die Tatsache das die Synthese bei Dir durchrennt, würd mich zur These 
bringen, dass die XST den Clock nicht ( in voller Länge ) über den GCLK 
nutzt.
Hast Du eine entsprechende Constraint ( cycle-constraint ) für den Clock 
angegeben?
Wenn nicht, das sofort nachholen, sonst synthetisiert der XST halt 
irgendwas er hat ja keine Ahnung das dein Clock über einen 1Mhz 
hinausgeht...
Im Anschluß dürftest Du oben beschriebene Fehlermeldung erhalten...
Wenn Du den Clock aussen wirklich benötigst, kannst Du Dir mit einem 
DDR-Flipflop am Ausgang behelfen...

Gruss

Andreas

von Tobi (Gast)


Lesenswert?

Hi Andreas

danke für den Tip. Ich hab was Fehlermeldungen angeht wirklich fast 
alles ausgeschaltet.

Werde es mal wie von dir beschrieben mit dem FF probieren.

Tobi

von Andreas (Gast)


Lesenswert?

Hallo Tobi,

da in deinem Design auf dem Eingangspin ein Clock-constraint liegt, 
würde mich interessieren ob der Microblaze eine DCM istantiiert.
Evtl. war die Synthese nicht in der Lage die Eingangsclockconstraint auf 
den Ausgang zu übertragen ( evtl. wg. MB-Blackbox ).
Du könntest deshalb nochmals eine Clockconstraint auf den Ausgangstakt 
der DCM geben. Ggfls. must Du im FPGA-Editor das entsprechende Netz 
suchen.

Gruss

Andreas

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.