Jump to content

    
Sign in to follow this  
Chuh

Нужен глючный код!

Recommended Posts

Здравствуйте, делаю лабораторку для студентов на тем синхронизаторов и перехода между различными клоковыми доменами.

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

 

Структура дезайна такова: есть вычислительная часть работающая на частоте clk_in , где генерируется сигнал.

Есть RS232 интерфейс, который работает на частоте clk и передает результаты вычислительной части без каких либо синхронизаторов.

 

Хотелось бы показать, что при clk=clk_in все работает, а при clk~=clk_in все глючит.

 

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

 

Вообщем, нужен гарантированно глючный код на Verilog, который бы начал бы сбоить в случае, если clk~=сlk_in.

 

 

 

 

Share this post


Link to post
Share on other sites

Берете любые два внешних клоа и заводите их напрямую на разные счетчики. Затем выходы счетчиков объедините любой логикой. Это и будет 100% глючный дизвйн.

Share this post


Link to post
Share on other sites

на маленьком проекте имхо вряд ли вообще получится. если вся логика компактно укладывается вокруг глобального тактового дерева, то дизайн, расчитаный на малую частоту будет (плюс-минус) работать и на большой, т.е. сетапы и холды будут в тех пределах, что MTBF между глюками будет слишком велико для наблюдения глазами.

 

 

физически разные тактовые могут сработать

Edited by krux

Share this post


Link to post
Share on other sites
Здравствуйте, делаю лабораторку для студентов на тем синхронизаторов и перехода между различными клоковыми доменами.

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

 

Для этого, как минимум, надо иметь два реально независимых клока. Иначе ничего глючить и не будет. У вас какое окружение вообще? Симулятор? Реальная ПЛИС? Откуда берутся клоки?

 

 

простой глючный код:

 

reg [7:0] counter, r;

 

always @(posedge clk1)

if (reset)

counter <= 8'h0;

else

counter <= counter + 1'b1;

 

always @(posedge clk2)

r <= counter;

 

но нужно моделировать:

1) синтезированный нетлист с проверкой сетапов и холдов

2) чтобы клоки были такими, чтобы за время синтеза было попадание в ошибочное время

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

Share this post


Link to post
Share on other sites

вообще классика жанра - передача 8-бит шины с малой частоты на высокую, например 2,048 МГц на 125 МГц.

счетчик на стороне 2,048

00000001

00000010

00000011

счетчик на стороне 125

00000001

00000001

00000001

00000011 <- глюк

00000010

00000010

00000010

00000011

00000011

00000011

 

Share this post


Link to post
Share on other sites

Окружение - реальная ПЛИС Spartan 3E. Клоки делаются из базового при помощи DCM, причем я их делаю не кратными. Т.е. например clk_in=clk*3/7.

 

Я делал ровно такой код, только с 32 битным счетчиком. И он не глючит:( Вся проблема ИМХО в том, что дезайн слишком прост и мал. Но если он будет большим, для лабораторки - это плохо, т.к. студент теряет понимание,

того что происходит и почему.

 

Физически разные клоки я пока не придумал откуда взять.

Share this post


Link to post
Share on other sites
Окружение - реальная ПЛИС Spartan 3E. Клоки делаются из базового при помощи DCM, причем я их делаю не кратными. Т.е. например clk_in=clk*3/7.

 

забудьте о глюках при таких клоках - они связанные.

 

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

 

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

 

Где взять второй клок - а может в Вашей ПЛИС есть внутри конфигурационный генератор?

Share this post


Link to post
Share on other sites
забудьте о глюках при таких клоках - они связанные.

 

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

 

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

Это какой-то закон подлости. Помню, когда только начинал проектировать под ПЛИС, то не очень заботился о синхронизации доменов и в итоге (правда в куда более сложном дезайне) у меня все глючило куда бодрее, чем 1 глюк в час:( А как надо показать, то фиг покажешь

 

Лабу очень хотелось бы сделать на реальной ПЛИС, потому как симулятор - это хорошо, но надо в том числе показать, что симуляция соотвествует реальному процессу.

 

ЗЫ: Может линию задержки сделать...

Edited by Chuh

Share this post


Link to post
Share on other sites
Это какой-то закон подлости.

 

Это вероятность :) Как в анекдоте про блондинку - какова вероятность встретить на улице динозавра - 1/2 - или встречу, или нет. Так и у Вас - когда студентам показать чаще нет :), когда свой проект - чаще да :)

 

ЗЫ: Может линию задержки сделать...

 

Может, только на LE, раздвоив клоки... Но, это сегодня при +25 в лаборатории будет глючить, а завтра, при +24.8, не будет.

 

ТОЛЬКО реально независимые клоки!

Share this post


Link to post
Share on other sites

можно ещё одну разновидность неправильного кода добавить - логику между двумя регистрами, относящимся к разным доменам. Длинная цепь переноса тоже будет вносить подлянку в сетап и холд.

но дать гарантию что глючить будет именно гарантированно - нельзя, на то она и метастабильность.

Share this post


Link to post
Share on other sites
ТОЛЬКО реально независимые клоки!

Буду думать откуда брать. Так не хочется ничего допаивать на студенческие kit'ы...

 

можно ещё одну разновидность неправильного кода добавить - логику между двумя регистрами, относящимся к разным доменам. Длинная цепь переноса тоже будет вносить подлянку в сетап и холд.

но дать гарантию что глючить будет именно гарантированно - нельзя, на то она и метастабильность.

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

 

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

Share this post


Link to post
Share on other sites

На всякий случай спрошу еще раз - а в этой ПЛИС случаем нету внутреннего осциллятора, который для конфигурации, и который можно задействовать и внутри для своих нужд?

 

Есть еще вариант поставить спиртовку под микросхему. Поидее частота глюков должна повыситься,

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

 

 

ЗЫ. Можете попробовать сделать генератор на закольцованной куче буферов и инвертора внутри ПЛИС... Но это само по себе глючное решение :)

 

ЗЗЫ. А что за киты?

Share this post


Link to post
Share on other sites

ещё как вариант для показа студентам - сделать gate-level netlist (.vo + .sdo) и запустить его в моделсиме, предварительно исковеркав времянки, чтобы глючило наглядно. но это подстава ;-)

Share this post


Link to post
Share on other sites
На всякий случай спрошу еще раз - а в этой ПЛИС случаем нету внутреннего осциллятора, который для конфигурации, и который можно задействовать и внутри для своих нужд?

 

 

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

 

 

ЗЫ. Можете попробовать сделать генератор на закольцованной куче буферов и инвертора внутри ПЛИС... Но это само по себе глючное решение :)

 

ЗЗЫ. А что за киты?

Про внутреннего осциллятор у Spartan 3E я ни разу не слышал (что ни как не означает, что его там нет). На всякий случай перечитаю мануал.

 

Киты Digilent Nexys 2.

Share this post


Link to post
Share on other sites

Посмотрел схему кита поверхностно - там с CY7C68013 должен идти клок - по схеме цепь U-IFCLK... Вопрос, есть ли он там постоянно, вроде должен бы быть, если USB не в полном power down. Если его там нету, подшаманить что-то с CY, чтобы клок пошел оттуда

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this