Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с задержками прохождения клока
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
studert
Здарвствуйте.Помогите пожалуйста разобраться с причиной ограничения максимальной частоты тактового сигнала.
Я начал работать с ПЛИС совсем недавно, еще мало что понимаю.Сейчас занимаюсь доработкой старого проекта,который периодически зависает и сбрасывается.В оригинале были использованы инверсные клоки,один умный человек посоветовал мне ввести в проект один глобальный тактовый сигнал высокой частоты (для меня подходит 100 МГц), завести его в глобальную цепь и подавать на все клоковые входы. Мне необходимо переключаться по передним либо по задним фронтам двух других клоков (они меньшей частоты 12-25 МГц), я выделяю падающие и растущие фронты в виде коротких импульсов шириной как глобальный клок и подаю на enable входы схем.
Я завел сигнал в глобальную цепь, затем подаю main_clk на все клоковые входы
variable
main_clk:node;
...
main_clk = global(ext_clk);

Для выделения переднего и заднего фронтов пользуюсь функциями,
SUBDESIGN rising
(
source_clk, main_clk : INPUT;
enable_signal : OUTPUT;
)
BEGIN
enable_signal = !DFF(source_clk, main_clk, ,) & source_clk;
END;
SUBDESIGN falling
(
source_clk, main_clk : INPUT;
enable_signal : OUTPUT;
)
BEGIN
enable_signal = DFF(source_clk, main_clk, ,) & !source_clk;
END;

Я не понимаю, при таком раскладе максимальная частота клока уменьшается пропорционально с увеличением проекта.Клок что проходит все узлы последовательно? Помогите пожалуйста разобраться.
В проекте использован плис ACEX.
cdg
Частота проэкта падает т.к. возрастает количество логики и след. задержка в путях по входам разрешения, длинные счетчики и арифметика тоже съедают быстродействие, посмотрите тайминг репорт и Вам станет понятно где у Вас самые критичные пути. Необходимо так-же убедится, что Clk действительно глобальный (ну в самом простом варианте примитив Global используйте). Возможно Вам прийдется уменьшить частоту проэкта.
studert
А как правильно сделать сигнал глобальным клоком?Я использовал примитив global, но стал ли сигнал таковым?Еще я повесил его на ножку dedicated clock.Может еще что-то надо сделать или вообще не так,может кто-нибудь объяснить как это делается правильно, чтобы компилятор действительно использовал глобальные цепи?
sazh
А как правильно сделать сигнал глобальным клоком?Я использовал примитив global, но стал ли сигнал таковым?Еще я повесил его на ножку dedicated clock.
///////////////////////////////////////////////////////////////////////
Если Вы назначили клок на dedicated clock, синтзатор его автоматом на глобальную цепь повесит. Но и примитив global кашу не испортит. Обычно его используют, когда внутренний source_clk хотят сделать глобальным. Все это в рапортах можно посмотреть.
А схему Вашу наверно надо доработать до общепринятой.

SUBDESIGN posedge
(
source_clk, main_clk : INPUT;
enable_signal : OUTPUT;
)

VARIABLE
ff[2..0] : DFF;

BEGIN
ff[].clk = main_clk;
ff[].d = (ff[1..0].q, source_clk);
enable_signal = !ff[2] & ff[1];
END;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.