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

 
 
8 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
Victor®
сообщение Jan 4 2014, 15:49
Сообщение #16


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Tiro @ Jan 4 2014, 02:25) *
Вы всерьез думаете, что по задумке ТС весь дизайн ФПГА тактируется от SPI? biggrin.gif


Хотел бы я посмотреть комплексный проект, тактируемый только от SPI клока sm.gif


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 4 2014, 16:46
Сообщение #17


Гуру
******

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



Эм... и вот теперь вопрос на миллионsad.gif Как забить констраин между сигналом и выходом?

Проблема вот в чем

по MAIN_CLK и событию DataRedy защелкивается передаваемое значение в регистр DataOut

а по SPI_CLK оно выдавливается наружу

естественно нет никакой связи между MAIN_CLK и SPI_CLK, я сам слежу за времянкой в этом месте (SPI клоки не появляются пока данные гарантированно не попадут в регистр, там пауза несколько клоков)

Теперь, когда я задаю времянку появления данных после фронта клока SPI в эту времянку входит полный путь от данных до выхода на ружу, а мне надо чтобы учитывалось только от DataOut до выхода, от фронта SPI_CLK. То есть как бы не учитывать время сохранения данных в DataOut, можно это как то в констраине описать? Не руками же вычитать время по логам и смотреть получилось или нет?

Go to the top of the page
 
+Quote Post
o_khavin
сообщение Jan 4 2014, 17:41
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094



Цитата(Golikov A. @ Jan 4 2014, 18:57) *
если написать констраины на сигналы, время выставления данных относительно этого входа, то в случае их выполнения все будет хорошо? То есть разницы не будет между сигналом с клокового и не клового входов?

Правильно ли что сигналы не различимы кроме сложности соблюдения констраинов?


Не обязательно. Но есть вероятность.

Цитата(Golikov A. @ Jan 4 2014, 20:46) *
Эм... и вот теперь вопрос на миллионsad.gif Как забить констраин между сигналом и выходом?

Проблема вот в чем

по MAIN_CLK и событию DataRedy защелкивается передаваемое значение в регистр DataOut

а по SPI_CLK оно выдавливается наружу

естественно нет никакой связи между MAIN_CLK и SPI_CLK, я сам слежу за времянкой в этом месте (SPI клоки не появляются пока данные гарантированно не попадут в регистр, там пауза несколько клоков)

Теперь, когда я задаю времянку появления данных после фронта клока SPI в эту времянку входит полный путь от данных до выхода на ружу, а мне надо чтобы учитывалось только от DataOut до выхода, от фронта SPI_CLK. То есть как бы не учитывать время сохранения данных в DataOut, можно это как то в констраине описать? Не руками же вычитать время по логам и смотреть получилось или нет?

Можно поставить промежуточный регистр на spi-клоке и выдавать данные наружу из него. И времянку от него задать.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 4 2014, 18:55
Сообщение #19


Гуру
******

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



Цитата(o_khavin @ Jan 4 2014, 21:41) *
Не обязательно. Но есть вероятность.

и высока ли вероятность?

Цитата(o_khavin @ Jan 4 2014, 21:41) *
Можно поставить промежуточный регистр на spi-клоке и выдавать данные наружу из него. И времянку от него задать.


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

Go to the top of the page
 
+Quote Post
Джеймс
сообщение Jan 4 2014, 19:36
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 462
Регистрация: 20-01-06
Пользователь №: 13 399



Цитата(Golikov A. @ Jan 2 2014, 22:06) *
Волею судеб так получилось что spi клок пришелся на не клоковый вход.
Чем грозит использование его в конструкциях вида

Ничем не грозит, поскольку ни в одном более-менее серьезном проекте никто как тактовый сигнал его использовать не будет. Выделяйте фронт (на внутренней более высокой частоте) и используйте его как "строб".
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 4 2014, 20:22
Сообщение #21


Гуру
******

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



Цитата(Джеймс @ Jan 4 2014, 23:36) *
Ничем не грозит, поскольку ни в одном более-менее серьезном проекте никто как тактовый сигнал его использовать не будет. Выделяйте фронт (на внутренней более высокой частоте) и используйте его как "строб".


