Forum: FPGA, VHDL & Co. FSL external Port


von Christian A. (noeppkes)


Lesenswert?

Hallo.

Ich versuche einen FSL Port zw. einem Microblaze und meiner FPGA Logik 
herzustellen.
Das klappt soweit, nur fehlen mir die Signale FSL_S_DATA, FSL_M_DATA.
Eigentlich alle Master und Slave Signale. die anderen sind vorhanden.
Kann mir jemand weiterhelfen, bzw. was mache ich falsch.

Hintergrund: Ich möchte den Microblaze mit Daten über meine FPGA Logik 
füttern und auch wieder Daten abholen.
Hier ein Auszug auf meinem mhs File.

 PORT CLK = CLK, DIR = I, SIGIS = CLK, CLK_FREQ = 100000000
 PORT FSL_S_Data = FSL_S_Data, DIR = I, VEC = [0:31], BUS = SFSL
 PORT fsl_v20_0_FSL_M_Clk_pin = fsl_v20_0_FSL_M_Clk, DIR = I
 PORT fsl_v20_0_FSL_S_Clk_pin = fsl_v20_0_FSL_S_Clk, DIR = I
 PORT fsl_v20_0_FSL_Full_pin = fsl_v20_0_FSL_Full, DIR = O, SIGIS = 
INTERRUPT, SENSITIVITY = LEVEL_HIGH
 PORT fsl_v20_0_FSL_Has_Data_pin = fsl_v20_0_FSL_Has_Data, DIR = O, 
SIGIS = INTERRUPT, SENSITIVITY = LEVEL_HIGH
 PORT fsl_v20_0_FSL_Control_IRQ_pin = fsl_v20_0_FSL_Control_IRQ, DIR = 
O, SIGIS = INTERRUPT, SENSITIVITY = LEVEL_HIGH
...
BEGIN microblaze
 PARAMETER INSTANCE = microblaze_0
 PARAMETER HW_VER = 8.20.a
 PARAMETER C_INTERCONNECT = 2
 PARAMETER C_USE_BARREL = 1
 PARAMETER C_USE_FPU = 2
 PARAMETER C_DEBUG_ENABLED = 1
 PARAMETER C_ICACHE_BASEADDR = 0X00000000
 PARAMETER C_ICACHE_HIGHADDR = 0X3FFFFFFF
 PARAMETER C_USE_ICACHE = 0
 PARAMETER C_ICACHE_ALWAYS_USED = 0
 PARAMETER C_DCACHE_BASEADDR = 0X00000000
 PARAMETER C_DCACHE_HIGHADDR = 0X3FFFFFFF
 PARAMETER C_USE_DCACHE = 0
 PARAMETER C_DCACHE_ALWAYS_USED = 0
 PARAMETER C_CACHE_BYTE_SIZE = 32768
 PARAMETER C_ICACHE_LINE_LEN = 8
 PARAMETER C_ICACHE_STREAMS = 1
 PARAMETER C_ICACHE_VICTIMS = 8
 PARAMETER C_DCACHE_BYTE_SIZE = 32768
 PARAMETER C_DCACHE_LINE_LEN = 8
 PARAMETER C_DCACHE_USE_WRITEBACK = 1
 PARAMETER C_DCACHE_VICTIMS = 8
 PARAMETER C_USE_HW_MUL = 2
 PARAMETER C_USE_DIV = 1
 PARAMETER C_USE_BRANCH_TARGET_CACHE = 1
 PARAMETER C_FSL_LINKS = 1
 BUS_INTERFACE M_AXI_DP = axi4lite_0
 BUS_INTERFACE DEBUG = microblaze_0_debug
 BUS_INTERFACE DLMB = microblaze_0_dlmb
 BUS_INTERFACE ILMB = microblaze_0_ilmb
 BUS_INTERFACE SFSL0 = fsl_v20_0
 BUS_INTERFACE MFSL0 = fsl_v20_0
 PORT MB_RESET = proc_sys_reset_0_MB_Reset
 PORT CLK = clk_100_0000MHz
END
...
BEGIN fsl_v20
 PARAMETER INSTANCE = fsl_v20_0
 PARAMETER HW_VER = 2.11.e
 PORT FSL_Clk = clk_100_0000MHz
 PORT SYS_Rst = proc_sys_reset_0_BUS_STRUCT_RESET
 PORT FSL_M_Clk = fsl_v20_0_FSL_M_Clk
 PORT FSL_S_Clk = fsl_v20_0_FSL_S_Clk
 PORT FSL_Full = fsl_v20_0_FSL_Full
 PORT FSL_Has_Data = fsl_v20_0_FSL_Has_Data
 PORT FSL_Control_IRQ = fsl_v20_0_FSL_Control_IRQ
END

Danke.
noeppkes ...

von Klaus F. (kfalser)


Lesenswert?

Dumme Frage, aber hast Du an den FSL Bus überhaupt etwas angeschlossen?

von Christian A. (noeppkes)


Lesenswert?

Hallo.

Die eine Seite an den Microblaze. Die andere Seite möchte ich komplett 
extern legen.
Das heisst zur FPGA Logik hin.
Hab ich da was übersehen?

noeppkes ....

von MeinGottWalter (Gast)


Lesenswert?

Wie sieht deine VHDL/Verilog Peripherie aus?

von Christian A. (noeppkes)


Lesenswert?

Hallo.

