
Сообщение от
Serg6845
у меня пока ближе всего к идеалу (по демке Rage) получилось вот так (5 нога D5 - на инверсном /BS):
http://sksb3.no-ip.org:8085/lenin_int.png
вся схема запускается по /КС, значение счетчика, выставленное на элементе and4 - активирует int, значение на and6 - деактивирует. можно добавить разрядов счетчика и взять вместо h1 например h0, вобщем есть с чем поиграть...
Этот вариант попытался понять, но он требует столько ног на сигналы с выходов от всех счетчиков, что их в моей ситуации просто неоткуда взять.
Прикинул модуль счетчика со сбросом, счетчик пока 17-разрядный, тактируется от H0 (3,5МГц). Сбрасывается по активному /КС, точнее счет начинается только с момента, когда /КС становится неактивным (=1).
Здесь 71612 - это кол-во тактов от нашего задержанного кадрового синхроимпульса до момента генерации INT следующего кадра,
из него вычитается 3584 такта самого кадрового импульса, т.к. счетчик во время его активности не будет увеличиваться;
а выключение активного INT (здесь он прямой) выполняется через 36 тактов (или правильная длительность 32 ?).
CLK - тактовая 3,5МГц
nKS - это /KS
INT - это соот-но INT
Код:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity INT_GEN is
port
(
CLK : in std_logic;
nKS : in std_logic;
INT : out std_logic
);
end INT_GEN;
architecture RTL of INT_GEN is
signal COUNTER : integer range 0 to 71680;
begin
process (CLK, nKS)
begin
if (rising_edge(CLK)) then
if (COUNTER < 71680) then
COUNTER <= COUNTER + 1;
end if;
if (COUNTER = 71612-3584) then
INT <= '1';
end if;
if (COUNTER = 71612-3584+36) then
INT <= '0';
end if;
if (nKS = '0') then
COUNTER <= 0;
end if;
end if;
end process;
end architecture;
Компилируется в 18 макроячеек,добавил модуль в проект и создал "блок" на BDF для его подключения - остатка ПЛИСки вполне хватает.
Но паять и проверять сегодня некогда, это отложим на следующий раз.