Перейти к содержанию
    

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

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

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

приведите кусочки модулей что вы соединили воедино, и картинку верхнего модуля.

 

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

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

 

 

 

 

а вот эти

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

 

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...