|
Требуется создать делитель частоты, 10МГЦ->1Гц |
|
|
|
Nov 3 2009, 22:17
|
Группа: Участник
Сообщений: 5
Регистрация: 25-10-08
Пользователь №: 41 178

|
Здравствуйте уважаемые. У меня задача поделить частоту 10МГц до 1 Гц затем эту поделенную частоту(1Гц), синхронизировать по фазе с другой, тоже 1Гц. Сделал это на рассыпухе, с двумя Д-триггерами для синхронизации, да 7 счетчиками к155ие9, но многа жрет собака и мне посоветовали сделать это на ПЛИСе, поиск по форуму так и не дал мне пока ничего интересного, поэтому я решил создать тему и спросить мнение знающих людей. Реально ли сделать это на плисе? Если да то какой плис для этого лучше выбрать, я никогда не имел опыта работы с плисами, программировал только контроллеры. Условия задачи 1. По возможности быстродействующий, минимальное время задержки сигнала вход->выход. 2. Малое энергопотребление. 3. Прошивка должна храниться в энергонезависимой памяти, чтобы не прошивать каждый раз при запуске. 4. "Быстрое" освоение. Желательно Атмел. И я так подозреваю, что нужен будет программатор и среда программирования, какие лучше использовать. Задание одноразовое так что особо "с запасом" ничего не надо. Спасибо за внимание.
Сообщение отредактировал TIT0 - Nov 3 2009, 22:18
|
|
|
|
|
Nov 4 2009, 08:10
|
Группа: Участник
Сообщений: 5
Регистрация: 25-10-08
Пользователь №: 41 178

|
Сейчас объясню, пусть у нас есть сигнал с частотой 1Гц назовем его S1. Есть сигнал с частотой 10МГц S2, и сигнал после деления 1Гц S3. Спустя время t, сигнал S1 отключается и вместо него начинает использоваться S3. Отсюда необходимость их синхронизации. То есть S1 генерирует генератор G1, а сигнал S3 генератор G3. Задача заменить используемый сигнал с одного генератора на сигнал с другого.
Сообщение отредактировал TIT0 - Nov 4 2009, 08:11
|
|
|
|
|
Nov 4 2009, 08:14
|
Местный
  
Группа: Свой
Сообщений: 301
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 647

|
Добрый день. Для начала найдите возможность раздобыть среду проектирования от Xilinx или Altera. И у тех и у других есть бесплатные версии, которые можно скачать с сайтов. Для вашей задачи они вполне будут достаточны. Для реализации вашего устройства вполне подойдет какое-либо семейство CPLD(от Xilinx или Altera). CPLD прошивается программатором, входящим в состав среды проектирования через кабель-программатор. Простейшая схема кабеля-программатора(для Xilinx) для LPT порта в прикрепленном файле. CPLD прошивается многократно и хранит прошивку после снятия питания. Полезную информацию, в т.ч. на русском языке можно найти на www.plis.ru. Наверняка для Altera есть аналогичные источники информации.
|
|
|
|
|
Nov 4 2009, 09:51
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(TIT0 @ Nov 4 2009, 01:17)  Здравствуйте уважаемые. У меня задача поделить частоту 10МГц до 1 Гц затем эту поделенную частоту(1Гц), синхронизировать по фазе с другой, тоже 1Гц. Сделал это на рассыпухе, с двумя Д-триггерами для синхронизации, да 7 счетчиками к155ие9, но многа жрет собака и мне посоветовали сделать это на ПЛИСе, поиск по форуму так и не дал мне пока ничего интересного, поэтому я решил создать тему и спросить мнение знающих людей. Реально ли сделать это на плисе? Если да то какой плис для этого лучше выбрать, я никогда не имел опыта работы с плисами, программировал только контроллеры. Условия задачи 1. По возможности быстродействующий, минимальное время задержки сигнала вход->выход. 2. Малое энергопотребление. 3. Прошивка должна храниться в энергонезависимой памяти, чтобы не прошивать каждый раз при запуске. 4. "Быстрое" освоение. А какая точность формирования этого 1МГц должна быть и каково "минимальное время задержки"? Может, можно обойтись микроконтроллером за $1, тактируемым 10МГц, сигнал 1Гц подается на вход таймера, захватываем и на другом таймере воспроизводим. Это будет дешевле ПЛИС. Проблема скорее в критерии "пропадания", моменте перехвата и корректном возврате на тактовый импульс 1Гц при его возвращении, если произошел уход фазы.
Сообщение отредактировал Sergey'F - Nov 4 2009, 09:55
|
|
|
|
|
Nov 4 2009, 09:53
|
Группа: Участник
Сообщений: 5
Регистрация: 25-10-08
Пользователь №: 41 178

