|
|
  |
CPLD Clock, вопросы по разработке |
|
|
|
Nov 2 2009, 19:03
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

|
Цитата Уменьшите R2 до нескольких кил - думаю быстрее будет запускаться :-) В рекомндациях он не настолько велик, кстати. А про него просто написать забыл  При его уменьшении как бы это сказать.. фронты задние болтаются туда-сюда, а это я так понимаю значит что частота немного колеблется, что есть плохо. Тем более время запуска около секунды - нормально, учитывая что в часах питание должно будет присутствовать постоянно, иначе в них нет смысла) Спасибо еще зраз за советы и доки! Уверен что еще появятя вопросы, озвучу в этой теме
Сообщение отредактировал skkap - Nov 2 2009, 19:10
|
|
|
|
|
Nov 14 2009, 08:32
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

|
Всем снова привет! Появилась новая "проблема", на этот раз с 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), что сжирает пол экрана места (мне критично, т.к. потом буду оформлять отчет с этой блок-схемой)
Подскажите!:)
|
|
|
|
|
Nov 14 2009, 09:28
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

|
Цитата(sazh @ Nov 14 2009, 14:48)  А куда он может деться. File - create/update Почти час искал) Спасибо!
|
|
|
|
|
Nov 14 2009, 20:36
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

|
Вроде сделал прошивку для CPLD!  Прошу указать на ошибки или неоптимальности (особенно в коде VHDL), т.к. это мой первый проект для ПЛИС. Итак проект (Quartus II):
clock.rar ( 562.34 килобайт )
Кол-во скачиваний: 222Главная схема (скрин):
Все блоки кроме логики кнопок реализованы на VHDL, CLK_1HZ_SIM сделан для удобства симуляции, вообще такт должен идти от блока 32768Hz_to_1Hz. В основном выкладываю из-за наличия кучи варнингов и боязни что в самой схеме или в коде VHDL есть грубые ошибки, надеюсь кто-нить из знающих посмотрит
Сообщение отредактировал skkap - Nov 14 2009, 20:39
|
|
|
|
|
Nov 14 2009, 21:20
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

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

Lazy
     
Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76

|
Цитата(skkap @ Nov 15 2009, 00:36)  Вроде сделал прошивку для CPLD!  Прошу указать на ошибки или неоптимальности (особенно в коде VHDL), т.к. это мой первый проект для ПЛИС. Итак проект (Quartus II):
clock.rar ( 562.34 килобайт )
Кол-во скачиваний: 222Главная схема (скрин):
Все блоки кроме логики кнопок реализованы на VHDL, CLK_1HZ_SIM сделан для удобства симуляции, вообще такт должен идти от блока 32768Hz_to_1Hz. В основном выкладываю из-за наличия кучи варнингов и боязни что в самой схеме или в коде VHDL есть грубые ошибки, надеюсь кто-нить из знающих посмотрит  Есть у Вас в проекте асинхронные ("gated") клоки. Например, в триггере для ALARM., cnt6bit, cnt5bit.... Лучше сделать с помощью триггеров с разрешением (DFFE), и все затактировать нужной частотой. Будет полностью синхронный проект, что есть гуд. -- Успехов
--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
|
|
|
|
|
Nov 15 2009, 09:49
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

|
Цитата Просто необходимо. Этот параметр напрямую вроде не документируется ("input rise/fall time" в даташите в <=40 нс относится не к клоку, а к любому фронту входного сигнала вообще). Я бы оценил его как "Minimum global clock period", поделенный на 3..4, т.е. для спидгрейда "-10" где-то 2.5 нс. Ставьте 74LVC1G14, гарантировано решит все проблемы. Спасибо!:) Цитата Есть у Вас в проекте асинхронные ("gated") клоки. Например, в триггере для ALARM., cnt6bit, cnt5bit.... Лучше сделать с помощью триггеров с разрешением (DFFE), и все затактировать нужной частотой. Будет полностью синхронный проект, что есть гуд. Хм.. Поясните плз, я похоже совсем в клоках не соображаю. Как это асинхронные клоки? Асинхронные от чего? Как изменить cnt5bit и cnt6bit? Они ведь затактированны от предыдущих элементов (минуты от секунд, часы от минут)? Это сама логика часов, или я чего-то не понимаю? Поясните пожалуйста!
|
|
|
|
|
Nov 15 2009, 11:09
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(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
|
|
|
|
|
Nov 15 2009, 11:52
|

Участник

Группа: Участник
Сообщений: 21
Регистрация: 29-10-09
Из: Томск
Пользователь №: 53 297

|
Цитата(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)? Это я так понимаю сожрет еще макроячеек, а какой будет выигрыш? я так и не понял  И какое отношение к этому имеет триггер на alarm?
|
|
|
|
|
Nov 15 2009, 16:46
|

Lazy
     
Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76

|
Цитата(skkap @ Nov 15 2009, 15:52)  Т.е. будет лучше, если счетчик минут будет считать секунды и счетчик часов будет считать секунды (3600)? Это я так понимаю сожрет еще макроячеек, а какой будет выигрыш? я так и не понял  Имеем тактовую частоту 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)
--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|