Bad0512 2 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба Почему старый старый синтезатор Synplify умный, а новый Ise дурак. Я думаю, если языковая конструкция правильна , то это не каракули и синтезатор должен её обрабатывать. Использование трехстабильного буфера есть в стандарте. Никто не "умный" и не "дурак", просто одни синтезаторы позволяют использовать двусмысленные конструкции и как-то (на свой страх и риск) их синтезируют, а другие - не позволяют. Проверьте кстати что у вас не запрещена оптимизация по всему дизайну (например стоит флаг kyp_hierarchy = 1). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба Я думаю, если языковая конструкция правильна , то это не каракули и синтезатор должен её обрабатывать. Использование трехстабильного буфера есть в стандарте. Должен, да не обязан. Он имеет полное право сказать - "в железе нету тристабильных буферов и идите вы лесом с ними", что, собственно, и происходит, но другими словами. Стандарт не обязывает их конвертировать в мультиплексоры. Возможно, у Вас отключена оптимизация сквозь интерфейсы модулей, и он из-за этого ограничения не хочет (а точнее, не имеет права) превращать их в мультиплексоры, или глобально "Convert Tristates To Logic" запрещена в опциях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба На языке - это правильная конструкция, стандарт VHDL её поддерживает. Если конструкция правильная, то синтезатор не должен её забраковывать, если он не кривой. process(clk) begin if clk'event and clk='1' then q <= a; elsif clk'event and clk='0' then q <= b; end if; end process; Покажите теперь прямой синтезатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Крюк 0 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба приведите кусочки модулей что вы соединили воедино, и картинку верхнего модуля. у меня настройки всех модулей так передаются, в каждом на выходе шина данных которая выдает либо ЗЗЗЗ либо данные, если выбран модуль. Модулей 12 штук, висят на одной шине, все работает, делаю в ISE. а вот эти BUS1, BUS2 случаем нигде не словили 2 источника? Пока перерыв для экспериментов, сделал тестовые проект с трехстабильными буферами, через Ise пропустился, но факт, что старый проект совсем не менял, но Ise выдает именно вышеуказанную ошибку. Думаю выясню в чем дело, обязательно сообщу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба Думаю выясню в чем дело, обязательно сообщу. Так ведь не интересно. Какие проблемы вывести на верхний уровень чистую шину. И там объединить. ENTITY oper_selector IS GENERIC ( width_sel : NATURAL :=8; width_data : NATURAL :=8 ); PORT ( sel : IN STD_LOGIC_VECTOR(width_sel-1 DOWNTO 0); data : IN STD_LOGIC_VECTOR(width_data-1 DOWNTO 0); o : OUT STD_LOGIC ); END oper_selector; ARCHITECTURE sim_arch OF oper_selector IS BEGIN g1:FOR k IN 0 TO width_data-1 GENERATE o <= data(k) WHEN (sel(k)='1') ELSE 'Z'; END GENERATE; END sim_arch; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Крюк 0 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба Что было - в одном из нижних модулей я сделал 32-разрядный порт, но в качестве трехстабильных использовал только два выхода, к остальным 30 выходам модуля внутри ничего не подсоединил, вверху к 32-разрядный порт нижнего модуля подсоединил к 32-разрядной верхней шине. Synplify соображал, что если я использую только часть выходов модуля, то на неиспользуемые не надо обращать внимание. Ise же начал ругаться на выходы всех нижних модулей без исключения , а не на выходы этого конкретного модуля, где в качестве трехстабильных использовалась только часть выходов. После того как сделал выход шины с модуля 2-разрядным - все пошло. Так ведь не интересно. Какие проблемы вывести на верхний уровень чистую шину. И там объединить. ENTITY oper_selector IS GENERIC ( width_sel : NATURAL :=8; width_data : NATURAL :=8 ); PORT ( sel : IN STD_LOGIC_VECTOR(width_sel-1 DOWNTO 0); data : IN STD_LOGIC_VECTOR(width_data-1 DOWNTO 0); o : OUT STD_LOGIC ); END oper_selector; ARCHITECTURE sim_arch OF oper_selector IS BEGIN g1:FOR k IN 0 TO width_data-1 GENERATE o <= data(k) WHEN (sel(k)='1') ELSE 'Z'; END GENERATE; END sim_arch; Это дело вкуса, как писать код. Использование трехстабильных буферов в нижних модулях или вверху - без разницы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 февраля, 2014 Опубликовано 13 февраля, 2014 · Жалоба я думаю выше народ прав. У вас стоит галочка сохранять иерархию, это в настройках синтезатора - имплементатора keep hierarchy, она не дает синтезатору разбирать модули и собирать в один большой проект. А в этом случае он реально должен на выходе модуля сделать шину с 3 состоянием, чего ему сделать не суждено. Думаю так! проверьте состояние галочки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться