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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> последовательный интерфейс, между ПЛИС и МК
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
Lmx2315
сообщение Sep 11 2012, 06:55
Сообщение #2


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



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


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
skilful
сообщение Sep 11 2012, 07:22
Сообщение #3


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

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



для примера, допустим, внутри ПЛИС 10 регистров по 64 бита каждый.

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

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

Фифо записи думал, чтобы накидать команд чтения в него, а потом считывать данные с фифо чтения


Про определение фронта или спада клока SPI не понял.
У меня частота ПЛИС близка к частоте AVR
Go to the top of the page
 
+Quote Post
stu
сообщение Sep 11 2012, 07:26
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 11-11-09
Пользователь №: 53 561



правильно по поводу: "надо опрашивать состояние". Но есть interrupt. Его в МК можно использовать по уровню, а не по фронту или спаду. Т. е. fifo не пустой, прерывание в нуле(к примеру) и значит надо с него тянуть данные, все прочли - установили.
Я делал rs-485 между MC<->FPGA<->ПК и два fifo (rx, tx). А список адресов для выполнения задач плиской через дешифратор (.eq[]) как enable для того или иного действия, а выдачу на МК по case

Сообщение отредактировал stu - Sep 11 2012, 07:31


--------------------
Мы ведь работаем, чтобы жить, а не живем, чтобы работать??? ;)
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Sep 11 2012, 07:26
Сообщение #5


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..разделите регистры , пусть плис пишет в свои а мк в свои.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
skilful
сообщение Sep 11 2012, 07:41
Сообщение #6


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

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



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

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

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


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



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

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


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Sep 11 2012, 08:09
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #9


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

Группа: Свой
Сообщений: 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
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #11


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

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



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

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


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

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



Цитата(Torpeda @ Sep 11 2012, 11:09) *
В деталях проблема не ясна но отвечу на что понял...
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
Torpeda
сообщение Sep 11 2012, 08:49
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #14


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

Группа: Свой
Сообщений: 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
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 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

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

 


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


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