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

 
 
 
Reply to this topicStart new topic
> bidir, open-drain и i2c, сквозной bidir "провод" через FPGA
paradox-17
сообщение Oct 15 2007, 18:58
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 16-06-06
Пользователь №: 18 123



Всем доброго времени суток.
Извините, если чушь полную спрашиваю, но возникла проблема:
Есть несколько устройств (slave) с i2c интерфейсом (линия клоков и двунаправленная линия данных SDA). Master i2c только один. Напрямую между собой они не связаны, но сигналы заведены на ПЛИС (Altera CycloneIII). Было бы неплохо организовать двунаправленный сквозной "провод" для линии SDA, чтобы при этом не заморачиваться управлением направлением wacko.gif сигнала (т.е. классическая развязка с помощью tri). К тому же внутри ПЛИС потребуется мультиплексировать сигналы, т.к. мастер один, а ведомых несколько.
Мне сказали, что open-drain смотреть надо. Я посмотрел, попробовал описать, но ничего толкового не получилось. И вообще, это возможно сделать двунаправленный "провод" насквозь, чтобы на нем одновременно висело два устройства? Если возможно, то приведите пожалуйста пример на verilog, vhdl или ahdl.
Всем заранее спасибо.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 15 2007, 19:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Что-то очень непонятно. Вы в FPGA мультиплексирование I2C собрались делать? Т.е. несколько шин I2C объединить? А мастером кто является? Внешняя м/с или в FPGA мастер организован? И вообще FPGA тут "при делах" или просто какой-то умник от разных I2C устройств провода к FPGA протянул?
Go to the top of the page
 
+Quote Post
AJIEKCEu
сообщение Oct 15 2007, 19:42
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917



Цитата
И вообще FPGA тут "при делах" или просто какой-то умник от разных I2C устройств провода к FPGA протянул?

Насколько я понимаю, именно так.

paradox-17, я попробовал прикинуть - ничего путного не получилось. Может быть, зная точные времянки относительно SCL (при условии, что клиенты НЕ "притормаживают" обмен) можно было бы сделать что-то не сильно сложное, но все равно не тривиальное.

ЗЫ. Мне кажется, что выражение
Цитата
какой-то умник

не очень корректное. Тем более, уважаемый rezident - гуру.
Go to the top of the page
 
+Quote Post
paradox-17
сообщение Oct 15 2007, 20:51
Сообщение #4





Группа: Новичок
Сообщений: 11
Регистрация: 16-06-06
Пользователь №: 18 123



Спасибо за внимание.
Цитата
И вообще FPGA тут "при делах"

FPGA при делах. В ней всякие нужные корки будут размещены. А вот i2c контроллер городить в ПЛИС очень не хочется, т.к. контроллер (master) уже есть в СPU на плате. То, что провода подведены на ПЛИС приходится воспринимать как данность cranky.gif . Фиг с ним, с мультиплексированием. Меня интересует просто возможность создания сквозного двунаправленного провода в ПЛИС без дополнительной логики, чтобы тупо повесить на линию SDA мастера с одной стороны (CPU) и слейва с другой (тоже внешний девайс на плате). В принципе реально или нет?
Спасибо.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 15 2007, 21:08
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(paradox-17 @ Oct 16 2007, 02:51) *
А вот i2c контроллер городить в ПЛИС очень не хочется, т.к. контроллер (master) уже есть в СPU на плате. То, что провода подведены на ПЛИС приходится воспринимать как данность cranky.gif .

Если это макет или пилотный вариант платы, то я бы на вашем месте просто проводами шины I2C соединил. А в следующей итерации избежал бы этой глупости. В противном случае как это сделать без контроллера I2C в FPGA (который должен следить за обменом по разным шинам, знать адреса всех этих устройств и изображать из себя мастера-супервизора I2C) я не знаю sad.gif
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 15 2007, 21:14
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!


Увы, сделать такое без внутреннего управления буферами FPGA нельзя.
Тоесть контроллер I2C всеже городить придется.


Удачи! Rob.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Oct 16 2007, 07:40
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Если этот двунаправленный провод open drain (подтянутый к 1), то можно, исходя из того, что направление меняется только через 1 (HighZ) на обоих концах.

reg [1:0] state=0; // idle, a->b, b->a

always @(posedge clk)
case(state)
0:if(a==0) state<=1; else if(b==0) state<=2;
1:if(a==1) state<=0;
2:if(b==1) state<=0;
endcase

assign a=(state==2) ? 0:Z;
assign b=(state==1) ? 0:Z;
Go to the top of the page
 
+Quote Post
AJIEKCEu
сообщение Oct 16 2007, 07:54
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 7-12-05
Пользователь №: 11 917



DmitryR, вроде действительно должно получится. Маладца!
Go to the top of the page
 
+Quote Post
paradox-17
сообщение Oct 16 2007, 17:29
Сообщение #9





Группа: Новичок
Сообщений: 11
Регистрация: 16-06-06
Пользователь №: 18 123



DmitryR, Ваше решение выглядит правдоподобно и элегантно. Обязательно попробую и о результатах сообщу. Огромное спасибище a14.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:47
Рейтинг@Mail.ru


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