Только вот загвоздка в том с какого адреса начинаются кэш данных и команд в BRAM, среда сама как-то распределяет а вот как неизвестно.
В программе кэш включается функцией microblaze_enable_icache(), но помимо этого нужно его проинициализировать, а вот для этого нужно знать адреса кэша в BRAM.
Код
BEGIN microblaze
PARAMETER INSTANCE = microblaze_0
PARAMETER HW_VER = 7.10.a
PARAMETER C_USE_BARREL = 1
PARAMETER C_FAMILY = spartan3e
PARAMETER C_INSTANCE = microblaze_0
PARAMETER C_AREA_OPTIMIZED = 1
PARAMETER C_DEBUG_ENABLED = 1
PARAMETER C_USE_ICACHE = 1
PARAMETER C_USE_DCACHE = 1
PARAMETER C_ALLOW_ICACHE_WR = 1
PARAMETER C_ALLOW_DCACHE_WR = 1
PARAMETER C_ICACHE_ALWAYS_USED = 1
PARAMETER C_DCACHE_ALWAYS_USED = 1
PARAMETER C_CACHE_BYTE_SIZE = 4096
PARAMETER C_ICACHE_BASEADDR = 0x85000000
PARAMETER C_ICACHE_HIGHADDR = 0x85ffffff
# PARAMETER C_ICACHE_LINE_LEN = 8
PARAMETER C_DCACHE_BYTE_SIZE = 4096
PARAMETER C_DCACHE_BASEADDR = 0x85000000
PARAMETER C_DCACHE_HIGHADDR = 0x85ffffff
# PARAMETER C_DCACHE_LINE_LEN = 8
BUS_INTERFACE IXCL = ixcl
BUS_INTERFACE DXCL = dxcl
BUS_INTERFACE DPLB = mb_plb
BUS_INTERFACE IPLB = mb_plb
BUS_INTERFACE DLMB = dlmb
BUS_INTERFACE ILMB = ilmb
BUS_INTERFACE DEBUG = mdm_0_MBDEBUG_0
PORT MB_RESET = mb_reset
PORT DEBUG_RST = Debug_Rst
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 mpmc
PARAMETER INSTANCE = mpmc_0
PARAMETER HW_VER = 4.00.a
PARAMETER C_MEM_PARTNO = CUSTOM
PARAMETER C_MEM_TYPE = SDRAM
PARAMETER C_MPMC_CLK0_PERIOD_PS = 10000
PARAMETER C_MEM_DATA_WIDTH = 32
PARAMETER C_MEM_PART_DATA_DEPTH = 4
PARAMETER C_MEM_PART_DATA_WIDTH = 32
PARAMETER C_MEM_PART_NUM_ROW_BITS = 12
PARAMETER C_MEM_PART_NUM_COL_BITS = 8
PARAMETER C_MEM_PART_CAS_A_FMAX = 100
PARAMETER C_MEM_PART_CAS_A = 6
PARAMETER C_MEM_PART_TRAS = 4200
PARAMETER C_MEM_PART_TRASMAX = 12000000
PARAMETER C_MEM_PART_TRC = 70000
PARAMETER C_MEM_PART_TWR = 14000
PARAMETER C_MEM_PART_TRRD = 14000
PARAMETER C_MEM_PART_TRCD = 20000
PARAMETER C_MEM_PART_TREFI = 5625000
PARAMETER C_MEM_PART_TRFC = 70000
PARAMETER C_MEM_PART_TRP = 10000
PARAMETER C_MEM_PART_NUM_BANK_BITS = 2
PARAMETER C_NUM_PORTS = 3
PARAMETER C_PIM0_BASETYPE = 1
PARAMETER C_PIM2_BASETYPE = 2
PARAMETER C_SPLB2_NATIVE_DWIDTH = 32
PARAMETER C_MPMC_BASEADDR = 0x85000000
PARAMETER C_MPMC_HIGHADDR = 0x85FFFFFF
PARAMETER C_PIM1_BASETYPE = 1
PARAMETER C_USE_STATIC_PHY = 1
BUS_INTERFACE SPLB2 = mb_plb
BUS_INTERFACE XCL0 = ixcl
BUS_INTERFACE XCL1 = dxcl
PORT SDRAM_DM = SDRAM_DM
PORT SDRAM_DQ = SDRAM_DQ
PORT SDRAM_Addr = SDRAM_Addr
PORT SDRAM_BankAddr = SDRAM_BankAddr
PORT SDRAM_WE_n = SDRAM_WE_n
PORT SDRAM_CAS_n = SDRAM_CAS_n
PORT SDRAM_RAS_n = SDRAM_RAS_n
PORT SDRAM_CE = SDRAM_CE
PORT SDRAM_CS_n = SDRAM_CS_n
PORT SDRAM_Clk = SDRAM_Clk
PORT MPMC_InitDone = SDRAM_INITDONE
PORT MPMC_Rst = sys_periph_reset
PORT MPMC_Clk0 = v4_sys_clk_s
PORT MPMC_Clk_Mem = v4_sys_clk_s
PORT MPMC_Clk90 = v4_sys_clk_90_s
END
PARAMETER INSTANCE = microblaze_0
PARAMETER HW_VER = 7.10.a
PARAMETER C_USE_BARREL = 1
PARAMETER C_FAMILY = spartan3e
PARAMETER C_INSTANCE = microblaze_0
PARAMETER C_AREA_OPTIMIZED = 1
PARAMETER C_DEBUG_ENABLED = 1
PARAMETER C_USE_ICACHE = 1
PARAMETER C_USE_DCACHE = 1
PARAMETER C_ALLOW_ICACHE_WR = 1
PARAMETER C_ALLOW_DCACHE_WR = 1
PARAMETER C_ICACHE_ALWAYS_USED = 1
PARAMETER C_DCACHE_ALWAYS_USED = 1
PARAMETER C_CACHE_BYTE_SIZE = 4096
PARAMETER C_ICACHE_BASEADDR = 0x85000000
PARAMETER C_ICACHE_HIGHADDR = 0x85ffffff
# PARAMETER C_ICACHE_LINE_LEN = 8
PARAMETER C_DCACHE_BYTE_SIZE = 4096
PARAMETER C_DCACHE_BASEADDR = 0x85000000
PARAMETER C_DCACHE_HIGHADDR = 0x85ffffff
# PARAMETER C_DCACHE_LINE_LEN = 8
BUS_INTERFACE IXCL = ixcl
BUS_INTERFACE DXCL = dxcl
BUS_INTERFACE DPLB = mb_plb
BUS_INTERFACE IPLB = mb_plb
BUS_INTERFACE DLMB = dlmb
BUS_INTERFACE ILMB = ilmb
BUS_INTERFACE DEBUG = mdm_0_MBDEBUG_0
PORT MB_RESET = mb_reset
PORT DEBUG_RST = Debug_Rst
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 mpmc
PARAMETER INSTANCE = mpmc_0
PARAMETER HW_VER = 4.00.a
PARAMETER C_MEM_PARTNO = CUSTOM
PARAMETER C_MEM_TYPE = SDRAM
PARAMETER C_MPMC_CLK0_PERIOD_PS = 10000
PARAMETER C_MEM_DATA_WIDTH = 32
PARAMETER C_MEM_PART_DATA_DEPTH = 4
PARAMETER C_MEM_PART_DATA_WIDTH = 32
PARAMETER C_MEM_PART_NUM_ROW_BITS = 12
PARAMETER C_MEM_PART_NUM_COL_BITS = 8
PARAMETER C_MEM_PART_CAS_A_FMAX = 100
PARAMETER C_MEM_PART_CAS_A = 6
PARAMETER C_MEM_PART_TRAS = 4200
PARAMETER C_MEM_PART_TRASMAX = 12000000
PARAMETER C_MEM_PART_TRC = 70000
PARAMETER C_MEM_PART_TWR = 14000
PARAMETER C_MEM_PART_TRRD = 14000
PARAMETER C_MEM_PART_TRCD = 20000
PARAMETER C_MEM_PART_TREFI = 5625000
PARAMETER C_MEM_PART_TRFC = 70000
PARAMETER C_MEM_PART_TRP = 10000
PARAMETER C_MEM_PART_NUM_BANK_BITS = 2
PARAMETER C_NUM_PORTS = 3
PARAMETER C_PIM0_BASETYPE = 1
PARAMETER C_PIM2_BASETYPE = 2
PARAMETER C_SPLB2_NATIVE_DWIDTH = 32
PARAMETER C_MPMC_BASEADDR = 0x85000000
PARAMETER C_MPMC_HIGHADDR = 0x85FFFFFF
PARAMETER C_PIM1_BASETYPE = 1
PARAMETER C_USE_STATIC_PHY = 1
BUS_INTERFACE SPLB2 = mb_plb
BUS_INTERFACE XCL0 = ixcl
BUS_INTERFACE XCL1 = dxcl
PORT SDRAM_DM = SDRAM_DM
PORT SDRAM_DQ = SDRAM_DQ
PORT SDRAM_Addr = SDRAM_Addr
PORT SDRAM_BankAddr = SDRAM_BankAddr
PORT SDRAM_WE_n = SDRAM_WE_n
PORT SDRAM_CAS_n = SDRAM_CAS_n
PORT SDRAM_RAS_n = SDRAM_RAS_n
PORT SDRAM_CE = SDRAM_CE
PORT SDRAM_CS_n = SDRAM_CS_n
PORT SDRAM_Clk = SDRAM_Clk
PORT MPMC_InitDone = SDRAM_INITDONE
PORT MPMC_Rst = sys_periph_reset
PORT MPMC_Clk0 = v4_sys_clk_s
PORT MPMC_Clk_Mem = v4_sys_clk_s
PORT MPMC_Clk90 = v4_sys_clk_90_s
END
Как найти где находится кэш в BRAM ? Помогите пожалуйста.