Bin in der Zwischenzeit ein ganz Stück weiter gekommen.
Habe den Auszug vom fsl_v20_v2_1_0.mpd
Dabei ist mir aufgefallen, dass ich nur die Signale im XPS sehen kann, 
welche ein von mir hintendran gesetztes OK haben.
Alle Signale mit OK haben nach dem Namen ein = ""
Was ist hierfür der Grund?
Habe jetzt bei allen auch ein "" dahinter gesetzt. Nun sind die Signale 
im XPS verfügbar und ich kann sie extern legen?
Kann mir das jemand erklären?

Vorher:
## Ports
PORT FSL_Clk = "", DIR = I, SIGIS = CLK # OK
PORT SYS_Rst = "", DIR = I              # OK
PORT FSL_Rst = LMB_Rst, DIR = O         # LMD_Rst ersetzen durch ""
PORT FSL_M_Clk = "", DIR = I            # OK
PORT FSL_M_Data = FSL_M_Data, DIR = I, VEC = [0:C_FSL_DWIDTH-1] # dito
PORT FSL_M_Control = FSL_M_Control, DIR = I                     # dito
PORT FSL_M_Write = FSL_M_Write, DIR = I                         # dito
PORT FSL_M_Full = FSL_M_Full, DIR = O                           # dito
PORT FSL_S_Clk = "", DIR = I            # OK
PORT FSL_S_Data = FSL_S_Data, DIR = O, VEC = [0:C_FSL_DWIDTH-1] # dito
PORT FSL_S_Control = FSL_S_Control, DIR = O                     # dito
PORT FSL_S_Read = FSL_S_Read, DIR = I                           # dito
PORT FSL_S_Exists = FSL_S_Exists, DIR = O                       # dito
PORT FSL_Full = "", DIR = O, SIGIS = INTERRUPT, SENSITIVITY = LEVEL_HIGH 
# OK
PORT FSL_Has_Data = "", DIR = O, SIGIS = INTERRUPT, SENSITIVITY = 
LEVEL_HIGH    # OK
PORT FSL_Control_IRQ = "", DIR = O, SIGIS = INTERRUPT, SENSITIVITY = 
LEVEL_HIGH # OK

END

Nachher:
## Ports
PORT FSL_Clk = "", DIR = I, SIGIS = CLK
PORT SYS_Rst = "", DIR = I
PORT FSL_Rst = "", DIR = O
PORT FSL_M_Clk = "", DIR = I
PORT FSL_M_Data = "", DIR = I, VEC = [0:C_FSL_DWIDTH-1]
PORT FSL_M_Control = "", DIR = I
PORT FSL_M_Write = "", DIR = I
PORT FSL_M_Full = "", DIR = O
PORT FSL_S_Clk = "", DIR = I
PORT FSL_S_Data = "", DIR = O, VEC = [0:C_FSL_DWIDTH-1]
PORT FSL_S_Control = "", DIR = O
PORT FSL_S_Read = "", DIR = I
PORT FSL_S_Exists = "", DIR = O
PORT FSL_Full = "", DIR = O, SIGIS = INTERRUPT, SENSITIVITY = LEVEL_HIGH
PORT FSL_Has_Data = "", DIR = O, SIGIS = INTERRUPT, SENSITIVITY = 
LEVEL_HIGH
PORT FSL_Control_IRQ = "", DIR = O, SIGIS = INTERRUPT, SENSITIVITY = 
LEVEL_HIGH

END

von Christian A. (noeppkes)


Lesenswert?

Nachtrag.

Sobald man das geändert und gespeichert hat, dann im Menü den Punkt:

Projekt--> Rescan User Respoitories aufrufen.

Dann erscheinen die Signale.

noeppkes ...

von Klaus F. (kfalser)


Lesenswert?

Christian Armbruster schrieb:
> Hab ich da was übersehen?

Anscheinend muss man kleines IP core erstellen.

http://blog.fpganotes.com/2011/05/how-to-make-fsl-ports-external

: Bearbeitet durch User
von Christian A. (noeppkes)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich denke auch, dass man einen kleinen IP-Core erzeugen muss.
Habe es aber bisher noch nicht geschafft.
Selbst nicht mit dem IP-Core aus dem Blog. (Link siehe oben von Klaus)
Kann jemand mal einen ScreenShot von der XPS posten um zu sehen wie das 
alles "verdrahtet" ist.
Das mit dem Blog hat nur teilweise geklappt.
Ich habe weiterhin nicht die richtigen Signale zu meinem VHDL Design 
hin.

Nochmal kurz was ich möchte:
FSL Anbindung zw. dem Microblaze und meinem VHDL Design in beide 
Richtungen.

Meine beiden Screenshots sind im Anhang:

noeppkes ...

von Christian A. (noeppkes)


Angehängte Dateien:

Lesenswert?

Nochmals ein Bild mit den Busverbindungen.

noeppkes ...

von Klaus F. (kfalser)


Lesenswert?

Warum verwendest Du nicht den Create IP wizard?
Der sollte FSL angeschlossene IP unterstützen.

Willst Du eigentlich die FSL Signale aus dem EDK Design über external 
Ports ganz nach außen führen oder kannst Du deine Logik in ein IP 
einbauen?

In ersten Fall brauchst Du ein IP, das die FSL Signale einfach nur 
weiterleitet, so wie dieses fsl_ex_port, aber im MPD File muss man 
anscheinend die Zuweisungen entfernen, dann tauchen die Ports unter 
fsl_ex_port_0 auf und man kann sie external machen.

