реклама на сайте
подробности

 
 
> Включение кэширования в Microblaze
D-Luxe
сообщение Jan 12 2012, 18:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Работаю с Microblaze. Ниже приведен *.mhs файл проекта. В общем как настраивается кэш в mhs файле я вроде понял - 2 XCL канала подключаются и generic'и настраиваются ( выбираются размер кэша C_CACHE_BYTE_SIZE = 4096 ). Сам кэш располагается в BRAM насколько я понял.

Только вот загвоздка в том с какого адреса начинаются кэш данных и команд в 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


Как найти где находится кэш в BRAM ? Помогите пожалуйста.


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Чиповод
сообщение Jan 24 2012, 09:26
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 11-01-11
Из: Москва
Пользователь №: 62 160



Цитата
Никак.
Надо заранее указывать (еще перед синтезом FPGA) диапазон памяти который будет под кешем работать.


Это, я так понимаю здесь задается? Пробовал так делать - запись в память вообще не проходит. Сейчас заметил чекбокс Use Cache Links for All Memory Accesses. Он меня спасет?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Jan 24 2012, 09:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(Чиповод @ Jan 24 2012, 13:26) *
Это, я так понимаю здесь задается? Пробовал так делать - запись в память вообще не проходит. Сейчас заметил чекбокс Use Cache Links for All Memory Accesses. Он меня спасет?

Да - здесь.
Что значит "Пробовал так делать - запись в память вообще не проходит" ?

Use Cache Links for All Memory Accesses
Согласно документации - это доступ ко всей памяти по шине XCL/AXI вне зависимости от вкл/выкл кеша процессора (функции типа microblaze_enable_icache(); )

Сообщение отредактировал Alex77 - Jan 24 2012, 09:36
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016