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

 
 
> последовательный интерфейс, между ПЛИС и МК
skilful
сообщение Sep 11 2012, 06:44
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



Добрый день.

Имеется ПЛИС Циклон (питание 3.3 В) и микроконтроллер AVR (питание 5 В).
Хочу связать их по SPI.

Хотел затактировать приемник в ПЛИС от микроконтроллера.

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


По чтению данных из ПЛИС хочу тоже хочу поставить двухклоковую фифошку.
Вот тут вопрос -- когда я логикой ПЛИС запишу в фифо данные -- как мне контроллером узнать, что данные уже есть в фифо?
У фифо есть сигнал "не пустое", но этот сигнал появляется при наличии синхроимпульсов от МК.

То есть мне нужно генерить "пустые" синхроимпульсы для ПЛИС и ждать, когда появится сигнал фифо "не пустое"?

Может быть изначально я неверно начал делать?

Может быть ПЛИС должна тактировать микроконтроллер? Если да, то как быть с преобразованием 3.3 В в 5 В? И сигнал нужно через PLL пускать?


Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
skilful
сообщение Sep 11 2012, 07:41
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411



а как мне "разделенные" регистры связать?
да и не сильно это усложнит логику?

для упрощения объяснения задачи -- пусть будет регистр внутри ПЛИС счетным.
То есть ПЛИС инкрементирует его постоянно, но может и записать начальное значение.

МК тоже может записать начальное значение, а может и просто считать.
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Sep 11 2012, 08:09
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(skilful @ Sep 11 2012, 10:41) *
а как мне "разделенные" регистры связать?
да и не сильно это усложнит логику?

для упрощения объяснения задачи -- пусть будет регистр внутри ПЛИС счетным.
То есть ПЛИС инкрементирует его постоянно, но может и записать начальное значение.

МК тоже может записать начальное значение, а может и просто считать.

В деталях проблема не ясна но отвечу на что понял...
1) Вы работаете с SPI интерфейсом.
Это значит что один конец мастер, а другой слейв.
Сделайте МК мастером. Это значит что только он инициирует передачу данных.

2) Как сделать доступ в один и тот-же регистр и со стороны МК и со стороны ПЛИС по записи.
-Придумайте протокол обмена по SPI: код команды, адрес, данные.
-Когда МК даёт команду записи в регист, она принимается SPI декодером команд (в виде автомата)
-Декодер команды останавливает ПЛИС и меняет регистр
-Декодер команды перезапускает ПЛИС с новым значением

3) как сказать МК, что ПЛИС сменила значение регистра
- по прерыванию
- по SPI. В этом случае надо "завести" регистр состояния ПЛИС и читать его переодически командой SPI.
Например, ПЛИС взводит бит состояния в 1 при последней записи в регистр, а при чтении регистра состояния этот бит автоматически обнуляется.

4) что от чего тактировать....
- проще всего SPI склок выдавать из МК (задайте нужную конфигурацию МК SPI)
- ПЛИС должна иметь свой генератор клока выше частоты SPI клока
- Все входные SPI сигналы в ПЛИС привязать к внутреннему клоку через ресинхронизаторы (2 тригера)
- анализируя уровни SPI входов при помощи соответствующего автомата - декодировать SPI поток данных.

Вот как-то так...

---------------------
Есчё добавлю...
SPI понятие розтяжимое....
Фактически надо говорить о СТЕКЕ протоколов.
В этом случае SPI - это только описание доступа к каналу передачи (клок, данные) - канальный уровень
Дальше идёт формат команды SPI (код команды, адрес, данные)
Дальше интерпретатор команд (напр. чтение из регистра 1 выполняется со сбросом бита состояния, а регистра 2 без таких-же действий) - прикладной уровень
Go to the top of the page
 
+Quote Post
troiden
сообщение Sep 11 2012, 08:19
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 19-02-09
Из: Москва
Пользователь №: 45 069



Цитата(Torpeda @ Sep 11 2012, 12:09) *
- Все входные SPI сигналы в ПЛИС привязать к внутреннему клоку через ресинхронизаторы (2 тригера)

Эмм... Зачем синхронный интерфейс превращать в асинхронный?
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Sep 11 2012, 08:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(troiden @ Sep 11 2012, 11:19) *
Эмм... Зачем синхронный интерфейс превращать в асинхронный?

синхронность понятие относительное....
У ПЛИС свой клок а у МК свой - всё асинхронно.
Go to the top of the page
 
+Quote Post
troiden
сообщение Sep 11 2012, 08:31
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 19-02-09
Из: Москва
Пользователь №: 45 069



Цитата(Torpeda @ Sep 11 2012, 12:25) *
синхронность понятие относительное....
У ПЛИС свой клок а у МК свой - всё асинхронно.

SPI подразумевает передачу наряду с данными тактового сигнала - на нем и должен работать сам приемопередатчик SPI. А все манипуляции с пересинхронизацией должны выполняться уже после, на уровне внутренних шин ПЛИСа.
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Sep 11 2012, 08:49
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(troiden @ Sep 11 2012, 11:31) *
SPI подразумевает передачу наряду с данными тактового сигнала - на нем и должен работать сам приемопередатчик SPI. А все манипуляции с пересинхронизацией должны выполняться уже после, на уровне внутренних шин ПЛИСа.

ОК.
Вижу Вы любитель проблем sm.gif
На канальном уровне всё просто - клок и данные. Захлопнул их в тригер и нет проблем...

Предположим также что вы извернулись, и вам хватило тактов SPI фрейма на то, чтобы принять команду и декодировать её.
И даже вы смогли правильно обконстрейнить всё для STA (и даже неизвестную задержку линии от МК к ПЛИС смогли правильно учесть...)
Это не всем удаётся, ибо количество клоков ограничено числом бит в фрейме. Некоторые начинают тригера с negedge клоком использовать и прочую асинхронщину (типа заводить логику на ресеты...), а про тайминг констрейны в этом случае я вообще молчу.....
Вот вам и асинхронщина началась.

А дальше наверно надо и команду интерпретировать.... ПЛИС то от своего генератора работает и асинхронна к вашему SPI, который повешен на внешний клок.
Надо как-то клок домены суметь вязывать....

---------
Поэтому-то я и рекомендую начинающим дурью не маяться - привязать все SPI сигналы к ПЛИС клоку и делать тревиальный синхронный цифровой дизайн.

Цитата(skilful @ Sep 11 2012, 11:43) *
я примерно тоже самое сделал -- только с фифошками.
вопрос встал -- как сообщить микроконтроллеру, что запрошенные данные считаны и их можно забирать из фифо чтения.
вы написали, что делать прерывание. но получается сигнал прерывания (фифо чтения не пустое) будет привязан к клоку ПЛИС, а не МК.
То есть мне нужно после получения прерывания выдержать паузу на МК и потом генерить клок от МК к ПЛИС, чтобы забирать данные из фифо чтения?

Зачем фифошки?
Ну если очень хочется....
" сигнал прерывания (фифо чтения не пустое) будет привязан к клоку ПЛИС" - очень хорошо. МК предполагает что все прерывания вообще асинхронны (кнопку-то к прерыванию подключать вас не смущает?).
"То есть мне нужно после получения прерывания выдержать паузу на МК и потом генерить клок от МК к ПЛИС, чтобы забирать данные из фифо чтения" - сразу забирайте. Зачем вам пауза? ПЛИС сначала фиксирует данные в ФИФО, а потом генерит прерывание.
Go to the top of the page
 
+Quote Post
troiden
сообщение Sep 11 2012, 09:01
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 19-02-09
Из: Москва
Пользователь №: 45 069



Попорядку sm.gif
Цитата(Torpeda @ Sep 11 2012, 12:44) *
Предположим также что вы извернулись, и вам хватило тактов SPI фрейма на то, чтобы принять команду и декодировать её.

Простота - наше всё. Во фрейме только один признак команды - чтение или запись. Большего не надо.

Цитата(Torpeda @ Sep 11 2012, 12:44) *
И даже вы смогли правильно обконстрейнить всё для STA (и даже неизвестную задержку линии от МК к ПЛИС смогли правильно учесть...)

Задержки всех линий в первом приближении одинаковы, если это не так и разбежка в десяток наносекунд - надо карать трассировщика. Для связи МК -> ПЛИС никаких проблем, для обратной линии ПЛИС -> МК проблема и в асинхронном, и в синхронном дизайне одна и та же и никуда не пропадает.

Цитата(Torpeda @ Sep 11 2012, 12:44) *
А дальше наверно надо и команду интерпретировать....

Фрейм из 5 байт: 1 бит - признак команды, 15 бит - адрес регистра ПЛИСа, 3 байта - на данные чтения-записи. Интерпретируется без проблем.

Цитата(Torpeda @ Sep 11 2012, 12:44) *
ПЛИС то от своего генератора работает и асинхронна к вашему SPI, который повешен на внешний клок.
Надо как-то клок домены суметь вязывать....

У нас есть 40 тактов SPI-интерфейса между приходом двух посылок, за которые надо успеть пересинхронизироваться и провести запись данных в регистр. С чтением - веселее, но тоже просто решается.

Цитата(Torpeda @ Sep 11 2012, 12:44) *
Поэтому-то я и рекомендую начинающим дурью не маяться - привязать все SPI сигналы к ПЛИС клоку и делать тревиальный синхронный цифровой дизайн.

Этот подход жизнеспособен только на малых скоростях. Придет к вам SPI на 100 МГц - и хана.
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Sep 11 2012, 09:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(troiden @ Sep 11 2012, 12:01) *
У нас есть 40 тактов SPI-интерфейса между приходом двух посылок, за которые надо успеть пересинхронизироваться и провести запись данных в регистр. С чтением - веселее, но тоже просто решается.

Вот это как-то не очень понятно. О каких 40 тактах речь?
даём команду записи. Последний бит приходит на 40-м клоке. Где есчё 40 беруться для интерпретации?

Или вы предлагаете передавать фрейм из 40 бит + есчё дофига тактов клока на его интерпретацию?

Цитата(troiden @ Sep 11 2012, 12:01) *
Этот подход жизнеспособен только на малых скоростях. Придет к вам SPI на 100 МГц - и хана.

Вы правы.
1) Строить SPI при тактировании от внешнего клока надо только тогда, когда тактовый клок со стороны ПЛИС почти равен скорости SPI клока или меньше.
2) Правда на 100 МГц хана наступает и в вашем случае - при задани коректных STA констрейнов (как учесть например, что задержка на плате меняется от мин значения к макс, какие эти значения получаються, итд...)
Да и связать асинхронные клок домены (SPI - остальная часть ПЛИС) тоже непросто.....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- skilful   последовательный интерфейс   Sep 11 2012, 06:44
- - Lmx2315   Вы по SPI хотите связать мк и плис, значит у вас о...   Sep 11 2012, 06:55
- - skilful   для примера, допустим, внутри ПЛИС 10 регистров по...   Sep 11 2012, 07:22
|- - Lmx2315   ..разделите регистры , пусть плис пишет в свои а м...   Sep 11 2012, 07:26
- - stu   правильно по поводу: "надо опрашивать состоян...   Sep 11 2012, 07:26
|- - Lmx2315   пусть ПЛИС пишет в счётные регистры, а МК их считы...   Sep 11 2012, 07:54
||- - troiden   Цитата(Torpeda @ Sep 11 2012, 13:12) Вот ...   Sep 11 2012, 09:40
|- - skilful   Цитата(Torpeda @ Sep 11 2012, 11:09) В де...   Sep 11 2012, 08:43
- - skilful   вот чтобы всяких пересинхронизаций не было -- и ду...   Sep 11 2012, 09:13
|- - Torpeda   Цитата(skilful @ Sep 11 2012, 12:13) вот ...   Sep 11 2012, 11:47
|- - skilful   Цитата(Torpeda @ Sep 11 2012, 14:47) 1) д...   Sep 11 2012, 12:28
|- - troiden   Цитата(Torpeda @ Sep 11 2012, 15:47) Т.е....   Sep 11 2012, 12:41
|- - Torpeda   Цитата(troiden @ Sep 11 2012, 15:41) В сл...   Sep 11 2012, 13:41
|- - troiden   Цитата(Torpeda @ Sep 11 2012, 17:41) 1) ...   Sep 11 2012, 14:13
|- - Torpeda   Цитата(troiden @ Sep 11 2012, 17:13) А эт...   Sep 11 2012, 14:49
|- - troiden   Цитата(Torpeda @ Sep 11 2012, 18:49) нуда...   Sep 11 2012, 14:58
|- - Александр77   Цитата(troiden @ Sep 11 2012, 18:58) Посл...   Sep 11 2012, 18:28
|- - troiden   Цитата(Александр77 @ Sep 11 2012, 22:28) ...   Sep 11 2012, 19:28
- - skilful   Просимулировал в МоделСиме двухклоковую фифо (LPM_...   Sep 11 2012, 10:05
- - skilful   исключаться должно программно. МК набил фифо запис...   Sep 11 2012, 13:52
|- - Torpeda   Цитата(skilful @ Sep 11 2012, 16:52) искл...   Sep 11 2012, 14:33
- - Alexey K   Вопрос. Зачем один и тот же регистр делать доступ...   Sep 11 2012, 14:00
- - skilful   там я выше приводил пример -- если он в роли тайме...   Sep 11 2012, 14:14
|- - troiden   Цитата(skilful @ Sep 11 2012, 18:14) там ...   Sep 11 2012, 14:17
- - skilful   Так я смотрю триггера 3 ? // sync SCK to the FPGA...   Sep 11 2012, 14:42


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

 


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


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