Счетчики на VHDL
Счетчики на VHDL - один из возможных поисковых запросов. VHDL счетчики присутствуют в любой IDE для ПЛИС в разделе шаблонов. И тем не менее, поскольку все же народ ищет VHDL код счетчиков то вполне можно рассмотреть варианты альтернативные шаблонным. В данном посте попробуем сворганить VHDL делитель, счетчик с запуском и остановом, делитель с бездребезговым переносом.
Начнем с простого делителя, который может поделить частоту так, чтобы сразу получился меандр. Это вполне может пригодиться для формирования частоты бод для USART.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity clock is
generic
(
clk_gen : integer := 5000000; -- частота генератора
baud_rate : integer := 19200; -- необходимая частота бод
baud_mul : integer := 16 -- множитель частоты бод
);
port
(
clk : in std_logic; -- вход частоты
rst : in std_logic; -- внешний сброс
clk_out : out std_logic -- выход частоты
);
end clock;
architecture Behavioral of clock is
-- начальное состояние счета
constant min_count : integer := 0;
-- определение полупериода частоты бод
constant max_count : integer := (((clk_gen / baud_rate)/(2*baud_mul)) - 1);
-- частота бод
signal bclk : std_logic;
begin
-- если счетчик досчитал до max_count
-- то bclk меняет свое состояние (частота бод)
process(clk,bclk,rst)
variable cnt : integer range min_count to max_count;
begin
if rst = '1' then
bclk <= '0';
cnt := 0;
elsif clk'event and clk = '1' then
if cnt = max_count then
cnt := 0;
if bclk = '1' then bclk <= '0';
else bclk <= '1';
end if;
else
cnt := cnt + 1;
end if;
end if;
clk_out <= bclk;
end process;
end Behavioral;
Втрой вариант VHDL счетчика это счетчик с запуском и остановом.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity reset is
generic
(
min_count : integer := 0 -- начальное состояние счета
);
port
(
clk : in std_logic; -- вход частоты
rst_out : out std_logic -- сброс
);
end reset;
architecture Behavioral of reset is
-- внутренний сброс
signal rclk : std_logic := '0';
-- сигнал блокировки сброса (1 раз после вкл. питания)
signal rblock : std_logic := '0';
begin
process(clk,rclk)
variable rcnt : integer range min_count to 8;
begin
if clk'event and clk = '1' then
if rblock = '0' then
rcnt := rcnt + 1;
rclk <= '1';
end if;
if rcnt = 8 then
rclk <= '0';
rblock <= '1';
end if;
end if;
rst_out <= rclk;
end process;
end Behavioral;
Третий вариант VHDL счетчика это делитель с бездребезговым переносом.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity tinkle is
Generic
(
count_int : integer := 20
);
Port(
clk : in std_logic;
load : in std_logic;
rs_out : out std_logic;
centr_out : out std_logic_vector(7 downto 0)
);
end tinkle;
architecture Behavioral of tinkle is
signal rs : std_logic;
signal count : std_logic_vector(7 downto 0);
begin
-- счетчик с бездребезговым переносом
process(clk,rs,load,count)
begin
if load = '1' then
count <= (others => '0');
elsif clk'event and clk = '1' then
if rs = '0' then
count <= (others => '0');
else
count <= count + 1;
end if;
if count = conv_integer(count_int) then
rs <= '0';
else
rs <= '1';
end if;
centr_out <= count;
end if;
rs_out <= rs;
end process;
end Behavioral;
Собственно проект VHDL счетчики под ISE13.1.и литература по VHDL Verilog.
Электроника :
- Техника электроника (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)