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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> inout
Shtirlits
сообщение Dec 19 2010, 08:04
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Где видна проблема, в симуляторе или в железе, осциллографом, signal-tap-ом или микроконтроллером на SPI?
По слову SPI возникла ассоциация - времянки, задержки на буферах, clock-to-output.
Кстати, какая частота?

Если вы делаете SPI-slave, который тактируется внешним клоком, то допустимая частота может оказаться довольно низкой, так как пройдет несколько наносекунд пока клок пройдет входной буфер, пока запитает клоковую сеть, потом должен выходной регистр сработать и его выход дойти до ножки и остатка от периода должно хватить приемнику на другом конце провода.
Мне пришлось задать все констрейны (в xilinx offset in, offset out), отрегулировать slew rate, а главное - использовать локальные ресурсы разводки для клока.
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 19 2010, 08:11
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(Shtirlits @ Dec 19 2010, 13:04) *
Где видна проблема, в симуляторе или в железе, осциллографом, signal-tap-ом или микроконтроллером на SPI?
По слову SPI возникла ассоциация - времянки, задержки на буферах, clock-to-output.
Кстати, какая частота?

Тактовая в системе 125. SPI - половина от нее.
Цитата
Если вы делаете SPI-slave,

Нет. Мастер. И частота не большая. Причем если OE всегда в 1, то все нормально работает. Собственно я сделал двунаправленную шину, и у меня флешка перестала отвечать. Стал копать в чем дело, а оказалось что на такт MOSI сместился.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Dec 19 2010, 08:18
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



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

Проверьте, не пропущены ли какие-то констрейны.
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 19 2010, 08:24
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(Shtirlits @ Dec 19 2010, 13:18) *
Предлагаю гипотезу - сместился не на такт, а на время сопоставимое с периодом.

Сдвиговый регистр в 8бит на второй Арии при тактовой 125?

Цитата
Добавление OE может блокировать упаковку выходного регистра и он, бедный, лежит теперь где-то посреди фабрик.

Проверьте, не пропущены ли какие-то констрейны.

Не понял. На тайминги квартус не ругается, и ворнинги на мой SPI не говорит.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Dec 19 2010, 08:35
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Неужели на 16 ns +/- 1ns смещение?

Утверждение, что сломалось после добавления OE вызывает подозрение, что OE мешает упаковке, так как некоторые ресурсы в блоке ввода-вывода разделены между входным, выходным и регистром OE. В том числе reset, ClkOut и CE.

Aria - большая микросхема. Если регистр положить в один конец уже подзабитого кристалла, то до другого конца оно может не за одну наносекунду долететь.
Кроме того, если делать выход клока не по-пацански, через DDR, то будет заметный skew между данными и клоком на выходе.
Сочетание перечисленного может мешать работе схемы.

У вас констрейны как заданы, только частота или смещения входа и выхода относительно клока тоже?
Может, съехал сам клок?
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 19 2010, 13:08
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



У меня клок один - 125 мегагерц. А клок SPIя не клок вовсе с точки зрения альтеры.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Dec 19 2010, 13:20
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Правильно ли я понял, что общий клок 125 MHz распространяется через глобальное дерево, им же питается инвертируемый на каждом такте регистр для генерации клока SPI (который потом перезахватывается в регистре выходного блока) и выдается наружу?

PS:
Кроме клока есть еще clock enable и set/reset, которые зависят от синтеза и тоже мешают упаковке регистров в блок ввода-вывода.
Signal tap тут не поможет.
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 19 2010, 13:28
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(Shtirlits @ Dec 19 2010, 18:20) *
Правильно ли я понял, что общий клок 125 MHz распространяется через глобальное дерево, им же питается инвертируемый на каждом такте регистр для генерации клока SPI (который потом перезахватывается в регистре выходного блока) и выдается наружу?

Угу.
что-то вроде
spi_clk <= ~spi_clk;
if (spi_clk)begin
data[7:0] <= { data[6:0] , 1'b0}
spi_data <= data[7]
spi_oe <= 1'b1;
end
Цитата
PS:
Кроме клока есть еще clock enable и set/reset, которые зависят от синтеза и тоже мешают упаковке регистров в блок ввода-вывода.
Signal tap тут не поможет.

Где clock enable? В двунаправленной шине?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Dec 19 2010, 14:07
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



spi_clk вполне может синтезироваться в ClockEnable для всех сигналов внутри if, если я правильно понял выдранный из контекста участок кода.
Теперь, если выдать этот самый spi_clk наружу, то непонятно, как его регистр может быть упакован.
Можно ли задержать на такт и клок и данные? Тогда дополнительные регистры помогут размещению.

В общем, если так уж не хочется делать констрейны, то можно применить какие-то базовые элементы для регистров внутри блоков ввода-вывода. Сходу не нашел ничего лучше ALTDDIO_BIDIR. У xilinx обычно для этого применял отдельно буфер ввода-вывода и отдельно регистр рядом с ножкой.
Прикручивание этих элементов к своей схеме и выявит все, что на самом деле хочет квартус.

Смотрю на "Figure 6–3" http://www.altera.com/literature/hb/arria-...gx_handbook.pdf
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Dec 20 2010, 04:22
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



По опыту работы с констрейны могу посоветовать следующее: После обявление двунаправленной шины старые команды типа set_false_path -from [get_clocks {A}] -to [get_clocks {B}] сбивают с толку компилятор. Отсюда и отсутствие ворнингов о том, что констрейны выполнены. Сам не раз натыкался на подобное.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 20 2010, 04:27
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(warrior-2001 @ Dec 20 2010, 09:22) *
По опыту работы с констрейны могу посоветовать следующее: После обявление двунаправленной шины старые команды типа set_false_path -from [get_clocks {A}] -to [get_clocks {B}] сбивают с толку компилятор. Отсюда и отсутствие ворнингов о том, что констрейны выполнены. Сам не раз натыкался на подобное.

Если честно, то не понял ничего.

Сейчас смотрю altddio_bidir
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Dec 20 2010, 10:53
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Цитата(Methane @ Dec 19 2010, 14:24) *
...На тайминги квартус не ругается, и ворнинги на мой SPI не говорит.


Цитата(Methane @ Dec 20 2010, 10:27) *
Если честно, то не понял ничего.

Сейчас смотрю altddio_bidir


Я высказал предположение о том, почему квартус не ругается на тайминги. Думается мне, что действительно сдвиг не на так, а просто задержка оказалась примерно равна такту, вот сигналтап и показывает вам смещение на такт. Он по другому не умеет. Если у вас в проекте вообще отсутствуют *.sdc файлы, то тогда - другое дело.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post

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

 


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


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