Надежность логического вывода блока цилиндров Xilinx ISE - PullRequest
2 голосов
/ 01 февраля 2011

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

У меня не установлено xilinx ise на моей машине (сегодня), но я обычно выводю блочные блоки памяти с использованием специального кодирования, в основномполагаясь на:

type   ram_type is array(2**ADDR_WIDTH-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0);

Мой вопрос: не могли бы вы сказать мне, если ISE выведет правильный блок памяти с

signed(DATA_WIDTH-1 downto 0)` instead of `std_logic_vector(DATA_WIDTH-1 downto 0)

или даже больше (в упаковке):

subtype signed8 is signed(7 downto 0)

, а затем

type   ram_type is array(2**ADDR_WIDTH-1 downto 0) of signed8;

Я знаю, что синтезаторы иногда обидчивы ...

Ответы [ 3 ]

5 голосов
/ 02 февраля 2011

Это общий комментарий, не относящийся к вашей проблеме.Попытка предположить второе предположение о том, что инструмент синтеза не очень продуктивен.Результаты могут отличаться в зависимости от версии инструмента и контекста вашего дизайна и реализации (различные переключатели, цели оптимизации, целевая архитектура и т. Д.). ISE / XST бесплатна ... загрузите его и попробуйте свой код.Тогда вы могли бы задать вопрос более осмысленно ... «Почему XST-версия XY не выводит блочную оперативную память в этих условиях?»Затем мы также можем обсудить, имеет ли XST правильное и ожидаемое поведение.

5 голосов
/ 01 февраля 2011

Я не проверял это сам, но «подписанный» тип получен из типа std_logic, поэтому я не понимаю, почему это не должно работать.

Предполагается, что вы используете XST для синтезаРуководство пользователя XST - хорошее место для начала, чтобы увидеть, что Xilinx официально заявляет, что XST распознает вывод оперативной памяти. Руководство пользователя XST для 12.4 (pdf)

3 голосов
/ 01 февраля 2011

Помимо ссылки, предложенной Джошем (которая подробно описывает реализацию ОЗУ в XST), вот еще один документ на веб-сайте Xilinx, в котором объясняются различные реализации ОЗУ и их компромиссы (стр. 76):

http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_4/sim.pdf

В качестве примечания, я использовал подход «массива» и отлично работал для небольших блоков RAM. Но я должен сказать, что я пытался использовать его для генерации модуля памяти, который был намного больше, чем размер 1 BlockRAM в моем Spartan-6, и он не мог вывести его (XST пытался реализовать его как распределенную оперативную память). Я решил эту проблему путем непосредственного создания экземпляров BlockRAM Macros Xilinx и создания надлежащих модулей декодирования памяти для выбора / записи / чтения в соответствующие отдельные BlockRAM в модуле памяти.

...