Создание ПЗУ с одним портом на Spartan 6 с помощью Xilinx ISE Design Suite

У меня возникли проблемы с проектированием однопортового ПЗУ на плате Spartan 6. Я использую предоставленный основной генератор для создания блочной памяти и выбираю ПЗУ с одним портом с шириной 32 бита и глубиной 256 с файлом coe, который просто считает от 0 до 255. Я помещаю ПЗУ в свой vhdl как компонент и добавляю XilinxCoreLib как библиотека. Когда я пытаюсь создать программный файл, я получаю ошибку перевода:

logical block 'rom1' with type 'rom' could not be
resolved. A pin name misspelling can cause this, a missing edif or ngc file,
case mismatch between the block name and the edif or ngc file name, or the
misspelling of a type name. Symbol 'rom' is not supported in target
'spartan6'.

В настоящее время я использую Xilinx ISE 13.1, если это помогает. Я чувствую, что это должно быть очень легко сделать, но я не мог найти, как это сделать.

Изменить: Спасибо всем, это была комбинация вещей. Неправильная оценка скорости, и я не добавил копию файла ngc в мой рабочий каталог. В будущем я буду использовать массивы.


person NorthGuard    schedule 13.04.2013    source источник


Ответы (4)


Поскольку вы добавляете сгенерированное Xilinx ядро ​​в свой дизайн в ISE, вам необходимо добавить как файл VHD, так и файл NGC через «Добавить источник» в меню «Проект».

Еще проще, в зависимости от того, насколько большим должно быть ваше ПЗУ и какие данные в него входят, было бы даже не беспокоиться о ядре Xilinx, а использовать чистый VHDL для объявления постоянного массива и значений инициализации прямо в вашем файле VHDL. Вот пример:

type array_ROM is array (0 to NUMBER_OF_ROWS-1) of std_logic_vector (ROM_BITWIDTH-1 downto 0);

signal my_ROM : array_ROM
    :=
        (
            x"12345678",
            x"ABCDEF01",
            ...
            x"01010101"
        );

Теперь вы не помещаете elipsis (...) в этот список инициализации, просто помещаете строки констант с разрядностью, соответствующей ROM_BITWIDTH. NUMBER_OF_ROWS - это количество адресов, которые вам нужны в ПЗУ. В этом примере ROM_BITWIDTH нужно установить равным 32, поскольку я использовал 32-битные шестнадцатеричные константы в списке инициализации. Будучи сигналом, он на самом деле может быть изменен, поэтому, если вам нужно, чтобы он был постоянным, просто используйте «константа» вместо сигнала.

person AknorJaden    schedule 17.04.2013

Самый простой способ - полностью забыть об инструментах производителя и просто объявить постоянный массив!

Если это в пакете, отдельном от остальной части дизайна, несколько строк printf или простой скрипт могут сгенерировать шаблон VHDL вокруг содержимого, которое поступает от вашего ассемблера или любого другого инструмента, создающего фактические данные.

person user_1818839    schedule 13.04.2013

Я предполагаю, что проблема в том, как говорится в сообщении, в неправильном написании. чтобы получить правильное объявление / создание экземпляра компонента, выберите ваш rom.xco в окне дизайна ISE. затем выберите «просмотреть шаблон создания экземпляра vhdl» в окне процесса. используйте объявление компонента и создание экземпляра, описанные в нем.

person baldyHDL    schedule 14.04.2013

Есть несколько причин, которые могут вызвать эту проблему, одна из них заключается в том, что вы используете блок, который был сгенерирован для другого семейства FPGA, и используете его внутри Spartan6. во-вторых, вы могли сгенерировать ПЗУ, используя более старую версию инструмента, и с тех пор оболочка для ПЗУ изменилась. Вы можете либо сгенерировать массив, как предложил Брайан, и забыть о типе ПЗУ для конкретного инструмента, либо повторно сгенерировать IP в настройках текущего проекта и посмотреть, как это пойдет.

person FarhadA    schedule 14.04.2013