PORT o_FSL_S_Read = "", DIR=I
PORT o_FSL_S_Data = "" , DIR=O, VEC=[0:31]
PORT o_FSL_S_Control = "", DIR=O
PORT o_FSL_S_Exists = "", DIR=O
PORT o_FSL_M_Write = "", DIR=I
PORT o_FSL_M_Data = "", DIR=I, VEC=[0:31]
PORT o_FSL_M_Control = "", DIR=I
PORT o_FSL_M_Full = "", DIR=O

Aber in diesem Fall existiert Deine Logik außerhalb des EDK Designs und 
Du brauchst ein neues Top Level design das dein MB Projekt und dein, an 
FSL angeschlossenes Design verwendet.

Einfacher ist möglicherweise die Erstellung eines Custom IPs mit FSL 
anschluss, das deine Logik enthält. Dann bleibt das EDK weiterhin dein 
Top-Level Design.

von Christian A. (noeppkes)


Angehängte Dateien:

Lesenswert?

Hallo.

Habe deinen Link befolgt und den schon generierten Custom IP eingesetzt.

http://blog.fpganotes.com/2011/05/how-to-make-fsl-...

Alles korrekt verdrahtet. Lässt sich übersetzen. XPS, SDK und ISE meldet 
keinen Fehler.
Jetzt schreibe ich mit dem Microblaze in die FSL.
Einerseits über FSL_DEFAULT, und FSL_NONBLOCKING.
Beides scheint zu funktionieren.
Sobald ich die FIFo mit FSL_DEFAULT überschriebe, bleibt der Microblaze 
auch stehen. Mit FSL_NONBLOCKING kann ich ohne Ende schreiben. Alles 
korrekt so.
Anhand dessen kann man doch schon einmal sagen, dass die FSL Verbindung 
vorhanden sein müsste und auch funktioniert.
Aber:
Nach den ersten Schreibbefehl sollte doch das Signal ... exists auf der 
FSL FIFO Slave-Seite nach 1 wechseln.
Auch das Signal im Master FSL ...HAS_DATA wechselt nicht auf 1.
Ich hole definitiv keine Daten an der Slave-Seite ab. Hab das Read fest 
auf 0 verdrahtet.
Ach ja.
Habe alles am MicroBlaze Takt von 100 Mhz hängen.
Die FSL FiFo soll Asynchron laufen.
Muss ich die FSL schneller takten ?

Ich bin mir nun auch nicht mehr ganz sicher ob die FSL-Verbinung vom 
Microblaze zur FSL FiFo richtig ist und so funktioniert.
Im XPS wird sie auf jeden fall mal grafisch angezeigt.

Hier mein MHS-File und im Anhang noch 2 Bilder vom XPS.
Vielleicht kann jemand was erkennen und mir weiterhelfen.
Danke.
noeppkes ...


# 
######################################################################## 
######
# Created by Base System Builder Wizard for Xilinx EDK 13.2 Build 
EDK_O.61xd
# Fri Oct 18 11:55:36 2013
# Target Board:  Custom
# Family:    spartan6
# Device:    xc6slx45
# Package:   fgg484
# Speed Grade:  -3
# 
######################################################################## 
######
 PARAMETER VERSION = 2.1.0


# Bus Interfaces
 PORT SPI_FLASH_SS = SPI_FLASH_SS, DIR = IO
 PORT SPI_FLASH_SCLK = SPI_FLASH_SCLK, DIR = IO
 PORT SPI_FLASH_MOSI = SPI_FLASH_MOSI, DIR = IO
 PORT SPI_FLASH_MISO = SPI_FLASH_MISO, DIR = IO
 PORT RESET = RESET, DIR = I, SIGIS = RST, RST_POLARITY = 0
 PORT RESET_N = RESET_N, DIR = I, SIGIS = RST, RST_POLARITY = 1
 PORT RESET_FSL = RESET_FSL, DIR = I, SIGIS = RST, RST_POLARITY = 0
 PORT LEDS_TRI_O = LEDS_TRI_O, DIR = O, VEC = [0:7]
 PORT CLK = CLK, DIR = I, SIGIS = CLK, CLK_FREQ = 100000000
 PORT fsl_ex_ports_0_o_FSL_M_Write_pin = fsl_ex_ports_0_o_FSL_M_Write, 
DIR = I
 PORT fsl_ex_ports_0_o_FSL_M_Data_pin = fsl_ex_ports_0_o_FSL_M_Data, DIR 
= I, VEC = [0:31]
 PORT fsl_ex_ports_0_o_FSL_M_Control_pin = 
fsl_ex_ports_0_o_FSL_M_Control, DIR = I
 PORT fsl_ex_ports_0_o_FSL_M_Full_pin = fsl_ex_ports_0_o_FSL_M_Full, DIR 
= O
 PORT fsl_ex_ports_1_o_FSL_S_Read_pin = fsl_ex_ports_1_o_FSL_S_Read, DIR 
= I
 PORT fsl_ex_ports_1_o_FSL_S_Data_pin = fsl_ex_ports_1_o_FSL_S_Data, DIR 
= O, VEC = [0:31]
 PORT fsl_ex_ports_1_o_FSL_S_Control_pin = 
fsl_ex_ports_1_o_FSL_S_Control, DIR = O
 PORT fsl_ex_ports_1_o_FSL_S_Exists_pin = fsl_ex_ports_1_o_FSL_S_Exists, 
DIR = O
 PORT microblaze_0_to_fsl_ex_ports_1_FSL_Has_Data_pin = 
microblaze_0_to_fsl_ex_ports_1_FSL_Has_Data, DIR = O, SIGIS = INTERRUPT, 
SENSITIVITY = LEVEL_HIGH


# PORT CLK_P = CLK, DIR = I, DIFFERENTIAL_POLARITY = P, SIGIS = CLK, 
CLK_FREQ = 100000000
# PORT CLK_N = CLK, DIR = I, DIFFERENTIAL_POLARITY = N, SIGIS = CLK, 
CLK_FREQ = 100000000
BEGIN proc_sys_reset
 PARAMETER INSTANCE = proc_sys_reset_0
 PARAMETER HW_VER = 3.00.a
 PARAMETER C_EXT_RESET_HIGH = 0
 PORT MB_Debug_Sys_Rst = proc_sys_reset_0_MB_Debug_Sys_Rst
 PORT Dcm_locked = proc_sys_reset_0_Dcm_locked
 PORT MB_Reset = proc_sys_reset_0_MB_Reset
 PORT Slowest_sync_clk = clk_100_0000MHz
 PORT Interconnect_aresetn = proc_sys_reset_0_Interconnect_aresetn
 PORT Ext_Reset_In = RESET
 PORT BUS_STRUCT_RESET = proc_sys_reset_0_BUS_STRUCT_RESET
END

BEGIN lmb_v10
 PARAMETER INSTANCE = microblaze_0_ilmb
 PARAMETER HW_VER = 2.00.b
 PORT SYS_RST = proc_sys_reset_0_BUS_STRUCT_RESET
 PORT LMB_CLK = clk_100_0000MHz
END

BEGIN lmb_bram_if_cntlr
 PARAMETER INSTANCE = microblaze_0_i_bram_ctrl
 PARAMETER HW_VER = 3.00.b
 PARAMETER C_BASEADDR = 0x00000000
 PARAMETER C_HIGHADDR = 0x00001fff
 BUS_INTERFACE SLMB = microblaze_0_ilmb
 BUS_INTERFACE BRAM_PORT = 
microblaze_0_i_bram_ctrl_2_microblaze_0_bram_block
END

BEGIN lmb_v10
 PARAMETER INSTANCE = microblaze_0_dlmb
 PARAMETER HW_VER = 2.00.b
 PORT SYS_RST = proc_sys_reset_0_BUS_STRUCT_RESET
 PORT LMB_CLK = clk_100_0000MHz
END

BEGIN lmb_bram_if_cntlr
 PARAMETER INSTANCE = microblaze_0_d_bram_ctrl
 PARAMETER HW_VER = 3.00.b
 PARAMETER C_BASEADDR = 0x00000000
 PARAMETER C_HIGHADDR = 0x00001fff
 BUS_INTERFACE SLMB = microblaze_0_dlmb
 BUS_INTERFACE BRAM_PORT = 
microblaze_0_d_bram_ctrl_2_microblaze_0_bram_block
END

BEGIN bram_block
 PARAMETER INSTANCE = microblaze_0_bram_block
 PARAMETER HW_VER = 1.00.a
 BUS_INTERFACE PORTA = 
microblaze_0_i_bram_ctrl_2_microblaze_0_bram_block
 BUS_INTERFACE PORTB = 
microblaze_0_d_bram_ctrl_2_microblaze_0_bram_block
END

BEGIN microblaze
 PARAMETER INSTANCE = microblaze_0
 PARAMETER HW_VER = 8.20.a
 PARAMETER C_INTERCONNECT = 2
 PARAMETER C_USE_BARREL = 1
 PARAMETER C_USE_FPU = 2
 PARAMETER C_DEBUG_ENABLED = 1
 PARAMETER C_ICACHE_BASEADDR = 0X00000000
 PARAMETER C_ICACHE_HIGHADDR = 0X3FFFFFFF
 PARAMETER C_USE_ICACHE = 1
 PARAMETER C_ICACHE_ALWAYS_USED = 0
 PARAMETER C_DCACHE_BASEADDR = 0X00000000
 PARAMETER C_DCACHE_HIGHADDR = 0X3FFFFFFF
 PARAMETER C_USE_DCACHE = 1
 PARAMETER C_DCACHE_ALWAYS_USED = 1
 PARAMETER C_CACHE_BYTE_SIZE = 16384
 PARAMETER C_ICACHE_LINE_LEN = 8
 PARAMETER C_ICACHE_STREAMS = 1
 PARAMETER C_ICACHE_VICTIMS = 8
 PARAMETER C_DCACHE_BYTE_SIZE = 16384
 PARAMETER C_DCACHE_LINE_LEN = 8
 PARAMETER C_DCACHE_USE_WRITEBACK = 1
 PARAMETER C_DCACHE_VICTIMS = 8
 PARAMETER C_USE_HW_MUL = 2
 PARAMETER C_USE_DIV = 1
 PARAMETER C_USE_BRANCH_TARGET_CACHE = 1
 PARAMETER C_FSL_LINKS = 1
 PARAMETER C_INTERCONNECT_M_AXI_DP_WRITE_FIFO_DEPTH = 32
 PARAMETER C_INTERCONNECT_M_AXI_DP_READ_FIFO_DEPTH = 32
 PARAMETER C_DCACHE_FORCE_TAG_LUTRAM = 1
 BUS_INTERFACE M_AXI_DP = axi4lite_0
 BUS_INTERFACE DEBUG = microblaze_0_debug
 BUS_INTERFACE SFSL0 = microblaze_0_to_fsl_ex_ports_1
 BUS_INTERFACE DLMB = microblaze_0_dlmb
 BUS_INTERFACE ILMB = microblaze_0_ilmb
 BUS_INTERFACE MFSL0 = fsl_ex_ports_1_to_microblaze_0
 PORT MB_RESET = proc_sys_reset_0_MB_Reset
 PORT CLK = clk_100_0000MHz
END

BEGIN mdm
 PARAMETER INSTANCE = debug_module
 PARAMETER HW_VER = 2.00.b
 PARAMETER C_INTERCONNECT = 2
 PARAMETER C_USE_UART = 1
 PARAMETER C_BASEADDR = 0x74800000
 PARAMETER C_HIGHADDR = 0x7480ffff
 BUS_INTERFACE S_AXI = axi4lite_0
 BUS_INTERFACE MBDEBUG_0 = microblaze_0_debug
 PORT Debug_SYS_Rst = proc_sys_reset_0_MB_Debug_Sys_Rst
 PORT S_AXI_ACLK = clk_100_0000MHz
END

BEGIN clock_generator
 PARAMETER INSTANCE = clock_generator_0
 PARAMETER HW_VER = 4.02.a
 PARAMETER C_CLKIN_FREQ = 100000000
 PARAMETER C_CLKOUT0_FREQ = 100000000
 PARAMETER C_CLKOUT0_GROUP = NONE
 PORT LOCKED = proc_sys_reset_0_Dcm_locked
 PORT CLKOUT0 = clk_100_0000MHz
 PORT RST = RESET_N
 PORT CLKIN = CLK
END

BEGIN axi_interconnect
 PARAMETER INSTANCE = axi4lite_0
 PARAMETER HW_VER = 1.03.a
 PARAMETER C_INTERCONNECT_CONNECTIVITY_MODE = 0
 PORT interconnect_aclk = clk_100_0000MHz
 PORT INTERCONNECT_ARESETN = proc_sys_reset_0_Interconnect_aresetn
END

BEGIN axi_gpio
 PARAMETER INSTANCE = LEDS
 PARAMETER HW_VER = 1.01.a
 PARAMETER C_GPIO_WIDTH = 8
 PARAMETER C_ALL_INPUTS = 0
 PARAMETER C_INTERRUPT_PRESENT = 0
 PARAMETER C_IS_DUAL = 0
 PARAMETER C_BASEADDR = 0x40000000
 PARAMETER C_HIGHADDR = 0x4000ffff
 BUS_INTERFACE S_AXI = axi4lite_0
 PORT S_AXI_ACLK = clk_100_0000MHz
 PORT GPIO_IO_O = LEDS_TRI_O
END

BEGIN axi_spi
 PARAMETER INSTANCE = Generic_SPI
 PARAMETER HW_VER = 1.01.a
 PARAMETER C_BASEADDR = 0x40a00000
 PARAMETER C_HIGHADDR = 0x40a0ffff
 BUS_INTERFACE S_AXI = axi4lite_0
 PORT S_AXI_ACLK = clk_100_0000MHz
 PORT SS = SPI_FLASH_SS
 PORT SCK = SPI_FLASH_SCLK
 PORT MOSI = SPI_FLASH_MOSI
 PORT MISO = SPI_FLASH_MISO
 PORT SPISEL = net_vcc
END

BEGIN fsl_ex_ports
 PARAMETER INSTANCE = fsl_ex_ports_0
 PARAMETER HW_VER = 1.00.a
 BUS_INTERFACE SFSL = fsl_ex_ports_1_to_microblaze_0
 PORT o_FSL_M_Write = fsl_ex_ports_0_o_FSL_M_Write
 PORT o_FSL_M_Data = fsl_ex_ports_0_o_FSL_M_Data
 PORT o_FSL_M_Control = fsl_ex_ports_0_o_FSL_M_Control
 PORT o_FSL_M_Full = fsl_ex_ports_0_o_FSL_M_Full
END

BEGIN fsl_v20
 PARAMETER INSTANCE = fsl_ex_ports_1_to_microblaze_0
 PARAMETER HW_VER = 2.11.e
 PARAMETER C_EXT_RESET_HIGH = 0
 PARAMETER C_ASYNC_CLKS = 1
 PARAMETER C_FSL_DEPTH = 512
 PARAMETER C_READ_CLOCK_PERIOD = 10
 PARAMETER C_IMPL_STYLE = 1
 PORT FSL_Clk = clk_100_0000MHz
 PORT SYS_Rst = RESET_FSL
 PORT FSL_M_Clk = clk_100_0000MHz
 PORT FSL_S_Clk = clk_100_0000MHz
END

BEGIN fsl_ex_ports
 PARAMETER INSTANCE = fsl_ex_ports_1
 PARAMETER HW_VER = 1.00.a
 BUS_INTERFACE MFSL = microblaze_0_to_fsl_ex_ports_1
 PORT o_FSL_S_Read = fsl_ex_ports_1_o_FSL_S_Read
 PORT o_FSL_S_Data = fsl_ex_ports_1_o_FSL_S_Data
 PORT o_FSL_S_Control = fsl_ex_ports_1_o_FSL_S_Control
 PORT o_FSL_S_Exists = fsl_ex_ports_1_o_FSL_S_Exists
END

