2016-10-03 11 views
1

Я сбросил ОЗУ с рабочего устройства, которое я хочу частично подражать на FPGA. В Xilinx ISE я использовал Core Generator для создания модуля RAM.Как инициировать Xilinx ISE Block Memory из необработанного дампа памяти?

Теперь есть возможность инициализировать ОЗУ с помощью файла COE. К сожалению, я не могу найти инструмент, который может конвертировать необработанный дамп памяти в файл COE. Или что-нибудь в СЕ.

Каков наилучший способ для этого?

+2

[ИПК файла Синтаксис] (http://www.xilinx.com/itp/xilinx10/isehelp/cgn_r_coe_file_syntax.htm) и [AR # 11744 ОСНОВНОЙ генератор - подсказки для создания Коу файлов для ядер памяти (блок памяти, дист Память, ПЗУ, ОЗУ и т. Д.)] (Http://www.xilinx.com/support/answers/11744.html). Также см. [Как инициализировать BRAM с файлом COE для Xilinx FPGA] (http://tipsarea.com/2014/05/21/how-to-initialize-bram-with-coe-file-for-xilinx-fpga/) если ваша версия ISE блокирует доступ к редактору памяти из графического интерфейса. Найдено googling * COE Xilinx ISE *. – user1155120

+0

[COEGen v0.01 - Создание файлов .coe из двоичных файлов для Xilinx FPGA block RAM] (https://wornwinter.wordpress.com/2015/02/07/coegen-v0-01-generate-coe-files-from -binary-файлы-для-Xilinx-FPGA-блок-RAM /). Этот поиск по поисковым запросам * бинарный формат COE Xilinx *. – user1155120

+0

[SRecord 1.64] (http://srecord.sourceforge.net/download.html) требует libboost (так же как и COEGen), тот же поисковый запрос googling. – user1155120

ответ

1

Инициализация BRAM в FPGA может быть выполнена с использованием генератора CORE, но я предпочитаю писать VHDL, чтобы инструмент синтеза отображал BRAM или таблицу поиска (LUT). Обратите внимание: я никогда не использую Core Gen для создания/инициализации ОЗУ.

Я не уверен, как форматируются данные, но вот фрагмент кода VHDL о том, как читать текстовый файл, где каждая строка содержит двоичную строку и создает сигнал с содержимым файла. Вам нужно заранее знать формат файла и его длину.

-- define a type for the lookup table (LUT) 
type lut_type is array(0 to 2**12-1) of std_logic_vector(15 downto 0); 

impure function init_lut_from_file(lut_file_name : in string) 
    return lut_type is 
    FILE lut_file  : TEXT open READ_MODE is lut_file_name; 
    variable lut_line : line; 
    variable bv_temp : bit_vector(15 downto 0); 
    variable lut  : lut_type; 
begin 
    for i in lut_type'range loop 
     readline(lut_file, lut_line); 
     read(lut_line, bv_temp); 
     lut(i) := to_stdlogicvector(bv_temp); 
    end loop; 
    return lut; 
end function; 

signal lut   : lut_type := init_lut_from_file("c:\data.txt"); 

выше функция нечистым будет считывать c:\data.txt, содержащие 16-разрядные двоичные строки на каждой строке файла в LUT с 2^12 = 4096 записей.

Затем вы можете написать дополнительный код для чтения & напишите lut, как обычно.

+0

Это синтезируется? Он отлично подойдет для ROM и моделирования только для чтения, по крайней мере, и в супер супер-финальной проектной ОЗУ не нужно будет инициализировать. – Pepijn

+0

Да, я использовал этот код для реализации таблицы поиска в FPGA Xilinx с использованием пакета проектирования ISE и протестирован в FPGA Virtex6. –