Расскажете как выделить 50 МГц клок на 100 МГц тактовой? Боюсь что для этого надо не меньше 200 МГц, а этого мне на 6 спартане добиться не удалось...


Мне он нужен как тактовый только для сдвиговых регистров данных и только для этого.


Вот какая странность, если задать констраин что SPI клок 100 МГц, все разводиться. А если указать что SPI клок 200 МГц, но данные должны быть готовы не позднее 8 мСек после фронта (за 2 мс до следующего обратного направления). Пишут клок констраин не выдержан, и минимум чего можно добиться это 12 мСек.

Блин вот какого? ведь на 100 МГц, сигналы точно готовы до 10 мСек... как договориться?

может кто пример правильного констраина написать?

сигналы
spi_in
spi_out
spi_clk
регистры
[8 : 0]spi_data_in_reg
[8 : 0]spi_data_out_reg

хочу чтобы с spi_in данные попадали в spi_data_in_reg не дольше чем через 5 нСек после восходящего сигнала клока spi_clk
а данные из spi_data_out_reg попадали на spi_out не дольше чем через 5 нСек после падающего сигнала клока spi_clk

может я чего пишу не верно?
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 4 2014, 21:19
Сообщение #22


Гуру
******

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



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

а констрейны - объявить домены асинхронными, и всё. Между ними никаких констрейнов. Констренить только входы данных относительно SPI клока - а это классический SDC-констрейн set_output_delay/set_input_delay
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 4 2014, 21:44
Сообщение #23


Гуру
******

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



вся синхронизация имеется, это понятно и это реализовано...

объявить асинхронные домены - это я думаю осилю (хотя если скажете какие буквы жать точно буду рад).

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

по падающему клоку я выставляю данные, а защелкиваются они по восходящему
если spi_clk имеет период 20 nSec, то синтезатор считает что данные могут стать валидными как раз за время чуть меньше 20 nSec к след фронту, а мне надо чтобы они стали валидными не позднее 10 nSec (и даже меньше), к след восходящему фронту.

если сделать период 10 nSec это получилось автоматически, и все работает и разводиться, но зачем искусственно зажимать клок? Хочу клок с периодом 20 nSec и готовностью данных за 8 nSec

я написал так
Код
NET "mem_spi_clk" TNM_NET = mem_spi_clk;
TIMESPEC TS_mem_spi_clk = PERIOD "mem_spi_clk" 20 ns HIGH 50%;
NET "mem_spi_clk" CLOCK_DEDICATED_ROUTE = FALSE;
OFFSET = IN 8 ns VALID 16 ns BEFORE "mem_spi_clk" RISING;
OFFSET = OUT 8 ns AFTER "mem_spi_clk" FALLING;

казалось бы вот оно счастье, а вот фиг,
OFFSET = OUT 8 ns AFTER "mem_spi_clk" FALLING;
этот констраин не выполняется... хочет чуть ли не 12 nSec

при этом схема с
TIMESPEC TS_mem_spi_clk = PERIOD "mem_spi_clk" 10 ns HIGH 50%;
разводиться, и констраин выполняется, то есть физически можно добиться время установки меньше 10 nSec....

как его уговорить то? Или я чего то не то написал?


Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 5 2014, 08:40
Сообщение #24


Гуру
******

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



-------------- покрутил еще----------------
вот если написать
TIMESPEC TS_mem_spi_clk = PERIOD "mem_spi_clk" 10 ns HIGH 50%;
FFSET = OUT 8 ns AFTER "mem_spi_clk" FALLING;

то констраин опять не выполняется и опять говорит что ему надо 12 nSec
это медленный путь, быстрый укладывается в 4 nSec вроде как..

медленный - это я так понимаю с запасиками в самых плохих температурных условиях?

причем в медленном пути около 7 nSec отжирает путь клока, ох ох ох, не заводите клоки на не клоковые входы...


Наверное получается не добиться мне от этой системы 50 МГц на выход. Вход вроде бы выходит.
Go to the top of the page
 
