Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Мультиплексор шины на Altera
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Вовка_Бызов
Ситуация - классическая. Процессор от TI (C6455) подключен к внешней шине через контроллер, собранный на основе ПЛИС Cyclone III по параллельной шине EMIFA.

А проблема состоит в том, что общая шина, выходящая на процессор, с появлением очередного внутреннего регистра, становится все медленнее и медленнее. Т.е. - как я понимаю, внутри Cyclone нет трехстабильных шин и схема реализуется как очень большой мультиплексор, быстродействие которого зависит напрямую от кол-ва псевдовыходов. Это я так думаю.

На практике получается, что для чтения данных мне приходится все больше увеличивать длину сигнала READ (OE) с процессора для нормального чтения (в противном случае в читаемых данных появляются артефакты). При начале разработки она составляла 1+1 такт (12нс). Сегодня я уже вынужден поставить 1+3 такта (24нс).

Нет ли какой-то системной ошибки с моей стороны? Нельзя ли как-то описать шину, чтобы ее быстродействие было выше?

Спасибо!
vadimuzzz
порезать мультиплексор конвейерами?
Вовка_Бызов
Цитата(vadimuzzz @ Jun 7 2011, 13:00) *
порезать мультиплексор конвейерами?

Тактируемый выход? Вряд ли его быстродействие будет выше 20нс..
Или я что-то не так понял?

Дело в том, что этот самый мультиплексор создает компилятор сам, без моего указания. Я лишь описал шину с третьим состоянием, выходящую наружу (на процессор) - inout std_bit_vector.
А дальше - детектируя входящий адрес, создаю кучу внутренних CS-ов, умножаю их на сигнал OE (output enable) и по результату уже на внутреннюю шину вывожу требуемые данные.

А как это превращается в мультиплексор - только квартус знает sm.gif
vadimuzzz
еще и асинхронный?! ужас
Цитата(Вовка_Бызов @ Jun 7 2011, 16:14) *
А как это превращается в мультиплексор - только квартус знает sm.gif

можете посмотреть в чмп-планнере
Kuzmi4
2 Вовка_Бызов
у данного чипа есть выход клока EMIF-а наружу. Быстрей него работать не будет (если интересно как оно там всё колбасит - читайте SPRU/DS). Потому используйте его и будет вам счастие laughing.gif
Вовка_Бызов
Цитата(vadimuzzz @ Jun 7 2011, 13:24) *
еще и асинхронный?! ужас

можете посмотреть в чмп-планнере

А какой смысл в синхронном обмене при работе с регистрами? У меня нет потоковых данных. Шина данных - 32 разряда.

А вот на счет чмп-планнера - я с квартусом и его примочками еще не совсем еще освоился.. Пытался щас планнер запустить - ничего не понял crying.gif
Он там просит настроить проект в TimeQuest Timing Analizer. Но я так и не разобрался, что там надо описывать и как. Описание этого анализатора я нашел только на англицком и толком в нем не разобрался.. И - по этой причине - наблюдаю кучу ворнингов на счет отсутствия соответствующих данных..

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

Цитата(Kuzmi4 @ Jun 7 2011, 13:30) *
у данного чипа есть выход клока EMIF-а наружу. Быстрей него работать не будет (если интересно как оно там всё колбасит - читайте SPRU/DS). Потому используйте его и будет вам счастие laughing.gif

В курсе. Там у меня 166 МГц. Сам же и настроил. дело в другом. Я на осциллографе вижу, как на шине данных информация появляется с задержкой по отношению к сигналу OE. И задержка существенная (~10..12нс).
vadimuzzz
Цитата(Вовка_Бызов @ Jun 7 2011, 16:44) *
А какой смысл в синхронном обмене при работе с регистрами? У меня нет потоковых данных. Шина данных - 32 разряда.

смысл есть в возможности делать конвейеры. это даст выигрыш при чтении пачками. при одиночном доступе будет проигрыш из-за латентности
des00
если читать более одного регистра за раз : синхронный режим + read_latency
Цитата
Описание этого анализатора я нашел только на англицком и толком в нем не разобрался..

