|
Изменение содержимого ROM без перекомпиляции проекта (ISE) |
|
|
|
Feb 27 2013, 09:49
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(BSACPLD @ Feb 27 2013, 13:07)  Когда я работал с Quartus, то для обновления содержимого ROM было достаточно выполнить команду Update Memory Initialization File. Как сделать то же самое в ISE? К сожалению в ISE одним кликом не обойтись. Необходимо зайти в настройки ROM и указать новый путь к файлу с содержимым, а потом заново сгенерить ROM.
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Feb 27 2013, 10:24
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Цитата(Dmitriyspb @ Feb 27 2013, 13:49)  К сожалению в ISE одним кликом не обойтись. Необходимо зайти в настройки ROM и указать новый путь к файлу с содержимым, а потом заново сгенерить ROM. Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи. Цитата(dsmv @ Feb 27 2013, 14:04)  data2mem - обновляет содержимое памяти непосредственно в bit файле А можно немного поподробнее. И как быть если память сделана не с помощью Coregen, а описана на Verilog с инициализацией через readmemh?
|
|
|
|
|
Feb 27 2013, 10:45
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(BSACPLD @ Feb 27 2013, 14:24)  Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи.
А можно немного поподробнее. И как быть если память сделана не с помощью Coregen, а описана на Verilog с инициализацией через readmemh? Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?! Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся. Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект. В итоге содержимое памяти будет изменено. А как иначе еще?
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Feb 27 2013, 11:00
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Цитата(Dmitriyspb @ Feb 27 2013, 14:45)  Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?! Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся. Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект. В итоге содержимое памяти будет изменено. А как иначе еще? В Quartus это делается путём изменения уже сгенерённых файлов. Для каждой памяти создаётся mif файл в котором хранится образ памяти. При генерации файла прошивки mif файлы вставляются в соответствующее место в sof и pof файлах. Для изменения содержимого памяти достаточно обновить mif файлы и заново сгенерить sof и pof. Т.е. не нужно перекомпилировать весь проект. Мой вопрос состоит в том, как сделать то же самое в ISE.
|
|
|
|
|
Feb 27 2013, 11:07
|
Местный
  
Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788

|
Цитата(Dmitriyspb @ Feb 27 2013, 14:45)  Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?! Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся. Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект. В итоге содержимое памяти будет изменено. А как иначе еще? Еще раз - Data2Mem. Меняются биты в битстриме для конфигурации. Все работает.
|
|
|
|
|
Feb 27 2013, 11:30
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498

