BSACPLD 15 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба Когда я работал с Quartus, то для обновления содержимого ROM было достаточно выполнить команду Update Memory Initialization File. Как сделать то же самое в ISE? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба Когда я работал с Quartus, то для обновления содержимого ROM было достаточно выполнить команду Update Memory Initialization File. Как сделать то же самое в ISE? К сожалению в ISE одним кликом не обойтись. Необходимо зайти в настройки ROM и указать новый путь к файлу с содержимым, а потом заново сгенерить ROM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsmv 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба data2mem - обновляет содержимое памяти непосредственно в bit файле Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба К сожалению в ISE одним кликом не обойтись. Необходимо зайти в настройки ROM и указать новый путь к файлу с содержимым, а потом заново сгенерить ROM. Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи. data2mem - обновляет содержимое памяти непосредственно в bit файле А можно немного поподробнее. И как быть если память сделана не с помощью Coregen, а описана на Verilog с инициализацией через readmemh? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба Но ведь в данном случае получается полная перекомпиляция проекта, а это не удовлетворяет условиям поставленной задачи. А можно немного поподробнее. И как быть если память сделана не с помощью Coregen, а описана на Verilog с инициализацией через readmemh? Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?! Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся. Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект. В итоге содержимое памяти будет изменено. А как иначе еще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?! Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся. Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект. В итоге содержимое памяти будет изменено. А как иначе еще? В Quartus это делается путём изменения уже сгенерённых файлов. Для каждой памяти создаётся mif файл в котором хранится образ памяти. При генерации файла прошивки mif файлы вставляются в соответствующее место в sof и pof файлах. Для изменения содержимого памяти достаточно обновить mif файлы и заново сгенерить sof и pof. Т.е. не нужно перекомпилировать весь проект. Мой вопрос состоит в том, как сделать то же самое в ISE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klop 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба Я конечно мог сильно отстать от жизни, но как вы планируете из менить содержимое памяти и не перекомпелировать проект?! Нет разницы между тем каким образом была создана память.... перекомпелировать проект в любом случае придётся. Если память писанная на veriloge, то необходимо заменить файл с содержимым памяти, а потом попросить ise вновь скомпилировать проект. В итоге содержимое памяти будет изменено. А как иначе еще? Еще раз - Data2Mem. Меняются биты в битстриме для конфигурации. Все работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladec 12 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба По поводу data2mem, то он обновляет содержимое памяти непосредственно в битовом потоке (bit файл) без перекомпиляции проекта. Скачайте материал по Picobleze3 на Spartan3 у Xilinx, там дан этот тулз и описано как с ним работать. Так я никогда не делал. Дальше перехожу на сторону слушателей=) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба Про 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 файл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 28 февраля, 2013 Опубликовано 28 февраля, 2013 · Жалоба Я не гигант в ПЛИСах, но есть понятие (для Xilinx) память на BRAM и "распределённая". так вот в BRAM содержимое памяти можно менять без компиляции всего проекта, а вот в случае с "распределённой" "затруднительно". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladec 12 28 февраля, 2013 Опубликовано 28 февраля, 2013 · Жалоба Если Вы читали тот материал по Picoblaze, то там указано, что bmm файл формируется из базы проекта - файла ncd при помощи утилиты pb_bmm.exe (pb_bmm %1.bmm %2.ncd). Это просто. Сложнее Вам будет создать .mem файл (файл содержимого памяти), для Picoblaze он создается ассемблером, а Вы можете попробовать сделать его либо в ассемблере, написав соответствующий исходный файл, либо создать в Коргенераторе .coe файл и отредактировать его нужным образом текстовым редактором. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 28 февраля, 2013 Опубликовано 28 февраля, 2013 · Жалоба Если Вы читали тот материал по 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 28 февраля, 2013 Опубликовано 28 февраля, 2013 · Жалоба С mem файлом разобрался. :08: Теперь осталось разобраться с автоматической генерацией bmm файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladec 12 1 марта, 2013 Опубликовано 1 марта, 2013 · Жалоба Скачиваете у Xilinx материал по Пикоблейз3 ищите папку DATA2MEM_assistance и в ней все есть. Сам bmm, как я понимаю, позволяет найти в битовом потоке позицию с которой начинается блок нужной Вам памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться