BSACPLD 9 21 августа, 2021 Опубликовано 21 августа, 2021 · Жалоба Понемногу начал изучать Lattice. Сделал проект на ECP5 в котором блочная память используется для хранения памяти программ RISC-V. Вопрос можно ли как-то обновлять содержимое блочной памяти не пересобирая весь проект целиком? Может быть есть что-то типа утилиты updatemem как в Vivado? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GriXa 0 30 августа, 2021 Опубликовано 30 августа, 2021 · Жалоба Да, можно. Для этого есть ECO-Editor. Во вкладке Memory Initialization можно выбрать необходимый BRAM, добавить файл инициализации, сохранить и сгенерировать заново бинарник. В ECO-Editor'e можно изменять так же параметры многих других компонент ПЛИСины. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 31 августа, 2021 Опубликовано 31 августа, 2021 · Жалоба On 8/30/2021 at 12:27 PM, GriXa said: Да, можно. Для этого есть ECO-Editor. Во вкладке Memory Initialization можно выбрать необходимый BRAM, добавить файл инициализации, сохранить и сгенерировать заново бинарник. В ECO-Editor'e можно изменять так же параметры многих других компонент ПЛИСины. Попробовал тот же самый файл инициализации, который использовал для изначальной инициализации pmi_ram_dq_be - пишет ошибку "Update memory initialization failed". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GriXa 0 1 сентября, 2021 Опубликовано 1 сентября, 2021 · Жалоба Я использовал ECO-editor для обновления BRAM-блоков с программой для MICO32 soft-процессора. Elf-бинарник, создаваемый при компиляции сишного проекта, конвертировал в *.mem файл и обновлял с помощью ECO-editor'a. Diamond весьма капризный в плане подключения подобных файлов. Можно для начала попробовать поработать с mem-редактором. Создать новый Memory File (File -> New -> File... -> Others Files -> Memory Files) и поэксперементировать с разными форматами, размерностями и прочим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 13 октября, 2021 Опубликовано 13 октября, 2021 · Жалоба On 9/1/2021 at 10:36 AM, GriXa said: Diamond весьма капризный в плане подключения подобных файлов. Можно для начала попробовать поработать с mem-редактором. Пробовал создавать в mem-редакторе bin и hex, 32 бит и 36 бит шириной - результат один. "Update memory initialization failed". Можете выложить пример *.mem файла для MICO32 и пример включения BRAM? У меня есть подозрение, что я как-то не так подключаю BRAM. В проекте ширина шины 32 бита, а в ECO Editor отображается 36 бит. pmi_ram_dq_be #( .pmi_addr_width ($clog2(DATA_SIZE)), .pmi_addr_depth (DATA_SIZE), .pmi_data_width (DATA_WIDTH), .pmi_regmode ("reg"), .pmi_gsr ("disable"), .pmi_resetmode ("async"), .pmi_optimization ("speed"), .pmi_init_file (INIT_FILE), .pmi_init_file_format ("hex"), .pmi_write_mode ("normal"), .pmi_family (DEVICE_FAMILY), .pmi_byte_size (8) ) program_ram ( .Reset (1'b0), .Clock (clock), .ClockEn (1'b1), .Address (address), .ByteEn ({(DATA_WIDTH/8){1'b1}}), .Data (data), .WE (wren), .Q (q) ) ; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GriXa 0 14 октября, 2021 Опубликовано 14 октября, 2021 · Жалоба Quote Можете выложить пример *.mem файла для MICO32 и пример включения BRAM? Проект, в котором я обновлял память процессора *.mem - файлом, к сожалению, восстановить сейчас не удастся. Но там я BRAM подключал не вручную, он автоматически генерировался при создании ядра mico-процессора. В top-файле я использовал лишь instance всего ядра. Сейчас я попробовал создать тестовую память в Clarity Designer с такими параметрами: Подгрузил к ней инициализирующий mem-файл: После компилляции в ECO-editor'е ещё раз попробовал подцепить этот файл, вроде всё получилось удачно: Я пишу на VHDL, кусок кода с BRAM-памятью выглядит у меня так: test_mem_inst : entity work.test_mem port map( WrAddress => (others => '0'), RdAddress => q_ra.read_addr(8 downto 0), Data => (others => '0'), WE => '0', RdClock => clk_100, RdClockEn => '1', Reset => rst, WrClock => rx_pclk_1, WrClockEn => '1', Q => mem_data_out ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба On 10/14/2021 at 9:05 AM, GriXa said: После компилляции в ECO-editor'е ещё раз попробовал подцепить этот файл, вроде всё получилось удачно: Не уверен. На скриншоте написано failed. Я собственно уже разобрался. Оказалось, что ECO Editor некорректно работает с BRAM с Byte Enable. Поскольку у меня не предполагается байтовая запись для памяти программ, я просто заменил BRAM на вариант без Byte Enable и все стало нормально обновляться. В итоге получилось вот так: pmi_ram_dq #( .pmi_addr_width ($clog2(DATA_SIZE)), .pmi_addr_depth (DATA_SIZE), .pmi_data_width (DATA_WIDTH), .pmi_regmode ("reg"), .pmi_gsr ("disable"), .pmi_resetmode ("async"), .pmi_optimization ("speed"), .pmi_init_file (INIT_FILE), .pmi_init_file_format ("hex"), .pmi_write_mode ("normal"), .pmi_family (DEVICE_FAMILY) ) program_ram ( .Reset (1'b0), .Clock (clock), .ClockEn (1'b1), .Address (address), .Data (data), .WE (wren), .Q (q) ) ; При этом формат *.mem файла представляет из себя обычный набор чисел в HEX формате: F01001B7 63618193 F0102137 C7010113 179060EF 00050463 061060EF 00000513 7B5050EF 16D060EF 0000006F 4ED002EF FD010113 00060413 00068493 00050F13 00058F93 ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GriXa 0 15 октября, 2021 Опубликовано 15 октября, 2021 · Жалоба Цитата Не уверен. На скриншоте написано failed. А, да, извиняюсь, не посмотрели и неправильный скриншот отправил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться