Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CPLD Clock
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
skkap
Вечер добрый!

Возникла задача сделать часы на программируемой логике, по количеству входов выбрал CPLD от Altera - EPM3032.
Понимаю что задача совсем не для CPLD/FPGA, а для простенького МК, но такое уж задание (учебное).

Итак, время вопросов. Первый вопрос возник по тактированию.
Мы имеем 2 входа: GCLK1 и GCLK2, в моей задаче нужен всего один вход тактирования, возьмем GCLK1.
Как показал поиск по форуму - в основном используют кварцевые генераторы, но таковых на 32,768кГц не нашлось. Зато нашлись резонаторы.
Внимание вопрос: корректно ли будет работать EPM3032 затактированная столь мало частотой?
Если да, то какую схему подключения CLK вы бы посоветовали?
В данный момент пытаюсь собрать что-то из этого: http://cxem.net/beginner/beginner26.php (внизу станицы) на макетке, но часовой кварц не заводится, наверное из-за не точного соответствия номиналов деталек(просто не все нужные номиналы в наличии), или из за того что микросхема TTL а не CMOS (скоро попробую и КМОП, пока нету нужной).

Заранее спасибо за советы!
sazh
Цитата(skkap @ Oct 29 2009, 22:35) *
Вечер добрый!

Возникла задача сделать часы на программируемой логике, по количеству входов выбрал CPLD от Altera - EPM3032.
Понимаю что задача совсем не для CPLD/FPGA, а для простенького МК, но такое уж задание (учебное).

Итак, время вопросов. Первый вопрос возник по тактированию.
Мы имеем 2 входа: GCLK1 и GCLK2, в моей задаче нужен всего один вход тактирования, возьмем GCLK1.
Как показал поиск по форуму - в основном используют кварцевые генераторы, но таковых на 32,768кГц не нашлось. Зато нашлись резонаторы.
Внимание вопрос: корректно ли будет работать EPM3032 затактированная столь мало частотой?
Если да, то какую схему подключения CLK вы бы посоветовали?
В данный момент пытаюсь собрать что-то из этого: http://cxem.net/beginner/beginner26.php (внизу станицы) на макетке, но часовой кварц не заводится, наверное из-за не точного соответствия номиналов деталек(просто не все нужные номиналы в наличии), или из за того что микросхема TTL а не CMOS (скоро попробую и КМОП, пока нету нужной).

Заранее спасибо за советы!


Если учебное, комбинируйте. Еще 100 лет назад часы делали на трех микросхемах 176 серии. Не помню каких. Вот на одну из них лепится этот часовой кварц. На выходе вроде 1 секунда. Вот и сделайте все остальное на EPM, учитывая, что 32 - это 32 триггерных ячейки.
skkap
Цитата(sazh @ Oct 30 2009, 01:41) *
Если учебное, комбинируйте. Еще 100 лет назад часы делали на трех микросхемах 176 серии. Не помню каких. Вот на одну из них лепится этот часовой кварц. На выходе вроде 1 секунда. Вот и сделайте все остальное на EPM, учитывая, что 32 - это 32 триггерных ячейки.


Верно ли я понял из вашего ответа, что нижнего ограничения частоты нет, и при сигнале раз в секунду все будет работать?
Про спец. микрухи:
смысл использовать малую часть функционала от 176ИЕ13 чтобы потом продублировать остальную на EPM? Задача именно в замене рассыпухи на CPLD. К томуже я её собирать буду, и в наличии тока CPLD и минимум обвязки, из микросхем поставлю только какую-нибудь логическую (инвертор/И/ИЛИ) для кварца. Вот как раз прошу подсказать, как с малыми потерями подключить часовой кварц с CPLD?

Про макроячейки я что-то не задумывался что может не хватить, но если не хватит - не страшно, перейду на что-нить побольше.
Shtirlits
Цитата(skkap @ Oct 29 2009, 22:35) *
Понимаю что задача совсем не для CPLD/FPGA, а для простенького МК, но такое уж задание (учебное).

Мелковата микросхема, не понимаю, как в нее засунуть часы.
Если тупо делать, то регистров хватит только чтобы поделить 4 килогерца и сделать время в BCD на ножках.
Как сделать генератор на кишках программируемого устройства обсуждалось. Я бы не стал заморачиваться.
А если поставить что-то позлее, то можно не заморачиваться с частотой степени двойки и взять генератор на несколько мегагерц, можно даже поточнее выбрать.
sazh
Цитата(skkap @ Oct 29 2009, 23:13) *
Вот как раз прошу подсказать, как с малыми потерями подключить часовой кварц с CPLD?


А никак.
skkap
Т.е. схему по типу этой

Нельзя использовать? Неужели все используют генераторы?


Shtirlits, просто о ячейках не подумал при выборе, наверное придется выбрать модель с большим кол-вом ячеек.
aaarrr
Цитата(skkap @ Oct 29 2009, 23:42) *
Т.е. схему по типу этой

Для такой схемы нужен небуферизированный (unbuffered) инвертор, иначе запуск генератора превращается в долгую пляску с бубном.
Shtirlits
Недавно была тема про генератор http://electronix.ru/forum/index.php?showtopic=67209
Советую сначала написать все, что нужно для прошивки, отладить в симуляторе, а потом покупать и паять.
Так не будет неожиданностей с распайкой и ресурсами.

А можно узнать, как точно сформулированы критерии выбора железа? Может что-то интереснее cpld можно применить?
andrey_s
Часы с питанием от сети или от батарейки? Если первое, то, может, вообще можно без кварца? ИМХО, раз уж устройство учебное, попробуйте использовать в качестве опорной частоты питающую сеть - разумеется, точность никакая, зато есть вероятность, что все влезет и в EPM3032.

Удачи!
alevnew
Цитата(aaarrr @ Oct 30 2009, 03:07) *
Для такой схемы нужен небуферизированный (unbuffered) инвертор, иначе запуск генератора превращается в долгую пляску с бубном.

Я когда-то давненько делал девайсы на серии MAX7000, так генератор делал просто, по классической схеме с 2-мя инверторами. Т.е. просто вводил в CPLD 2 инвертора. Естественно при этом используется 4 ноги, но зато проблем с запуском ни разу не возникло.
rv3dll(lex)
даю код vhdl
правда я не отлаживал - только написал - заодно и проверишь
skkap
Всм большое спасибо за ответы! Итак, по порядку

Цитата
Для такой схемы нужен небуферизированный (unbuffered) инвертор, иначе запуск генератора превращается в долгую пляску с бубном.


Такие как К561ЛН2, 564ЛЕ5, 564ЛА7 подойдут? не совсем понимаю что значит "небуферизированный".

Цитата
А можно узнать, как точно сформулированы критерии выбора железа? Может что-то интереснее cpld можно применить?


Требование - ПЛИС от Altera, на самом деле выбор велик, просто выбрал 3032 для себя, попробовать собрать что-то на ПЛИС, мб и не часы совсем (3032 нашлась по дешовке и платы легко делать с дорожками в 1мм). Но если не хватает возьму какуюнить более емкую ПЛИС, например EPM3512 или др.

Цитата
Часы с питанием от сети или от батарейки? Если первое, то, может, вообще можно без кварца? ИМХО, раз уж устройство учебное, попробуйте использовать в качестве опорной частоты питающую сеть - разумеется, точность никакая, зато есть вероятность, что все влезет и в EPM3032.

Питание от сети, а в случае отсутствия - от батарейки. Использовать 50Гц для отсчета времени не кошерно ИМХО) в таком случае я лучше поставлю генератор на несколько МГц и от него считать буду) А использование 3032 не обязательно, наверно я не на том сделал акцент в своем посте - я выясняю как правильно и не сложно тактировать CPLD используя кварц 32КГц.


Цитата
даю код vhdl
правда я не отлаживал - только написал - заодно и проверишь

Спасибо! о _ О Не ожидал готового решения, будет на что опираться при разработке, но постараюсь все сделать сам) всетаки учусь smile.gif
aaarrr
Цитата(skkap @ Oct 30 2009, 21:47) *
Такие как К561ЛН2, 564ЛЕ5, 564ЛА7 подойдут?

Не знаю, это надо проверять.

Цитата(skkap @ Oct 30 2009, 21:47) *
не совсем понимаю что значит "небуферизированный".

Значит сделанный буквально из двух транзисторов. Тыц.
Джеймс
Цитата(skkap @ Oct 30 2009, 22:47) *
Такие как К561ЛН2, 564ЛЕ5, 564ЛА7 подойдут? не совсем понимаю что значит "небуферизированный".


http://www.fpgarelated.com/usenet/fpga/show/9209-1.php

Цитата
Re: Connecting a crystal to a Cyclone or Max PLD - Peter Alfke - 2004-05-03 18:54:00
Driving a crystal from an PLD device.

Since this question pops up again and again, maybe it deserves a better
explanation.

A crystal is usually connected as a Colpitts oscillator, where the IC
provides the first 180 degree phase shift, and the xtal plus external RC
combine for the remaining 180 degrees. The total circuit loop must have 360
degree phase shift and a gain of exactly 1.0. That is the condition for
stable oscillation.

XC3000 had such a single-stage amplifier, and could implement an oscillator
with just a crystal, two capacitors and two resistors.
But there were lots of problems when users connected obscure crystals,
ranging from 32 kHz to 100 MHz. Most digital designers lack even the most
rudimentary understanding of oscillators, why they require a single
amplifier stage, and why they cannot reliably be implemented with the
multi-stage amplifier typically between an input and an output of a modern
CMOS IC.


So, please, don't even try. You will not be able to design a reliable xtal
oscillator this way, one that starts and runs reliably, and does not break
out in wild harmonic or non-harmonic oscillations.

Finally: Packaged oscillators are cheap, just pennies more than the simple
xtal. It does not make sense to jeopardize your design for the $ 0.25 saved
by using a naked crystal. Let the oscillator manufacturers sweat out all
those analog details, they are good at it. Us digital folks are not.

Peter Alfke
SLDM
Кварцованые генераторы на рассыпухе(равно как и на CPLD) - вещь надежная только при грамотном расчете всех балансов. Как это сделать для таких схем, честно говоря не знаю. Делал схемы кварцевых генераторов на микросхеме КР1533ЛН1 (элемент -НЕ). Вроде все работало, но попадались экземпляры(в зависимости от партии ЛН1 или партии кварцев) которые либо не всегда запускались, либо иногда взвывали не на той гармонике кварца. Все решалось подбором емкостей или вводом дополнительной обратной связи. Тоже самое с CPLD. Если такая надежность устраивает, то в добрый путь. В противном случае рекомендую обратить внимание на микросхемы со встроенным RTC. У некоторых из них присутствует встроенный генератор и есть выход с 1 сек. импульсами.
EvgenyNik
Цитата
Питание от сети, а в случае отсутствия - от батарейки.