не может быть biggrin.gif
Sergey'F
Мне кажется, что стоит рассмотреть работу EMIF в синхронном режиме и регистр на выходе этого дерева мультиплексоров. Все входные сигналы EMIF тоже синхронизировать. Задержка чтения получится 2 такта.

После этого будет проблема с OE, он медленно идет от TMS, потом через ПЛИС и до буферов. Можно в таком случае попробовать его не использовать, а эмулировать внутри ПЛИС из чипселекта и сигнала чтения/записи.

Вовка_Бызов
Цитата(Sergey'F @ Jun 7 2011, 14:15) *
Мне кажется, что стоит рассмотреть работу EMIF в синхронном режиме и регистр на выходе этого дерева мультиплексоров. Все входные сигналы EMIF тоже синхронизировать. Задержка чтения получится 2 такта.

После этого будет проблема с OE, он медленно идет от TMS, потом через ПЛИС и до буферов. Можно в таком случае попробовать его не использовать, а эмулировать внутри ПЛИС из чипселекта и сигнала чтения/записи.

А сигнал чтения/записи - это кто? Я до сих пор считал, что HaWE - это сигнал записи, а HaOE - сигнал чтения. Оба идут достаточно медленно. Можно, конечно, разнести CS-ы на читаемые и записываемые.. Но тогда - зачем синхронный режим, если и так получается достаточно быстро. Замечу еще раз - у меня достаточно редко читаются регистры.. И уж точно, что у меня нет потока данных из них. А синхронный режим в первую очередь удобен, когда есть постоянный обмен.
Проблема в том, что расширяя OE, я фактически останавливаю на это время процессор.. Пока думаем над ПДП.

А с TimeQust - ну не въезжаю я в логику построения SDC файла. Что туда пихать надо, когда оно берется, когда запускать Analizer.. Те "для чайников" описания, что в гугле лежат - это, может для девочки-третьекурсницы полезно - чтобы не въезжая ответить что-то преподу.. А вот толкового описания сути я так и не нашел sad.gif
Koluchiy
Объясните мне, граждане...
Как такие вопросы можно обсуждать без (блок-)схемы и (желательно)временных диаграмм?
iosifk
Цитата(Вовка_Бызов @ Jun 7 2011, 12:52) *
Ситуация - классическая. Процессор от TI (C6455) подключен к внешней шине через контроллер, собранный на основе ПЛИС Cyclone III по параллельной шине EMIFA.

Нет ли какой-то системной ошибки с моей стороны? Нельзя ли как-то описать шину, чтобы ее быстродействие было выше?

На самом деле, не все так...
1. Синхронный режим нужен для того, чтобы не получить метастабильность... Даже если чтение идет редко, то все равно выигрыш будет. Т.к. при асинхронном чтении один такт всегда надо дать на запас...
2. Попробуйте сделать косвенную адресацию. Из процессора запишите "Адрес" в ПЛИС. И потом читайте "Данные". При этом сделайте так, чтобы получив "Адрес" командоаппарат в ПЛИСе сам записал в буфер обмена нужный пакет. И получив Флаг, можно читать все из ФИФО, не делая дешифрацию. Да, появится задержка. Но ведь можно и команду записи Адреса сдвинуть ВПЕРЕД на нужное количество тактов...
andrew_b
Цитата(Вовка_Бызов @ Jun 7 2011, 14:49) *
А синхронный режим в первую очередь удобен, когда есть постоянный обмен.
Синхронный режим удобнее тем, что его проще обконстрейнить. Проще же ведь написать один констрейн на клок, чем кучу констрейнов на асинхронную логику?
Вовка_Бызов
Цитата(iosifk @ Jun 7 2011, 15:43) *
1. Синхронный режим нужен для того, чтобы не получить метастабильность...

Метастабильности, по идее, не должно быть исходя из того, что все процессы, относящиеся к вводу/выводу со стороны процессора, тактируются сигналом AECLKOUT (тактовая частота EMIFA). Данные извлекаются из регистров, для которых сигналы записи есть производная от указанного клока.
des00
Цитата(Вовка_Бызов @ Jun 7 2011, 05:49) *
Те "для чайников" описания, что в гугле лежат - это, может для девочки-третьекурсницы полезно - чтобы не въезжая ответить что-то преподу..

вы первый с таким отзывом о моих статьях wacko.gif


Цитата(Koluchiy @ Jun 7 2011, 06:09) *
Как такие вопросы можно обсуждать без (блок-)схемы и (желательно)временных диаграмм?

что там обсуждать то? EMIFA обычная процессорная шина с двунаправленной шиной данных. Асинхронный режим прост, но не удобен. Куда лучше взять синхронный с латентностью.
Koluchiy
Ну я как бы в курсе, что такое EMIF sm.gif.
Дело в том, что ТС может к ней по-разному подключать Альтеру, и к Альтере по-разному подключать неуказанную периферию в неизвестном количестве...
Stewart Little
А вот это не поможет отцу российской демократии : https://www.altera.com/support/software/dow...if/dnl-emif.jsp?
Вовка_Бызов
Цитата(des00 @ Jun 7 2011, 20:48) *
вы первый с таким отзывом о моих статьях wacko.gif

Ну что я могу сделать. Для меня эталоном доведения информации до пользователя всегда были книги Кернигана и Ричи.
Просто читая ваши (как оказалось) wink.gif заметки, я так и не понял того, что надо квартусу. А самое главное - зачем. Вполне возможно, что если бы я начал читать литературу по таймингам начиная с макса - я бы все понял. Но так сложилось, что я всего этого не читал. Хотя, возможно, готов.

Т.е. - с моей колокольни - не хватило разжевывания "для чего" с присутствием описания "как". Потому я и сказал, что это скорее всего для студентов sm.gif Без какого-либо желания обидеть автора. Которому в любом случае - респект (как и всем авторам, пишущим для нашего брата).


Цитата(des00 @ Jun 7 2011, 20:48) *
что там обсуждать то? EMIFA обычная процессорная шина с двунаправленной шиной данных. Асинхронный режим прост, но не удобен. Куда лучше взять синхронный с латентностью.

Может быть. В любом случае - я могу попробовать в следующей итерации, т.к. все необходимое в виде сигналов на ПЛИСину приходит. Просто изначально в концепции был асинхронный обмен, как традиционный для нашей конторы. Не исключаю, что ошибался.

В общем - не попробовав, не узнаешь.. Обещаю к осени попробовать wink.gif
ViKo
Синхронная шина будет выдавать данные еще медленнее, чем асинхронная, для одиночной пересылки.
Лично я делаю шину связи с микроконтроллером STM32 асинхронную. Мультиплексирую адрес и данные.
Хотя, при частотах ПЛИС и МК, отличающихся почти в 4 раза, и сигналах шины микроконтроллера, занимающих не один такт, всё равно - синхронная шина, асинхронная...
(Живого железа пока нет. Ждет прошивки. В ModelSim'е что-то показывает. Подбираюсь к констрейнам.)
Вовка_Бызов
Цитата(ViKo @ Jun 8 2011, 17:16) *
(Живого железа пока нет. Ждет прошивки. В ModelSim'е что-то показывает. Подбираюсь к констрейнам.)

А можно, если не трудно, попросить ссылочку на литературу, где есть токовое описание назначения констрейнов? Хочется все же разобраться...
ViKo
Цитата(Вовка_Бызов @ Jun 9 2011, 09:33) *
А можно, если не трудно, попросить ссылочку на литературу, где есть токовое описание назначения констрейнов? Хочется все же разобраться...

На русском, кроме блога des00, не встречал.
Вот две ссылки на английском.

http://www.altera.com/customertraining/web...ustomertraining

http://www.alterawiki.com/wiki/File:TimeQuest_User_Guide.pdf

Еще добавлю - перевод книги по Quartus и др.
http://www.naliwator.narod.ru
Kuzmi4
2 Вовка_Бызов
Мне вот этот документик тоже понравился.
А вот это вроде как базис для понимания Timing Analysis, особенно в начале документа..
Вовка_Бызов
Спасибо огромное. Уже сел читать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.