Shtirlits 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Где видна проблема, в симуляторе или в железе, осциллографом, signal-tap-ом или микроконтроллером на SPI? По слову SPI возникла ассоциация - времянки, задержки на буферах, clock-to-output. Кстати, какая частота? Если вы делаете SPI-slave, который тактируется внешним клоком, то допустимая частота может оказаться довольно низкой, так как пройдет несколько наносекунд пока клок пройдет входной буфер, пока запитает клоковую сеть, потом должен выходной регистр сработать и его выход дойти до ножки и остатка от периода должно хватить приемнику на другом конце провода. Мне пришлось задать все констрейны (в xilinx offset in, offset out), отрегулировать slew rate, а главное - использовать локальные ресурсы разводки для клока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Где видна проблема, в симуляторе или в железе, осциллографом, signal-tap-ом или микроконтроллером на SPI? По слову SPI возникла ассоциация - времянки, задержки на буферах, clock-to-output. Кстати, какая частота? Тактовая в системе 125. SPI - половина от нее. Если вы делаете SPI-slave, Нет. Мастер. И частота не большая. Причем если OE всегда в 1, то все нормально работает. Собственно я сделал двунаправленную шину, и у меня флешка перестала отвечать. Стал копать в чем дело, а оказалось что на такт MOSI сместился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Предлагаю гипотезу - сместился не на такт, а на время сопоставимое с периодом. Добавление OE может блокировать упаковку выходного регистра и он, бедный, лежит теперь где-то посреди фабрик. Проверьте, не пропущены ли какие-то констрейны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Предлагаю гипотезу - сместился не на такт, а на время сопоставимое с периодом. Сдвиговый регистр в 8бит на второй Арии при тактовой 125? Добавление OE может блокировать упаковку выходного регистра и он, бедный, лежит теперь где-то посреди фабрик. Проверьте, не пропущены ли какие-то констрейны. Не понял. На тайминги квартус не ругается, и ворнинги на мой SPI не говорит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Неужели на 16 ns +/- 1ns смещение? Утверждение, что сломалось после добавления OE вызывает подозрение, что OE мешает упаковке, так как некоторые ресурсы в блоке ввода-вывода разделены между входным, выходным и регистром OE. В том числе reset, ClkOut и CE. Aria - большая микросхема. Если регистр положить в один конец уже подзабитого кристалла, то до другого конца оно может не за одну наносекунду долететь. Кроме того, если делать выход клока не по-пацански, через DDR, то будет заметный skew между данными и клоком на выходе. Сочетание перечисленного может мешать работе схемы. У вас констрейны как заданы, только частота или смещения входа и выхода относительно клока тоже? Может, съехал сам клок? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба У меня клок один - 125 мегагерц. А клок SPIя не клок вовсе с точки зрения альтеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Правильно ли я понял, что общий клок 125 MHz распространяется через глобальное дерево, им же питается инвертируемый на каждом такте регистр для генерации клока SPI (который потом перезахватывается в регистре выходного блока) и выдается наружу? PS: Кроме клока есть еще clock enable и set/reset, которые зависят от синтеза и тоже мешают упаковке регистров в блок ввода-вывода. Signal tap тут не поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба Правильно ли я понял, что общий клок 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? В двунаправленной шине? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 19 декабря, 2010 Опубликовано 19 декабря, 2010 · Жалоба spi_clk вполне может синтезироваться в ClockEnable для всех сигналов внутри if, если я правильно понял выдранный из контекста участок кода. Теперь, если выдать этот самый spi_clk наружу, то непонятно, как его регистр может быть упакован. Можно ли задержать на такт и клок и данные? Тогда дополнительные регистры помогут размещению. В общем, если так уж не хочется делать констрейны, то можно применить какие-то базовые элементы для регистров внутри блоков ввода-вывода. Сходу не нашел ничего лучше ALTDDIO_BIDIR. У xilinx обычно для этого применял отдельно буфер ввода-вывода и отдельно регистр рядом с ножкой. Прикручивание этих элементов к своей схеме и выявит все, что на самом деле хочет квартус. Смотрю на "Figure 6–3" http://www.altera.com/literature/hb/arria-...gx_handbook.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
warrior-2001 0 20 декабря, 2010 Опубликовано 20 декабря, 2010 · Жалоба По опыту работы с констрейны могу посоветовать следующее: После обявление двунаправленной шины старые команды типа set_false_path -from [get_clocks {A}] -to [get_clocks {B}] сбивают с толку компилятор. Отсюда и отсутствие ворнингов о том, что констрейны выполнены. Сам не раз натыкался на подобное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 20 декабря, 2010 Опубликовано 20 декабря, 2010 · Жалоба По опыту работы с констрейны могу посоветовать следующее: После обявление двунаправленной шины старые команды типа set_false_path -from [get_clocks {A}] -to [get_clocks {B}] сбивают с толку компилятор. Отсюда и отсутствие ворнингов о том, что констрейны выполнены. Сам не раз натыкался на подобное. Если честно, то не понял ничего. Сейчас смотрю altddio_bidir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
warrior-2001 0 20 декабря, 2010 Опубликовано 20 декабря, 2010 · Жалоба ...На тайминги квартус не ругается, и ворнинги на мой SPI не говорит. Если честно, то не понял ничего. Сейчас смотрю altddio_bidir Я высказал предположение о том, почему квартус не ругается на тайминги. Думается мне, что действительно сдвиг не на так, а просто задержка оказалась примерно равна такту, вот сигналтап и показывает вам смещение на такт. Он по другому не умеет. Если у вас в проекте вообще отсутствуют *.sdc файлы, то тогда - другое дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться