ПЛИС PLL.
В прошлой статье про ПЛИС мы написали программу которая мигала светодиодами, но разбираться с ПЛИС, чтобы помигать светодиодами — это неоправданная трата времени. В реальной жизни ПЛИС применяют либо для захвата и обработки данных на больших скоростях, например, чтобы забирать данные у АЦП, работающего на сотнях мегагерц , либо там где нужна нестандартная периферия, например десяток модулей SPI. И если второй вариант хоть как-нибудь можно реализовать на МК, то забирать данные на большой скорости средствами МК нереально.
Для того, чтобы забирать данные на больших скоростях необходимо, чтобы сама ПЛИС работала на частоте в несколько раз превышающей, частоту забора данных, для этих целей в ПЛИС как и в МК предназначен модуль PLL. Его настройкой мы и займемся в этой статье.
Первым делом, открываем даташит и смотрим какую максимальную частоту мы можем получить на выходе PLL.
Создаем проект в Quartus. В правой части окна программы должен располагаться IP Catalog, если его там нет, во вкладке Tools, находим IP Catalog, кликаем по нему и уже в нем выбираем ALTPLL.
Перед нами откроется окно в котором надо указать название файла и на каком языке его необходимо генерировать.
Перед нами откроется окно настройки самого PLL в котором необходимо указать частоту, которая подается на его вход, остальные настройки по желанию.
В следующем окне, можно выбрать нужен ли нам: сигнал сброса PLL, сигнал запуска PLL, сигнал о том, что произошел захват частоты PLL.
Следующие несколько шагов пропущу, в них ничего не изменял. Перейду сразу непосредственно к настройке выхода PLL. В данном окошке можно либо задать коэффициенты вручную, либо задать необходимую частоту, а wizard сам рассчитает коэффициенты.
Хотелось бы отметить,что PLL у данной ПЛИС может иметь до 5 выходов, которые могут быть сконфигурированы на нужную частоту. Оставлю тут картинку для лучшего понимания.
Но надо отметить, что тут присутствует ограничение, получить на выходе PLL можно только кратные частоты, то есть отличающиеся в целое число раз. Например, если при настройке выхода C1 указать частоту 350MHz, wizard скажет, что нет возможности её получить.
В последнем окне, можно выбрать типы файлов, которые генерирует wizard по завершению настройки. Нам хватит тех двух, которые выделены по умолчанию.
В итоге wizard должен создать файл pll.v и в нем одноименный модуль с двумя параметрами, входной и выходной сигналы.
Напишем код который по возрастающему фронту будет изменять состояние вывода. Так как PLL в нашем проекте работает на частоте 400MHz, а изменять состояние выводы мы будем только по возрастающему фронту, по факту на экране осциллографа мы должны увидеть сигнал с частотой 200MHz.
Назначим сигналам выводы, учитывая знания из прошлой статьи о том, что у ПЛИС есть ножки предназначенные для вывода сигнала PLL наружу.
Картинка на экране осциллографа говорит о том, что мы все сделали правильно, но думаю кого-то может смутить амплитуда сигнала. Смущаться не стоит потому, что полоса пропускания осциллографа всего 100MHz, а сигнал частота сигнала 200MHz.
Для того, чтобы забирать данные на больших скоростях необходимо, чтобы сама ПЛИС работала на частоте в несколько раз превышающей, частоту забора данных, для этих целей в ПЛИС как и в МК предназначен модуль PLL. Его настройкой мы и займемся в этой статье.
Первым делом, открываем даташит и смотрим какую максимальную частоту мы можем получить на выходе PLL.
Создаем проект в Quartus. В правой части окна программы должен располагаться IP Catalog, если его там нет, во вкладке Tools, находим IP Catalog, кликаем по нему и уже в нем выбираем ALTPLL.
Перед нами откроется окно в котором надо указать название файла и на каком языке его необходимо генерировать.
Перед нами откроется окно настройки самого PLL в котором необходимо указать частоту, которая подается на его вход, остальные настройки по желанию.
В следующем окне, можно выбрать нужен ли нам: сигнал сброса PLL, сигнал запуска PLL, сигнал о том, что произошел захват частоты PLL.
Следующие несколько шагов пропущу, в них ничего не изменял. Перейду сразу непосредственно к настройке выхода PLL. В данном окошке можно либо задать коэффициенты вручную, либо задать необходимую частоту, а wizard сам рассчитает коэффициенты.
Хотелось бы отметить,что PLL у данной ПЛИС может иметь до 5 выходов, которые могут быть сконфигурированы на нужную частоту. Оставлю тут картинку для лучшего понимания.
Но надо отметить, что тут присутствует ограничение, получить на выходе PLL можно только кратные частоты, то есть отличающиеся в целое число раз. Например, если при настройке выхода C1 указать частоту 350MHz, wizard скажет, что нет возможности её получить.
В последнем окне, можно выбрать типы файлов, которые генерирует wizard по завершению настройки. Нам хватит тех двух, которые выделены по умолчанию.
В итоге wizard должен создать файл pll.v и в нем одноименный модуль с двумя параметрами, входной и выходной сигналы.
Напишем код который по возрастающему фронту будет изменять состояние вывода. Так как PLL в нашем проекте работает на частоте 400MHz, а изменять состояние выводы мы будем только по возрастающему фронту, по факту на экране осциллографа мы должны увидеть сигнал с частотой 200MHz.
module pll_project(input clk_50MHz, output reg pll_out);
wire wc0;
pll pll1(.inclk0( clk_50MHz ), .c0( wc0 ));
always@(posedge wc0)
begin
pll_out <= pll_out^1'b1;//изменяем состояние вывода
end
endmodule
Назначим сигналам выводы, учитывая знания из прошлой статьи о том, что у ПЛИС есть ножки предназначенные для вывода сигнала PLL наружу.
Картинка на экране осциллографа говорит о том, что мы все сделали правильно, но думаю кого-то может смутить амплитуда сигнала. Смущаться не стоит потому, что полоса пропускания осциллографа всего 100MHz, а сигнал частота сигнала 200MHz.
Похожие статьи