Forum: FPGA, VHDL & Co. [MicroBlaze] Uart-Problem


von Thomas (Gast)


Lesenswert?

Hallo Zusammen,

ich spiele gerade mit dem Entwicklungsboard SP601 herum und sammle erste 
Erfahrungen mit dem FPGA.

Ein Projekt war es einen MicroBlaze mit einfachem HelloWorld Programm 
auf dem FPGA zu bringen. Dabei wurde über einen Uart (uartlite) etwas an 
die Konsole geschrieben. Ebenfalls sollten ein paar LEDs blinken 
(gesteuert vom MicroBlaze).

Das hat soweit alles wunderbar funktioniert.

Nun habe ich ein weiteres Projekt, nur dem MicroBlaze wurde ein 
EthernetCore hinzugefügt (ethernetLite). MicroBlaze macht jedoch nichts 
weiter mit diesem Core - der Quellcode ist immer noch der gleiche wie 
beim vorherigem Projekt.

Allerdings funktioniert nun die Uart-Schnittstelle nicht mehr, die LEDs 
blinken jedoch weiterhin. Der MicroBlaze läuft also definitiv. Ich kann 
im SDK auch den Quellcode vom neuen Projekt (der im Grunde wie der alte 
ist) auch auf die alte Hardware beziehen (unter Xilinx Tools/Program 
FPGA), und dann läuft alles (LEDs+Uart).

Nu rmit der neuen Hardware läuft der Uart nicht. Ich gehe davon aus, 
dass es kein Problem in der Konfiguration der Software gibt (SDK). Habt 
ihr eventuell eine Vermutung, woran es liegen könnte?

Hier mal die Beschreibungen der beiden Projekte:

Altes, funktionierendes Projekt (LEDS+Uart läuft):
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
library UNISIM;
5
use UNISIM.VCOMPONENTS.ALL;
6
7
entity MicroBlaze_top is
8
  port (
9
    USB_1_TX : out std_logic;
10
    USB_1_RX : in std_logic;
11
    CPU_RESET : in std_logic;
12
    GPIO_BUTTON : in std_logic_vector(3 downto 0);
13
    GPIO_LED : out std_logic_vector(3 downto 0);
14
    SYSCLK_P : in std_logic;
15
    SYSCLK_N : in std_logic
16
  );
17
end MicroBlaze_top;
18
19
architecture STRUCTURE of MicroBlaze_top is
20
21
  component MicroBlaze is
22
    port (
23
      RS232_Uart_1_sout : out std_logic;
24
      RS232_Uart_1_sin : in std_logic;
25
      RESET : in std_logic;
26
      Push_Buttons_4Bits_TRI_I : in std_logic_vector(3 downto 0);
27
      LEDs_4Bits_TRI_O : out std_logic_vector(3 downto 0);
28
      CLK_P : in std_logic;
29
      CLK_N : in std_logic
30
    );
31
  end component;
32
33
 attribute BOX_TYPE : STRING;
34
 attribute BOX_TYPE of MicroBlaze : component is "user_black_box";
35
36
begin
37
38
  MicroBlaze_i : MicroBlaze
39
    port map (
40
      RS232_Uart_1_sout => USB_1_TX,
41
      RS232_Uart_1_sin => USB_1_RX,
42
      RESET => CPU_RESET,
43
      Push_Buttons_4Bits_TRI_I => GPIO_BUTTON,
44
      LEDs_4Bits_TRI_O => GPIO_LED,
45
      CLK_P => SYSCLK_P,
46
      CLK_N => SYSCLK_N
47
    );
48
49
end architecture STRUCTURE;

Neues, nur teilweise funktionierendes Projekt (Uart läuft nicht):
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
library UNISIM;
5
use UNISIM.VCOMPONENTS.ALL;
6
7
entity MicroBlaze_top is
8
  port (
9
    RS232_Uart_1_TX : out std_logic;
10
    RS232_Uart_1_RX : in std_logic;
11
    RESET : in std_logic;
12
    Push_Buttons_4Bits_TRI_I : in std_logic_vector(3 downto 0);
13
    LEDs_4Bits_TRI_O : out std_logic_vector(3 downto 0);
14
    Ethernet_Lite_TX_EN : out std_logic;
15
    Ethernet_Lite_TX_CLK : in std_logic;
16
    Ethernet_Lite_TXD : out std_logic_vector(7 downto 0);
17
    Ethernet_Lite_RX_ER : in std_logic;
18
    Ethernet_Lite_RX_DV : in std_logic;
19
    Ethernet_Lite_RX_CLK : in std_logic;
20
    Ethernet_Lite_RXD : in std_logic_vector(7 downto 0);
21
    Ethernet_Lite_PHY_RST_N : out std_logic;
22
    Ethernet_Lite_MDIO : inout std_logic;
23
    Ethernet_Lite_MDC : out std_logic;
24
    Ethernet_Lite_CRS : in std_logic;
25
    Ethernet_Lite_COL : in std_logic;
26
    CLK_P : in std_logic;
27
    CLK_N : in std_logic
28
  );
29
end MicroBlaze_top;
30
31
architecture STRUCTURE of MicroBlaze_top is
32
33
  component MicroBlaze is
