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

Multi-source в шине,или как правильно разделить потоки

Вот такой случай,есть шина 16-разрядная шина ISA через которую происходит запись и чтение по всем 16-разрядам.Назовём шину данных d,шину адреса а,источник сигнала с которого происходит чтение данных обозначим как reg.

Описать считывание данных в шину по адресу "00000001" из источника reg1,где IOR сигнал разрешения чтения шины можно следующим образом

 

 d<=reg1 when a="00000001" and IOR='0' else "ZZZZZZZZZZZZZZZZ";

 

А вот если необходимо производить чтение сигнала,разделённое по времени и адресу из 2-х источников,например reg1 и reg2, то как это можно правильно организовать?Испробовал несколько конструкций,всегда получаю multi-source в шине,нужен совет.

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


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

Странно, Вы все время похожие вопросы задаете, неужели не додуматься никак? Наверно, поэтому и не отвечает никто. В общем, так, начинать нужно с того, что за микросхему Вы используете. Если, Спартан 3, то внутренних трехстабильных шин в нем нет - ясное дело будет ругань при синтезе или упаковке. А как бы Вы поступили в схематике? Наверно, использовали бы мультиплексор, управляемый адресной шиной. Ну и надо так делать (или дополнить его регистром на выходе). Как мультиплексор описать, надеюсь, разберетесь (можно посмотреть в Language Templates ISE).

 

P.S. В который раз уже пишу - HDL - это не языки программирования, а языки описания, поэтому отталкиваться всегда нужно от имеющихся в используемой микросхеме ресурсов.

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


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

Вот такой случай,есть шина 16-разрядная шина ISA через которую происходит запись и чтение по всем 16-разрядам.Назовём шину данных d,шину адреса а,источник сигнала с которого происходит чтение данных обозначим как reg.

Описать считывание данных в шину по адресу "00000001" из источника reg1,где IOR сигнал разрешения чтения шины можно следующим образом

 

А вот если необходимо производить чтение сигнала,разделённое по времени и адресу из 2-х источников,например reg1 и reg2, то как это можно правильно организовать?Испробовал несколько конструкций,всегда получаю multi-source в шине,нужен совет.

 

А в чем дело? пишите дальше:

d <= reg1 when a = "00000001" and IOR='0' else (others=>'Z');
d <= reg2 when a = "00000010" and IOR='0' else (others=>'Z');

Никакой ругани. Не надо даже запихивать в процесс.

 

Странно, Вы все время похожие вопросы задаете, неужели не додуматься никак? Наверно, поэтому и не отвечает никто. В общем, так, начинать нужно с того, что за микросхему Вы используете. Если, Спартан 3, то внутренних трехстабильных шин в нем нет - ясное дело будет ругань при синтезе или упаковке. А как бы Вы поступили в схематике? Наверно, использовали бы мультиплексор, управляемый адресной шиной. Ну и надо так делать (или дополнить его регистром на выходе). Как мультиплексор описать, надеюсь, разберетесь (можно посмотреть в Language Templates ISE).

 

P.S. В который раз уже пишу - HDL - это не языки программирования, а языки описания, поэтому отталкиваться всегда нужно от имеющихся в используемой микросхеме ресурсов.

Насчет трёхстабильной шины, у спартана 3 вы не правы, все у него есть. советую открыть описание на стр.10

Изменено пользователем stoker

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


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

Насчет трёхстабильной шины, у спартана 3 вы не правы, советую открыть описание на стр.10

Все синтезится и не ругается.

То что Вы предложили и есть мультиплексор, поэтому и не ругается. Про выходные буферы с третьим состоянием речь не шла. А Вы попробуйте для какого-нибудь внутреннего сигнала в Спартане 3 описать пару конструкций, аналогичных той, которую привел автор темы и внимательно проанализируйте сообщения об ошибках. Потом повторите то же самое, скажем, для Виртекса 2. Уверяю Вас, ошибок Вы не увидите, догадываетесь почему?

 

Если бы Вы привели ссылку на актуальный DS099 May 25, 2007 я бы с большим энтузиазмом воспринял новость о появлении в Спартане 3 внутренних трехстабильных шин (и соответственно буферов).

 

Чтобы окончательно убедить Вас, приведу еще выдержку из Libraries Guide:

BUFT
Spartan-II, Spartan-IIE    Primitive
Spartan-3                        No
Virtex, Virtex-E        Primitive

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


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

