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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Автомат передачи данных по SPI slave, Фифо на много слов, оптимизация
Golikov A.
сообщение Feb 26 2015, 09:05
Сообщение #16


Гуру
******

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



мне же fifo надо, можно следить куда положено, откуда уже забрано...

В итоге образовалось еще одно FIFO на входе SPI.

данные идут в группу параллельных FIFO по которым продвигаются посылками на выход (благо у меня дофига брамовsm.gif)

потом по падению cs из этой группы фифо извлекаются очередные данные и по 8 бит пихаются в выходное фифо SPI, считается контрольная сумма и кладется туда же в след. Данные выходного FIFO выдавливаем наружу по SPI. Сигнал CS используется также как сброс выходного фифо. Таким образом если мастер решает что он устал, он поднимает CS, выходное фифо сбрасывается и тем самым откидывается хвост не забранной посылки.


Теперь мне осталось правильно обконстраинить переход FIFO-SPI

SPI асинхронный со своим клоком, данные для него готовит FIFO с другим клоком. По идее надо обеспечить чтобы до любых действий с клоком SPI, на его входе данные уже стояли. Достаточно ли выждать паузу в 1 клок после появления данных на выходе FIFO, до первого клока SPI, чтобы быть уверенным что данные до него дошли?

я использую сигнал valid - который показывает что на выходе FIFO верные данные, как обконстраинить время за которое данные с выхода FIFO должны дойти до входа SPI. Ведь setup констраина не хватает, клоки SPI и FIFO же независимы.


Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 26 2015, 09:42
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Golikov A. @ Feb 25 2015, 19:07) *
Данные рождаются спонтанно, по каким-либо событиям, а забираются мастером как у того будет настроение, потому решил воткнуть фифо.

Прошу уточнить одну важную деталь: положим, в ФИФО уже лежит пакет данных, полностью готовый к отправке, и тут спонтанно рождается ещё один пакет. А мастер пока молчит, как рыба(CS неактивен). Следует ли отбросить старый пакет и готовиться отправлять сразу новый, или всё-таки отправить сначала старый?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 26 2015, 10:22
Сообщение #18


Гуру
******

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



отбрасывается предыдущий пакет, заменяется на новый с флагом что произошло переполнение...

то есть фифо 10 пакетов

приняли 10 - пихнули в фифо
приняли 11 - ждем
приняли 12, заменили 11 на 12, и поставили флаг ждем
и так далее...
как мастер проснулся, начал забирать то в фифо будет запихан уже этот новый пакет с флагом переполнения, и дальше опять по новой...

На самом деле сейчас более актуально как обконстреинить переход FIFO-SPI
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 26 2015, 15:39
Сообщение #19


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Golikov A. @ Feb 26 2015, 16:05) *
мне же fifo надо, можно следить куда положено, откуда уже забрано...

вам не простое фифо нужно, а фифо пакетов с возможностью сброса/замены пакета. Кстати подобным образом построены "фифо" в современных свичах.

ЗЫ. Простите за прямоту, но у меня складывается впечатление, что в погоне за быстрым результатом, вы, вместо анализа задачи, рассмотрения вариантов ее решения и их сильных/слабых сторон, занимаетесь так называемым быдлокодерством. Т.е. наспех, каким-то образом вкорячиваете что бы работало, а потом усиленно со всей этой ..... пытаетесь взлететь (с) Старый анекдот.


--------------------
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 26 2015, 16:57
Сообщение #20


Гуру
******

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



Не все как раз наоборот.
Быстро сляпать как раз не сложно, да и реализовано в целом. Сейчас есть время покрутить посмотреть.

на текущий момент у меня есть SPI модуль с FIFO 8 бит на входе, с возможностью сброса этого FIFO.
в Это фифо я буду класть только 1 пакет, отправился - хорошо, нет, его сбросят.

Дальше есть параллельное 90 битное фифо, куда грузятся посылки. По сигналу самая старая из него извлекается и перекладывается в FIFO SPI. На этом я теряю тактов 5 до начала обмена, а дальше перекладка идет во время обмена, заодно считается контрольная сумма.

И есть генератор пакетов, который готовит пакет и кладет его в параллельное фифо, при этом если FIFO переполнено, пакет снабжается флагом переписи пакета, и данные в нем меняются на свежие, и так пока пакет не уйдет в FIFO.

Так что схема рабочая, и никакого быдлокода я не вижу, фифо - стандартные элемнеты, брамы меня не жмут.

Осталось последние и самое сейчас важное:

как обконстраинить путь от FIFO SPI до выхода в биты, при условии что они работают на разных клоках
Go to the top of the page
 
+Quote Post
blackfin
сообщение Feb 26 2015, 17:14
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Golikov A. @ Feb 26 2015, 19:57) *
Осталось последние и самое сейчас важное:
как обконстраинить путь от FIFO SPI до выхода в биты, при условии что они работают на разных клоках

set_false_path
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 26 2015, 17:23
Сообщение #22


Гуру
******

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



да мне не исключить надо, мне бы как раз добавить...

