Я пишу таймер, используя FPGA .
. Я буду использовать семисегментный дисплей для отображения чисел, но я также должен иметь возможность установить определенное время c увеличивая / уменьшая, а затем, после установки, с помощью другой кнопки часы начнут опускаться на go.
signal lock
- для предотвращения увеличения счета со скоростью
manual
- это кнопка,
Я считаю, что с подсчетом все в порядке, но проблема в том, когда я хочу, чтобы go снизился. В симуляции, когда я ставлю sentido
HIGH
, тогда я ничего не получаю и не работает.
library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter is
port( clck, reset : in std_logic;
limit : in integer range 0 to 10;
manual: inout std_logic;
sentido: in std_logic;
bitcount : out std_logic_vector(3 downto 0);
clckout : out std_logic);
end counter;
architecture behavior of counter is
signal Cs : std_logic_vector(3 downto 0):="0000";
signal lock: std_logic;
begin
Count : process(clck,reset,manual,lock,sentido)
begin
if(rising_edge(clck))then
if (manual='0' and lock ='0') then
Cs<=Cs+1;
lock<='1';
elsif(manual='1' and lock='1' ) then
lock<='1';
else
lock<='0';
end if;
end if;
if sentido = '1' then
Cs<=Cs-1;
end if;
if (reset = '1') then
Cs <="0000";
end if;
if (Cs = "1010") then
Cs <= "0000";
end if;
end process Count;
bitcount <=Cs;
end behavior;