Witam
Czy wie ktoś może jak zrobić w vhdl'u układ który będzie generował impuls wyzwalany narastającym zboczem sygnału wejściowego, a czas trwania tego impulsu żeby był ustawiany na 4 bitach wejściowych. Zależy mi na czasach do 3 sekund i koniecznie aby układ zliczał od początku gdy przyjdzie kolejny impuls wyzwolenia a jeszcze nie skończył generować poprzedniego impulsu - tak jak układ 74123.
Myślałem aby zrobić licznik, który będzie zliczał impulsy z generatora. Próbowałem coś takiego ale kompilator wyświetla komunikat "Process clocking is too complex"
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
use IEEE.STD_LOGIC_ARITH.all;
entity timer123 is port (
CLK, CLR, A, B, S0,S1,S2,S3: in std_logic;
Q, NQ: out std_logic
);
end timer123;
architecture arch_timer123 of timer123 is
signal wyzwolenie: std_logic;
signal liczba: std_logic_vector(3 downto 0);
begin
wyzwolenie <= not A and B and CLK;
process (CLR,CLK,wyzwolenie)
begin
if (CLR='0') then
Q <= '0';
NQ <= '1';
elsif (wyzwolenie'event and wyzwolenie='1') then
liczba <= S3 & S2 & S1 & S0;
Q <= '1';
NQ <= '0';
elsif (CLK'event and CLK='1') then
if liczba = "0000" then
Q <= '0';
NQ <= '1';
else
liczba <= liczba-1;
end if;
end if;
end process;
end;
Czy wie ktoś może jak zrobić w vhdl'u układ który będzie generował impuls wyzwalany narastającym zboczem sygnału wejściowego, a czas trwania tego impulsu żeby był ustawiany na 4 bitach wejściowych. Zależy mi na czasach do 3 sekund i koniecznie aby układ zliczał od początku gdy przyjdzie kolejny impuls wyzwolenia a jeszcze nie skończył generować poprzedniego impulsu - tak jak układ 74123.
Myślałem aby zrobić licznik, który będzie zliczał impulsy z generatora. Próbowałem coś takiego ale kompilator wyświetla komunikat "Process clocking is too complex"
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
use IEEE.STD_LOGIC_ARITH.all;
entity timer123 is port (
CLK, CLR, A, B, S0,S1,S2,S3: in std_logic;
Q, NQ: out std_logic
);
end timer123;
architecture arch_timer123 of timer123 is
signal wyzwolenie: std_logic;
signal liczba: std_logic_vector(3 downto 0);
begin
wyzwolenie <= not A and B and CLK;
process (CLR,CLK,wyzwolenie)
begin
if (CLR='0') then
Q <= '0';
NQ <= '1';
elsif (wyzwolenie'event and wyzwolenie='1') then
liczba <= S3 & S2 & S1 & S0;
Q <= '1';
NQ <= '0';
elsif (CLK'event and CLK='1') then
if liczba = "0000" then
Q <= '0';
NQ <= '1';
else
liczba <= liczba-1;
end if;
end if;
end process;
end;