Jump to content

    
Sign in to follow this  
BSACPLD

Изменение содержимого ROM без перекомпиляции проекта (ISE)

Recommended Posts

Когда я работал с Quartus, то для обновления содержимого ROM было достаточно выполнить команду Update Memory Initialization File.

Как сделать то же самое в ISE?

Share this post


Link to post
Share on other sites
Когда я работал с Quartus, то для обновления содержимого ROM было достаточно выполнить команду Update Memory Initialization File.

Как сделать то же самое в ISE?

 

К сожалению в ISE одним кликом не обойтись. Необходимо зайти в настройки ROM и указать новый путь к файлу с содержимым, а потом заново сгенерить ROM.

Share this post


Link to post
Share on other sites
К сожалению в ISE одним кликом не обойтись. Необходимо зайти в настройки ROM и указать новый путь к файлу с содержимым, а потом заново сгенерить ROM.

Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи.

 

data2mem - обновляет содержимое памяти непосредственно в bit файле

А можно немного поподробнее.

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

Share this post


Link to post
Share on other sites
Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи.

 

 

А можно немного поподробнее.

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

 

Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?!

Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся.

Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект.

В итоге содержимое памяти будет изменено. А как иначе еще?

Share this post


Link to post
Share on other sites
Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?!

Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся.

Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект.

В итоге содержимое памяти будет изменено. А как иначе еще?

В Quartus это делается путём изменения уже сгенерённых файлов.

Для каждой памяти создаётся mif файл в котором хранится образ памяти.

При генерации файла прошивки mif файлы вставляются в соответствующее место в sof и pof файлах.

Для изменения содержимого памяти достаточно обновить mif файлы и заново сгенерить sof и pof.

Т.е. не нужно перекомпилировать весь проект.

 

Мой вопрос состоит в том, как сделать то же самое в ISE.

Share this post


Link to post
Share on other sites
Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?!

Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся.

Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект.

В итоге содержимое памяти будет изменено. А как иначе еще?

 

Еще раз - Data2Mem. Меняются биты в битстриме для конфигурации. Все работает.

Share this post


Link to post
Share on other sites

По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать.

Share this post


Link to post
Share on other sites
По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать.

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

Share this post


Link to post
Share on other sites

Про Data2Mem прочитал, но я так и не понял, как создавать *.bmm файл.

Допустим у меня есть вот такая память:

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 файл?

Share this post


Link to post
Share on other sites

Я не гигант в ПЛИСах, но есть понятие (для Xilinx) память на BRAM и "распределённая".

так вот в BRAM содержимое памяти можно менять без компиляции всего проекта, а вот в случае с "распределённой" "затруднительно".

Share this post


Link to post
Share on other sites

Если Вы читали тот материал по Picoblaze, то там указано, что bmm файл формируется из базы проекта - файла ncd при помощи утилиты pb_bmm.exe (pb_bmm %1.bmm %2.ncd). Это просто. Сложнее Вам будет создать .mem файл (файл содержимого памяти), для Picoblaze он создается ассемблером, а Вы можете попробовать сделать его либо в ассемблере, написав соответствующий исходный файл, либо создать в Коргенераторе .coe файл и отредактировать его нужным образом текстовым редактором.

Share this post


Link to post
Share on other sites
Если Вы читали тот материал по 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

Share this post


Link to post
Share on other sites

Скачиваете у Xilinx материал по Пикоблейз3 ищите папку DATA2MEM_assistance и в ней все есть. Сам bmm, как я понимаю, позволяет найти в битовом потоке позицию с которой начинается блок нужной Вам памяти.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this