|
Спасибо за ответы, Цитата асинхронно ресетить от входной частоты 1 Гц , я так и делаю, просто я сделал схему на микросхемах к155ие9 и кp1533тм2, а они все вместе много потребляют, поэтому я решил переделать на плисах, собственно вопрос не в том как, а в том на каком плисе это проще и лучше сделать. Точность 1Гц у меня на микросхемах получилась 0.1мкс. То есть один импульс от 10МГц.
Сообщение отредактировал TIT0 - Nov 4 2009, 10:05
|
|
|
|
|
Nov 4 2009, 09:58
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(TIT0 @ Nov 4 2009, 01:17)  Сделал это на рассыпухе, с двумя Д-триггерами для синхронизации, да 7 счетчиками к155ие9, но многа жрет собака ... я никогда не имел опыта работы с плисами, программировал только контроллеры. Так что мешает заменить серию на менее жрущую - 1533, например или реализовать данный алгоритм на простейшем микроконтроллере. Сдаётся, что данная задача слишком проста для ПЛИС и решение не будет стоить потраченных усилий.
|
|
|
|
|
Nov 4 2009, 10:24
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(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, для чего достаточно какого нибудь симулятора. А вот с Вашим любимым атымелом можете и повозиться, они сдирательством занимались, и софт там... И потребление... Ну в общем не буду продолжать
|
|
|
|
|
Nov 4 2009, 10:36
|
Группа: Участник
Сообщений: 5
Регистрация: 25-10-08
Пользователь №: 41 178

|
Цитата заменить серию на менее жрущую - 1533, 7 микрух, много будут потреблять, около 210мА. Цитата реализовать данный алгоритм на простейшем микроконтроллере Выпала возможность изучить ПЛИСы вот и решил попробовать новую для себя технологию. То что задача проста неважно, важно что у меня появиться какой никакой опыт в работе с ПЛИСами.
Сообщение отредактировал TIT0 - Nov 4 2009, 10:37
|
|
|
|
|
Nov 4 2009, 11:00
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(TIT0 @ Nov 4 2009, 13:36)  7 микрух, много будут потреблять, около 210мА.
Выпала возможность изучить ПЛИСы вот и решил попробовать новую для себя технологию. То что задача проста неважно, важно что у меня появиться какой никакой опыт в работе с ПЛИСами. Немного ошиблись 7 * 21 = 147 Если ради опыта, то конечно... Я понял вопрос, как поиск оптимального результата.
|
|
|
|
|
Nov 4 2009, 12:14
|
Группа: Участник
Сообщений: 5
Регистрация: 25-10-08
Пользователь №: 41 178

|
ОЙ, только заметил опечатку в своем первом посте, я имел ввиду Альтеру, видимо пора заканчивать писать посты на форум в час ночи))
Тогда в итоге я вижу следующее решение. 1. Среда программирования Altera MAX+PLUS II или Quartus II 2. ПЛИС EPM3064, как я понял из даташита, у него потребляемый ток при 10МГц будет около 20мА, что приемлемо для меня. 3. Программатор ByteBlaster. Спасибо всем за ответы.
Сообщение отредактировал TIT0 - Nov 4 2009, 11:45
|
|
|
|
|
Nov 4 2009, 14:18
|
Группа: Участник
Сообщений: 8
Регистрация: 25-01-06
Пользователь №: 13 605

|
MaxPlus устарел, но использовать тяжеловесный Quartus для маленького кристалла - стоит ли?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|