+Quote Post
Corner
сообщение Jan 5 2014, 10:00
Сообщение #25


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(Golikov A. @ Jan 5 2014, 12:40) *
-------------- покрутил еще----------------
вот если написать
TIMESPEC TS_mem_spi_clk = PERIOD "mem_spi_clk" 10 ns HIGH 50%;
FFSET = OUT 8 ns AFTER "mem_spi_clk" FALLING;

то констраин опять не выполняется и опять говорит что ему надо 12 nSec
это медленный путь, быстрый укладывается в 4 nSec вроде как..

медленный - это я так понимаю с запасиками в самых плохих температурных условиях?

причем в медленном пути около 7 nSec отжирает путь клока, ох ох ох, не заводите клоки на не клоковые входы...


Наверное получается не добиться мне от этой системы 50 МГц на выход. Вход вроде бы выходит.


Если это ксайлинкс, то сажайте на bufg и не парьтесь. Будет 2... 3 нс до bufg и практически 0 дальше...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 5 2014, 10:31
Сообщение #26


Гуру
******

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



да вот получилось 6.9 до bufg и дальше 1, это slow path
Go to the top of the page
 
+Quote Post
Corner
сообщение Jan 5 2014, 15:41
Сообщение #27


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(Golikov A. @ Jan 5 2014, 14:31) *
да вот получилось 6.9 до bufg и дальше 1, это slow path

Вы крайне неудачно расположили эту ножку на ПЛИС...
А много на ней сидит? Если влезет на ~1/4 кристалла, то можно попробовать ее как локальный клок прописать/

Сообщение отредактировал Corner - Jan 5 2014, 15:44
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 5 2014, 16:48
Сообщение #28


Гуру
******

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



это был не яsm.gif у нас разделения труда%)....

на этой ноге сидит только 2 сдвиговых регистра SPI
приемный и передающий. Причем они полностью изолированны от всего остального по времени, все данные для них могут быть готовы за много клоков до, и считаться через достаточно клоков после.

как сделать такое колдунство как локальный клок? Что-то мне кажется эту ногу вообще не надо тащить на буферы, или без этого в плис не бывает? может вообще все проще написать

Код
always @(spi_clk)
begin
   if(spi_clk == 1'b1) //UP

   else //down

end

или так еще хуже?
Go to the top of the page
 
+Quote Post
Tiro
сообщение Jan 5 2014, 17:01
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Golikov A. @ Jan 4 2014, 10:27) *
теперь новое устройство и первый SPI решил переписать на прием-передачу, чтобы он одновременно передавал и принимал. И вот тут все сломалось. По какой - то причине то ли передача то ли прием сдвигается на 1 бит, причем в моделсиме все четко, а в железе кирдык. Первый проект разводился в нескольких модификациях и SPI всегда работали без сбоя, а тут на пустом кристалле (пока добавил 4 модуля) ничего не работает...

Мне казалось что использовать клоковым сигнал с неклокового входа будет грозить тем что модули на этом сигнале в разных частях кристала будут работать с разными задержками, и потому использовать его для 1 модуля в целом безопасно.

На самом деле использование не клоковой ножки ничем не грозит, если именно сам автомат SPI разводится нормально. Если он тормозит, то надо на глобальную цепь перекинуть, как уже говорили, через global или bufg. Но вряд ли тормозит именно автомат SPI, это локальная структура и связи короткие. Считаю, что использовать такт SPI безопасно в автомате SPI при одном условии - клок "хороший", без "дребезга". Если нет гарантии - то не годится.

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

А про констрейны - это способ конфигурировать синтезатор и временной анализатор. Скорее даже только второй инструмент. То есть несинхронный дизайн должен анализироваться верно, поэтому констрейны позволяют исключить из анализа пути между несинхронными сигналами. Естественно, цепи междоменной синхронизации должны присутствовать аппаратно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 5 2014, 18:56
Сообщение #30


Гуру
******

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



тормозит именно SPI
в частности из готового сдвигового регистра не получается вовремя доставить данные на выход, по падающему фронту регистр сдвигается, а к следующему поднимающемуся данные должны уже стоять, а так не выходит, не хватает 2-3 нСек...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 07:46
Рейтинг@Mail.ru


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