mikrocontroller.net

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


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
############################################################################
## This system.ucf file is generated by Base System Builder based on the
## settings in the selected Xilinx Board Definition file. Please add other
## user constraints to this file based on customer design specifications.
############################################################################

Net sys_clk_pin LOC=P52;
Net sys_rst_pin LOC=P2 | PULLUP;
## System level constraints
Net sys_clk_pin TNM_NET = sys_clk_pin;
TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 20000 ps;
Net sys_rst_pin TIG;

## IO Devices constraints

#### Module RS232 constraints

Net fpga_0_RS232_RX_pin LOC=P78;
Net fpga_0_RS232_TX_pin LOC=P77 |DRIVE = 12;

#### Module LEDS constraints

Net fpga_0_LEDS_GPIO_d_out_pin<0> LOC=P130 |DRIVE = 12;
Net fpga_0_LEDS_GPIO_d_out_pin<1> LOC=P25 |DRIVE = 12;
Net fpga_0_LEDS_GPIO_d_out_pin<2> LOC=P27 |DRIVE = 12;
Net fpga_0_LEDS_GPIO_d_out_pin<3> LOC=P30 |DRIVE = 12;
Net fpga_0_LEDS_GPIO_d_out_pin<4> LOC=P1 |DRIVE = 12;

#### Module Push_Buttons constraints

#Net fpga_0_Push_Buttons_GPIO_in_pin<0> LOC=P21 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<1> LOC=P23 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<2> LOC=P17 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<3> LOC=P15 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<4> LOC=P14 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<5> LOC=P11 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<6> LOC=P13 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<7> LOC=P10 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<8> LOC=P12 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<9> LOC=P8 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<10> LOC=P6 | PULLDOWN;
#Net fpga_0_Push_Buttons_GPIO_in_pin<11> LOC=P7 | PULLDOWN;

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag

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

Also
#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?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.