34
    port (
35
      RS232_Uart_1_sout : out std_logic;
36
      RS232_Uart_1_sin : in std_logic;
37
      RESET : in std_logic;
38
      Push_Buttons_4Bits_TRI_I : in std_logic_vector(3 downto 0);
39
      LEDs_4Bits_TRI_O : out std_logic_vector(3 downto 0);
40
      Ethernet_Lite_TX_EN : out std_logic;
41
      Ethernet_Lite_TX_CLK : in std_logic;
42
      Ethernet_Lite_TXD : out std_logic_vector(3 downto 0);
43
      Ethernet_Lite_RX_ER : in std_logic;
44
      Ethernet_Lite_RX_DV : in std_logic;
45
      Ethernet_Lite_RX_CLK : in std_logic;
46
      Ethernet_Lite_RXD : in std_logic_vector(3 downto 0);
47
      Ethernet_Lite_PHY_RST_N : out std_logic;
48
      Ethernet_Lite_MDIO : inout std_logic;
49
      Ethernet_Lite_MDC : out std_logic;
50
      Ethernet_Lite_CRS : in std_logic;
51
      Ethernet_Lite_COL : in std_logic;
52
      CLK_P : in std_logic;
53
      CLK_N : in std_logic
54
    );
55
  end component;
56
57
 attribute BUFFER_TYPE : STRING;
58
 attribute BOX_TYPE : STRING;
59
  attribute BUFFER_TYPE of Ethernet_Lite_TX_CLK : signal is "IBUF";
60
  attribute BUFFER_TYPE of Ethernet_Lite_RX_CLK : signal is "IBUF";
61
 attribute BOX_TYPE of MicroBlaze : component is "user_black_box";
62
63
begin
64
65
  MicroBlaze_i : MicroBlaze
66
    port map (
67
      RS232_Uart_1_sout => RS232_Uart_1_TX,
68
      RS232_Uart_1_sin => RS232_Uart_1_RX,
69
      RESET => RESET,
70
      Push_Buttons_4Bits_TRI_I => Push_Buttons_4Bits_TRI_I,
71
      LEDs_4Bits_TRI_O => LEDs_4Bits_TRI_O,
72
      Ethernet_Lite_TX_EN => Ethernet_Lite_TX_EN,
73
      Ethernet_Lite_TX_CLK => Ethernet_Lite_TX_CLK,
74
      Ethernet_Lite_TXD => Ethernet_Lite_TXD (3 downto 0),
75
      Ethernet_Lite_RX_ER => Ethernet_Lite_RX_ER,
76
      Ethernet_Lite_RX_DV => Ethernet_Lite_RX_DV,
77
      Ethernet_Lite_RX_CLK => Ethernet_Lite_RX_CLK,
78
      Ethernet_Lite_RXD => Ethernet_Lite_RXD (3 downto 0),
79
      Ethernet_Lite_PHY_RST_N => Ethernet_Lite_PHY_RST_N,
80
      Ethernet_Lite_MDIO => Ethernet_Lite_MDIO,
81
      Ethernet_Lite_MDC => Ethernet_Lite_MDC,
82
      Ethernet_Lite_CRS => Ethernet_Lite_CRS,
83
      Ethernet_Lite_COL => Ethernet_Lite_COL,
84
      CLK_P => CLK_P,
85
      CLK_N => CLK_N
86
    );
87
      
88
   Ethernet_Lite_TXD (7 downto 4) <= "0000";
89
   
90
end architecture STRUCTURE;

Zu beachten:

Ich habe einige Signale umbenannt, z.B. USB_1_TX => RS232_Uart_1_TX, ich 
hoffe das stört nicht weiter.

Fällt hier eventuell jemandem etwas auf? Wie würdet Ihr vorgehen, um den 
Fehler zu finden?

Viele Grüße,
  Thomas

von Georg A. (georga)


Lesenswert?

Und die neuen Namen der Toplevel-Pins stehen auch im UCF?

von Thomas (Gast)


Lesenswert?

Die UCF habe ich auch neu angepasst, dass ist ja das verrückte :/

von Duke Scarring (Gast)


Lesenswert?

RX und TX vertauscht?
Wie ist das Memorymapping mit dem neuen Core und wie ohne?

Duke

von Thomas (Gast)


Lesenswert?

Ich habe heute nochmal die UCF-Datei verglichen. Alles in Ordnung. 
Vielmehr habe ich sogar nun die selbe UCF Datei verwendet und die 
Top-Level Datei angepasst => keine Verbesserung :/

Im XPS habe ich dann den EthernetLite IP-Core entfernt, ebenso in der 
Top-Level Datei (die Top-Level Datei ist nun bei beiden Projekten 
identisch und entspricht die aus meinem Anfangspost, also die erste 
davon). Leider ist das Ergebnis wie vorher. Die LEDs funktionieren in 
beiden Projekten, nur in dem 2.Projekt funktioniert die Kommunikation 
über die UART nicht.

Hättet Ihr eventuell noch einen Hinweis zur Fehlersuche? Irgendwas muss 
ich übersehen haben.


Viele Grüße,
  Thomas

von Thomas (Gast)


Lesenswert?

Hallo Zusammen,

leider bin ich lange nicht mehr dazu gekommen, weiter an dem Projekt zu 
arbeiten.

Jetzt folgt die Auflösung, falls jemanden mal ein ähnliches Problem hat:

Die *.ucf - Datei war laut ISE bereits in einem anderem Editor geöffnet 
(obwohl nur ISE offen war!). Dies habe ich soweit immer ignoriert und 
dort meine Einträge verändert.

Diese Einträge waren jedoch nicht wirksam. Erst als ich den Fehler, dass 
die Datei in einem anderen Editor noch geöffnet sei, behoben habe, 
wurden die Einträge in der UCF-Datei wieder wirksam. Und somit hat dann 
auch alles geklappt.

Zum Problem: http://www.xilinx.com/support/answers/33960.htm

Viele Grüße,
  Thomas

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.