у меня есть FIFO оно выдает сигнал VALID когда на выходе появляются данные.

старший бит этих данных через мультиплексор идет на выходной пин FPGA (spi data out).
Младшие биты идут в сдвиговый регистр, который защелкивается по клоку SPI и дальше двигается.
С первым клоком SPI выходной пин (spi data out) переключается со старшего бита данных из FIFO на старший бит сдвигового регистра.

то есть мне надо
1. задать чтобы время за которое сигнал старшего бита идет с выхода FIFO на ножку ПЛИС было не более 10 нСек (например), тогда выдержав паузу 1 клок после появления сигнала валид, я могу гарантировать что на пине уже стоят данные.
2. задать чтобы время за которое сигнал идет от младших битов выхода фифо, до регистра SPI было не более 10нСек (например), тогда выдержав паузу 1 клок после появления сигнала валид до первого рывка клока SPI я могу гарантировать что сдвиговый регистр SPI защелкнет правильные данные
3. Наверное надо задать время распространения сигнала от старшего бита сдвигового регистра до выхода на ножку FPGA (spi data out) не более полуклока SPI. Учтет ли это время переключения мультиплексора?...

можно кстати это как-то обконстреинить не в общем файле констраинов, а именно в verilog модулях как время путей данных или это уже совсем глупость?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 26 2015, 20:29
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Golikov A. @ Feb 26 2015, 20:23) *
да мне не исключить надо, мне бы как раз добавить...

у меня есть FIFO оно выдает сигнал VALID когда на выходе появляются данные.

Раз вы используете сигнал VALID, это подразумевает, что в момент активации SPI CS, сигнал VALID может быть неактивен. Таким образом, в клок домене "SPI CS" необходимо по единственному фронту CS синхронизировать VALID, принять решение - передавать данные или нет, и передать это решение обратно в системный клок домен, синхронизировав бит решения с системным клоком. И вы ничего не сказали, как собираетесь это выполнять. А в случае сброса фифо с заменой на новые данные будет ещё интереснее.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 26 2015, 20:36
Сообщение #24


Гуру
******

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



он не то что может быть, а он 100% не активен. после того как упадет CS выбиреться посылка из верхнего FIFO - 1 такт, запихается первый байт в FIFO SPI - это еще 2 такта, провалиться на нижний уровень, и выставиться на выходе ножки и регистре SPI. И вот тут проблема.
хочется быть уверенным что после появления данных на выходе нижнего FIFO они дойдут до регистра SPI и выхода за какое-то определенное время. Потому и хочу обконстрайнить данный факт чтобы синтезатор и прочие механизмы это учитывали.

Все это будет учитывать SPI мастер, либо фиксированной задержкой после опускания CS, либо получая сигнал VALID, опустив CS он не будет ничего делать с клоком, пока не выдержит необходимую паузу, а дальше все будет хорошо, данные будут готовы и будут идти непрерывным потоком.

как констраин то такой написать, вот в чем вопрос...
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 27 2015, 09:22
Сообщение #25


Гуру
******

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



Вообще, междоменные переходы объявляют как set_false_path, так как нельзя предсказать, какое там будет время из-за непредсказуемого отношения фаз клоков в доменах. А целостность данных обеспечивают схемотехнически, применяя правильные для переходов структуры. Так что, если у Вас там FIFO, то надо применить двухклоковое FIFO, оно само обеспечить правильный междоменный переход без лишних констрейнов.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 27 2015, 13:49
Сообщение #26


Гуру
******

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



не работает оно 2 клоковое. Клок то у SPI не постоянный... Я с этого фифо и начинал, ан фиг вам... Прежде чем слово выдавиться надо его поклокать.

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

вот только как это описывается...

по идее 1 это setup определяет, то есть задав setup для клока FIFO я сразу эту величину получу... (или холд все время путаю). И вот я сейчас думаю, наверное 2 тот же самый сетап.

время распространения сигнала от FIFO до любых других элементов, которые могут использовать его по своему усмотрению - это же setup? да?
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 27 2015, 15:41
Сообщение #27


Гуру
******

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



Цитата(Golikov A. @ Feb 27 2015, 16:49) *
вот только как это описывается...


это, например, set_max_delay -datapath_only

А, также, можете объявить клоки связанными друг с другом, одной частоты, и там уже сетапы будут работать.

Но, все это костыли. Лучше опишите такое фифо, которое позволяет штатно работать с остановленным клоком с одной стороны. Вот, почитайте, очень хорошая описание, как это делается:
Прикрепленные файлы
Прикрепленный файл  tvlsi07.pdf ( 1.5 мегабайт ) Кол-во скачиваний: 21
 
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 27 2015, 17:04
Сообщение #28


Гуру
******

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



Вдогонку - такое FIFO придется делать на распределенной памяти, чтобы чтение из него было асинхронным, в смысле, чтобы не требовало лишнего клока на выдачу данных из ОЗУ.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 27 2015, 21:39
Сообщение #29


Гуру
******

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



спасибо погляжу.
Go to the top of the page
 
+Quote Post

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

 


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


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