Jump to content

    
Sign in to follow this  
aem

Xst:528 - Multi-source in Unit <Top>

Recommended Posts

Почему старый старый синтезатор Synplify умный, а новый Ise дурак. Я думаю, если языковая конструкция правильна , то это не каракули и синтезатор должен её обрабатывать.

Использование трехстабильного буфера есть в стандарте.

Никто не "умный" и не "дурак", просто одни синтезаторы позволяют использовать двусмысленные конструкции и как-то (на свой страх и риск) их синтезируют, а другие - не позволяют.

Проверьте кстати что у вас не запрещена оптимизация по всему дизайну (например стоит флаг kyp_hierarchy = 1).

 

 

Share this post


Link to post
Share on other sites
Я думаю, если языковая конструкция правильна , то это не каракули и синтезатор должен её обрабатывать.

Использование трехстабильного буфера есть в стандарте.

Должен, да не обязан. Он имеет полное право сказать - "в железе нету тристабильных буферов и идите вы лесом с ними", что, собственно, и происходит, но другими словами. Стандарт не обязывает их конвертировать в мультиплексоры. Возможно, у Вас отключена оптимизация сквозь интерфейсы модулей, и он из-за этого ограничения не хочет (а точнее, не имеет права) превращать их в мультиплексоры, или глобально "Convert Tristates To Logic" запрещена в опциях.

Share this post


Link to post
Share on other sites
На языке - это правильная конструкция, стандарт 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;

 

Покажите теперь прямой синтезатор.

Share this post


Link to post
Share on other sites
приведите кусочки модулей что вы соединили воедино, и картинку верхнего модуля.

 

у меня настройки всех модулей так передаются, в каждом на выходе шина данных которая выдает либо ЗЗЗЗ либо данные, если выбран модуль.

Модулей 12 штук, висят на одной шине, все работает, делаю в ISE.

 

 

 

 

а вот эти

BUS1, BUS2 случаем нигде не словили 2 источника?

 

Пока перерыв для экспериментов, сделал тестовые проект с трехстабильными буферами, через Ise пропустился,

но факт, что старый проект совсем не менял, но Ise выдает именно вышеуказанную ошибку.

Думаю выясню в чем дело, обязательно сообщу.

 

Share this post


Link to post
Share on other sites
Думаю выясню в чем дело, обязательно сообщу.

 

Так ведь не интересно. Какие проблемы вывести на верхний уровень чистую шину.

И там объединить.

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;

 

Share this post


Link to post
Share on other sites

Что было - в одном из нижних модулей я сделал 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;

 

Это дело вкуса, как писать код. Использование трехстабильных буферов в нижних модулях или вверху - без разницы.

 

Share this post


Link to post
Share on other sites

я думаю выше народ прав. У вас стоит галочка сохранять иерархию, это в настройках синтезатора - имплементатора keep hierarchy, она не дает синтезатору разбирать модули и собирать в один большой проект. А в этом случае он реально должен на выходе модуля сделать шину с 3 состоянием, чего ему сделать не суждено.

 

Думаю так! проверьте состояние галочки

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this