|
Изменение содержимого 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 местах.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|