Witam,
Mam zrealizować pomiar okresu sygnału prostokątnego generowane przez generator, który jest wyprowadzony na wejście CLK0 pin 39. Zmiana wartości częstotliwości tego sygnału następuje po przez zmiane nastawy potencjometru POT1 w zakresie 10kHz..50kHz. Natomiast na wejście CLK2 mamy wyprowadzoną częstotliwość sygnału wzorcowego 1MHz. Po jednokrotnym naciśnięciu klawisza start ma nastąpić jednorazowy pomiar, który będzie wyświetlony na dwóch pozycjach w wyświetlaczu 7-seg. Wyświetlacz pokazuje cały czas 88 i nie mam pojęcia już co jest nie tak.
Mam zrealizować pomiar okresu sygnału prostokątnego generowane przez generator, który jest wyprowadzony na wejście CLK0 pin 39. Zmiana wartości częstotliwości tego sygnału następuje po przez zmiane nastawy potencjometru POT1 w zakresie 10kHz..50kHz. Natomiast na wejście CLK2 mamy wyprowadzoną częstotliwość sygnału wzorcowego 1MHz. Po jednokrotnym naciśnięciu klawisza start ma nastąpić jednorazowy pomiar, który będzie wyświetlony na dwóch pozycjach w wyświetlaczu 7-seg. Wyświetlacz pokazuje cały czas 88 i nie mam pojęcia już co jest nie tak.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
entity Fub3 is
port(
clk2 : in STD_LOGIC; //sygnał wzorcowy 1Mhz
clk0 : in STD_LOGIC; //sygnał generowany przez generator CLK0
START : in STD_LOGIC; //przycisk po naciśnięciu którego następuje pomiar.
NET1047 : out STD_LOGIC;//8 bitów, którymi wysyłamy 2 cyfry po 4 bity.
NET316 : out STD_LOGIC;
NET320 : out STD_LOGIC;
NET328 : out STD_LOGIC;
NET332 : out STD_LOGIC;
NET926 : out STD_LOGIC;
NET930 : out STD_LOGIC;
NET934 : out STD_LOGIC
);
end Fub3;
--}} End of automatically maintained section
architecture Fub3 of Fub3 is
begin
process (clk2) is
variable okres : unsigned (0 to 6) := "0000000";
variable liczba1 : unsigned (0 to 6) := "0000000";
variable liczba2 : unsigned (0 to 6) := "0000000";
begin
if rising_edge (clk2) then
if (START = '0') then
if clk0 = '1' then
okres := okres + "0000001";
if okres > "1011010" then --jezeli wieksze od 90
liczba1 := okres - "1011010"; --okres - 90 = liczba1 (jednosci)
liczba2 := "0001001";
elsif okres > "1010000" then --jezeli wieksze od 80
liczba1 := okres - "1010000"; --okres - 80 = liczba1 (jednosci)
liczba2 := "0001000";
elsif okres > "1000110" then --jezeli wieksze od 70
liczba1 := okres - "1000110"; --okres - 70 = liczba1 (jednosci)
liczba2 := "0000111";
elsif okres > "0111100" then --jezeli wieksze od 60
liczba1 := okres - "0111100"; --okres - 60 = liczba1 (jednosci)
liczba2 := "0000110";
elsif okres > "0110010" then --jezeli wieksze od 50
liczba1 := okres - "0110010"; --okres - 50 = liczba1 (jednosci)
liczba2 := "0000101";
elsif okres > "0101000" then --jezeli wieksze od 40
liczba1 := okres - "0101000"; --okres - 40 = liczba1 (jednosci)
liczba2 := "0000100";
elsif okres > "0011110" then --jezeli wieksze od 30
liczba1 := okres - "0011110"; --okres - 30 = liczba1 (jednosci)
liczba2 := "0000011";
elsif okres > "0010100" then --jezeli wieksze od 20
liczba1 := okres - "0010100"; --okres - 20 = liczba1 (jednosci)
liczba2 := "0000010";
elsif okres > "0001010" then --jezeli wieksze od 10
liczba1 := okres - "0001010"; --okres - 10 = liczba1 (jednosci)
liczba2 := "0000001";
else
liczba1 :="0000000";
liczba2 :="0000000";
end if;
elsif clk0= '0' then
okres:= "0000000";
end if;
NET1047 <= liczba2(0);
NET316 <= liczba2(1);
NET320 <= liczba2(2);
NET328 <= liczba2(3);
NET332 <= liczba1(0);
NET926 <= liczba1(1);
NET930 <= liczba1(2);
NET934 <= liczba1(3);
end if;
end if;
end process;
-- enter your statements here --
end Fub3;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Fub2 is
port(
NET1047 : in STD_LOGIC;
NET316 : in STD_LOGIC;
NET320 : in STD_LOGIC;
NET328 : in STD_LOGIC;
NET332 : in STD_LOGIC;
NET926 : in STD_LOGIC;
NET930 : in STD_LOGIC;
NET934 : in STD_LOGIC;
cyfra : out STD_LOGIC_VECTOR(6 downto 0);
cyfra2 : out STD_LOGIC_VECTOR(6 downto 0)
);
end Fub2;
--}} End of automatically maintained section
architecture Fub2 of Fub2 is
begin
process (NET1047, NET316, NET320, NET328, NET332, NET926, NET930, NET934) is
variable dana1 : std_logic_vector (3 downto 0):="0000";
variable dana2 : std_logic_vector (3 downto 0):="0000";
variable cyfra1 : std_logic_vector (6 downto 0):= "0000000";
variable cyfra3 : std_logic_vector (6 downto 0):= "0000000";
begin
dana2 (3) := NET1047;
dana2 (2):=NET316;
dana2 (1):=NET320;
dana2 (0):=NET328;
dana1 (3):=NET332;
dana1 (2):=NET926;
dana1 (1):=NET930;
dana1 (0):=NET934;
if dana1 ="0000"then cyfra1:="0000001";
elsif dana1 = "0001" then cyfra1 := "1001111";
elsif dana1 = "0010" then cyfra1 := "0010010";
elsif dana1 = "0011" then cyfra1 := "0000110";
elsif dana1 = "0100" then cyfra1 := "1001100";
elsif dana1 = "0101" then cyfra1 := "0100100";
elsif dana1 = "0110" then cyfra1 := "0100000";
elsif dana1 = "0111" then cyfra1 := "0001111";
elsif dana1 = "1000" then cyfra1 := "0000000";
elsif dana1 = "1001" then cyfra1 := "0000100";
else cyfra1:="0000000";
end if;
if dana2 ="0000"then cyfra3:="0000001";
elsif dana2 = "0001" then cyfra3 := "1001111";
elsif dana2 = "0010" then cyfra3 := "0010010";
elsif dana2 = "0011" then cyfra3 := "0000110";
elsif dana2 = "0100" then cyfra3 := "1001100";
elsif dana2 = "0101" then cyfra3 := "0100100";
elsif dana2 = "0110" then cyfra3 := "0100000";
elsif dana2 = "0111" then cyfra3 := "0001111";
elsif dana2 = "1000" then cyfra3 := "0000000";
elsif dana2 = "1001" then cyfra3 := "0000100";
else cyfra3:="0000000";
end if;
cyfra<=std_logic_vector(cyfra1);
cyfra2<=std_logic_vector(cyfra3);
end process;
-- enter your statements here --
end Fub2;