Недолго же проживёт эта схема при питании от батарейки... Очень недолго. В качестве индикаторов что - невыключаемые светодиодные 7сегменты? Ну-ну smile.gif
Если по делу, то. Я, конечно, понимаю, что задача совершенно учебная и её основная цель - поделить до секунд, далее счётчик до 59 - инкримент для минут, ещё один такой же - для часов, счётчик до 23 - обнуление. Ну и дешифраторы от всего этого добра с выходом на индикаторы. Но предложите преподу и рассмотрите сами следующий подход:
1. Часовая микросхема с интерфейсом I2C и импульсным выходом 32.768кГц и/или 1Гц.
2. Питание для неё через максиселектор (сеть, батарейка. Есть "часы", которым внешние диоды не нужны)
3. CPLD
4. Индикаторы (ЖК или светодиодные - без разницы)
5. Кнопки
6. Питание для CPLD и индикаторов - только от сети
---
Импульсный выход часовой микрухи используете для тактирования CPLD (32.768кГц для автомата I2C и генерации на ЖК, если индикаторы ЖК)
Читаете время 1 раз в час, далее "ведёте время" по тактовому импульсу 1Гц (или от счетчика 32.768кГц), через час - корректируете.
Не намного сложнее, зато красивое решение и никакого ге$%^оя с аналоговым тактированием - сплошная "цифра".
Вообще, достаточно читать время только 1 раз - при включении, а потом считать импульсы (1Гц или 32.768кГц) - будет равноценно по точности. Но из соображений, что что-то может сбиваться из-за помех по питанию, периодически надо сверяться.
Victor®
Цитата(SLDM @ Oct 30 2009, 23:11) *
Кварцованые генераторы на рассыпухе(равно как и на CPLD) - вещь надежная только при грамотном расчете всех балансов. Как это сделать для таких схем, честно говоря не знаю. Делал схемы кварцевых генераторов на микросхеме КР1533ЛН1 (элемент -НЕ). Вроде все работало, но попадались экземпляры(в зависимости от партии ЛН1 или партии кварцев) которые либо не всегда запускались, либо иногда взвывали не на той гармонике кварца. Все решалось подбором емкостей или вводом дополнительной обратной связи. Тоже самое с CPLD. Если такая надежность устраивает, то в добрый путь. В противном случае рекомендую обратить внимание на микросхемы со встроенным RTC. У некоторых из них присутствует встроенный генератор и есть выход с 1 сек. импульсами.


Похоже,что проблема у Вас возникала из-за кварца. Надо использовать кварцы на основной (fundamental mode) гармонике.
Что, кстати, указывают практически все производители чипов, в которых предусмотрено подключение кварца.
Кроме этого надо грамотно посчитать шунтирующие емкости. Обычно они одинаковы и их
С1||C2 должно равняться Cload кварца.

И тогда, наверняка.... :-)

-- Успехов
aaarrr
Цитата(Victor® @ Oct 31 2009, 16:12) *
И тогда, наверняка.... :-)

А Вы когда-нибудь строили низкочастотные генераторы таким образом? 32кГц и 1МГц - две очень большие разницы, второй завести на порядок легче.
Victor®
Цитата(aaarrr @ Oct 31 2009, 21:11) *
А Вы когда-нибудь строили низкочастотные генераторы таким образом? 32кГц и 1МГц - две очень большие разницы, второй завести на порядок легче.


Почему Вы так считаете?
А "И тогда, наверняка.... :-)"- это из старой детской советской песенки :-)
aaarrr
Цитата(Victor® @ Oct 31 2009, 20:39) *
Почему Вы так считаете?

Считаю что - что две большие разницы? Потому что оно так и есть. Свежи еще воспоминания от запуска 32кГц генератора, собранного на обычном инверторе (ибо NC7S04SPU купить затруднительно).
Victor®
Цитата(aaarrr @ Oct 31 2009, 21:00) *
Считаю что - что две большие разницы? Потому что оно так и есть. Свежи еще воспоминания от запуска 32кГц генератора, собранного на обычном инверторе (ибо NC7S04SPU купить затруднительно).


1-го инвертора для этого недостаточно...
смотрите, например на NXP 74LVC1GX04 или TI SN74LVC1GX04
Специально для этого сделана.
Сейчас практически все можно купить через Digikey, Farnell и пр., хоть от одной штуки.
aaarrr
Цитата(Victor® @ Oct 31 2009, 23:39) *
1-го инвертора для этого недостаточно...

Ну, у меня был инвертор + триггер шмитта.

Цитата(Victor® @ Oct 31 2009, 23:39) *
Специально для этого сделана.

Да, правильная микросхемка. Вот я и решил на будущее закладывать что-то подобное, чтобы у комплектовщиков-сборщиков не появлялось соблазна забить на некоторые буковки в наименовании.
skkap
Всем спасибо за ответы!

Цитата
Недолго же проживёт эта схема при питании от батарейки... Очень недолго. В качестве индикаторов что - невыключаемые светодиодные 7сегменты? Ну-ну smile.gif
Если по делу, то. Я, конечно, понимаю, что задача совершенно учебная и её основная цель - поделить до секунд, далее счётчик до 59 - инкримент для минут, ещё один такой же - для часов, счётчик до 23 - обнуление. Ну и дешифраторы от всего этого добра с выходом на индикаторы. Но предложите преподу и рассмотрите сами следующий подход:
1. Часовая микросхема с интерфейсом I2C и импульсным выходом 32.768кГц и/или 1Гц.
2. Питание для неё через максиселектор (сеть, батарейка. Есть "часы", которым внешние диоды не нужны)
3. CPLD
4. Индикаторы (ЖК или светодиодные - без разницы)
5. Кнопки
6. Питание для CPLD и индикаторов - только от сети
---
Импульсный выход часовой микрухи используете для тактирования CPLD (32.768кГц для автомата I2C и генерации на ЖК, если индикаторы ЖК)
Читаете время 1 раз в час, далее "ведёте время" по тактовому импульсу 1Гц (или от счетчика 32.768кГц), через час - корректируете.
Не намного сложнее, зато красивое решение и никакого ге$%^оя с аналоговым тактированием - сплошная "цифра".
Вообще, достаточно читать время только 1 раз - при включении, а потом считать импульсы (1Гц или 32.768кГц) - будет равноценно по точности. Но из соображений, что что-то может сбиваться из-за помех по питанию, периодически надо сверяться.


Спасибо за советы, много нового узнал, особенно про "максиселектор", почитаю про такие, очень интересно, применю smile.gif
Про часовую ИС, отказался ибо итак часы на непомерно дорогой для них CPLD (любая CPLD имхо дорогая для применения в часах), так еще и спец. ИС ставить... не хорошо.



А теперь самое важное!:)
У меня наконец получилось запустить кварц, после долгих пыток с заменой ИС, кондеров, резисторов.
Привожу схему по которой все заработало:
Нажмите для просмотра прикрепленного файла

Тут возник небольшой вопрос, имеет ли смысл поставить второй инвертор? Ведь по сути он для украшения сигнала?

Вот осциллограммы сигнала до второго инвертора:

Нажмите для просмотра прикрепленного файла

и после:

Нажмите для просмотра прикрепленного файла

Имеет ли это смысл?

Имеется еще вопрос, при включении питания частота устанавливается не сразу, а ч/з 10-15 секунд, сначала частота меньше (ок. 20кГц). Нормально ли это? Или продолжать пилить схему?
Спасибо!
aaarrr
Цитата(skkap @ Nov 1 2009, 00:12) *
Имеет ли это смысл?

Имеет.

Цитата(skkap @ Nov 1 2009, 00:12) *
Имеется еще вопрос, при включении питания частота устанавливается не сразу, а ч/з 10-15 секунд, сначала частота меньше (ок. 20кГц). Нормально ли это? Или продолжать пилить схему?

Нет, это не нормально (долго очень), но и схему пилить дальше не советую. Возмите лучше микросхемку типа той, что Victor® предлагал чуть выше.
Victor®
Цитата(skkap @ Nov 1 2009, 00:12) *
Имеет ли это смысл?


Однозначно - имеет. И вот почему...
Он нужен для увеличения скорости фронтов.
Это хорошо видно по осциллограммам.
И, кстати, незря они установлены в спец. ИМС, вроде как там 3 последовательных инвертора.,
каждый из них, т.с. "улучшает" сигнал.


Кстати, какие-то кондеры у Вас громадные.... 130 пФ?
Cl у кварцев обычно в пределах 10 -30 пФ. Вроде как 12.5 встречается наиболее часто.
Попробуйте поставить по 20-30 pF.

Вообще-то почитайте док на чипы TI, NXP, что я указывал. Насколько я помню - еще надо учитывать
входную емкость.
rv3dll(lex)
а забыл написать - проект уместился в 72 сплд ксайлинкса может влезть в 3064 которая по размеру как 3032
skkap
Цитата(aaarrr @ Nov 1 2009, 03:34) *
Имеет.


Цитата(Victor® @ Nov 1 2009, 16:24) *
Однозначно - имеет. И вот почему...
Он нужен для увеличения скорости фронтов.
Это хорошо видно по осциллограммам.
И, кстати, незря они установлены в спец. ИМС, вроде как там 3 последовательных инвертора.,
каждый из них, т.с. "улучшает" сигнал.


Спасибо за пояснения! Значит имеет смысл включить все 5 свободных инверторов из 561ЛН2 в цепочку?




Цитата
Нет, это не нормально (долго очень), но и схему пилить дальше не советую. Возмите лучше микросхемку типа той, что Victor® предлагал чуть выше.


Цитата
Кстати, какие-то кондеры у Вас громадные.... 130 пФ?
Cl у кварцев обычно в пределах 10 -30 пФ. Вроде как 12.5 встречается наиболее часто.
Попробуйте поставить по 20-30 pF.

Вообще-то почитайте док на чипы TI, NXP, что я указывал. Насколько я помню - еще надо учитывать
входную емкость.


На счет спец. ИС - не нашел не одной такой в моем городе, мб плохо искал.. Заказывать всего одну ИС не хочется, к томуже почти вышло на простом инверторе.
И вообще, почитал даташит,тот же инвертор и не чего более, мб посоветуете что почитать по этой теме? гдето должна разъясняться физика процесса - как завести кристалл, расчет емкостей и т.д. В часоых схемах и многих МК это же реализовано, значит должны быть какие-то образцы для реализации.


Теперь на счет конденсаторов, большое спасибо за подсказку!:)
Когда первый раз заработало (При замене кондеров 27пф на 130пф) подумал что просто надо большие кондеры, после вашей подсказки заменил обратно - перестало работать, потом заменил на другие 27пф - заработало! Один из кондеров сломался или бракованый, вобщем мультиметр не желает показывать его емкость. Теперь актуальная схема такова:

