надежность вывода блочной оперативной памяти Xilinx ISE

У меня есть вопрос относительно надежности логического логического вывода 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;

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


person JCLL    schedule 01.02.2011    source источник


Ответы (3)


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

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

person Josh    schedule 01.02.2011

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

person Saar Drimer    schedule 01.02.2011

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

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

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

person Erick Tejada    schedule 01.02.2011