Перейти к содержанию
    

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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

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

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если Вы читали тот материал по 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С mem файлом разобрался. :08:

Теперь осталось разобраться с автоматической генерацией bmm файла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...