Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Требуется создать делитель частоты
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
TIT0
Здравствуйте уважаемые. У меня задача поделить частоту 10МГц до 1 Гц затем эту поделенную частоту(1Гц), синхронизировать по фазе с другой, тоже 1Гц. Сделал это на рассыпухе, с двумя Д-триггерами для синхронизации, да 7 счетчиками к155ие9, но многа жрет собака и мне посоветовали сделать это на ПЛИСе, поиск по форуму так и не дал мне пока ничего интересного, поэтому я решил создать тему и спросить мнение знающих людей. Реально ли сделать это на плисе? Если да то какой плис для этого лучше выбрать, я никогда не имел опыта работы с плисами, программировал только контроллеры.
Условия задачи
1. По возможности быстродействующий, минимальное время задержки сигнала вход->выход.
2. Малое энергопотребление.
3. Прошивка должна храниться в энергонезависимой памяти, чтобы не прошивать каждый раз при запуске.
4. "Быстрое" освоение.
Желательно Атмел. И я так подозреваю, что нужен будет программатор и среда программирования, какие лучше использовать.
Задание одноразовое так что особо "с запасом" ничего не надо.
Спасибо за внимание.
Джеймс
Что-то не врубаюсь. Если у Вас уже есть частота 1Гц, зачем еще делить другую и синхронизировать? Получится то же самое.
TIT0
Сейчас объясню, пусть у нас есть сигнал с частотой 1Гц назовем его S1. Есть сигнал с частотой 10МГц S2, и сигнал после деления 1Гц S3. Спустя время t, сигнал S1 отключается и вместо него начинает использоваться S3. Отсюда необходимость их синхронизации. То есть S1 генерирует генератор G1, а сигнал S3 генератор G3. Задача заменить используемый сигнал с одного генератора на сигнал с другого.
Andrew Su
Добрый день.
Для начала найдите возможность раздобыть среду проектирования от Xilinx или Altera.
И у тех и у других есть бесплатные версии, которые можно скачать с сайтов. Для вашей задачи
они вполне будут достаточны.
Для реализации вашего устройства вполне подойдет какое-либо семейство CPLD(от Xilinx или Altera).
CPLD прошивается программатором, входящим в состав среды проектирования через кабель-программатор.
Простейшая схема кабеля-программатора(для Xilinx) для LPT порта в прикрепленном файле.
CPLD прошивается многократно и хранит прошивку после снятия питания.
Полезную информацию, в т.ч. на русском языке можно найти на www.plis.ru.
Наверняка для Altera есть аналогичные источники информации.
DmitryR
Надо просто делитель частоты 10 МГц -> 1 Гц (это будет просто счетчик) асинхронно ресетить от входной частоты 1 Гц. Соответственно когда исходный 1 Гц пропадет - фронты деленной частоты будут в том же месте, где был последний фронт исходных 1 Гц. Имейте только в виду, что если этот 1 Гц должен отключаться чисто, без звона.
Sergey'F
Цитата(TIT0 @ Nov 4 2009, 01:17) *
Здравствуйте уважаемые. У меня задача поделить частоту 10МГц до 1 Гц затем эту поделенную частоту(1Гц), синхронизировать по фазе с другой, тоже 1Гц. Сделал это на рассыпухе, с двумя Д-триггерами для синхронизации, да 7 счетчиками к155ие9, но многа жрет собака и мне посоветовали сделать это на ПЛИСе, поиск по форуму так и не дал мне пока ничего интересного, поэтому я решил создать тему и спросить мнение знающих людей. Реально ли сделать это на плисе? Если да то какой плис для этого лучше выбрать, я никогда не имел опыта работы с плисами, программировал только контроллеры.
Условия задачи
1. По возможности быстродействующий, минимальное время задержки сигнала вход->выход.
2. Малое энергопотребление.
3. Прошивка должна храниться в энергонезависимой памяти, чтобы не прошивать каждый раз при запуске.
4. "Быстрое" освоение.

А какая точность формирования этого 1МГц должна быть и каково "минимальное время задержки"? Может, можно обойтись микроконтроллером за $1, тактируемым 10МГц, сигнал 1Гц подается на вход таймера, захватываем и на другом таймере воспроизводим. Это будет дешевле ПЛИС. Проблема скорее в критерии "пропадания", моменте перехвата и корректном возврате на тактовый импульс 1Гц при его возвращении, если произошел уход фазы.
TIT0
Спасибо за ответы,
Цитата
асинхронно ресетить от входной частоты 1 Гц
, я так и делаю, просто я сделал схему на микросхемах к155ие9 и кp1533тм2, а они все вместе много потребляют, поэтому я решил переделать на плисах, собственно вопрос не в том как, а в том на каком плисе это проще и лучше сделать.

Точность 1Гц у меня на микросхемах получилась 0.1мкс. То есть один импульс от 10МГц.
BORIV
Цитата(TIT0 @ Nov 4 2009, 01:17) *
Сделал это на рассыпухе, с двумя Д-триггерами для синхронизации, да 7 счетчиками к155ие9, но многа жрет собака ... я никогда не имел опыта работы с плисами, программировал только контроллеры.


Так что мешает заменить серию на менее жрущую - 1533, например или реализовать данный алгоритм на простейшем микроконтроллере.
Сдаётся, что данная задача слишком проста для ПЛИС и решение не будет стоить потраченных усилий.
SM
Цитата(TIT0 @ Nov 4 2009, 12:53) *
собственно вопрос не в том как, а в том на каком плисе это проще и лучше сделать.


Так это элементарно:
1) нужен 1 триггер на синхронизатор входного 1 герца с 10 МГц-ами.
2) нужно два триггера на ловилку фронта входного 1 Гц.
3) нужно делить на 10E6, это вроде как 24 триггера.

