|
Автомат передачи данных по SPI slave, Фифо на много слов, оптимизация |
|
|
|
Feb 25 2015, 16:07
|
Гуру
     
Группа: Свой
Сообщений: 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 будет более правильным решением?
|
|
|
|
|
 |
Ответов
|
Feb 25 2015, 18:58
|
Гуру
     
Группа: Свой
Сообщений: 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 бит...
|
|
|
|
|
Feb 25 2015, 19:14
|
Гуру
     
Группа: Свой
Сообщений: 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 (недосланных) слов за раз. Или, если можно долго пропускать байты - то лишний бит-флаг конца пакета, и автомат, пропускающий ненужные байты.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|