BEGIN fsl_v20
 PARAMETER INSTANCE = microblaze_0_to_fsl_ex_ports_1
 PARAMETER HW_VER = 2.11.e
 PARAMETER C_EXT_RESET_HIGH = 0
 PARAMETER C_ASYNC_CLKS = 1
 PARAMETER C_FSL_DEPTH = 512
 PARAMETER C_READ_CLOCK_PERIOD = 10
 PARAMETER C_IMPL_STYLE = 1
 PORT FSL_Clk = clk_100_0000MHz
 PORT SYS_Rst = RESET_FSL
 PORT FSL_M_Clk = clk_100_0000MHz
 PORT FSL_S_Clk = clk_100_0000MHz
 PORT FSL_Has_Data = microblaze_0_to_fsl_ex_ports_1_FSL_Has_Data
END

von Klaus F. (kfalser)


Lesenswert?

Ohne mich jetzt durch das MHS File durchgebissen zu haben, fällt mir nur 
auf, dass der Microblaze als Master auf den bus 
fsl_ex_port_1_to_microblaze_0 schreibt, dieser Bus aber an fsl_ex_port_0 
angeschlossen ist. Diese Einheit ist korrekterweise der Slave, aber an 
die Slave Signale hast Du dort nicht angeschlossen. Meiner Meinung musst 
Du dort die Daten abholen.

von Christian A. (noeppkes)


Lesenswert?

Klaus Falser schrieb:
> Ohne mich jetzt durch das MHS File durchgebissen zu haben, fällt mir nur
> auf, dass der Microblaze als Master auf den bus
> fsl_ex_port_1_to_microblaze_0 schreibt, dieser Bus aber an fsl_ex_port_0
> angeschlossen ist. Diese Einheit ist korrekterweise der Slave, aber an
> die Slave Signale hast Du dort nicht angeschlossen. Meiner Meinung musst
> Du dort die Daten abholen.

Hallo.
Bin jetzt leicht irritiert.
Ich habe die Verbindung MFSL0 zu fsl_ex_port_1_to_microblaze_0 
(fsl_ex_ports_0, Slave Seite).

Das sollte doch der FSL Bus vom MB sein, der mir in die FiFo schreibt.
Da die Verbindung eingezeichnet ist, gehe ich davon aus dass alle 
Verbindungen zw. dem Microblaze und der FiFo existieren.

Die Daten hole ich dann aus dem Master dieser FiFo (fsl_ex_ports_0) ab.
All diese Signale habe ich ja auch "external" (unter Ports) gelegt.
Und genau davon toggelt kein eiziges.

Wie sollte es deiner Meinung nach aussehen?

noeppkes ...

von Christian A. (noeppkes)


Lesenswert?

Hallo Klaus.

Danke für den Hinweis.

Bin jetzt dahinter gekommen.
Der Fehler war dass ich den User IP einmal selbst hinzugefügt habe und 
dann och einmal im Menü mit: Hardware --> Configure Coprozessor ...
Deswegen war er 2 mal vorhanden und dann falsch angeschlossen.

Jetzt funktioniert es.

Vielen Dank für die nützlichen Hinweise.

Ich poste gleich noch 2 Bilder, damit auch andere sehen, wie FSL als 
"external" richtig eingesetzt wird.

noeppkes ...

von Christian A. (noeppkes)


Angehängte Dateien:

Lesenswert?

Hallo.

Hier die versprochenen 2 Bilder.
Und auch noch das MHS File.


# 
######################################################################## 
######
# Created by Base System Builder Wizard for Xilinx EDK 13.2 Build 
EDK_O.61xd
# Fri Oct 18 11:55:36 2013
# Target Board:  Custom
# Family:    spartan6
# Device:    xc6slx45
# Package:   fgg484
# Speed Grade:  -3
# 
######################################################################## 
######
 PARAMETER VERSION = 2.1.0


# Bus Interfaces
 PORT SPI_FLASH_SS = SPI_FLASH_SS, DIR = IO
 PORT SPI_FLASH_SCLK = SPI_FLASH_SCLK, DIR = IO
 PORT SPI_FLASH_MOSI = SPI_FLASH_MOSI, DIR = IO
 PORT SPI_FLASH_MISO = SPI_FLASH_MISO, DIR = IO
 PORT RESET = RESET, DIR = I, SIGIS = RST, RST_POLARITY = 0
 PORT RESET_N = RESET_N, DIR = I, SIGIS = RST, RST_POLARITY = 1
 PORT LEDS_TRI_O = LEDS_TRI_O, DIR = O, VEC = [0:7]
 PORT CLK = CLK, DIR = I, SIGIS = CLK, CLK_FREQ = 100000000
 PORT fsl_ex_ports_0_o_FSL_S_Read_pin = fsl_ex_ports_0_o_FSL_S_Read, DIR 
= I
 PORT fsl_ex_ports_0_o_FSL_S_Data_pin = fsl_ex_ports_0_o_FSL_S_Data, DIR 
= O, VEC = [0:31]
 PORT fsl_ex_ports_0_o_FSL_S_Control_pin = 
fsl_ex_ports_0_o_FSL_S_Control, DIR = O
 PORT fsl_ex_ports_0_o_FSL_S_Exists_pin = fsl_ex_ports_0_o_FSL_S_Exists, 
DIR = O
 PORT fsl_ex_ports_0_o_FSL_M_Write_pin = fsl_ex_ports_0_o_FSL_M_Write, 
DIR = I
 PORT fsl_ex_ports_0_o_FSL_M_Data_pin = fsl_ex_ports_0_o_FSL_M_Data, DIR 
