Делитель управляемый кодом на VHDL
Тема счетчиков на VHDL была немного раскрыта на данном ресурсе. В этом посте будет показано как сделать делитель управляемый кодом. В чем суть? Суть в том, что нужно запустить на счет мнгоразрядный счетчик и в момент определяемый кодом обнулить его сформировав перенос равный периоду или даже половине периода тактовой частоты. На базе такого рода счетчика вполне возможно сделать цифровую систему ФАПЧ или просто простейший синтезатор частоты.
В коде на VHDL это выглядит предельно просто:
--------------------------------------------------------------------
-- Project : Делитель управляемый кодом
-- Date : 29/10/13
-- File : codecounter.vhd
--------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity codecounter is
Generic
(
--размерность счетчиа
code_width : integer := 16
);
Port
(
-- входной клок
clk : in std_logic;
-- глобальный сброс
clr : in std_logic;
-- код
code_in : in std_logic_vector(code_width - 1 downto 0);
-- выход
cnt_out : out std_logic
);
end entity codecounter;
architecture behavioural of codecounter is
signal s_cnt_out : std_logic;
signal s_div : std_logic_vector (code_width - 1 downto 0);
begin
--------------------------------------------------------------------
-- делитель управляемый кодом
--------------------------------------------------------------------
process (clk, clr)
begin
if clr = '0' then
s_div <= (others => '0');
s_cnt_out <= '0';
elsif clk'event and clk = '1' then
s_div <= s_div + 1;
-- сравнение текущего состояния с кодом
if s_div = code_in - 1 then
s_div <= (others => '0');
-- перенос
s_cnt_out <= '0';
else
s_cnt_out <= '1';
end if;
end if;
end process ;
-- выход
cnt_out <= s_cnt_out;
end behavioural;
Диаграмма работы делителя выглядит примерно так:
Можно делитель выполнить в виде счетчика загружаемого кодом, тогда все будет выглядеть примерно так:
--------------------------------------------------------------------
-- Project : Делитель управляемый кодом
-- Date : 29/10/13
-- File : codecounter.vhd
--------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity codecounter is
Generic
(
--размерность счетчиа
code_width : integer := 16
);
Port
(
-- входной клок
clk : in std_logic;
-- глобальный сброс
clr : in std_logic;
-- код
code_in : in std_logic_vector(code_width - 1 downto 0);
-- выход
cnt_out : out std_logic
);
end entity codecounter;
architecture behavioural of codecounter is
signal s_cnt_out : std_logic;
signal s_div : std_logic_vector (code_width - 1 downto 0);
begin
--------------------------------------------------------------------
-- делитель управляемый кодом
--------------------------------------------------------------------
process (clk, clr)
begin
if clr = '0' then
s_div <= (others => '0');
s_cnt_out <= '0';
elsif clk'event and clk = '1' then
s_div <= s_div - 1;
-- сравнение текущего состояния с кодом
if s_div = 0 then
s_div <= code_in - 1;
-- перенос
s_cnt_out <= '0';
else
s_cnt_out <= '1';
end if;
end if;
end process ;
-- выход
cnt_out <= s_cnt_out;
end behavioural;
Для лучшего понимания как все крутится можно опробовать готовый проект делителя для Quartus90. Кому проектик пригодился оставьте свой коммент. Предложения и замечания тоже по ссылке для добавления комментов.
Электроника :
- Техника электроника (11)
- Полезная электроника (4)
- Электроника для всех (5)
- Техника для дома (6)
- Cхемотехника ПЛИС (11)
- Пректирование PCAD (4)
Программирование :
- Микроконтроллеры (9)
- ПЛИС VHDL Verilog (29)
- C++ Builder (7)
- Visual Studio C++ C# (7)
- Java programming (7)
- Matlab programming (4)
Сайтостроение :
- Сайтостроение HTML (5)
- Сайтостроение PHP (8)
- PHP CMS на файлах (3)
- Web инструменты (9)
- Полезное вебмастеру (11)
- SEO раскрутка сайта (4)
- PHP скрипты (3)
Реклама :
Книги и учебники :
- Шаблоны сайтов (6)
- Книги и учебники (2)
Компьютер и интернет :
Поиск по сайту :
Реклама :
Облако меток :
Бесплатная подписка :
Статистика :
- Популярность (3)
- Посещаемость (3)
- Поисковые запросы (3)