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

Помогите определиться с возможными вариантами решения задачки:
Есть 2-а clock сигнала с частотами f1 и f2, причем f1 > f2. Хотелось бы написать на VHDL универсальный модуль делителя f1 на f2.
К примеру 40МГц превратить в 8МГц, путем деления на 5 Гц.

Какие будут предложения?
Какие ограничения возникают при написании такого модуля?

Спасибо.
andrew_b
Цитата(GGGG @ Nov 29 2005, 09:02) *
Помогите определиться с возможными вариантами решения задачки:
Есть 2-а clock сигнала с частотами f1 и f2, причем f1 > f2. Хотелось бы написать на VHDL универсальный модуль делителя f1 на f2.
К примеру 40МГц превратить в 8МГц, путем деления на 5МГц.

Какие будут предложения?
Какие ограничения возникают при написании такого модуля?

Ничего не понял. Делим мегагерцы на мегагерцы и получаем мегагерцы?
GGGG
Цитата(andrew_b @ Nov 29 2005, 09:07) *
Ничего не понял. Делим мегагерцы на мегагерцы и получаем мегагерцы?


Сорри, уже поправил. smile.gif Цифры были приведены как пример. А сделать хотелось бы делитель одной частоты на другую.
dxp
Цитата(GGGG @ Nov 29 2005, 12:02) *
К примеру 40МГц превратить в 8МГц, путем деления на 5 Гц.



Цитата(GGGG @ Nov 29 2005, 14:35) *
Цитата(andrew_b @ Nov 29 2005, 09:07) *

Ничего не понял. Делим мегагерцы на мегагерцы и получаем мегагерцы?


Сорри, уже поправил. smile.gif Цифры были приведены как пример. А сделать хотелось бы делитель одной частоты на другую.

Как-то странно Вы поправили - мегагерцы в герцы перевели. smile.gif Все равно делим частоту на частоту и получаем частоту. smile.gif Наверное имелось в виду, что делим частоту в N раз и получаем поделенную частоту.

Сделать это достаточно просто - используйте счетчик. С другой стороны, если надо иметь синхронные клоки, то этот вариант не пойдет. Для получения синхронных клоков надо использовать специальные аппаратные средства типа PLL. В этом случае коэффициенты умножения/деления, фазовые сдвиги и прочее задаются не HDL описанием, а с помощью параметров модуля, соответствующего аппаратному PLL.
maksya
Цитата(GGGG @ Nov 29 2005, 09:02) *
Какие будут предложения?
Какие ограничения возникают при написании такого модуля?

Спасибо.


предложение 1: скорректируй до конца условие задачи. [Гц]/[Гц] = число, а не Гц. Надо нечто вроде делителя частоты.

предложение 2: дествительно, как правильно заметил dxp, для деления частоты в ПЛИС лучше пользоваться встроенными блоками PLL. А счетчик может делить только на величину, кратную 2 (f/2, f/4 ...)

предложение 3: не пытайтесь строить perpettum mobile, универсальность не всегда выгодна
sazh
Видимо Вам нужен делитель по модулю. Может кто переведет.
// A modulus 8 up counter
module ct_module (clk, out_a, out_b);

parameter modulus = 8;
parameter width = 3;

input clk;
output out_a;
output out_b;

reg [width-1:0] ct;
reg out_b;

