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

Lattice Diamond обновление содержимого блочной памяти

Понемногу начал изучать Lattice.

Сделал проект на ECP5 в котором блочная память используется для хранения памяти программ RISC-V.

Вопрос можно ли как-то обновлять содержимое блочной памяти не пересобирая весь проект целиком?

Может быть есть что-то типа утилиты updatemem как в Vivado?

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


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

Да, можно. Для этого есть ECO-Editor. Во вкладке Memory Initialization можно выбрать необходимый BRAM, добавить файл инициализации, сохранить и сгенерировать заново бинарник.

В ECO-Editor'e можно изменять так же параметры многих других компонент ПЛИСины.

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


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

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".

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


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

Я использовал ECO-editor для обновления BRAM-блоков с программой для MICO32 soft-процессора. Elf-бинарник, создаваемый при компиляции сишного проекта, конвертировал в *.mem файл и обновлял с помощью ECO-editor'a.

Diamond весьма капризный в плане подключения подобных файлов. Можно для начала попробовать поработать с mem-редактором. Создать новый Memory File (File -> New -> File... -> Others Files -> Memory Files) и поэксперементировать с разными форматами, размерностями и прочим.

 

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


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

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)
				) ;

 

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


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

Quote

Можете выложить пример *.mem файла для MICO32 и пример включения BRAM?

Проект, в котором я обновлял память процессора *.mem - файлом, к сожалению, восстановить сейчас не удастся. Но там я BRAM подключал не вручную, он автоматически генерировался при создании ядра mico-процессора. В top-файле я использовал лишь instance всего ядра.

Сейчас я попробовал создать тестовую память в Clarity Designer с такими параметрами:

ram_dp_gen.thumb.png.fcc9d5b11dcaaaa42ae74b9d35c0a6da.png

Подгрузил к ней инициализирующий mem-файл:

mem_file.thumb.png.9423feaa1e8b693fa9021d24fd06366f.png

 

После компилляции в ECO-editor'е ещё раз попробовал подцепить этот файл, вроде всё получилось удачно:

eco_editor.thumb.png.d40f5106244ccb8094d74ef6f8d8be02.png

 

Я пишу на 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
                );

 

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


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

On 10/14/2021 at 9:05 AM, GriXa said:

После компилляции в ECO-editor'е ещё раз попробовал подцепить этот файл, вроде всё получилось удачно:

Не уверен. На скриншоте написано failed.

Я собственно уже разобрался.

Оказалось, что ECO Editor некорректно работает с BRAM с Byte Enable.
Поскольку у меня не предполагается байтовая запись для памяти программ, я просто заменил BRAM на вариант без Byte Enable и все стало нормально обновляться.

update_mem.thumb.png.83863955dc636649c524959770ad0e34.png

В итоге получилось вот так:

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
...

 

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


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

Цитата

Не уверен. На скриншоте написано failed.

А, да, извиняюсь, не посмотрели и неправильный скриншот отправил.

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


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

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

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

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

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

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

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

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

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

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