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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Изменение содержимого ROM без перекомпиляции проекта (ISE)
BSACPLD
сообщение Feb 27 2013, 09:07
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



Когда я работал с Quartus, то для обновления содержимого ROM было достаточно выполнить команду Update Memory Initialization File.
Как сделать то же самое в ISE?
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Feb 27 2013, 09:49
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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 раз встал.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Feb 27 2013, 10:04
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



data2mem - обновляет содержимое памяти непосредственно в bit файле
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Feb 27 2013, 10:24
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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?
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Feb 27 2013, 10:45
Сообщение #5


Местный
***

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



Цитата(BSACPLD @ Feb 27 2013, 14:24) *
Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи.


А можно немного поподробнее.
И как быть если память сделана не с помощью Coregen, а описана на Verilog с инициализацией через readmemh?


Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?!
Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся.
Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект.
В итоге содержимое памяти будет изменено. А как иначе еще?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Feb 27 2013, 11:00
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



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

В Quartus это делается путём изменения уже сгенерённых файлов.
Для каждой памяти создаётся mif файл в котором хранится образ памяти.
При генерации файла прошивки mif файлы вставляются в соответствующее место в sof и pof файлах.
Для изменения содержимого памяти достаточно обновить mif файлы и заново сгенерить sof и pof.
Т.е. не нужно перекомпилировать весь проект.

Мой вопрос состоит в том, как сделать то же самое в ISE.
Go to the top of the page
 
+Quote Post
klop
сообщение Feb 27 2013, 11:07
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



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


Еще раз - Data2Mem. Меняются биты в битстриме для конфигурации. Все работает.
Go to the top of the page
 
+Quote Post
vladec
сообщение Feb 27 2013, 11:09
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Feb 27 2013, 11:30
Сообщение #9


Местный
***

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



Цитата(vladec @ Feb 27 2013, 15:09) *
По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать.

Так я никогда не делал. Дальше перехожу на сторону слушателей=)


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Feb 27 2013, 19:25
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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 файл?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Feb 28 2013, 05:37
Сообщение #11


Местный
***

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



Я не гигант в ПЛИСах, но есть понятие (для Xilinx) память на BRAM и "распределённая".
так вот в BRAM содержимое памяти можно менять без компиляции всего проекта, а вот в случае с "распределённой" "затруднительно".
Go to the top of the page
 
+Quote Post
vladec
сообщение Feb 28 2013, 07:34
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Если Вы читали тот материал по Picoblaze, то там указано, что bmm файл формируется из базы проекта - файла ncd при помощи утилиты pb_bmm.exe (pb_bmm %1.bmm %2.ncd). Это просто. Сложнее Вам будет создать .mem файл (файл содержимого памяти), для Picoblaze он создается ассемблером, а Вы можете попробовать сделать его либо в ассемблере, написав соответствующий исходный файл, либо создать в Коргенераторе .coe файл и отредактировать его нужным образом текстовым редактором.
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Feb 28 2013, 15:35
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 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 местах.

Прикрепленные файлы
Прикрепленный файл  test_cpu.rar ( 8.52 мегабайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
BSACPLD
сообщение Feb 28 2013, 17:51
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



С mem файлом разобрался. 08.gif
Теперь осталось разобраться с автоматической генерацией bmm файла.
Go to the top of the page
 
+Quote Post
vladec
сообщение Mar 1 2013, 05:38
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Скачиваете у Xilinx материал по Пикоблейз3 ищите папку DATA2MEM_assistance и в ней все есть. Сам bmm, как я понимаю, позволяет найти в битовом потоке позицию с которой начинается блок нужной Вам памяти.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 10:00
Рейтинг@Mail.ru


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