Нажмите для просмотра прикрепленного файла

А время установки около двух секунд, наверное нормальноsmile.gif



Цитата(rv3dll(lex) @ Nov 2 2009, 13:15) *
а забыл написать - проект уместился в 72 сплд ксайлинкса может влезть в 3064 которая по размеру как 3032


Спасибо! меньше ног - легче рисовать схемуsmile.gif


Сейчас обнаружил что при 27 пФ осциллограф показывает периодически (гдето раз в 10 сек) частоту 32,77 sad.gif С 130пф частота стабильна.
Victor®
Цитата(skkap @ Nov 2 2009, 17:21) *
Спасибо за пояснения! Значит имеет смысл включить все 5 свободных инверторов из 561ЛН2 в цепочку?








На счет спец. ИС - не нашел не одной такой в моем городе, мб плохо искал.. Заказывать всего одну ИС не хочется, к томуже почти вышло на простом инверторе.
И вообще, почитал даташит,тот же инвертор и не чего более, мб посоветуете что почитать по этой теме? гдето должна разъясняться физика процесса - как завести кристалл, расчет емкостей и т.д. В часоых схемах и многих МК это же реализовано, значит должны быть какие-то образцы для реализации.


Теперь на счет конденсаторов, большое спасибо за подсказку!:)
Когда первый раз заработало (При замене кондеров 27пф на 130пф) подумал что просто надо большие кондеры, после вашей подсказки заменил обратно - перестало работать, потом заменил на другие 27пф - заработало! Один из кондеров сломался или бракованый, вобщем мультиметр не желает показывать его емкость. Теперь актуальная схема такова:

Нажмите для просмотра прикрепленного файла

А время установки около двух секунд, наверное нормальноsmile.gif





Спасибо! меньше ног - легче рисовать схемуsmile.gif


Сейчас обнаружил что при 27 пФ осциллограф показывает периодически (гдето раз в 10 сек) частоту 32,77 sad.gif С 130пф частота стабильна.


Вот подумал, что подозрительно громадное значение 10 MOhm в цепи ОС.
попробуйте поставить что-то около 1MOhm, а второй вообще закоротить (но тогда есть риск спалить кварца.)

Хотя, может это (10 мегов) и корректно. Вот посмотрите тут...
http://www.fairchildsemi.com/an/AN/AN-340.pdf и тут
http://www.icbase.com/pdf/add/ti/AN-101-00039en.pdf
Там все написано...
Еще для успешного запуска надо
1) Знать емкость кварца
2) Убедиться, что ЛН-ка в активном режиме (пол-питания на входе). Отцепите R2, меняя R1 добейтесь пол-питания.
Вроде так. Ох, и давно я таким занимался :-) Может что и перепутал, но вроде все правильно
skkap
Цитата
Вот подумал, что подозрительно громадное значение 10 MOhm в цепи ОС.
попробуйте поставить что-то около 1MOhm, а второй вообще закоротить (но тогда есть риск спалить кварца.)


Попробовал, при 1МОм и закоротка частота не устанавливается вообще, скочит от 20 до 40 КГц. Поставил 3.6МОм, работает хорошо, впрочем как и при 10.


Цитата
Хотя, может это (10 мегов) и корректно. Вот посмотрите тут...
http://www.fairchildsemi.com/an/AN/AN-340.pdf и тут
http://www.icbase.com/pdf/add/ti/AN-101-00039en.pdf
Там все написано...
Еще для успешного запуска надо
1) Знать емкость кварца
2) Убедиться, что ЛН-ка в активном режиме (пол-питания на входе). Отцепите R2, меняя R1 добейтесь пол-питания.
Вроде так. Ох, и давно я таким занимался :-) Может что и перепутал, но вроде все правильно


За доки огромное спасибо!! То что я искал, с пояснениями и графиками!
По расчетам мне надо C1 и C2 около 60пФ, самое близкое что нашлось - 100пФ, поставил - запускается за секунду(к томуже возможно это цифровой осцил тормозит), частота стабильна!
Пропустил через два инвертора и получил сигнал красивей некуда (скрин прилогается) smile.gif
Нажмите для просмотра прикрепленного файла

Всем спасибо, вроде первая проблема решена)

Да, и чуть не забыл, итоговая схема (может быть не идеал, но работает smile.gif )
Нажмите для просмотра прикрепленного файла
Victor®
Цитата(skkap @ Nov 2 2009, 21:34) *
Попробовал, при 1МОм и закоротка частота не устанавливается вообще, скочит от 20 до 40 КГц. Поставил 3.6МОм, работает хорошо, впрочем как и при 10.




За доки огромное спасибо!! То что я искал, с пояснениями и графиками!
По расчетам мне надо C1 и C2 около 60пФ, самое близкое что нашлось - 100пФ, поставил - запускается за секунду(к томуже возможно это цифровой осцил тормозит), частота стабильна!
Пропустил через два инвертора и получил сигнал красивей некуда (скрин прилогается) smile.gif
Нажмите для просмотра прикрепленного файла

Всем спасибо, вроде первая проблема решена)

Да, и чуть не забыл, итоговая схема (может быть не идеал, но работает smile.gif )
Нажмите для просмотра прикрепленного файла


Уменьшите R2 до нескольких кил - думаю быстрее будет запускаться :-)
В рекомндациях он не настолько велик, кстати.
skkap
Цитата
Уменьшите R2 до нескольких кил - думаю быстрее будет запускаться :-)
В рекомндациях он не настолько велик, кстати.


