Перейти к содержанию

    

Проблемы с выводом сигнала с ПЛИС

Здравствуйте Пользователи.

 

У меня стоит задача выдать с ПЛИС меандр с частотой 100МГц. На вход ПЛИС (xc6slx100) приходит меандр 50 МГц с кварца. Как показано на приложенном рисунке, я пропускаю сигнал через DCM -> PLL -> ODDR2, чтобы умножить сигнал в два раза. ODDR2 был прикручен, так как при компиляции проекта, шли ошибки о невозможности вывести данный сигнал через обычный IO.

Проблема закралась в том, что при выводе сигнала, я получаю вместо меандра с частотой 100МГц получаю синус 100МГц.

 

Прошу дать совета по направлению поиска ошибок. Всю недостающую информацию предоставлю позднее, так как не знаю, что потребуется для решения.

 

 

clk.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
получаю вместо меандра с частотой 100МГц получаю синус 100МГц.

Прошу дать совета по направлению поиска ошибок. Всю недостающую информацию предоставлю позднее, так как не знаю, что потребуется для решения.

 

Начнем с того, что и у кого "стоит" -> "У меня стоит задача". И расскажите нам, как она именно "стоит".

Как определен стандарт вывода? Какая взята скорость наростания сигнала? Какой максимальный ток вывода?

А самое главное, зачем выводить "меандр с частотой 100МГц"? Для кого? Какого качества он требуется? С какими фронтами? На какую емкость линии? И способен ли данный вывод у данной ПЛИС вообще выводить такой меандр?

Ну и на сладкое. Если взять отличный меандр и смотреть его щупом осцилла, у которого полоса 100МГц, то что покажет осцилл?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Начнем с того, что и у кого "стоит" -> "У меня стоит задача". И расскажите нам, как она именно "стоит".

Как определен стандарт вывода? Какая взята скорость наростания сигнала? Какой максимальный ток вывода?

А самое главное, зачем выводить "меандр с частотой 100МГц"? Для кого? Какого качества он требуется? С какими фронтами? На какую емкость линии? И способен ли данный вывод у данной ПЛИС вообще выводить такой меандр?

Ну и на сладкое. Если взять отличный меандр и смотреть его щупом осцилла, у которого полоса 100МГц, то что покажет осцилл?

 

Задача - Необходимо сформировать меандр 100 МГц и вывести его на несколько шинных формирователей, для дальнейшего усиления до TTL и выдачей наружу, далее не уведомлен. (т.е. сформировать несколько таких сигналов.) За основу взять кварцевый генератор, который выдает меандр с частотой 50МГц.

Стандарт вывода - LVCMOS2.5

Скорость наростания - Честно признаюсь, что не осведомлен о возможности ее регулировать, я считал, что она определяется непосредственно возможностями выходных пинов ПЛИС.

Максимальный ток вывода - Если правильно понимаю 12мА.

Зачем выводить - так определено задание ничего более сказать не могу.

Также считал, что выводы единозначно выводят сигнал, то есть все одинаково, в плане фронтов и частоты. Видимо я был не прав, раз вы задаете такой вопрос. Согласно даташиту, ПЛИС может выдавать такую частоту.

 

Фронты - хотелось бы конечно 2ns. Опять же согласно даташиту максимальный фронт для данной ПЛИС - 144ps. Видимо в идеальном случае.

 

Сладкое оставлю на завтра.

Изменено пользователем Naixrim

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UPD!

 

Ранее я смотрел сигнал неосредственно в точке, между выводом ПЛИС и входом шинного формирователя, где и видел свой синус. Но ответ iosifk натолкнул на мысль посмотреть чисто вывод ПЛИС и вуаля, я получил свой меандр, вполне красивый, что говорит, что природа синуса кроется непосредственно в соединении ПЛИС и шинника. Данную проблему буду решать самостоятельно, но от вероятных советов или мыслей не откажусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Стандарт вывода - LVCMOS2.5

Скорость наростания - Честно признаюсь, что не осведомлен о возможности ее регулировать, я считал, что она определяется непосредственно возможностями выходных пинов ПЛИС.

Максимальный ток вывода - Если правильно понимаю 12мА.

Я не знаю, какую Вы применяете ПЛИС.

Но на всякий случай напишу. Я помню, что у Виртексов максимальный ток был 24 мА, а минимальный по умолчанию - 2мА. И это надо было специально указывать для каждого вывода. Скорость наростания задаются: fast или slow... Проверьте что достаточно конденсаторов по питанию для этого банка.

И еще есть SSO - ограничение на число одновременно переключаемых выводов, в зависимости от тока выводов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я не знаю, какую Вы применяете ПЛИС.

Но на всякий случай напишу. Я помню, что у Виртексов максимальный ток был 24 мА, а минимальный по умолчанию - 2мА. И это надо было специально указывать для каждого вывода. Скорость наростания задаются: fast или slow... Проверьте что достаточно конденсаторов по питанию для этого банка.

И еще есть SSO - ограничение на число одновременно переключаемых выводов, в зависимости от тока выводов.

 

 

Применяемую ПЛИС назвал еще начальном сообщении, но продублирую - xc6slx100 (SPARTAN 6 LX100) Максимальный ток выдает вроде 24мА.

 

