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

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

Выскакивает ошибка Xst:528 - Multi-source in Unit <Top>

Пишу на VHDL.

Использую в нижнеуровневых модулях конструкцию типа:

в первом модуле

Q (15 downto 0) <= BUS1 when RD1 = '1' else "ZZZZZZZZZZZZZZZZ";

в первом модуле

Q (15 downto 0) <= BUS2 when RD2 = '1' else "ZZZZZZZZZZZZZZZZ";

 

RD1 и RD2 естественно разные сигналы.

 

в топ модуле выходы Q этих субмодулей соединяю.

 

Это аналог на VHDL использования буферов с тремя состояниями.

 

При использовании синтезатора Synplify синтез проходил без замечаний и проект работал нормально. При использовании для синтеза Ise выскакивает ошибка ошибка Xst:528 - Multi-source in Unit <Top>.

Я знаю, что эту конструкцию Synplify заменял на мультиплексор, почему синтезатор Ise этого не делает? Ведь языковая конструкция правильная.

 

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


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

а если RD2 и RD1 оба единицы?

 

в ISE мультиплексор имеет подобное описание, вопрос в том как вы соединили эти модули

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


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

При использовании синтезатора Synplify синтез проходил без замечаний и проект работал нормально. При использовании для синтеза Ise выскакивает ошибка ошибка Xst:528 - Multi-source in Unit <Top>.

Я знаю, что эту конструкцию Synplify заменял на мультиплексор, почему синтезатор Ise этого не делает? Ведь языковая конструкция правильная.

 

Не умеет. Или не хочет ;)

Внутренние шины с z-состояниями вроде как были в каких-то древних устройствах. Потом не стало. Сейчас уж точно нету. Для поддержки старого кода в ряде синтезаторов был сделан финт замены на мультиплексоры. Ну а в ряде не сделан или уже выкинут.

На мой взгляд это плохая практика, даже если ваш синтезатор это поддерживат. Пишите явно логику которую хотите, если не хотите разного рода сюрпризов.

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


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

а если RD2 и RD1 оба единицы?

 

в ISE мультиплексор имеет подобное описание, вопрос в том как вы соединили эти модули

 

 

Не могут быть обе единицы - это разные выходы адресного декодера. Главное - эта конструкция абсолютно нормально работала при использовании synplify, но не проходит при использовании Ise.

Так как Q - выходы с тремя состояниями, то они просто соединяются в топе (структурное описание на VHDL). Неужели в топе надо городит отдельный мультиплексор шин? Люди, как вы мультиплексируете шины при использовании Ise?

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


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

Люди, как вы мультиплексируете шины при использовании Ise?

Все как обычно... Из каждого модуля есть выходящие шины, есть входящие... На самом верхнем уровне - "квадрат с логикой", буфера к выводам и DCM.

А вот этажом ниже - все крупные модули и мультиплексор шин к ним...

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


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

Не умеет. Или не хочет ;)

Внутренние шины с z-состояниями вроде как были в каких-то древних устройствах. Потом не стало. Сейчас уж точно нету. Для поддержки старого кода в ряде синтезаторов был сделан финт замены на мультиплексоры. Ну а в ряде не сделан или уже выкинут.

На мой взгляд это плохая практика, даже если ваш синтезатор это поддерживает. Пишите явно логику которую хотите, если не хотите разного рода сюрпризов.

На языке - это правильная конструкция, стандарт VHDL её поддерживает. Если конструкция правильная, то синтезатор не должен её забраковывать, если он не кривой.

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


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

да говорю же, так и мультипликсирую

 

на верилоге так

out <= (CS == 0) ? DATA : 32'bZ;

 

 

полный аналог вашего варианта, только тут надо понимать 2 вещи.

1. внутри плис реально не будет ZZZZ

2. надо следить за входами - выходами, вы точно эту шину где-то к выходу неконтролируемому не подключили...? покажите кусочек ТОРа

 

 

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


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