А про него просто написать забыл smile.gif При его уменьшении как бы это сказать.. фронты задние болтаются туда-сюда, а это я так понимаю значит что частота немного колеблется, что есть плохо. Тем более время запуска около секунды - нормально, учитывая что в часах питание должно будет присутствовать постоянно, иначе в них нет смысла) Спасибо еще зраз за советы и доки! Уверен что еще появятя вопросы, озвучу в этой теме
Victor®
Цитата(skkap @ Nov 2 2009, 23:03) *
А про него просто написать забыл smile.gif При его уменьшении как бы это сказать.. фронты задние болтаются туда-сюда, а это я так понимаю значит что частота немного колеблется, что есть плохо. Тем более время запуска около секунды - нормально, учитывая что в часах питание должно будет присутствовать постоянно, иначе в них нет смысла) Спасибо еще зраз за советы и доки! Уверен что еще появятя вопросы, озвучу в этой теме


Успехов!
skkap
Всем снова привет!
Появилась новая "проблема", на этот раз с QuartusII.
На самом деле не совсем проблема, а просто некоторая непонятка, итак ситуация:

Создал проект, в нем схемный файл для общей блок схемы, назначил его Сущностью верхнего уровня (Top-level Entity).
В нем создаю основные функциональные блоки часов и реализовываю на VHDL. Это делаю таким методом: Создаю новый VHDL файл, затем пишу логику работы, потом правый клик на файл в дереве проекта и создаю файлы символа (Create Symbol files for Current File).
После этого данный символ появляется в списке символов для добавления в схемный файл. Таким образом все отлично работает, но один блок захотелось реализовать также схемой, а не на VHDL. Создал схемный файл, добавил инпуты/аутпуты, добавил реализацию логикой, сохранил. А пункта Create Symbol files for Current File в контекстном меню схемного файла нет! Каким образом создать символ (такой же как при реализации на VHDL) для этого файла? Я это раньше делал в MAX PLUS, поэтому я думаю это должно быть возможно, я просто что-то упускаю.

Знаю один способ сделать то что я описал с помощью Block Tool, но этот метод мне совсем не нравится. В этом случае блок получается огромный с таблицей входов-выходов + еще каждый вход-выход приходится выводить в отдельный прямоугольник (Port Mapping), что сжирает пол экрана места (мне критично, т.к. потом буду оформлять отчет с этой блок-схемой)

Подскажите!:)
sazh
Цитата(skkap @ Nov 14 2009, 11:32) *
Создал схемный файл, добавил инпуты/аутпуты, добавил реализацию логикой, сохранил. А пункта Create Symbol files for Current File в контекстном меню схемного файла нет!


А куда он может деться.
File - create/update
skkap
Цитата(sazh @ Nov 14 2009, 14:48) *
А куда он может деться.
File - create/update


Почти час искал) Спасибо!
skkap
Вроде сделал прошивку для CPLD! smile.gif
Прошу указать на ошибки или неоптимальности (особенно в коде VHDL), т.к. это мой первый проект для ПЛИС.

Итак проект (Quartus II): Нажмите для просмотра прикрепленного файла
Главная схема (скрин):
Нажмите для просмотра прикрепленного файла
Все блоки кроме логики кнопок реализованы на VHDL, CLK_1HZ_SIM сделан для удобства симуляции, вообще такт должен идти от блока 32768Hz_to_1Hz.

В основном выкладываю из-за наличия кучи варнингов и боязни что в самой схеме или в коде VHDL есть грубые ошибки, надеюсь кто-нить из знающих посмотрит smile.gif
SM
Что-то просматривая все ответы, не заметил главного. Может пропустил, но на всякий случай - частота тактирования на работу ПЛИС влияния не оказывает, а вот крутизна фронтов - еще как. При тактирования от 32768 эта проблема возникает во всей красе, и необходим быстрый триггер шмитта между генератором и ПЛИСой. Иначе во время медленного перепада счетчики начнут насчитывать вместо единицы десяток-другой, ну т.п., вплоть до совершенно неодуплимых глюков от метастабильности. Нарывался когда-то давно при прототипировании первой своей микросхемы с двумя генераторами - высокочастотным и лов-поверным.
skkap
Цитата(SM @ Nov 15 2009, 02:52) *
Что-то просматривая все ответы, не заметил главного. Может пропустил, но на всякий случай - частота тактирования на работу ПЛИС влияния не оказывает, а вот крутизна фронтов - еще как. При тактирования от 32768 эта проблема возникает во всей красе, и необходим быстрый триггер шмитта между генератором и ПЛИСой. Иначе во время медленного перепада счетчики начнут насчитывать вместо единицы десяток-другой, ну т.п., вплоть до совершенно неодуплимых глюков от метастабильности. Нарывался когда-то давно при прототипировании первой своей микросхемы с двумя генераторами - высокочастотным и лов-поверным.


У меня фронты такта около 100 нс, имеет смысл ставить триггер Шмитта?
SM
Цитата(skkap @ Nov 15 2009, 00:20) *
У меня фронты такта около 100 нс, имеет смысл ставить триггер Шмитта?

