|
Автомат передачи данных по SPI slave, Фифо на много слов, оптимизация |
|
|
|
Feb 26 2015, 09:05
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
мне же fifo надо, можно следить куда положено, откуда уже забрано... В итоге образовалось еще одно FIFO на входе SPI. данные идут в группу параллельных FIFO по которым продвигаются посылками на выход (благо у меня дофига брамов  ) потом по падению cs из этой группы фифо извлекаются очередные данные и по 8 бит пихаются в выходное фифо SPI, считается контрольная сумма и кладется туда же в след. Данные выходного FIFO выдавливаем наружу по SPI. Сигнал CS используется также как сброс выходного фифо. Таким образом если мастер решает что он устал, он поднимает CS, выходное фифо сбрасывается и тем самым откидывается хвост не забранной посылки. Теперь мне осталось правильно обконстраинить переход FIFO-SPI SPI асинхронный со своим клоком, данные для него готовит FIFO с другим клоком. По идее надо обеспечить чтобы до любых действий с клоком SPI, на его входе данные уже стояли. Достаточно ли выждать паузу в 1 клок после появления данных на выходе FIFO, до первого клока SPI, чтобы быть уверенным что данные до него дошли? я использую сигнал valid - который показывает что на выходе FIFO верные данные, как обконстраинить время за которое данные с выхода FIFO должны дойти до входа SPI. Ведь setup констраина не хватает, клоки SPI и FIFO же независимы.
|
|
|
|
|
Feb 26 2015, 09:42
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(Golikov A. @ Feb 25 2015, 19:07)  Данные рождаются спонтанно, по каким-либо событиям, а забираются мастером как у того будет настроение, потому решил воткнуть фифо. Прошу уточнить одну важную деталь: положим, в ФИФО уже лежит пакет данных, полностью готовый к отправке, и тут спонтанно рождается ещё один пакет. А мастер пока молчит, как рыба(CS неактивен). Следует ли отбросить старый пакет и готовиться отправлять сразу новый, или всё-таки отправить сначала старый?
|
|
|
|
|
Feb 26 2015, 15:39
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Golikov A. @ Feb 26 2015, 16:05)  мне же fifo надо, можно следить куда положено, откуда уже забрано... вам не простое фифо нужно, а фифо пакетов с возможностью сброса/замены пакета. Кстати подобным образом построены "фифо" в современных свичах. ЗЫ. Простите за прямоту, но у меня складывается впечатление, что в погоне за быстрым результатом, вы, вместо анализа задачи, рассмотрения вариантов ее решения и их сильных/слабых сторон, занимаетесь так называемым быдлокодерством. Т.е. наспех, каким-то образом вкорячиваете что бы работало, а потом усиленно со всей этой ..... пытаетесь взлететь (с) Старый анекдот.
--------------------
|
|
|
|
|
Feb 26 2015, 16:57
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Не все как раз наоборот. Быстро сляпать как раз не сложно, да и реализовано в целом. Сейчас есть время покрутить посмотреть.
на текущий момент у меня есть SPI модуль с FIFO 8 бит на входе, с возможностью сброса этого FIFO. в Это фифо я буду класть только 1 пакет, отправился - хорошо, нет, его сбросят.
Дальше есть параллельное 90 битное фифо, куда грузятся посылки. По сигналу самая старая из него извлекается и перекладывается в FIFO SPI. На этом я теряю тактов 5 до начала обмена, а дальше перекладка идет во время обмена, заодно считается контрольная сумма.
И есть генератор пакетов, который готовит пакет и кладет его в параллельное фифо, при этом если FIFO переполнено, пакет снабжается флагом переписи пакета, и данные в нем меняются на свежие, и так пока пакет не уйдет в FIFO.
Так что схема рабочая, и никакого быдлокода я не вижу, фифо - стандартные элемнеты, брамы меня не жмут.
Осталось последние и самое сейчас важное:
как обконстраинить путь от FIFO SPI до выхода в биты, при условии что они работают на разных клоках
|
|
|
|
|
Feb 26 2015, 20:29
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(Golikov A. @ Feb 26 2015, 20:23)  да мне не исключить надо, мне бы как раз добавить...
у меня есть FIFO оно выдает сигнал VALID когда на выходе появляются данные. Раз вы используете сигнал VALID, это подразумевает, что в момент активации SPI CS, сигнал VALID может быть неактивен. Таким образом, в клок домене "SPI CS" необходимо по единственному фронту CS синхронизировать VALID, принять решение - передавать данные или нет, и передать это решение обратно в системный клок домен, синхронизировав бит решения с системным клоком. И вы ничего не сказали, как собираетесь это выполнять. А в случае сброса фифо с заменой на новые данные будет ещё интереснее.
|
|
|
|
|
Feb 26 2015, 20:36
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
он не то что может быть, а он 100% не активен. после того как упадет CS выбиреться посылка из верхнего FIFO - 1 такт, запихается первый байт в FIFO SPI - это еще 2 такта, провалиться на нижний уровень, и выставиться на выходе ножки и регистре SPI. И вот тут проблема. хочется быть уверенным что после появления данных на выходе нижнего FIFO они дойдут до регистра SPI и выхода за какое-то определенное время. Потому и хочу обконстрайнить данный факт чтобы синтезатор и прочие механизмы это учитывали.
Все это будет учитывать SPI мастер, либо фиксированной задержкой после опускания CS, либо получая сигнал VALID, опустив CS он не будет ничего делать с клоком, пока не выдержит необходимую паузу, а дальше все будет хорошо, данные будут готовы и будут идти непрерывным потоком.
как констраин то такой написать, вот в чем вопрос...
|
|
|
|
|
Feb 27 2015, 15:41
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Golikov A. @ Feb 27 2015, 16:49)  вот только как это описывается... это, например, set_max_delay -datapath_only А, также, можете объявить клоки связанными друг с другом, одной частоты, и там уже сетапы будут работать. Но, все это костыли. Лучше опишите такое фифо, которое позволяет штатно работать с остановленным клоком с одной стороны. Вот, почитайте, очень хорошая описание, как это делается:
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|