Все как обычно... Из каждого модуля есть выходящие шины, есть входящие... На самом верхнем уровне - "квадрат с логикой", буфера к выводам и DCM.

А вот этажом ниже - все крупные модули и мультиплексор шин к ним...

Я согласен делать это в новых проектах, неохота переделывать старый. И честно говоря люблю смотреть верхний уровень в графическом представлении,

при использовании выходов с тремя состояниями графическое представление для меня нагляднее.

 

да говорю же, так и мультипликсирую

 

на верилоге так

out <= (CS == 0) ? DATA : 32'bZ;

 

 

полный аналог вашего варианта, только тут надо понимать 2 вещи.

1. внутри плис реально не будет ZZZZ

2. надо следить за входами - выходами, вы точно эту шину где-то к выходу неконтролируемому не подключили...? покажите кусочек ТОРа

 

Понятно, что не будет третьего состояния. Ничего неконтролированного не подключал, рабочий проект без единого изменения в коде, только синтезатор не Synplify, а Ise.

Неохота переделывать старый проект и при использовании старых заделов в новой разработке их придется менять.

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


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

Я согласен делать это в новых проектах, неохота переделывать старый. И честно говоря люблю смотреть верхний уровень в графическом представлении,

при использовании выходов с тремя состояниями графическое представление для меня нагляднее.

Это когда мало шин, понятно. Но если в проекте несколько сот LVDS сигналов, то кроме LVDS буферов на верхний уровень ничего и не влезет. Иначе файл будет неудобный. Да и симулировать логику удобнее без LVDS и трехстабильных буферов...

И вот такое:

"на верилоге так

out <= (CS == 0) ? DATA : 32'bZ;" - применяю только когда надо симулировать всю плату целиком.

 

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


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

Выскакивает ошибка Xst:528 - Multi-source in Unit <Top>

Пишу на VHDL.

Использую в нижнеуровневых модулях конструкцию типа:

в первом модуле

Q (15 downto 0) <= BUS1 when RD1 = '1' else "ZZZZZZZZZZZZZZZZ";

в первом модуле

Q (15 downto 0) <= BUS2 when RD2 = '1' else "ZZZZZZZZZZZZZZZZ";

 

RD1 и RD2 естественно разные сигналы.

 

в топ модуле выходы Q этих субмодулей соединяю.

 

Это аналог на VHDL использования буферов с тремя состояниями.

 

При использовании синтезатора Synplify синтез проходил без замечаний и проект работал нормально. При использовании для синтеза Ise выскакивает ошибка ошибка Xst:528 - Multi-source in Unit <Top>.

Я знаю, что эту конструкцию Synplify заменял на мультиплексор, почему синтезатор Ise этого не делает? Ведь языковая конструкция правильная.

А вы попробуйте прицепить атрибут /* synthesis = syn_hard */ на один из ваших модулей - получите под синплифаем весьма неожиданный результат.

ИМХО нельзя всё время полагаться на "умный синтезатор", который любые каракули стерпит - надо ещё и немного головой думать. В вашем случае это означает грамотно разбить проект на модули так,

чтобы этот мультиплексор оказался внутри одного модуля.

 

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


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

А почему не синтезировать Synplify, если он все понимает? Дался Вам этот XST.

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


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

А вы попробуйте прицепить атрибут /* synthesis = syn_hard */ на один из ваших модулей - получите под синплифаем весьма неожиданный результат.

ИМХО нельзя всё время полагаться на "умный синтезатор", который любые каракули стерпит - надо ещё и немного головой думать. В вашем случае это означает грамотно разбить проект на модули так,

чтобы этот мультиплексор оказался внутри одного модуля.

 

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

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

 

А почему не синтезировать Synplify, если он все понимает? Дался Вам этот XST.

 

На новом месте приказано использовать Ise. Да и по политике Xilinx-a видно принуждение использования его софта, если не мытьем, так катаньем.

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


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

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

 

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

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

 

 

 

 

а вот эти

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

 

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


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

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

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

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

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

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

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

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

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

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