= I, VEC = [0:31]
 PORT fsl_ex_ports_0_o_FSL_M_Control_pin = 
fsl_ex_ports_0_o_FSL_M_Control, DIR = I
 PORT fsl_ex_ports_0_o_FSL_M_Full_pin = fsl_ex_ports_0_o_FSL_M_Full, DIR 
= O


# PORT CLK_P = CLK, DIR = I, DIFFERENTIAL_POLARITY = P, SIGIS = CLK, 
CLK_FREQ = 100000000
# PORT CLK_N = CLK, DIR = I, DIFFERENTIAL_POLARITY = N, SIGIS = CLK, 
CLK_FREQ = 100000000
BEGIN proc_sys_reset
 PARAMETER INSTANCE = proc_sys_reset_0
 PARAMETER HW_VER = 3.00.a
 PARAMETER C_EXT_RESET_HIGH = 0
 PORT MB_Debug_Sys_Rst = proc_sys_reset_0_MB_Debug_Sys_Rst
 PORT Dcm_locked = proc_sys_reset_0_Dcm_locked
 PORT MB_Reset = proc_sys_reset_0_MB_Reset
 PORT Slowest_sync_clk = clk_100_0000MHz
 PORT Interconnect_aresetn = proc_sys_reset_0_Interconnect_aresetn
 PORT Ext_Reset_In = RESET
 PORT BUS_STRUCT_RESET = proc_sys_reset_0_BUS_STRUCT_RESET
END

BEGIN lmb_v10
 PARAMETER INSTANCE = microblaze_0_ilmb
 PARAMETER HW_VER = 2.00.b
 PORT SYS_RST = proc_sys_reset_0_BUS_STRUCT_RESET
 PORT LMB_CLK = clk_100_0000MHz
END

BEGIN lmb_bram_if_cntlr
 PARAMETER INSTANCE = microblaze_0_i_bram_ctrl
 PARAMETER HW_VER = 3.00.b
 PARAMETER C_BASEADDR = 0x00000000
 PARAMETER C_HIGHADDR = 0x00001fff
 BUS_INTERFACE SLMB = microblaze_0_ilmb
 BUS_INTERFACE BRAM_PORT = 
microblaze_0_i_bram_ctrl_2_microblaze_0_bram_block
END

BEGIN lmb_v10
 PARAMETER INSTANCE = microblaze_0_dlmb
 PARAMETER HW_VER = 2.00.b
 PORT SYS_RST = proc_sys_reset_0_BUS_STRUCT_RESET
 PORT LMB_CLK = clk_100_0000MHz
END

BEGIN lmb_bram_if_cntlr
 PARAMETER INSTANCE = microblaze_0_d_bram_ctrl
 PARAMETER HW_VER = 3.00.b
 PARAMETER C_BASEADDR = 0x00000000
 PARAMETER C_HIGHADDR = 0x00001fff
 BUS_INTERFACE SLMB = microblaze_0_dlmb
 BUS_INTERFACE BRAM_PORT = 
microblaze_0_d_bram_ctrl_2_microblaze_0_bram_block
END

BEGIN bram_block
 PARAMETER INSTANCE = microblaze_0_bram_block
 PARAMETER HW_VER = 1.00.a
 BUS_INTERFACE PORTA = 
microblaze_0_i_bram_ctrl_2_microblaze_0_bram_block
 BUS_INTERFACE PORTB = 
microblaze_0_d_bram_ctrl_2_microblaze_0_bram_block
END

BEGIN microblaze
 PARAMETER INSTANCE = microblaze_0
 PARAMETER HW_VER = 8.20.a
 PARAMETER C_INTERCONNECT = 2
 PARAMETER C_USE_BARREL = 1
 PARAMETER C_USE_FPU = 2
 PARAMETER C_DEBUG_ENABLED = 1
 PARAMETER C_ICACHE_BASEADDR = 0X00000000
 PARAMETER C_ICACHE_HIGHADDR = 0X3FFFFFFF
 PARAMETER C_USE_ICACHE = 0
 PARAMETER C_ICACHE_ALWAYS_USED = 0
 PARAMETER C_DCACHE_BASEADDR = 0X00000000
 PARAMETER C_DCACHE_HIGHADDR = 0X3FFFFFFF
 PARAMETER C_USE_DCACHE = 0
 PARAMETER C_DCACHE_ALWAYS_USED = 1
 PARAMETER C_CACHE_BYTE_SIZE = 16384
 PARAMETER C_ICACHE_LINE_LEN = 8
 PARAMETER C_ICACHE_STREAMS = 1
 PARAMETER C_ICACHE_VICTIMS = 8
 PARAMETER C_DCACHE_BYTE_SIZE = 16384
 PARAMETER C_DCACHE_LINE_LEN = 8
 PARAMETER C_DCACHE_USE_WRITEBACK = 1
 PARAMETER C_DCACHE_VICTIMS = 8
 PARAMETER C_USE_HW_MUL = 2
 PARAMETER C_USE_DIV = 1
 PARAMETER C_USE_BRANCH_TARGET_CACHE = 1
 PARAMETER C_FSL_LINKS = 1
 PARAMETER C_INTERCONNECT_M_AXI_DP_WRITE_FIFO_DEPTH = 32
 PARAMETER C_INTERCONNECT_M_AXI_DP_READ_FIFO_DEPTH = 32
 PARAMETER C_DCACHE_FORCE_TAG_LUTRAM = 1
 BUS_INTERFACE M_AXI_DP = axi4lite_0
 BUS_INTERFACE DEBUG = microblaze_0_debug
 BUS_INTERFACE DLMB = microblaze_0_dlmb
 BUS_INTERFACE ILMB = microblaze_0_ilmb
 BUS_INTERFACE SFSL0 = fsl_ex_ports_0_to_microblaze_0
 BUS_INTERFACE MFSL0 = microblaze_0_to_fsl_ex_ports_0
 PORT MB_RESET = proc_sys_reset_0_MB_Reset
 PORT CLK = clk_100_0000MHz
END

BEGIN mdm
 PARAMETER INSTANCE = debug_module
 PARAMETER HW_VER = 2.00.b
 PARAMETER C_INTERCONNECT = 2
 PARAMETER C_USE_UART = 1
 PARAMETER C_BASEADDR = 0x74800000
 PARAMETER C_HIGHADDR = 0x7480ffff
 BUS_INTERFACE S_AXI = axi4lite_0
 BUS_INTERFACE MBDEBUG_0 = microblaze_0_debug
 PORT Debug_SYS_Rst = proc_sys_reset_0_MB_Debug_Sys_Rst
 PORT S_AXI_ACLK = clk_100_0000MHz
END

BEGIN clock_generator
 PARAMETER INSTANCE = clock_generator_0
 PARAMETER HW_VER = 4.02.a
 PARAMETER C_CLKIN_FREQ = 100000000
 PARAMETER C_CLKOUT0_FREQ = 100000000
 PARAMETER C_CLKOUT0_GROUP = NONE
 PORT LOCKED = proc_sys_reset_0_Dcm_locked
 PORT CLKOUT0 = clk_100_0000MHz
 PORT RST = RESET_N
 PORT CLKIN = CLK
END

BEGIN axi_interconnect
 PARAMETER INSTANCE = axi4lite_0
 PARAMETER HW_VER = 1.03.a
 PARAMETER C_INTERCONNECT_CONNECTIVITY_MODE = 0
 PORT interconnect_aclk = clk_100_0000MHz
 PORT INTERCONNECT_ARESETN = proc_sys_reset_0_Interconnect_aresetn
END

BEGIN axi_gpio
 PARAMETER INSTANCE = LEDS
 PARAMETER HW_VER = 1.01.a
 PARAMETER C_GPIO_WIDTH = 8
 PARAMETER C_ALL_INPUTS = 0
 PARAMETER C_INTERRUPT_PRESENT = 0
 PARAMETER C_IS_DUAL = 0
 PARAMETER C_BASEADDR = 0x40000000
 PARAMETER C_HIGHADDR = 0x4000ffff
 BUS_INTERFACE S_AXI = axi4lite_0
 PORT S_AXI_ACLK = clk_100_0000MHz
 PORT GPIO_IO_O = LEDS_TRI_O
END

BEGIN axi_spi
 PARAMETER INSTANCE = Generic_SPI
 PARAMETER HW_VER = 1.01.a
 PARAMETER C_BASEADDR = 0x40a00000
 PARAMETER C_HIGHADDR = 0x40a0ffff
 BUS_INTERFACE S_AXI = axi4lite_0
 PORT S_AXI_ACLK = clk_100_0000MHz
 PORT SS = SPI_FLASH_SS
 PORT SCK = SPI_FLASH_SCLK
 PORT MOSI = SPI_FLASH_MOSI
 PORT MISO = SPI_FLASH_MISO
 PORT SPISEL = net_vcc
END

BEGIN fsl_v20
 PARAMETER INSTANCE = fsl_ex_ports_0_to_microblaze_0
 PARAMETER HW_VER = 2.11.e
 PORT FSL_Clk = clk_100_0000MHz
 PORT SYS_Rst = RESET_N
 PORT FSL_M_Clk = clk_100_0000MHz
 PORT FSL_S_Clk = clk_100_0000MHz
END

BEGIN fsl_ex_ports
 PARAMETER INSTANCE = fsl_ex_ports_0
 PARAMETER HW_VER = 1.00.a
 BUS_INTERFACE MFSL = fsl_ex_ports_0_to_microblaze_0
 BUS_INTERFACE SFSL = microblaze_0_to_fsl_ex_ports_0
 PORT o_FSL_S_Read = fsl_ex_ports_0_o_FSL_S_Read
 PORT o_FSL_S_Data = fsl_ex_ports_0_o_FSL_S_Data
 PORT o_FSL_S_Control = fsl_ex_ports_0_o_FSL_S_Control
 PORT o_FSL_S_Exists = fsl_ex_ports_0_o_FSL_S_Exists
 PORT o_FSL_M_Write = fsl_ex_ports_0_o_FSL_M_Write
 PORT o_FSL_M_Data = fsl_ex_ports_0_o_FSL_M_Data
 PORT o_FSL_M_Control = fsl_ex_ports_0_o_FSL_M_Control
 PORT o_FSL_M_Full = fsl_ex_ports_0_o_FSL_M_Full
END

BEGIN fsl_v20
 PARAMETER INSTANCE = microblaze_0_to_fsl_ex_ports_0
 PARAMETER HW_VER = 2.11.e
 PORT FSL_Clk = clk_100_0000MHz
 PORT SYS_Rst = RESET_N
 PORT FSL_M_Clk = clk_100_0000MHz
 PORT FSL_S_Clk = clk_100_0000MHz
END


noeppkes ...

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.
Lade...