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

 
 
> Автомат передачи данных по SPI slave, Фифо на много слов, оптимизация
Golikov A.
сообщение Feb 25 2015, 16:07
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

задача такая, надо по SPI slave передать данные размером 32+64+6*32 бита и контрольная сумма (итого 37-38 байт)

SPI - slave, на частоте сравнимой с основным клоком, потому асинхронный, синхронизация по CS

Данные рождаются спонтанно, по каким-либо событиям, а забираются мастером как у того будет настроение, потому решил воткнуть фифо.

Посылка важна целиком, то есть если мастер бросил принимать в середине посылку, она должна быть отброшена разом, и следующая опять должна быть целиком.

В результате у меня получается такая схема:

SPI - передатчик, которому надо на вход выставить 8 битное данные, а он их выдавит асинхронно на выход. Он сигналом отмечает как забрал данные, и внешняя схема может выставлять следующие данные.

FIFO сделал параллельное, которое засасывает сразу всю посылку. Сделал его не одним фифо на (32+64+6*32) бит, а поставил 1+2+6 32 битных отдельных FIFO.

И вот теперь самое интересное. Надо как -то данные с выхода FIFO перепихать на вход SPI передатчика. И что-то у меня ничего умнее чем огромный мультиплексор на 9 8-битных слов в одно не получается. А еще по ходу перещелкивания он будет подсчитывать контрольную сумму, и добавить ее в конце, то есть мультиплексор 10-11 в 1. Ресурсы не жмут, но как-то не красиво выходит, может кто предложит какое-то более изящное решение?


Может 90 битный SPI будет более правильным решением?


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Feb 25 2015, 18:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Вам не знакомо такое явление, как регистр сдвига с параллельной загрузкой?

я иногда задаю "детские" вопросы, но сейчас не этот случай

Цитата
выкинуть фифо и сделать многобуферный регистровый файл (например 4/8D) с памятью тегов и шириной слова данных 8 бит.

а теги зачем?
Фактически вы предлагает заменить FIFO на память, такой некий кеш, правильно я понимаю, сохранять строчками и вычитывать словами. И самому следить за последовательностью.

Цитата
если новый пакет не формируется, пока не была попытка считать старый, то это будет лучший вариант, по простоте и реализации (и црц посчитать и пакет из "фифо" сбросить)

то есть все сходятся на том что надо делать 90 битный сдвиговый регистр и не придумывать? Если так то его можно и наружу выдавливать побитово, вместо того чтобы по 8 бит сдвигать и в SPI пихать.


Цитата
А как это вообще по SPI можно отследить? По тому, что он поднял CS? Так сделайте FIFO не 8(16,32)-битное, а 9 (17, 33) битное, где старший бит показывает конец посылки - чтобы автомат мог пропустить ненужные данные до конца.

да CS - синхронизатор, упал в 0 - готовим новый пакет, не важно забрали или нет, если 1 выкидываем что осталось. Расширить фифо на 1 и использовать этот бит как флаг? Ну может быть...


в 90 битном сдвиговом регистре смущает времянка. Ведь чем больше бит, тем больше времени надо чтобы они все разом присвоились. А если он еще и сдвигаться будет по 8 бит...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 25 2015, 19:14
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Golikov A. @ Feb 25 2015, 21:58) *
Ведь чем больше бит, тем больше времени надо чтобы они все разом присвоились. А если он еще и сдвигаться будет по 8 бит...

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

Цитата(Golikov A. @ Feb 25 2015, 21:58) *
Расширить фифо на 1 и использовать этот бит как флаг? Ну может быть...

Да, если времени достаточно, чтобы, пока мастер заново не активирует CS, пропустить старые данные.
Можно сделать FIFO шириной 9*4=36 бит, где каждый из байтов может быть помечен как крайний в пакете. Можно сделать два FIFO - в одном данные, во втором - длины пакетов. И пропускать сразу весь пакет, зная длину. Но, уже, придется делать свое описание FIFO, а не пользоваться готовыми IP, чтобы уметь пропускать сразу N данных, а не считывать их по одному.

