Hallo zusammen, ich beschäftige mich schon seit langem mit der FSL Verbindung und komme nicht weiter. 1) zuerst habe ich eine FSL-Verbindung aufgebaut und direkt vom EDK ins FPGA geladen. Das hat soweit geklappt. 2) jetzt habe ich das ganze als submodul in ISE eingebunden. In ISE schicke ich ein Testsignal und binde diesen an FSL_S_Data ein. 3) In meiner C Applikation lese ich die Daten aus. Da bekomme ich als Ergebniss 0. Habe schon verschiedene Konfigurationen versucht: FSL Bus verschieden konfiguriert, in vhdl datei rumprobiert und auch im C programm. Ich vermute, der Fehler liegt in der Konfiguration des FSL Buses, aber ich weiss nicht was ich noch alles umstellen muss. Brauche da unbedingt Hilfe,... es ist dringend. Hier noch meine top.vhd datei: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity top is PORT( fpga_0_RS232_Uart_1_RX_pin : IN std_logic; fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I_pin : IN std_logic; sys_clk_pin : IN std_logic; sys_rst_pin : IN std_logic; fpga_0_DDR2_SDRAM_DDR2_DQS : INOUT std_logic_vector(3 downto 0); fpga_0_DDR2_SDRAM_DDR2_DQS_n : INOUT std_logic_vector(3 downto 0); fpga_0_DDR2_SDRAM_DDR2_DQ : INOUT std_logic_vector(31 downto 0); fpga_0_FLASH_Mem_DQ_pin : INOUT std_logic_vector(0 to 7); fpga_0_RS232_Uart_1_TX_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_ODT_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_Addr_pin : OUT std_logic_vector(12 downto 0); fpga_0_DDR2_SDRAM_DDR2_BankAddr_pin : OUT std_logic_vector(1 downto 0); fpga_0_DDR2_SDRAM_DDR2_CAS_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_CE_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_CS_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_RAS_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_WE_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_Clk_pin : OUT std_logic_vector(1 downto 0); fpga_0_DDR2_SDRAM_DDR2_Clk_n_pin : OUT std_logic_vector(1 downto 0); fpga_0_DDR2_SDRAM_DDR2_DM_pin : OUT std_logic_vector(3 downto 0); fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O_pin : OUT std_logic; fpga_0_FLASH_Mem_A_pin : OUT std_logic_vector(8 to 31); fpga_0_FLASH_Mem_WEN_pin : OUT std_logic; fpga_0_FLASH_Mem_RPN_pin : OUT std_logic; fpga_0_FLASH_Mem_OEN_pin : OUT std_logic; fpga_0_FLASH_Mem_CEN_pin : OUT std_logic; fpga_core_0_FSL_S_Data_pin : IN std_logic_vector(0 to 31)); end top; architecture Behavioral of top is COMPONENT system PORT( fpga_0_RS232_Uart_1_RX_pin : IN std_logic; fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I_pin : IN std_logic; sys_clk_pin : IN std_logic; sys_rst_pin : IN std_logic; fpga_0_DDR2_SDRAM_DDR2_DQS : INOUT std_logic_vector(3 downto 0); fpga_0_DDR2_SDRAM_DDR2_DQS_n : INOUT std_logic_vector(3 downto 0); fpga_0_DDR2_SDRAM_DDR2_DQ : INOUT std_logic_vector(31 downto 0); fpga_0_FLASH_Mem_DQ_pin : INOUT std_logic_vector(0 to 7); fpga_0_RS232_Uart_1_TX_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_ODT_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_Addr_pin : OUT std_logic_vector(12 downto 0); fpga_0_DDR2_SDRAM_DDR2_BankAddr_pin : OUT std_logic_vector(1 downto 0); fpga_0_DDR2_SDRAM_DDR2_CAS_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_CE_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_CS_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_RAS_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_WE_n_pin : OUT std_logic; fpga_0_DDR2_SDRAM_DDR2_Clk_pin : OUT std_logic_vector(1 downto 0); fpga_0_DDR2_SDRAM_DDR2_Clk_n_pin : OUT std_logic_vector(1 downto 0); fpga_0_DDR2_SDRAM_DDR2_DM_pin : OUT std_logic_vector(3 downto 0); fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O_pin : OUT std_logic; fpga_0_FLASH_Mem_A_pin : OUT std_logic_vector(8 to 31); fpga_0_FLASH_Mem_WEN_pin : OUT std_logic; fpga_0_FLASH_Mem_RPN_pin : OUT std_logic; fpga_0_FLASH_Mem_OEN_pin : OUT std_logic; fpga_0_FLASH_Mem_CEN_pin : OUT std_logic; fpga_core_0_FSL_S_Data_pin : IN std_logic_vector(0 to 31) ); END COMPONENT; signal test : std_logic_vector(0 to 31) := "00001111111111111111111111111111" ; begin IInst_system: system PORT MAP( fpga_0_RS232_Uart_1_RX_pin => fpga_0_RS232_Uart_1_RX_pin, fpga_0_RS232_Uart_1_TX_pin => fpga_0_RS232_Uart_1_TX_pin, fpga_0_DDR2_SDRAM_DDR2_ODT_pin => fpga_0_DDR2_SDRAM_DDR2_ODT_pin, fpga_0_DDR2_SDRAM_DDR2_Addr_pin => fpga_0_DDR2_SDRAM_DDR2_Addr_pin, fpga_0_DDR2_SDRAM_DDR2_BankAddr_pin => fpga_0_DDR2_SDRAM_DDR2_BankAddr_pin, fpga_0_DDR2_SDRAM_DDR2_CAS_n_pin => fpga_0_DDR2_SDRAM_DDR2_CAS_n_pin, fpga_0_DDR2_SDRAM_DDR2_CE_pin => fpga_0_DDR2_SDRAM_DDR2_CE_pin, fpga_0_DDR2_SDRAM_DDR2_CS_n_pin => fpga_0_DDR2_SDRAM_DDR2_CS_n_pin, fpga_0_DDR2_SDRAM_DDR2_RAS_n_pin => fpga_0_DDR2_SDRAM_DDR2_RAS_n_pin, fpga_0_DDR2_SDRAM_DDR2_WE_n_pin => fpga_0_DDR2_SDRAM_DDR2_WE_n_pin, fpga_0_DDR2_SDRAM_DDR2_Clk_pin => fpga_0_DDR2_SDRAM_DDR2_Clk_pin, fpga_0_DDR2_SDRAM_DDR2_Clk_n_pin => fpga_0_DDR2_SDRAM_DDR2_Clk_n_pin, fpga_0_DDR2_SDRAM_DDR2_DM_pin => fpga_0_DDR2_SDRAM_DDR2_DM_pin, fpga_0_DDR2_SDRAM_DDR2_DQS => fpga_0_DDR2_SDRAM_DDR2_DQS, fpga_0_DDR2_SDRAM_DDR2_DQS_n => fpga_0_DDR2_SDRAM_DDR2_DQS_n, fpga_0_DDR2_SDRAM_DDR2_DQ => fpga_0_DDR2_SDRAM_DDR2_DQ , fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I_pin => fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I_pin, fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O_pin => fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O_pin, fpga_0_FLASH_Mem_A_pin => fpga_0_FLASH_Mem_A_pin, fpga_0_FLASH_Mem_DQ_pin => fpga_0_FLASH_Mem_DQ_pin, fpga_0_FLASH_Mem_WEN_pin => fpga_0_FLASH_Mem_WEN_pin, fpga_0_FLASH_Mem_RPN_pin => fpga_0_FLASH_Mem_RPN_pin, fpga_0_FLASH_Mem_OEN_pin => fpga_0_FLASH_Mem_OEN_pin, fpga_0_FLASH_Mem_CEN_pin => fpga_0_FLASH_Mem_CEN_pin, sys_clk_pin => sys_clk_pin, sys_rst_pin => sys_rst_pin, fpga_core_0_FSL_S_Data_pin => test ); end Behavioral; **************************************** und die mhs-datei: PARAMETER VERSION = 2.1.0 PORT fpga_0_RS232_Uart_1_RX_pin = fpga_0_RS232_Uart_1_RX, DIR = I PORT fpga_0_RS232_Uart_1_TX_pin = fpga_0_RS232_Uart_1_TX, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_ODT_pin = fpga_0_DDR2_SDRAM_DDR2_ODT, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_Addr_pin = fpga_0_DDR2_SDRAM_DDR2_Addr, DIR = O, VEC = [12:0] PORT fpga_0_DDR2_SDRAM_DDR2_BankAddr_pin = fpga_0_DDR2_SDRAM_DDR2_BankAddr, DIR = O, VEC = [1:0] PORT fpga_0_DDR2_SDRAM_DDR2_CAS_n_pin = fpga_0_DDR2_SDRAM_DDR2_CAS_n, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_CE_pin = fpga_0_DDR2_SDRAM_DDR2_CE, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_CS_n_pin = fpga_0_DDR2_SDRAM_DDR2_CS_n, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_RAS_n_pin = fpga_0_DDR2_SDRAM_DDR2_RAS_n, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_WE_n_pin = fpga_0_DDR2_SDRAM_DDR2_WE_n, DIR = O PORT fpga_0_DDR2_SDRAM_DDR2_Clk_pin = fpga_0_DDR2_SDRAM_DDR2_Clk, DIR = O, VEC = [1:0] PORT fpga_0_DDR2_SDRAM_DDR2_Clk_n_pin = fpga_0_DDR2_SDRAM_DDR2_Clk_n, DIR = O, VEC = [1:0] PORT fpga_0_DDR2_SDRAM_DDR2_DM_pin = fpga_0_DDR2_SDRAM_DDR2_DM, DIR = O, VEC = [3:0] PORT fpga_0_DDR2_SDRAM_DDR2_DQS = fpga_0_DDR2_SDRAM_DDR2_DQS, DIR = IO, VEC = [3:0] PORT fpga_0_DDR2_SDRAM_DDR2_DQS_n = fpga_0_DDR2_SDRAM_DDR2_DQS_n, DIR = IO, VEC = [3:0] PORT fpga_0_DDR2_SDRAM_DDR2_DQ = fpga_0_DDR2_SDRAM_DDR2_DQ, DIR = IO, VEC = [31:0] PORT fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I_pin = fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I, DIR = I PORT fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O_pin = fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O, DIR = O PORT fpga_0_FLASH_Mem_A_pin = fpga_0_FLASH_Mem_A, DIR = O, VEC = [8:31] PORT fpga_0_FLASH_Mem_DQ_pin = fpga_0_FLASH_Mem_DQ, DIR = IO, VEC = [0:7] PORT fpga_0_FLASH_Mem_WEN_pin = fpga_0_FLASH_Mem_WEN, DIR = O PORT fpga_0_FLASH_Mem_RPN_pin = fpga_0_FLASH_Mem_RPN, DIR = O PORT fpga_0_FLASH_Mem_OEN_pin = fpga_0_FLASH_Mem_OEN, DIR = O PORT fpga_0_FLASH_Mem_CEN_pin = fpga_0_FLASH_Mem_CEN, DIR = O PORT sys_clk_pin = dcm_clk_s, DIR = I, SIGIS = CLK, CLK_FREQ = 125000000 PORT sys_rst_pin = sys_rst_s, DIR = I, RST_POLARITY = 0, SIGIS = RST PORT fpga_core_0_FSL_S_Data_pin = fpga_core_0_FSL_S_Data, DIR = I, VEC = [0:31] BEGIN microblaze PARAMETER INSTANCE = microblaze_0 PARAMETER C_INTERCONNECT = 1 PARAMETER HW_VER = 7.10.a PARAMETER C_DEBUG_ENABLED = 1 PARAMETER C_AREA_OPTIMIZED = 1 PARAMETER C_FSL_LINKS = 1 BUS_INTERFACE DLMB = dlmb BUS_INTERFACE ILMB = ilmb BUS_INTERFACE DPLB = mb_plb BUS_INTERFACE IPLB = mb_plb BUS_INTERFACE DEBUG = microblaze_0_dbg BUS_INTERFACE SFSL0 = fpga_core_0_to_microblaze_0 BUS_INTERFACE MFSL0 = microblaze_0_to_fpga_core_0 PORT MB_RESET = mb_reset END BEGIN plb_v46 PARAMETER INSTANCE = mb_plb PARAMETER HW_VER = 1.02.a PORT PLB_Clk = sys_clk_s PORT SYS_Rst = sys_bus_reset END BEGIN lmb_v10 PARAMETER INSTANCE = ilmb PARAMETER HW_VER = 1.00.a PORT LMB_Clk = sys_clk_s PORT SYS_Rst = sys_bus_reset END BEGIN lmb_v10 PARAMETER INSTANCE = dlmb PARAMETER HW_VER = 1.00.a PORT LMB_Clk = sys_clk_s PORT SYS_Rst = sys_bus_reset END BEGIN lmb_bram_if_cntlr PARAMETER INSTANCE = dlmb_cntlr PARAMETER HW_VER = 2.10.a PARAMETER C_BASEADDR = 0x00000000 PARAMETER C_HIGHADDR = 0x00001fff BUS_INTERFACE SLMB = dlmb BUS_INTERFACE BRAM_PORT = dlmb_port END BEGIN lmb_bram_if_cntlr PARAMETER INSTANCE = ilmb_cntlr PARAMETER HW_VER = 2.10.a PARAMETER C_BASEADDR = 0x00000000 PARAMETER C_HIGHADDR = 0x00001fff BUS_INTERFACE SLMB = ilmb BUS_INTERFACE BRAM_PORT = ilmb_port END BEGIN bram_block PARAMETER INSTANCE = lmb_bram PARAMETER HW_VER = 1.00.a BUS_INTERFACE PORTA = ilmb_port BUS_INTERFACE PORTB = dlmb_port END BEGIN xps_uartlite PARAMETER INSTANCE = RS232_Uart_1 PARAMETER HW_VER = 1.00.a PARAMETER C_BAUDRATE = 9600 PARAMETER C_DATA_BITS = 8 PARAMETER C_ODD_PARITY = 0 PARAMETER C_USE_PARITY = 0 PARAMETER C_SPLB_CLK_FREQ_HZ = 62500000 PARAMETER C_BASEADDR = 0x84000000 PARAMETER C_HIGHADDR = 0x8400ffff BUS_INTERFACE SPLB = mb_plb PORT RX = fpga_0_RS232_Uart_1_RX PORT TX = fpga_0_RS232_Uart_1_TX END BEGIN mpmc PARAMETER INSTANCE = DDR2_SDRAM PARAMETER HW_VER = 4.00.a PARAMETER C_NUM_PORTS = 1 PARAMETER C_MEM_PARTNO = MT47H32M16-5E PARAMETER C_DDR2_DQSN_ENABLE = 1 PARAMETER C_MEM_DATA_WIDTH = 32 PARAMETER C_MEM_CLK_WIDTH = 2 PARAMETER C_MEM_DM_WIDTH = 4 PARAMETER C_MEM_DQS_WIDTH = 4 PARAMETER C_PIM0_BASETYPE = 2 PARAMETER C_MPMC_CLK0_PERIOD_PS = 8000 PARAMETER C_MPMC_BASEADDR = 0x88000000 PARAMETER C_MPMC_HIGHADDR = 0x8fffffff BUS_INTERFACE SPLB0 = mb_plb PORT DDR2_ODT = fpga_0_DDR2_SDRAM_DDR2_ODT PORT DDR2_Addr = fpga_0_DDR2_SDRAM_DDR2_Addr PORT DDR2_BankAddr = fpga_0_DDR2_SDRAM_DDR2_BankAddr PORT DDR2_CAS_n = fpga_0_DDR2_SDRAM_DDR2_CAS_n PORT DDR2_CE = fpga_0_DDR2_SDRAM_DDR2_CE PORT DDR2_CS_n = fpga_0_DDR2_SDRAM_DDR2_CS_n PORT DDR2_RAS_n = fpga_0_DDR2_SDRAM_DDR2_RAS_n PORT DDR2_WE_n = fpga_0_DDR2_SDRAM_DDR2_WE_n PORT DDR2_Clk = fpga_0_DDR2_SDRAM_DDR2_Clk PORT DDR2_Clk_n = fpga_0_DDR2_SDRAM_DDR2_Clk_n PORT DDR2_DM = fpga_0_DDR2_SDRAM_DDR2_DM PORT DDR2_DQS = fpga_0_DDR2_SDRAM_DDR2_DQS PORT DDR2_DQS_n = fpga_0_DDR2_SDRAM_DDR2_DQS_n PORT DDR2_DQ = fpga_0_DDR2_SDRAM_DDR2_DQ PORT DDR2_DQS_Div_I = fpga_0_DDR2_SDRAM_DDR2_DQS_Div_I PORT DDR2_DQS_Div_O = fpga_0_DDR2_SDRAM_DDR2_DQS_Div_O PORT MPMC_Clk0 = DDR2_SDRAM_mpmc_clk_s PORT MPMC_Clk90 = DDR2_SDRAM_mpmc_clk_90_s PORT MPMC_Rst = sys_periph_reset END BEGIN xps_mch_emc PARAMETER INSTANCE = FLASH PARAMETER HW_VER = 1.00.a PARAMETER C_MCH_PLB_CLK_PERIOD_PS = 16000 PARAMETER C_NUM_BANKS_MEM = 1 PARAMETER C_MAX_MEM_WIDTH = 8 PARAMETER C_MEM0_WIDTH = 8 PARAMETER C_INCLUDE_DATAWIDTH_MATCHING_0 = 1 PARAMETER C_SYNCH_MEM_0 = 0 PARAMETER C_TCEDV_PS_MEM_0 = 70000 PARAMETER C_TAVDV_PS_MEM_0 = 70000 PARAMETER C_TWC_PS_MEM_0 = 70000 PARAMETER C_TWP_PS_MEM_0 = 45000 PARAMETER C_THZOE_PS_MEM_0 = 25000 PARAMETER C_THZCE_PS_MEM_0 = 25000 PARAMETER C_TLZWE_PS_MEM_0 = 5000 PARAMETER C_MEM0_BASEADDR = 0x82000000 PARAMETER C_MEM0_HIGHADDR = 0x82ffffff BUS_INTERFACE SPLB = mb_plb PORT Mem_A = fpga_0_FLASH_Mem_A_split PORT Mem_WEN = fpga_0_FLASH_Mem_WEN PORT Mem_DQ = fpga_0_FLASH_Mem_DQ PORT Mem_OEN = fpga_0_FLASH_Mem_OEN PORT Mem_CEN = fpga_0_FLASH_Mem_CEN PORT Mem_RPN = fpga_0_FLASH_Mem_RPN END BEGIN util_bus_split PARAMETER INSTANCE = FLASH_util_bus_split_1 PARAMETER HW_VER = 1.00.a PARAMETER C_SIZE_IN = 32 PARAMETER C_LEFT_POS = 0 PARAMETER C_SPLIT = 8 PORT Sig = fpga_0_FLASH_Mem_A_split PORT Out2 = fpga_0_FLASH_Mem_A END BEGIN clock_generator PARAMETER INSTANCE = clock_generator_0 PARAMETER HW_VER = 2.00.a PARAMETER C_EXT_RESET_HIGH = 1 PARAMETER C_CLKIN_FREQ = 125000000 PARAMETER C_CLKOUT0_FREQ = 62500000 PARAMETER C_CLKOUT0_BUF = TRUE PARAMETER C_CLKOUT0_PHASE = 0 PARAMETER C_CLKOUT0_GROUP = NONE PARAMETER C_CLKOUT1_FREQ = 125000000 PARAMETER C_CLKOUT1_BUF = TRUE PARAMETER C_CLKOUT1_PHASE = 0 PARAMETER C_CLKOUT1_GROUP = DCM0 PARAMETER C_CLKOUT2_FREQ = 125000000 PARAMETER C_CLKOUT2_BUF = TRUE PARAMETER C_CLKOUT2_PHASE = 90 PARAMETER C_CLKOUT2_GROUP = DCM0 PORT CLKOUT0 = sys_clk_s PORT CLKOUT1 = DDR2_SDRAM_mpmc_clk_s PORT CLKOUT2 = DDR2_SDRAM_mpmc_clk_90_s PORT CLKIN = dcm_clk_s PORT LOCKED = Dcm_all_locked PORT RST = net_gnd END BEGIN mdm PARAMETER INSTANCE = debug_module PARAMETER HW_VER = 1.00.b PARAMETER C_MB_DBG_PORTS = 1 PARAMETER C_USE_UART = 1 PARAMETER C_UART_WIDTH = 8 PARAMETER C_BASEADDR = 0x84400000 PARAMETER C_HIGHADDR = 0x8440ffff BUS_INTERFACE SPLB = mb_plb BUS_INTERFACE MBDEBUG_0 = microblaze_0_dbg PORT Debug_SYS_Rst = Debug_SYS_Rst END BEGIN proc_sys_reset PARAMETER INSTANCE = proc_sys_reset_0 PARAMETER HW_VER = 2.00.a PARAMETER C_EXT_RESET_HIGH = 0 PORT Slowest_sync_clk = sys_clk_s PORT Dcm_locked = Dcm_all_locked PORT Ext_Reset_In = sys_rst_s PORT MB_Reset = mb_reset PORT Bus_Struct_Reset = sys_bus_reset PORT MB_Debug_Sys_Rst = Debug_SYS_Rst PORT Peripheral_Reset = sys_periph_reset END BEGIN fsl_v20 PARAMETER INSTANCE = fpga_core_0_to_microblaze_0 PARAMETER HW_VER = 2.11.a PARAMETER C_USE_CONTROL = 0 PARAMETER C_FSL_DEPTH = 1 PARAMETER C_EXT_RESET_HIGH = 0 PORT FSL_Clk = sys_clk_s PORT SYS_Rst = sys_rst_s END BEGIN fpga_core PARAMETER INSTANCE = fpga_core_0 PARAMETER HW_VER = 1.00.a BUS_INTERFACE MFSL = fpga_core_0_to_microblaze_0 BUS_INTERFACE SFSL = microblaze_0_to_fpga_core_0 PORT FSL_Clk = sys_clk_s PORT FSL_M_Full = net_gnd PORT FSL_S_Exists = net_vcc PORT FSL_S_Data = fpga_core_0_FSL_S_Data PORT FSL_Rst = net_gnd END BEGIN fsl_v20 PARAMETER INSTANCE = microblaze_0_to_fpga_core_0 PARAMETER HW_VER = 2.11.a PARAMETER C_USE_CONTROL = 0 PARAMETER C_FSL_DEPTH = 1 PARAMETER C_EXT_RESET_HIGH = 0 PORT FSL_Clk = sys_clk_s PORT SYS_Rst = sys_rst_s END *********************************************** und die C Applikation ( der auskommentierte Teil diente zur Umwandlung in HEX): #include "xparameters.h" #include "fsl.h" #include "mb_interface.h" #include "xutil.h" int main() { unsigned int output_0[1] = {1}; signed int i; signed int j=7; int k; char digit[8]; getfslx(output_0[0], 0, FSL_DEFAULT); // for (i = 28; i >= 0; i -= 4) //{ // // // digit[j] = (output_0[0] >> i) & 0x0000000f; // if (digit[j] > 9) // {digit[j] = (digit[j] + 'A' - 10); // j--; // } // else // digit[j] = (digit[j] + '0'); // j--; //} // // for (k = 7; k >= 0; k--) // // // { // xil_printf("%c", digit[k]); // } // // xil_printf("\n"); xil_printf(" %d ", output_0[0]); return 0; } Vielen Dank, Peter
ich will auf jeden Fall 32 Bit vom top.vhd Design in Ise ins Microblaze übertragen. gibt es vielleicht eine Alternative zu FSL?
soweit so gut, danke für die Antwort. aber man sagt doch FSL soll einfach sein. wenns geht würde ich bei dieser bleiben, wenn die Daten übertragen werden. kann mir jemand bei diesem Problem helfen?
Also mit dem FSL ist es wirklich am einfachsten. Wir haben das mal gemacht, und zwar vom ML405 eine FSL Verbindung zu einer externen Hardware aufgebaut. Auf der ext. Hardware gabs zwei FIFOs, einer für jede Richtung. Dann mussten quasi nur die FIFO-Signale an den FSL gebunden werden, was ja sehr einfach ist, da das ja ein FIFO-Interface ist. Und dann musst du halt auf dem MicroBlaze das FSL Status-Register pollen, schauen, ob FSL_Exist High ist und wenn ja, ein Wort auslesen. Danach wieder schauen, ob Exist, usw. Ist halt sehr ineffektiv die Geschichte. Aber ich denke mal, du bekommst nix sinnvolles, weil du vor dem Lesen gar nicht schaust, ob überhaupt was da ist.
Es reicht nicht einfach nur Data uf irgeneinen Wert zu legen... Du mußt auch noch die FSL Steuersignale bedienen sonst kommt nix an. Lad dir am besten mal das Datenblatt zum FSL runter da steht drinn wie es gemacht wird. Einfach bedeutet nicht das es leicht ist, oder das man irgenwie durch ausprobieren zum Ziel kommt.
Genau. Der FSL ist ein doppelter FIFO. Da gibts genau wie an normalen FIFOs einen Takt, weil das ganze synchron ist, ein Write, ein Full zum Schreiben in Richtung des Prozessors und ein Exist, Read und Takt zum Lesen vom Prozessor. Im Datenblatt des FSL ist das Timing ja exakt beschrieben. Und dann halt immer das Status-Register pollen, ob Daten verfügbar sind.
Christian R. schrieb: > beschrieben. Und dann halt immer das Status-Register pollen, ob Daten > verfügbar sind. Oder einfach blokierend lesen ;)
Kommt diese Register-Lesen Funktion nicht immer zurück, auch wenn keine neuen Daten da sind? Ich müsste mal in den alten Quellcodes wühlen, aber ich hab das noch so in Erinnerung....Oder hat Xilinx da eine Unterfunktion irgendwo, die auf das Exist wartet und solange blockiert?
Es gibt definitiv drei "funktionen": - blockierend ohne interupts - blockierend mit interupts - nicht blockierend Die blockierenden funktionen halten dein Programm auch solange auf bis ein Wort vom FSL gelesen werden konnte.
danke für so viele Antworten! ich dachte die ganzen Steuersignale wie FSL_Exist werden automatisch per VHDL im FSL Bus gesteuert. Ich arbeite zwar schon eine Weile mit VHDL, aber mit C auf Register zugreifen usw., mit dem bin ich noch nicht vertraut. hier noch mein File von generierten fpga_core, da weise ich eben nur eine Bitfolge dem signal sum zu: entity fpga_core is port ( -- DO NOT EDIT BELOW THIS LINE --------------------- -- Bus protocol ports, do not add or delete. FSL_Clk : in std_logic; FSL_Rst : in std_logic; FSL_S_Clk : out std_logic; FSL_S_Read : out std_logic; FSL_S_Data : in std_logic_vector(0 to 31); FSL_S_Control : in std_logic; FSL_S_Exists : in std_logic; FSL_M_Clk : out std_logic; FSL_M_Write : out std_logic; FSL_M_Data : out std_logic_vector(0 to 31); FSL_M_Control : out std_logic; FSL_M_Full : in std_logic -- DO NOT EDIT ABOVE THIS LINE --------------------- ); attribute SIGIS : string; attribute SIGIS of FSL_Clk : signal is "Clk"; attribute SIGIS of FSL_S_Clk : signal is "Clk"; attribute SIGIS of FSL_M_Clk : signal is "Clk"; end fpga_core; ------------------------------------------------------------------------ ------ -- Architecture Section ------------------------------------------------------------------------ ------ -- In this section, we povide an example implementation of ENTITY fpga_core -- that does the following: -- -- 1. Read all inputs -- 2. Add each input to the contents of register 'sum' which -- acts as an accumulator -- 3. After all the inputs have been read, write out the -- content of 'sum' into the output FSL bus NUMBER_OF_OUTPUT_WORDS times -- -- You will need to modify this example or implement a new architecture for -- ENTITY fpga_core to implement your coprocessor architecture EXAMPLE of fpga_core is -- Total number of input data. constant NUMBER_OF_INPUT_WORDS : natural := 1; -- Total number of output data constant NUMBER_OF_OUTPUT_WORDS : natural := 1; type STATE_TYPE is (Idle, Read_Inputs, Write_Outputs); signal state : STATE_TYPE; -- Accumulator to hold sum of inputs read at any point in time signal sum : std_logic_vector(0 to 31); -- Counters to store the number inputs read & outputs written signal nr_of_reads : natural range 0 to NUMBER_OF_INPUT_WORDS - 1; signal nr_of_writes : natural range 0 to NUMBER_OF_OUTPUT_WORDS - 1; begin FSL_S_Read <= FSL_S_Exists when state = Read_Inputs else '0'; FSL_M_Write <= not FSL_M_Full when state = Write_Outputs else '0'; FSL_M_Data <= sum; The_SW_accelerator : process (FSL_Clk) is begin -- process The_SW_accelerator if FSL_Clk'event and FSL_Clk = '1' then -- Rising clock edge if FSL_Rst = '1' then -- Synchronous reset (active high) -- CAUTION: make sure your reset polarity is consistent with the -- system reset polarity state <= Idle; nr_of_reads <= 0; nr_of_writes <= 0; sum <= (others => '0'); else case state is when Idle => if (FSL_S_Exists = '1') then state <= Read_Inputs; nr_of_reads <= NUMBER_OF_INPUT_WORDS - 1; sum <= (others => '0'); end if; when Read_Inputs => if (FSL_S_Exists = '1') then -- Coprocessor function (Adding) happens here sum <= "10101100101011001010110010101100"; if (nr_of_reads = 0) then state <= Write_Outputs; nr_of_writes <= NUMBER_OF_OUTPUT_WORDS - 1; else nr_of_reads <= nr_of_reads - 1; end if; end if; when Write_Outputs => if (nr_of_writes = 0) then state <= Idle; else if (FSL_M_Full = '0') then nr_of_writes <= nr_of_writes - 1; end if; end if; end case; end if; end if; end process The_SW_accelerator; end architecture EXAMPLE;
es wird mehrmals erwähnt, dass man die Daten pollen kann. Was genau bedeutet das?
Naja, es gibt bei jedem FSL ein Status-Register, da kann man schauen, ob neue Daten anliegen, bzw. die anliegenden Daten gültig sind. Aber Läubi schrieb ja, es geht auch ohne Pollen. Musst mal die FSL Register suchen...
ich möchte noch eins klarstellen: in meinem generierten core, der an FSL angebunden ist, werden die Statusregister ja überprüft. und zu meinem Problem nochmal: ich habe ein projekt in ise generiert. In diesem Projekt gibt es ein zähler signal, dass ich an den microblaze schicken möchte. Dazu wurde im EDK per "Create Peripheral" ein Core generiert und das ganze EDK-Projekt in ISE eingebunden. Das FSL_S_Data von diesem Core wird external gemacht, damit die Verbindung zwischen dem ISE und EDK Projekt hergestellt werden kann. nun, wenn sich der zähler ändert soll es an den microblaze geschickt werden. wie kann man das realisieren? Wie kann ich im C die FSL Ports vom Microblaze abfragen? ...Gute nacht, Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.