always @(posedge clk)
begin
if (ct == (modulus-1))
ct <= {width{1'b0}};
else
ct <= ct + 1'b1;
end

assign out_a = ct[width-1];

always @(posedge clk)
begin
out_b <= (ct == (modulus-1));
end

endmodule
GGGG
Спасибо за ответы.

Вот что еще интересно. В данной задачке хотелось, чтобы один из clockов выступал в роли коэффициента деления.

Т.е., если не вдаваться в размерности, то подав на 1 pin clock с частотой f1, а на 2 pin с частотой f2, на выходе получить clock с частотой f3= f1/f2. (опять, к примеру 30Мгц и 6Гц а на выходе получить 5МГц)

Прошу отнестись с пониманием к этому вопросу, т.к. эта задача чисто абстрактная и нацелина на мое любопытство.
Gate
Цитата(dxp @ Nov 29 2005, 12:32) *
Как-то странно Вы поправили - мегагерцы в герцы перевели. smile.gif Все равно делим частоту на частоту и получаем частоту. smile.gif Наверное имелось в виду, что делим частоту в N раз и получаем поделенную частоту.

Сделать это достаточно просто - используйте счетчик. С другой стороны, если надо иметь синхронные клоки, то этот вариант не пойдет. Для получения синхронных клоков надо использовать специальные аппаратные средства типа PLL. В этом случае коэффициенты умножения/деления, фазовые сдвиги и прочее задаются не HDL описанием, а с помощью параметров модуля, соответствующего аппаратному PLL.


На самом деле делить частоту не нужно - можно использовать выход счетчика как сигнал clock enable. При этом глобальная частота остается одна.
stalko
Цитата(maksya @ Nov 29 2005, 14:29) *
счетчик может делить только на величину, кратную 2 (f/2, f/4 ...)

Я Вас умоляю!!!
ОДИН регистр делит на 2, ДВА последовательно на четыре и т.д.... если больше не строить никаких комбинационных схем... smile.gif
GGGG
а если, к примеру, из 40МГц надо получить 8256 кГц? То как тогда быть?
psL
Т.е., если у одного инженера зарплата 30 т.p., а у другого 6 т.р. - то получается, что первый инженер получает больше второго в 5 т.рублей? smile.gif
stalko
Цитата(GGGG @ Nov 29 2005, 22:25) *
а если, к примеру, из 40МГц надо получить 8256 кГц? То как тогда быть?

Поделить на 4845 smile.gif Зато скважность сигнала можно получить просто идеальную smile.gif
psL
Читайте FAQ Общие вопросы п.11
http://fpga-faq.narod.ru/#%C0%20%EA%E0%EA%...F2%EE%F2%F3%20Y?
tegumay
Э-э-э построение счетчиков (aka делителей) c требуемым коэффициентом счета обязательная задача, по крайней мере нас этим и в техникуме и в институте мурыжили, мурыжат и надеюсь след. поколение будут мурыжить maniac.gif
stalko
Цитата(GGGG @ Nov 29 2005, 09:02) *
Доброго всем времени суток!

Помогите определиться с возможными вариантами решения задачки:
Есть 2-а clock сигнала с частотами f1 и f2, причем f1 > f2. Хотелось бы написать на VHDL универсальный модуль делителя f1 на f2.
К примеру 40МГц превратить в 8МГц, путем деления на 5 Гц.

Какие будут предложения?
Какие ограничения возникают при написании такого модуля?

Спасибо.

Еще раз внимательно перечитал вопрос, напряг все самые извилистые извилины и пришел к выводу, что человек хочет получить делитель частоты, в котором коэффициент деления определяется второй входной частотой.
Тогда вариант один: сделать частотомер по сигналу f2, т.е. подать опорную частоту, считать число фронтов f2, получать ЧИСЛО и это ЧИСЛО использовать в качестве коэффициента делителя.
Предупреждаю сразу, будет приличный переходной процесс, если частота опоры частотомера будет низкой, либо большая ошибка, если высокой.
Хотя мелькал в голове другой вариант: может надо ВЫЧЕСТЬ частоты? Типа смесителя цифрового сделать...
GGGG
Цитата(stalko @ Nov 30 2005, 01:03) *
Тогда вариант один: сделать частотомер по сигналу f2, т.е. подать опорную частоту, считать число фронтов f2, получать ЧИСЛО и это ЧИСЛО использовать в качестве коэффициента делителя.

Хотя мелькал в голове другой вариант: может надо ВЫЧЕСТЬ частоты? Типа смесителя цифрового сделать...


Хм.. интересно... но тогда можно и так:
т.к. f1 > f2 (наложем ограничения в 10 раз) то в качестве опорной частоты можно взять f1.
После этого поставить счетчик переходов f1 за период f2. Получаем число, которое соответсвуюет значию частоты которую надо получить на f3. Но это не коэффициент деления ... по-моему sad.gif .
Следовательно, частотомер не поможет или что-то не ясно.

Про вычитание: смеситель это конечно хорошо.... smile.gif smile.gif smile.gif , но опять не то. Он не будет выполнять необходимые операции, либо его надо дорабатывать или что-то в нем изобретать. Мне эт тоже пока не очень ясно.
stalko
Цитата(GGGG @ Nov 30 2005, 18:20) *
Хм.. интересно... но тогда можно и так:
т.к. f1 > f2 (наложем ограничения в 10 раз) то в качестве опорной частоты можно взять f1.
После этого поставить счетчик переходов f1 за период f2. Получаем число, которое соответсвуюет значию частоты которую надо получить на f3. Но это не коэффициент деления ... по-моему sad.gif .
Следовательно, частотомер не поможет или что-то не ясно.

То о чем Вы сейчас говорите, и то, о чем я говорил, СОВСЕМ не одно и то же. Так Вы измерите, во сколько раз f1 больше f2. А оно Вам надо?
Вам нужно все приводить к Гц, т.е. нужно измерять количество фронтов f2 в СЕКУНДУ, либо в другой период, а потом нормировать к секунде, но так точность будет маленькой.
Цитата(GGGG @ Nov 30 2005, 18:20) *
Про вычитание: смеситель это конечно хорошо.... smile.gif smile.gif smile.gif , но опять не то. Он не будет выполнять необходимые операции, либо его надо дорабатывать или что-то в нем изобретать. Мне эт тоже пока не очень ясно.
GGGG
Хм.. я хотел предложить проводить нормировку одного сигнала относительно другого, избегая при этом использования третьего - опорного сигнала. Но вот как сделать так чтобы эта задача была "параметрической". Т.е. в идеале мне было неважно иметь значение коэффициента, а деление (или если хотите преобразование) происходило в "автоматическом" режиме.

И все-таки как все это запихнуть в кубик с 2-я входами и 1 выходом?

С уважением, GGGG.
Xorval
ошибка при редактировании.
Xorval
Цитата(GGGG @ Nov 30 2005, 18:20) *
Хм.. интересно... но тогда можно и так:
т.к. f1 > f2 (наложем ограничения в 10 раз) то в качестве опорной частоты можно взять f1.
После этого поставить счетчик переходов f1 за период f2. Получаем число, которое соответсвуюет значию частоты которую надо получить на f3. Но это не коэффициент деления ... по-моему sad.gif .
Следовательно, частотомер не поможет или что-то не ясно.

Вот, вот!
Тут вы как раз и уперлись в размерность. Полученное число будет равно f3, выраженной в герцах (или, например, в смупсах smile.gif, так как оно безразмерное). Однако получить эту f3 без третьего генератора (с фиксированной частотой) не выйдет. Так как f1 и f2 заранее неизвестны, то вся система не имеет в явном виде никакой опорной частоты, относительно которой можно было бы все считать.

Хорошей аналогией может служить задача отмерить отрезок с длиной равной отношению длин двух других отрезков - например 10м и 2м. Смотрим, что отрезок2 укладывается в отрезок1 5 раз. Однако без мерного 1-метрового отрезка мы все равно 5-метровый не построим.

Так что берите опорный генератор (например тактовую частоту процессора) и синтезируйте f3 обычными способами. А ее значение и в самом деле получится на выходе вашего счетчика.
GGGG
Да, без опорного сигнала не получаеться ни как sad.gif.

Поэтому, решение было построено на принципе 3 входа 1 выход:
Входы:
1,2 - входы сигналов, которые надо поделить
3 - опорник
Выходы:
1 - результат

частота опорника должна быть >=10*максимальная частота 1 или 2 входа. (это одно из ограничений)
А так получаеться вся структура построена на счетчиках.

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