То есть, если надо принимать решение за 1 такт, я бы применил ОЗУ, шириной кратное тому, чему кратны пакеты - то есть, если они всегда имеют целое число 8-битных байт - то 8-битное, если целое число 16-битных - то 16-битное, и т.д., и второе ОЗУ, работающее в режиме FIFO, передающее длины пакетов. И предусмотрел бы в первом FIFO возможность пропустить N (недосланных) слов за раз. Или, если можно долго пропускать байты - то лишний бит-флаг конца пакета, и автомат, пропускающий ненужные байты.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Golikov A.   Автомат передачи данных по SPI slave   Feb 25 2015, 16:07
- - blackfin   Цитата(Golikov A. @ Feb 25 2015, 19:07) ....   Feb 25 2015, 16:39
- - SM   Если там 37-38 байт, то сделать FIFO на байт, так,...   Feb 25 2015, 17:03
- - Golikov A.   ЦитатаА зачем такой изврат? Нужно сделать один отд...   Feb 25 2015, 17:17
|- - des00   Цитата(Golikov A. @ Feb 26 2015, 01:17) к...   Feb 25 2015, 17:27
|- - blackfin   Цитата(Golikov A. @ Feb 25 2015, 20:17) Э...   Feb 25 2015, 17:30
||- - des00   Цитата(blackfin @ Feb 26 2015, 00:30) Вам...   Feb 25 2015, 17:35
|- - SM   Цитата(Golikov A. @ Feb 25 2015, 20:17) к...   Feb 25 2015, 17:48
|- - blackfin   Цитата(Golikov A. @ Feb 25 2015, 21:58) т...   Feb 25 2015, 19:11
|- - des00   Цитата(Golikov A. @ Feb 26 2015, 02:58) а...   Feb 26 2015, 06:17
- - Golikov A.   ЦитатаНе все, конечно. Я бы сделал на трех счетчик...   Feb 25 2015, 20:39
|- - blackfin   Цитата(Golikov A. @ Feb 25 2015, 23:39) м...   Feb 26 2015, 04:40
- - Golikov A.   1. не обязательно, можно, но с учетом что клок SPI...   Feb 26 2015, 05:46
- - Golikov A.   мне же fifo надо, можно следить куда положено, отк...   Feb 26 2015, 09:05
|- - des00   Цитата(Golikov A. @ Feb 26 2015, 16:05) м...   Feb 26 2015, 15:39
- - Timmy   Цитата(Golikov A. @ Feb 25 2015, 19:07) Д...   Feb 26 2015, 09:42
- - Golikov A.   отбрасывается предыдущий пакет, заменяется на новы...   Feb 26 2015, 10:22
- - Golikov A.   Не все как раз наоборот. Быстро сляпать как раз н...   Feb 26 2015, 16:57
|- - blackfin   Цитата(Golikov A. @ Feb 26 2015, 19:57) О...   Feb 26 2015, 17:14
- - Golikov A.   да мне не исключить надо, мне бы как раз добавить....   Feb 26 2015, 17:23
|- - Timmy   Цитата(Golikov A. @ Feb 26 2015, 20:23) д...   Feb 26 2015, 20:29
- - Golikov A.   он не то что может быть, а он 100% не активен. пос...   Feb 26 2015, 20:36
- - SM   Вообще, междоменные переходы объявляют как set_fal...   Feb 27 2015, 09:22
- - Golikov A.   не работает оно 2 клоковое. Клок то у SPI не посто...   Feb 27 2015, 13:49
|- - SM   Цитата(Golikov A. @ Feb 27 2015, 16:49) в...   Feb 27 2015, 15:41
- - SM   Вдогонку - такое FIFO придется делать на распредел...   Feb 27 2015, 17:04
- - Golikov A.   спасибо погляжу.   Feb 27 2015, 21:39


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 13:21
Рейтинг@Mail.ru


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