Просто необходимо. Этот параметр напрямую вроде не документируется ("input rise/fall time" в даташите в <=40 нс относится не к клоку, а к любому фронту входного сигнала вообще). Я бы оценил его как "Minimum global clock period", поделенный на 3..4, т.е. для спидгрейда "-10" где-то 2.5 нс.
Ставьте 74LVC1G14, гарантировано решит все проблемы.
Victor®
Цитата(skkap @ Nov 15 2009, 00:36) *
Вроде сделал прошивку для CPLD! smile.gif
Прошу указать на ошибки или неоптимальности (особенно в коде VHDL), т.к. это мой первый проект для ПЛИС.

Итак проект (Quartus II): Нажмите для просмотра прикрепленного файла
Главная схема (скрин):
Нажмите для просмотра прикрепленного файла
Все блоки кроме логики кнопок реализованы на VHDL, CLK_1HZ_SIM сделан для удобства симуляции, вообще такт должен идти от блока 32768Hz_to_1Hz.

В основном выкладываю из-за наличия кучи варнингов и боязни что в самой схеме или в коде VHDL есть грубые ошибки, надеюсь кто-нить из знающих посмотрит smile.gif


Есть у Вас в проекте асинхронные ("gated") клоки.
Например, в триггере для ALARM., cnt6bit, cnt5bit....
Лучше сделать с помощью триггеров с разрешением (DFFE), и все затактировать нужной частотой.
Будет полностью синхронный проект, что есть гуд.

-- Успехов
skkap
Цитата
Просто необходимо. Этот параметр напрямую вроде не документируется ("input rise/fall time" в даташите в <=40 нс относится не к клоку, а к любому фронту входного сигнала вообще). Я бы оценил его как "Minimum global clock period", поделенный на 3..4, т.е. для спидгрейда "-10" где-то 2.5 нс.
Ставьте 74LVC1G14, гарантировано решит все проблемы.


Спасибо!:)

Цитата
Есть у Вас в проекте асинхронные ("gated") клоки.
Например, в триггере для ALARM., cnt6bit, cnt5bit....
Лучше сделать с помощью триггеров с разрешением (DFFE), и все затактировать нужной частотой.
Будет полностью синхронный проект, что есть гуд.


Хм.. Поясните плз, я похоже совсем в клоках не соображаю.
Как это асинхронные клоки? Асинхронные от чего?
Как изменить cnt5bit и cnt6bit? Они ведь затактированны от предыдущих элементов (минуты от секунд, часы от минут)?
Это сама логика часов, или я чего-то не понимаю?
Поясните пожалуйста!
sazh
Цитата(skkap @ Nov 15 2009, 12:49) *
Спасибо!:)
Как изменить cnt5bit и cnt6bit? Они ведь затактированны от предыдущих элементов (минуты от секунд, часы от минут)?


имеется ввиду, что можно работать на одноклоковой синхронизации, т.е анализировать весь временной интервал работы в разах периода секунд.
Посмотрите предупреждения при раводке проекта. (F1) Посмотрите анализ клоков во временном анализаторе.
Во пример, посмотрите в RTL просмотрщике, промоделируйте. Предупреждения исследуйте.
Код
module ct_r
(
input  clk,
output out_clk_a, out_clk_b
);


reg [1:0] cnt;
reg          del_2a, del_2b;

always @(posedge clk)
begin
cnt <= cnt + 1'b1;
if (cnt == 2'b11)    del_2a <= ~del_2a;
end

always @(posedge cnt[1])
begin
del_2b <= ~del_2b;
end

assign out_clk_a = del_2a,
       out_clk_b = del_2b;

endmodule
SM
Цитата(skkap @ Nov 15 2009, 12:49) *
Спасибо!:)

Ага, только я на порядок ошибся. Правда на двоичный smile.gif Не global clock period делить надо, а minimum pulse width. т.е. оценка фронта 1.25 нс max
skkap
Цитата(sazh @ Nov 15 2009, 17:09) *
имеется ввиду, что можно работать на одноклоковой синхронизации, т.е анализировать весь временной интервал работы в разах периода секунд.
Посмотрите предупреждения при раводке проекта. (F1) Посмотрите анализ клоков во временном анализаторе.
Во пример, посмотрите в RTL просмотрщике, промоделируйте. Предупреждения исследуйте.
Код
module ct_r
(
input  clk,
output out_clk_a, out_clk_b
);


reg [1:0] cnt;
reg          del_2a, del_2b;

