Цитата(Maverick @ Nov 7 2008, 09:05)
А примерчик привести слабо
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity cnt_mav is
generic
(
width_command: integer := 8; --разрядность шины, выделяемой под команду
val_command: integer := 75; --значение команды, при которой запускается счетчик
width_cnt: integer := 8; --разрядность счетчика
val_cnt: integer := 35 --кол-во тактов, отсчитываемых счетчиком
);
--активный уровень входных сигналов управления – лог. "1"
port
(
reset: in std_logic;
clk: in std_logic;
command: in std_logic_vector(width_command-1 downto 0); --входная команда
is_command: in std_logic; --"защелкивание" команды
--если command = val_command и is_command = '1' запускается счетчик
val_counter: out std_logic_vector(width_cnt-1 downto 0 ); --значение счетчика на порт
end_counter: out std_logic --конец работы счетчика. Устанавливается на 1 такт clk
);
end cnt_mav;
architecture behav of cnt_mav is
signal st: integer range 0 to 1;
signal sig_val_counter: std_logic_vector(width_cnt-1 downto 0 );
begin
process(reset,clk)
begin
if (reset = '1') then
sig_val_counter <= (others => '0');
end_counter <= '0';
st <= 0;
elsif (clk'event and clk = '1') then
case st is
when 0 =>
end_counter <= '0';
if (command = val_command) then
if (is_command = '1') then
st <= st + 1;
end if;
end if;
when 1 => sig_val_counter <= sig_val_counter + '1';
if (sig_val_counter = (val_cnt-1)) then
sig_val_counter <= (others => '0');
end_counter <= '1';
st <= st - 1;
end if;
end case;
end if;
end process;
val_counter <= sig_val_counter;
end behav;