2013-06-13 3 views
0

Мне нужно разделить тактовую частоту 50 МГц на 1,5 МГц с 50% -ным рабочим циклом, используя VHDL. Для этого я хотел использовать счетчик, чтобы подсчитать количество импульсов в тактовой импульсе 50 МГц до половины периода синхронизации 1,5 Мгц, т.е. 16,6666, который находится в десятичной форме, который я не знаю, как реализовать в коде. Может ли кто-нибудь помочь мне с этим?Разделитель часов VHDL в десятичной системе

спасибо.

ответ

1

Я не специалист по VHDL, но я не думаю, что вы можете получить ровно 1,5 МГц с синтезируемым кодом. Возможно, вы можете получить в среднем 1,5 МГц, если вы меняете количество тактов, которые вы ждете на частоте 50 МГц, пока не поднимете 1,5 МГц.

Если вам нужен только код, который можно моделировать, тогда, конечно, вы можете просто использовать произвольные задержки.

1

Подход, который вы предлагаете, приведет к приближению, которое, конечно, может быть в порядке. Если нет, я бы предложил вам использовать экземпляр PLL или диспетчера часов, специфичный для целевой технологии.

+0

PLL - это путь. Если вы сами реализуете делитель часов, лучшее, что вы можете получить, - это приближение. Если вы используете программное обеспечение Altera для проектирования, воспользуйтесь функцией ALTPLL megafunction. –

+0

Я использую Xilinx ISE. DCM может делить только до 16. Итак, я не могу разделить на 33.3333, чтобы получить 1,5 МГц от 50 МГц входных часов. Вы знаете, как реализовать это с помощью DCM? – user24883

+0

Используйте примитив DCM_clkgen: установите M = 3, d = 10 (я прочитал лист данных, это действительно). Это займет ваше 50-миллиметровое задание, увеличьте его частоту до 150 МГц и разделите на 10, давая 15 МГц. Затем либо сделайте счетчик 5 тактов, чтобы дать вам 1.5MHz, который, вероятно, будет в порядке на этих скоростях, или поместите второй dcm и далее разделите вниз. – OllieB

Смежные вопросы