Пункты 1..3 требуют 1+2+(24) = 27 ячеек ПЛИС.
Так как счетчик не по модулю 2^N, то будет еще компаратор на сброс, накинем еще пару ячеек.
Итого 29 ячеек. Это грубая прикидка. Точно влезет в EPM3064, возможно влезет в EPM3032.

теперь пишем RTL:
Код
module tsts (clk, in, out);
input clk, in;
output out;

reg [2:0] sync;
always @(posedge clk)
  sync <= {sync[1:0], in};
  
wire clr;
assign clr = (sync[2:1] == 2'b10);

reg [23:0] cnt;
always @(posedge clk)
  if (clr || (cnt == 24'd9999999))
    cnt <= 24'h0;
  else
    cnt <= cnt + 1'b1;
    
assign out = cnt[23];

endmodule


Синтезируем - получаем 30 ячеек и EPM3032.

Теперь если нужен на выходе меандр, перецентрируем счетчик, не 0...9999999, а 3388608...13388607.

Код
module tsts (clk, in, out);
input clk, in;
output out;

reg [2:0] sync;
always @(posedge clk)
  sync <= {sync[1:0], in};
  
wire clr;
assign clr = (sync[2:1] == 2'b10);

reg [23:0] cnt;
always @(posedge clk)
  if (clr || (cnt == 24'd13388607))
    cnt <= 24'd3388608;
  else
    cnt <= cnt + 1'b1;
    
assign out = cnt[23];

endmodule


Синтезируем - 32 ячейки - опять EPM3032, но совсем под завязку, на 100%.
Проверяем тайминг - на EPM3032ATC44-10 получаем Fmax > 60 MHz. Все ОК.

А, забыл, цель-то потребление. Тогда однозначно выбираем ПЛИС серии ispMACH 4000ZE , тоже наверное 32 ячейки (только надо проверить, так как тут притык, я не буду синтезировать). Докучи она 5-вольт-толерантна по входам. Вот и все, задача решена. В результате мой выбор - LC4032ZE-7TN48C, цена примерно $1.6 за сотню при покупке через ABN Universal. Только, повторю, так как тут впритык, надо проверить синтезом под это семейство. А то может, если меандр нужен, переделать конструкцию в последовательные делитель на 5000000 и на 2 вместо центрированного счетчика с загрузкой, это вернет (должно вернуть) на 30 ячеек.

ЗЫ. Касаемо освоения - lattice/altera/xilinx будут примерно одинаковы. Главное освоить verilog, для чего достаточно какого нибудь симулятора. А вот с Вашим любимым атымелом можете и повозиться, они сдирательством занимались, и софт там... И потребление... Ну в общем не буду продолжать smile.gif
TIT0
Цитата
заменить серию на менее жрущую - 1533,
7 микрух, много будут потреблять, около 210мА.
Цитата
реализовать данный алгоритм на простейшем микроконтроллере

Выпала возможность изучить ПЛИСы вот и решил попробовать новую для себя технологию.
То что задача проста неважно, важно что у меня появиться какой никакой опыт в работе с ПЛИСами.
BORIV
Цитата(TIT0 @ Nov 4 2009, 13:36) *
7 микрух, много будут потреблять, около 210мА.

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


Немного ошиблись 7 * 21 = 147

Если ради опыта, то конечно... Я понял вопрос, как поиск оптимального результата.
TIT0
ОЙ, только заметил опечатку в своем первом посте, я имел ввиду Альтеру, видимо пора заканчивать писать посты на форум в час ночи))

Тогда в итоге я вижу следующее решение.
1. Среда программирования Altera MAX+PLUS II или Quartus II
2. ПЛИС EPM3064, как я понял из даташита, у него потребляемый ток при 10МГц будет около 20мА, что приемлемо для меня.
3. Программатор ByteBlaster.
Спасибо всем за ответы.
SM
Цитата(TIT0 @ Nov 4 2009, 15:14) *
1. Среда программирования Altera MAX+PLUS II или Quartus II

Квартус без каких либо или. Максплюс устарел и не поддерживатеся оооочень давно.
eliza
MaxPlus устарел, но использовать тяжеловесный Quartus для маленького кристалла - стоит ли?
SM
Цитата(eliza @ Nov 4 2009, 17:18) *
MaxPlus устарел, но использовать тяжеловесный Quartus для маленького кристалла - стоит ли?

Естественно стоит. Как минимум, чтобы потом не переучиваться на него при более серьезном проекте. Да и синтезатор с маппером максплюса оставляют желать лучшего, во времена максплюса для работы с верилогом использовали леонардоспектрум из-за тупости оптимизатора макса.
EvgenyNik
Решал похожую задачу.
Там тоже опорный сигнал (гораздо меньшей частоты, чем задающий генератор) мог быть, а мог и не быть. Мог появляться на какое-то время. Нужно было его имитировать когда его нет и плавно переходить на него, когда он появился.
Приходилось решать следующие вопросы:
1. Анализ опорного сигнала на достоверность (чтобы не "клевать" на шум и т.п.)
2. Подстройка частоты, т.к. у генератора есть погрешность, к тому же не постоянная (температура, старение)
2.а. быстрая по одному периоду опорного (при его появлении)
2.б. прецизионная по 16/32/... периодам опорного (при его длительном наличии)
3. Подстройка фазы, т.к. за время пропадания опорного сигнала моделируемый смещается по фазе.
3.а. подстройка фазы должна быть плавной, чтобы вписываться в допустимую частотную погрешность
К слову сказать, так и не допилил этот проект, но ряд идей отработал. Посмотрите - может и у вас есть потребность в решении этих вопросов, тогда проект разрастается и будет нужно что-то поболее, чем EPM3064....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.