Счетчики на VHDL

Счетчики на 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

Втрой вариант 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

Третий вариант 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

Собственно проект VHDL счетчики под ISE13.1.и литература по VHDL Verilog.


Здравствуйте
Здравствуйте!...
Подскажите пожалуйста как сделать так на VHDL, чтобы счетчик выдал пилообразный сигнал?... Очень нужен данный код, спасибо.

2013 12 10 11:16:42  Добавил:   Евгений


В цифровой технике все сигналы только цифровые
В цифровой технике все сигналы только цифровые - или 0 или 1. Сформировать пилообразный сигнал можно с помощью ЦАП на который подается выходной код любого счетчика, который считает непрерывно с переходом через 0.

2013 12 10 05:35:03  Добавил:   Admin


   Всего комментариев: 2

* Заполните все поля
* Тема

* Ваше имя

* Ваш email: (нигде не публикуется)

*Новость (реплика)

Введите код подтверждения с картинки (проверка от автороботов):

 

email при указании не будет опубликован. Адреса с http:// преобразуются в ссылки автоматически. Теги запрещены.
Перейти и растаять в своей любимой социалке