[an error occurred while processing this directive]
|
Спасибо всем за помощь. Заработало наконец-то. Правда некоторые вещи у меня не получились:
1. Variable tmp1 : std_logic :='1'; - не присваивается начальное значение - все равно 0
2. В тексте программы не срабатывает tmp := '0'; tmp := '1'; Интересно почему так? Пришлось ввести два сигнала low и high для таких присвоений. Додумался методом проб и ошибок. Почему непосредственное присвоение не работало не понял... :-/
Ну а так вроде получилось... Проверялся на Xilinx Spartan-3 Evaluation Board (Starter kit). Импульсы получились.
Вот VHDL программа. Интересно, это вообще правильный подход к такого рода задачам?
-- led_out
-- |-60ns-|__________60040ns_________|
--
-- ___80ns__|--------60000ns-------|__
-- cnt_req
--
-- clk50m = 50MHz
entity ig4 is
Port ( clk50m : in std_logic;
led_out : out std_logic;
cnt_req : out std_logic;
c_out : out std_logic);
end ig4;
architecture Behavioral of ig4 is
signal low : std_logic;
signal high : std_logic;
begin
low <= '0';
high <= '1';
c_out <= clk50m;
Process (clk50m)
Variable CNT : natural;
Variable tmp1 : std_logic :='1';
Variable tmp2 : std_logic :='0';
BEGIN
If (Rising_edge(clk50m)) THEN CNT := CNT + 1; END IF;
If (CNT >= 0)and(Cnt<4) THEN tmp2 := Low; END IF;
If (CNT >= 4)and(Cnt<3004)THEN tmp2 := high; END IF;
If CNT >= 3004 THEN tmp2 := low; END IF;
If (CNT >= 0)and(Cnt<3) THEN tmp1 := high; END IF;
If (CNT >= 3)and(Cnt<3005)THEN tmp1 := low; END IF;
If CNT >= 3005 THEN tmp1 := high; CNT := 0; END IF;
led_out <= tmp1;
cnt_req <= tmp2;
END Process;
end Behavioral;
E-mail: info@telesys.ru