То что Вы предложили и есть мультиплексор, поэтому и не ругается. Про выходные буферы с третьим состоянием речь не шла. А Вы попробуйте для какого-нибудь внутреннего сигнала в Спартане 3 описать пару конструкций, аналогичных той, которую привел автор темы и внимательно проанализируйте сообщения об ошибках. Потом повторите то же самое, скажем, для Виртекса 2. Уверяю Вас, ошибок Вы не увидите, догадываетесь почему? Кстати, в первой конструкции If совершенно лишний.

 

Если бы Вы привели ссылку на актуальный DS099 May 25, 2007 я бы с большим энтузиазмом воспринял новость о появлении в Спартане 3 внутренних трехстабильных шин (и соответственно буферов).

 

Чтобы окончательно убедить Вас, приведу еще выдержку из Libraries Guide:

BUFT
Spartan-II, Spartan-IIE  Primitive
Spartan-3                     No
Virtex, Virtex-E              Primitive

Сорри. Уже успел поменять на новый вариант, тот который предложил сам автор, и он тоже сработал.

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


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

Я бы предложенный рецепт применять не стал. То, что он работает - заслуга шибко нынче умного синтезатора ISE (в данном конкретном случае он правильно "понял" что Вы хотите описать). В других случаях подобное может не пройти. Нужно привыкать писать правильно.

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


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

Да причем тут внутренние трех стабильные шины и выбор кристалла. Кто нибудь когда нибудь шину ISA видел? Шина данных двунаправленная. Как ее без третьего состояния организовать.

Если по русски, то это селектор адреса. И как его описать (схема сравнения или дешифратор) все равно. тем более все равно как это интерпритирует синтезатор. Гораздо лучше нас.

Другое дело, что прежде чем описывать, нужно на протокол посмотреть. Без сигнала AEN работать не будет.

И зачем выбирать все адресное пространство. В первом 1к адресов под плату прототипа отведено адресное пространство в 32 байта (300-31f). Если используется только словный обмен младший разряд адреса не используется в дешифрации и обращение происходит по четным адресаи 300, 302 и т.д.

при этом задействуют сигналы iocs16, ioch rdy.

Если мало 16 слов, используется тоже окно в следующем 1к адресов. И так до 64к. это позволяет не задумываться о конфликтах на шине с другими контроллерами.

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


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

Да причем тут внутренние трех стабильные шины и выбор кристалла. Кто нибудь когда нибудь шину ISA видел? Шина данных двунаправленная. Как ее без третьего состояния организовать.
Видел :( . Про буфер с третьим состоянием речь вообще не шла - ясно, что он там нужен. Автор темы его в первом посте и описал. Трудности возникли с выбором источника данных для шины - это и обсуждалось. Про протокол Вы верно написали (что его смотреть надо), но каков вопрос - таков ответ.

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


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

Я бы предложенный рецепт применять не стал. То, что он работает - заслуга шибко нынче умного синтезатора ISE (в данном конкретном случае он правильно "понял" что Вы хотите описать). В других случаях подобное может не пройти. Нужно привыкать писать правильно.

 

Ну почему же неправильно?

 

Если синтезатор поддерживает правильную трансляцию тристабильных внутренних шин в архитектуру кристалла без тристабильных внутреннних шин - то в чем проблема? Вообще-то обязан поддерживать.

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


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

Вот такой случай,есть шина 16-разрядная шина ISA через которую происходит запись и чтение по всем 16-разрядам.Назовём шину данных d,шину адреса а,источник сигнала с которого происходит чтение данных обозначим как reg.

Описать считывание данных в шину по адресу "00000001" из источника reg1,где IOR сигнал разрешения чтения шины можно следующим образом

 

 d<=reg1 when a="00000001" and IOR='0' else "ZZZZZZZZZZZZZZZZ";

 

А вот если необходимо производить чтение сигнала,разделённое по времени и адресу из 2-х источников,например reg1 и reg2, то как это можно правильно организовать?Испробовал несколько конструкций,всегда получаю multi-source в шине,нужен совет.

 

 

multi-source может возникать при назначении одному и тому же сигналу разных значений в разных процессах, опишите все присвоения этому сигналу в одном процессе, например используя технологию написания КА. И проверьте наличие в микросхеме тристабильных буферов, как было сказано выше!

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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