always @(posedge clk)
begin
cnt <= cnt + 1'b1;
if (cnt == 2'b11)    del_2a <= ~del_2a;
end

always @(posedge cnt[1])
begin
del_2b <= ~del_2b;
end

assign out_clk_a = del_2a,
       out_clk_b = del_2b;

endmodule


Т.е. будет лучше, если счетчик минут будет считать секунды и счетчик часов будет считать секунды (3600)? Это я так понимаю сожрет еще макроячеек, а какой будет выигрыш? я так и не понялsmile.gif
И какое отношение к этому имеет триггер на alarm?
Victor®
Цитата(skkap @ Nov 15 2009, 15:52) *
Т.е. будет лучше, если счетчик минут будет считать секунды и счетчик часов будет считать секунды (3600)? Это я так понимаю сожрет еще макроячеек, а какой будет выигрыш? я так и не понялsmile.gif


Имеем тактовую частоту 1 Hz - clk_1hz, подаем ее на счетчик секунд (sec_cnt по модулю 60).
Формируем сигнал munute_ena, равный "1" при значении счетчика 59.
Этот сигнал подаем на вход разрешения счета следующего счетчика (minute_cnt, также по модулю 60).
Тактируется minute_cnt также сигналом clk_1hz.

Делаем сигнал разрешения hour_ena аналогичный minute_ena и подаем его на последний счетчик (hour_cnt - по модулю 24),
который тактируется clk_1hz
Получаем полностью синхронный проект.

Цитата(skkap @ Nov 15 2009, 15:52) *
И какое отношение к этому имеет триггер на alarm?


Он тактируется "gated clock", как и остальные части в проекте.
Кстати, а индикацию сделали-бы динамическую - сэкономили-бы на пинах (11 против 28)
skkap
Цитата(Victor® @ Nov 15 2009, 22:46) *
Имеем тактовую частоту 1 Hz - clk_1hz, подаем ее на счетчик секунд (sec_cnt по модулю 60).
Формируем сигнал munute_ena, равный "1" при значении счетчика 59.
Этот сигнал подаем на вход разрешения счета следующего счетчика (minute_cnt, также по модулю 60).
Тактируется minute_cnt также сигналом clk_1hz.

Делаем сигнал разрешения hour_ena аналогичный minute_ena и подаем его на последний счетчик (hour_cnt - по модулю 24),
который тактируется clk_1hz
Получаем полностью синхронный проект.

Он тактируется "gated clock", как и остальные части в проекте.
Кстати, а индикацию сделали-бы динамическую - сэкономили-бы на пинах (11 против 28)

Очень понятно пояснили, спасибо!
Значит триггер тактируется Gated Clock, если его тактовый вход подключен к пину, отличному от одного из глобальных тактовых сигналов, верно? Значит необходимо каждый блок, содержащий триггеры тактировать исходным тактовым сигналом.

Остались непонятны две вещи:
1. Зачем оно надо вообще? Чем плохо gated clock?
2. Как описанная вами ситуация будет работать? Вот рисунок:
Нажмите для просмотра прикрепленного файла

Ведь схема счета секунд дает задержку, из-за которой я так понимаю не сработает счет минут? что я не так понял? : /
sazh
Цитата(skkap @ Nov 15 2009, 20:52) *
Ведь схема счета секунд дает задержку, из-за которой я так понимаю не сработает счет минут? что я не так понял? : /


У Вас длительность сформированного импульса en нарисована меньше периода рабочего клока. (Сигнал сформированный по глобальному клоку всегда подхватится следующим клоком).
Что касается последующих сформированных сигналов EN, вроде бы их по коньюнкции надо объединять (En_sek && en_minut)
По идее Вашу первоначальную схему можно заставить работать, почитав что такое констрейны.
Одноклоковая синхронизация -самое простое, да и в дальнейшем такой проект легко параметризовать (Меняя например частоту генератора, изменить схемную реализацию одним параметром)
Victor®
Цитата(skkap @ Nov 15 2009, 20:52) *
Очень понятно пояснили, спасибо!
Значит триггер тактируется Gated Clock, если его тактовый вход подключен к пину, отличному от одного из глобальных тактовых сигналов, верно? Значит необходимо каждый блок, содержащий триггеры тактировать исходным тактовым сигналом.

Остались непонятны две вещи:
1. Зачем оно надо вообще? Чем плохо gated clock?
2. Как описанная вами ситуация будет работать? Вот рисунок:
Нажмите для просмотра прикрепленного файла

Ведь схема счета секунд дает задержку, из-за которой я так понимаю не сработает счет минут? что я не так понял? : /


1) Примите за аксиому, что в CPLD/FPGA все проекты должны быть синхронны (хотя в реале бывают случаи с множеством клоков и надо организовывать перенос данных
между клок-доменами, но это предмет другого разговора.) Ну, а вообще поищите в инете статьи по этому поводу...
Вкратце - вот Ваш случай:
http://www.xilinx.com/itp/xilinx7/books/da.../dev0017_5.html

2) Неправильно нарисовали min_en :-) Его длительность будет равна 1 сек., а Вы нарисовали пол-периода.

P.S.
Кстати, SAZH про конъюнкцию правильно сказал. Думаю - поймете почему ;-)

-- Успехов
SM
Цитата(skkap @ Nov 15 2009, 20:52) *
Значит триггер тактируется Gated Clock, если его тактовый вход подключен к пину, отличному от одного из глобальных тактовых сигналов, верно?

Да. Gated clock это тактовый сигнал, пропущенный через логический элемент, и используемый далее для тактирования. Для ПЛИС это не самое лучшее решение, если используется обратная связь из домена, тактируемого gated clock, в домен, тактируемый любым другим клоком. Ежели обратных связей нет (и зависимостей реакции внешних устройств от синхронности вывода данных на выходы из разных доменов), то не важно, чем что тактируется.

Цитата(skkap @ Nov 15 2009, 20:52) *
Значит необходимо каждый блок, содержащий триггеры тактировать исходным тактовым сигналом.
...
1. Зачем оно надо вообще? Чем плохо gated clock?

С точки зрения ПЛИС плох тем, что для достижения синхронности при использовании нескольких разных путей тактовых сигналов приодится жертвовать ресурсами. В основном для обеспечения выдерживания hold time (времени удержания). Опять же, если есть обратные связи... ну и т.д., см. выше.
dvladim
Цитата(SM @ Nov 16 2009, 00:07) *
Для ПЛИС это не самое лучшее решение, если используется обратная связь из домена, тактируемого gated clock,
...
В основном для обеспечения выдерживания hold time (времени удержания). Опять же, если есть обратные связи... ну и т.д., см. выше.

Проблемы по hold могут быть и если не используется обратная связь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.