реклама на сайте
подробности

 
 
> Много вопросов по шине Wishbone
Chuh
сообщение Jan 25 2014, 16:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 10-03-10
Пользователь №: 55 895



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

Насколько я понял обязательный сигналов шине 10: CLK_I, RST_I, ADR_O, DAT_I, DAT_O, WE_O, SEL_O, STB_O, ACK_I, CYC_O (здесь и далее названия сигналов со стороны мастера).

С CLK_I и RST_I вроде все просто — это клок (по переднему фронту) и синхронный ресет. Кстате, насколько важно, чтобы ресет был именно синхронный?

Сигнал ADR_O — адрес, который должен быть валиден на момент, когда SLAVE увидит высокий уровень STB_O.

Сигнал WE_O — флаг операции (низкий уровень - чтение, высокий — запись), должен быть валиден на момент, когда SLAVE увидит высокий уровень STB_O.

Сигнал SEL_O — обязателен, только когда разрядность DAT_I, DAT_O меньше разрядности передаваемых переменных и определяет какой именно байт (при шине 8 бит), слов (при шине 16 бит). Фактически это можно считать младшими битами адреса. Должен быть валиден на момент, когда SLAVE увидит высокий уровень STB_O.

DAT_O — данные, которые необходимо записать по данному адресу. ,Должен быть валиден на момент, когда SLAVE увидит высокий уровень STB_O.

ACK_I — флаг того, SLAVE успешно принял команду от MASTERа и сформировал валидный ответ или произвел валидную запись. Это первый сигнал, с которым возникли вопросу.
1) Правильно ли я понимаю, что Standart и Pipelinded — это два разных режима работы шины, и в каком режиме шина будет работать фактически определяет разряботчик.
2) Правильно ли я понимаю, что в Standart режиме максимальная частота передачи данных не более 1 слова за 2 такта CLK_I?
3) Допустим в Pipelined режиме MASTER решил передать 3 слова. Он выставляет STB_O и судя по временным диаграммам, если SLAVE работает с той же частотой, то на следующем (втором) такте он выставит ACK_I в высокий уровень. Но вот вопрос, если все синхронно, то MASTER увидит ACK_I только на третьем такте. При этом ему надо уже на втором такте поменять адрес и данные, а он еще не получил сигнал ACK_I. Или в этом случае ACK_I должен быть асинхронно приравнен STB_O и CYC_O?
4) Аналогичная ситуация Pipelined режим и надо прочитать 3 слова. MASTER выставляет STB_O, ADR_O и WE_O=0. На следующем такте SLAVE видит эти сигналы и выставляет ACK_I и DAT_I мастеру. MASTER получит эти значения еще через такт. Вопрос может ли он менять ADR_O при сохранении STB_O=1 или он должен ждать ACK_I . И если должен ждать, то как обеспечивается частота передачи 1 слово за 1 CLK_I?

DAT_I — данные, переданные SLAVE при операции чтения. Валидны в момент, когда ACK_I=1.

STB_O — строб выполнения операции. Второй сигнал по которому вопрос:
В Standart режиме STB_O держится до тех пор пока не увидится ACK_I , а в Pipelined режиме столько тактов CLK_I, сколько надо передать?

STALL_I — необязательный сигнал, как я понял при его получении мастер должен оставлять данные ADR_O, WE_O, DAT_O постоянными до ближайшего сигнала ACK, а после хотя бы на 1 такт сделать STB_O=0.

CYC_O — сигнал захвата шины. Пока CYC_O=1 MASTER собирается занимать шину. Не понятно, где сигнал от INTERCONNECT, который сообщает мастеру, что он имеет право занять шину. Т.е. во всех примерах CYC_O и STB_O поднимаются одновременно, а что делать, если MASTER решил передать, а другой MASTER в этот момент уже занимает шину?

Вообще, вопрос объединения более 2 устройств по шине Wishbone для меня до сих пор остается не ясен.

Допустим у нас один MASTER и 4 SLAVE. Мы подали выходы мастера на всех SLAVE и объединив выходы SLAVE через ИЛИ подали их на вход MASTER?

Как мастер определяет с каким SLAVE ему сейчас общаться. Видимо по адресу. Т.е. INTERCONNECT должен разбирать какую-то часть адреса из которой выбирать какому из SLAVE устройств передать CYC_O от мастера? Есть ли другие способы?

Кстате, не смог найти в стандарте описания, что должно делать устройство, если у него нет такого адреса, который запрашивает мастер. Должно ли оно в этом случае выдавать мастеру ACK_I?

Второй пример: 2 MASTER и 2 SLAVE. Как их объеденять? Тоже через ИЛИ? Как MASTERы узнают, что шина занята и они не имеют права выставлять CYC_O? Может ли INTERCONNECT вежливо попросить MASTERа освободить шину, если тот слишком долго ее занимает (чтобы обеспечить равные права по доступу к шине)? Правильно ли я понимаю, что сигнал MASTER LOCK_O нужен, чтобы показать INTERCONNECT, что CYC_O он будет держать до конца и шину не отдаст? Зачем тогда у SLAVE есть LOCK_I, когда по-идее этот сигнал нужен только INTERCONNECT?

На некоторые из поставленных вопросов я нашел частичные ответы в стандарте, но я до конце не уверен, что правильно все понял, поэтому решил их задать людям, которые имеют опыт разработки на основе шины Wishbone.

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


Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01255 секунд с 7
ELECTRONIX ©2004-2016