|
Цитата(vladec @ Feb 27 2013, 15:09)  По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать. Так я никогда не делал. Дальше перехожу на сторону слушателей=)
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Feb 27 2013, 19:25
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Про Data2Mem прочитал, но я так и не понял, как создавать *.bmm файл. Допустим у меня есть вот такая память: CODE module program_ram #( parameter ADDR_WIDTH = 12, parameter DATA_WIDTH = 16, parameter INIT_FILE = "init_file.ver" ) ( input clock_a, input clock_b, input addressstall_a, input addressstall_b, input [ADDR_WIDTH-1:0] address_a, input [ADDR_WIDTH-1:0] address_b, input [DATA_WIDTH-1:0] data_a, input [DATA_WIDTH-1:0] data_b, input wren_a, input wren_b, input enable_out_a, input enable_out_b, input aclr_out_a, input aclr_out_b, output reg [DATA_WIDTH-1:0] q_a, output reg [DATA_WIDTH-1:0] q_b ) ;
reg [ADDR_WIDTH-1:0] address_reg_a ; wire [ADDR_WIDTH-1:0] address_mux_a ; reg [ADDR_WIDTH-1:0] address_reg_b ; wire [ADDR_WIDTH-1:0] address_mux_b ; reg [DATA_WIDTH-1:0] mem [2**ADDR_WIDTH-1:0] /* synthesis syn_ramstyle = "no_rw_check" */ ;
integer i ;
initial begin $readmemh (INIT_FILE, mem) ; address_reg_a <= 0 ; address_reg_b <= 0 ; q_a <= 0 ; q_b <= 0 ; end
assign address_mux_a = (addressstall_a)? address_reg_a:address_a ;
always @(posedge clock_a) begin address_reg_a <= address_mux_a ; if (wren_a) mem[address_mux_a] <= data_a ; end
always @(posedge clock_a or posedge aclr_out_a) begin if (aclr_out_a) q_a <= 0 ; else if (enable_out_a) q_a <= mem[address_reg_a] ; end
assign address_mux_b = (addressstall_b)? address_reg_b:address_b ;
always @(posedge clock_b) begin address_reg_b <= address_mux_b ; if (wren_b) mem[address_mux_b] <= data_b ; end
always @(posedge clock_b or posedge aclr_out_b) begin if (aclr_out_b) q_b <= 0 ; else if (enable_out_b) q_b <= mem[address_reg_b] ; end
endmodule
Как мне создать для неё *.bmm файл?
|
|
|
|
|
Feb 28 2013, 15:35
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Цитата(vladec @ Feb 28 2013, 11:34)  Если Вы читали тот материал по Picoblaze, то там указано, что bmm файл формируется из базы проекта - файла ncd при помощи утилиты pb_bmm.exe (pb_bmm %1.bmm %2.ncd). Это просто. Сложнее Вам будет создать .mem файл (файл содержимого памяти), для Picoblaze он создается ассемблером, а Вы можете попробовать сделать его либо в ассемблере, написав соответствующий исходный файл, либо создать в Коргенераторе .coe файл и отредактировать его нужным образом текстовым редактором. А можно привести конкретные ссылки? И где брать этот pb_bmm.exe? В папке с ISE14.1 его нет. И что такого особенного в mem файле? Насколько я понял из UG658, mem файл имеет точно такой же формат как и файл для инициализации памяти на Verilog. Или это не одно и то же? Я попробовал создать bmm файл вручную, как это описано в UG658, но при его использовании Data2MEM портит данные в bit файле. Проверял я это следующим образом: 1. Сгенерил bit файл (test_cpu_1.bit). 2. Поменял два байта в файле инициализации памяти. 3. Пересобрал проект (test_cpu.bit). 4. Сравнил старый и новый файлы - они отличаются в 7 местах. 5. Обновил файл test_cpu_1.bit через Data2MEM - различие в 17 местах.
|
|
|
|
|
Mar 2 2013, 22:17
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Цитата(Дмитрий Мазунин @ Mar 1 2013, 14:39)  Всегда инициализируем брам в битстриме (зашиваем загрузчик). BMM - карта брамов. bitinit -p xc6slx75 ../system.mhs -bm ./system_bd.bmm -bt ./prepare_sys.bit -o ./download_sdk.bit -lp ../../../../IPlib/hw -pe microblaze_0 ../SDK/SDK_Projects/loader/Debug/loader.elf Ну и какое отношение это имеет к моему вопросу о том, откуда брать bmm файл? Цитата(vladec @ Mar 1 2013, 08:38)  Скачиваете у Xilinx материал по Пикоблейз3 ищите папку DATA2MEM_assistance и в ней все есть. Сам bmm, как я понимаю, позволяет найти в битовом потоке позицию с которой начинается блок нужной Вам памяти. pb_bmm.exe не работает с RAMB36 (Virtex-6).
|
|
|
|
|
Mar 4 2013, 06:49
|
Местный
  
Группа: Свой
Сообщений: 259
Регистрация: 19-09-05
Из: Екатеринбург
Пользователь №: 8 715

|
Цитата(BSACPLD @ Mar 3 2013, 04:17)  Ну и какое отношение это имеет к моему вопросу о том, откуда брать bmm файл? BMM файл формируется при сборке системы автоматически. Лежит в каталоге system.
|
|
|
|
|
Mar 4 2013, 08:58
|
Местный
  
Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056

|
Цитата(Дмитрий Мазунин @ Mar 4 2013, 09:49)  BMM файл формируется при сборке системы автоматически. Лежит в каталоге system. Это только для microblaze, для памяти, описанной на Verilog, BMM файл не создаётся. Цитата(vladec @ Mar 4 2013, 09:20)  На сколькоя я знаю, для Virtex6 Xilinx пока что такую штуку еще не сделал В общем, у Xilinx как всегда всё через одно место. Пришлось написать tcl скрипт для извлечения необходимой информации из ncd файла. Скрипт и тестовый проект во вложении - может быть, кому-нибудь пригодятся. Для RAMB36 пока есть небольшой глюк - скрипт не отрабатывает последние 8 байт.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|