Почитав на досуге Constrain Guide, нашел интересную конструкцию вида NET ”net_name” MAXSKEW=allowable_skew [units]; Это к вашим fast или slow, попробовал, действительно фронты становятся короче, но не приближаются к заданным значениям, т.е. задавал 2ns и 1ns, 2ns он выдает, при 1ns, фронт короче, но скорее 1,8ns.

 

UPD -

 

Посчитал, для каждого из банков необходимое количество конденсаторов по питанию, возможно надо поменять их емкость, в данный момент стоит - 0,1 мкФ

Изменено пользователем Naixrim

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Это к вашим fast или slow, попробовал, действительно фронты становятся короче,

Вот фрагмент файла ucf:

# VCCO33

 

NET "I_FORCE_CONTROL13" LOC = "B4";

INST "Buf_I_FORCE_CONTROL13" IOSTANDARD = LVCMOS33;

INST "I_FORCE_CONTROL13" IOB = FALSE;

INST "I_FORCE_CONTROL13" SLEW = SLOW;

NET "I_FORCE_CONTROL13" SLEW = SLOW;

INST "I_FORCE_CONTROL13" DRIVE = 4;

 

Здесь цепь I_FORCE_CONTROL13, задается вывод, стандарт, расположение в выходном буфере, скорости наростания, и сила тока...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вот фрагмент файла ucf:

# VCCO33

 

NET "I_FORCE_CONTROL13" LOC = "B4";

INST "Buf_I_FORCE_CONTROL13" IOSTANDARD = LVCMOS33;

INST "I_FORCE_CONTROL13" IOB = FALSE;

INST "I_FORCE_CONTROL13" SLEW = SLOW;

NET "I_FORCE_CONTROL13" SLEW = SLOW;

INST "I_FORCE_CONTROL13" DRIVE = 4;

 

Зачем одновременно NET и INST?

NET "I_FORCE_CONTROL13"  LOC = "B4";
NET "I_FORCE_CONTROL13" IOSTANDARD = LVCMOS33 | SLOW | DRIVE = 4;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Зачем одновременно NET и INST?

NET "I_FORCE_CONTROL13"  LOC = "B4";
NET "I_FORCE_CONTROL13" IOSTANDARD = LVCMOS33 | SLOW | DRIVE = 4;

Да просто дело в том, что тогда я написал на Си программку, которая все это автоматически и генерила из списка уж не помню какого файла. Потому как выводов было 425 и писать вручную для меня - это наделать много ошибок. А так действительно, если делать вручную, то через "|" запись получится короче.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вот фрагмент файла ucf:

# VCCO33

 

NET "I_FORCE_CONTROL13" LOC = "B4";

INST "Buf_I_FORCE_CONTROL13" IOSTANDARD = LVCMOS33;

INST "I_FORCE_CONTROL13" IOB = FALSE;

INST "I_FORCE_CONTROL13" SLEW = SLOW;

NET "I_FORCE_CONTROL13" SLEW = SLOW;

INST "I_FORCE_CONTROL13" DRIVE = 4;

 

Здесь цепь I_FORCE_CONTROL13, задается вывод, стандарт, расположение в выходном буфере, скорости наростания, и сила тока...

 

 

Благодарю за обьяснение. Где-нибудь прописано как и на сколько отличаются FAST и SLOW? И как зависят от выходных параметров? А также что значит - INST "I_FORCE_CONTROL13" IOB = FALSE; ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А также что значит - INST "I_FORCE_CONTROL13" IOB = FALSE; ?

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

А вот про параметры fast или slow для этой серии надо искать в даташите. Ну или написать в Инлайн или в Макро в техподдержку, они точно дадут ссылку на документ..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ранее я смотрел сигнал неосредственно в точке, между выводом ПЛИС и входом шинного формирователя, где и видел свой синус.
А какой у вас шинный формирователь? 100MHz не всякий шинник потянет (в том числе может и вход посадить)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А какой у вас шинный формирователь? 100MHz не всякий шинник потянет (в том числе может и вход посадить)

 

 

74lvt125

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Naixrim, я думаю, что у вас просто линия не согласована. Таким образом возникают отражения, которые портят ваш меандр. Для Spartan-6 попробуйте включить последовательный терминатор на буфере через OUT_TERM. Начните с 25 ом, мне кажется это поможет.

 

NET <NET NAME> OUT_TERM = <NONE/ UNTUNED_25 / UNTUNED_50 / UNTUNED_75>;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Naixrim, я думаю, что у вас просто линия не согласована. Таким образом возникают отражения, которые портят ваш меандр.

Если говорить об отражениях, то это колебательности на фронтах. Я в одной англоязычной книге нашел термин - "эффект окурка". Потом представил смятый окурок в пепельнице и все стало понятно.

А у ТС - синусоида, а это значит, что сигнал интегрируется, т.е фронты завалены из-за большой емкости линии. И источнику сигнала просто не хватает мощности для зарядки емкости линии.

Хотя, согласен, что согласование линии - это хорошо.

И еще. Для распределения импульсов по плате применяют специальные микросхемы, а не насилуют ПЛИсы сигналами LVCMOS.

Как альтернативу, может быть есть смысл поискать шинники, преобразующие LVDS в LVCMOS. И передачу импульсов по плате гнать как LVDS...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти