Dijital Saat Uygulamasının Nexys 4 Kartı Üzerinde Gerçeklenmesi
Aşağıda ayarlanabilir dijital saat uygulamasının Nexys 4 kartı üzerinde gerçeklenmesine ait kodlar ve videolar gösterilmiştir. digital_clock.vhd dosyası saat kontrol işlemlerinin yapıldığı ana modüldür. Saniye ve dakika ayarları için min_sec_digit_cntrl.vhd modülü tasarlanmıştır. Saat ayarları için ise hour_digit_cntrl.vhd modülü tasarlanmıştır.
Digital Saat tasarımında her bir birimin ayarlanabilmesi sağlanmıştır. Saatin çalışmasına ilişkin video aşağıdadır.
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.STD_LOGIC_UNSIGNED.ALL;
- use IEEE.STD_LOGIC_ARITH.ALL;
- entity digital_clock is
- generic(
- SYS_FREQ : integer := 100_000_000
- );
- Port(
- in_clk : in std_logic;
- in_rst : in std_logic;
- in_set : in std_logic;
- in_chng_seg : in std_logic;
- in_inc : in std_logic;
- out_seg : out std_logic_vector(7 downto 0);
- out_seg_leds : out std_logic_vector(7 downto 0)
- );
- end digital_clock;
- architecture Behavioral of digital_clock is
- component hour_digit_cntrl
- Port (
- in_clk : in std_logic;
- in_rst : in std_logic;
- in_pulse : in std_logic;
- in_inc_right : in std_logic;
- in_inc_left : in std_logic;
- out_right_digit : out std_logic_vector(3 downto 0);
- out_left_digit : out std_logic_vector(3 downto 0)
- );
- end component;
- component min_sec_digit_cntrl
- Generic(
- DIGIT_SIZE : integer := 10
- );
- Port (
- in_clk : in std_logic;
- in_rst : in std_logic;
- in_pulse : in std_logic;
- in_inc : in std_logic;
- out_digit : out std_logic_vector(3 downto 0);
- out_pulse : out std_logic
- );
- end component;
- component bcd2seven_segment
- Port (
- in_bcd : in std_logic_vector(3 downto 0);
- out_seven_segment : out std_logic_vector(7 downto 0)
- );
- end component;
- component pulse_generator
- generic(
- FREQ : integer := 100_000_000
- );
- Port (
- in_clk : in std_logic;
- in_rst : in std_logic;
- out_sec_pulse : out std_logic
- );
- end component;
- type t_Time_Digits is array (0 to 5) of std_logic_vector(3 downto 0);
- signal r_Time_Digits : t_Time_Digits := (others=>(others => '0'));
- signal r_bcd : std_logic_vector(3 downto 0) := (others => '0');
- signal r_seg_leds : std_logic_vector(7 downto 0) := (others => '0');
- signal r_seg : std_logic_vector(5 downto 0) := "011111";
- signal r_seg_cnt : std_logic_vector(2 downto 0) := (others => '0');
- signal r_seg_pulse : std_logic := '0';
- --
- signal r_sec_pulse : std_logic := '0';
- signal r_sec_right_pulse : std_logic := '0';
- signal r_sec_left_pulse : std_logic := '0';
- signal r_min_right_pulse : std_logic := '0';
- signal r_min_left_pulse : std_logic := '0';
- --
- signal r_set : std_logic := '0';
- signal r_set_chk : std_logic_vector(5 downto 0) := "011111";
- signal r_set_cntrl : std_logic_vector(2 downto 0) := (others=> '0');
- signal r_set_cnt : integer := 0;
- signal r_set_stts : std_logic := '0';
- signal r_chng_cntrl : std_logic_vector(2 downto 0) := (others=> '0');
- signal r_set_seg : std_logic_vector(2 downto 0) := (others=> '0');
- signal r_inc_cntrl : std_logic_vector(2 downto 0) := (others=> '0');
- signal r_inc_seg : std_logic_vector(5 downto 0) := (others=> '0');
- function f_set_shift(r_seg : std_logic_vector(5 downto 0) ; r_set_stts : std_logic; r_set_seg : std_logic_vector(2 downto 0) ) return std_logic_vector is
- variable v_seg : std_logic_vector(5 downto 0);
- begin
- v_seg := r_seg;
- if v_seg(conv_integer(r_set_seg)) = '0' then
- v_seg(conv_integer(r_set_seg)) := r_set_stts;
- end if;
- return ("11" & v_seg);
- end f_set_shift;
- begin
- out_seg_leds <= r_seg_leds;
- out_seg <= f_set_shift(r_seg, r_set_stts, r_set_seg);
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_set_cnt <= 0;
- r_set_stts <= '0';
- elsif rising_edge(in_clk) then
- if r_set = '1' then
- if r_set_cnt = (SYS_FREQ / 2) - 1 then
- r_set_cnt <= 0;
- r_set_stts <= not r_set_stts;
- else
- r_set_cnt <= r_set_cnt + 1;
- end if;
- else
- r_set_cnt <= 0;
- r_set_stts <= '0';
- end if;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_inc_seg <= (others => '0');
- elsif rising_edge(in_clk) then
- r_inc_seg <= (others => '0');
- if r_inc_cntrl(2 downto 1) = "01" then
- r_inc_seg(5 - conv_integer(r_set_seg)) <= '1';
- end if;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_inc_cntrl <= (others=> '0');
- elsif rising_edge(in_clk) then
- r_inc_cntrl <= r_inc_cntrl(1 downto 0) & in_inc;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_seg <= "011111";
- r_set_chk <= "111111";
- elsif rising_edge(in_clk) then
- if r_seg_pulse = '1' then
- r_seg <= r_seg(4 downto 0) & r_seg(5);
- end if;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_set_seg <= (others => '0');
- elsif rising_edge(in_clk) then
- if r_chng_cntrl(2 downto 1) = "01" then
- if r_set_seg = 5 then
- r_set_seg <= (others => '0');
- else
- r_set_seg <= r_set_seg + 1;
- end if;
- end if;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_chng_cntrl <= (others=> '0');
- elsif rising_edge(in_clk) then
- r_chng_cntrl <= r_chng_cntrl(1 downto 0) & in_chng_seg;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_seg_cnt <= (others => '0');
- r_bcd <= (others => '0');
- elsif rising_edge(in_clk) then
- if r_seg_pulse = '1' then
- r_bcd <= r_Time_Digits(5 - conv_integer(r_seg_cnt));
- if r_seg_cnt = 5 then
- r_seg_cnt <= (others => '0');
- else
- r_seg_cnt <= r_seg_cnt + 1;
- end if;
- end if;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_set <= '0';
- elsif rising_edge(in_clk) then
- if r_set_cntrl(2 downto 1) = "01" then
- r_set <= not r_set;
- end if;
- end if;
- end process;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_set_cntrl <= (others=> '0');
- elsif rising_edge(in_clk) then
- r_set_cntrl <= r_set_cntrl(1 downto 0) & in_set;
- end if;
- end process;
- bcd2seven_segment_map : bcd2seven_segment
- Port map(
- in_bcd => r_bcd,
- out_seven_segment => r_seg_leds
- );
- hour_digit_cntrl_map : hour_digit_cntrl
- Port map (
- in_clk => in_clk,
- in_rst => in_rst,
- in_pulse => r_min_left_pulse,
- in_inc_right => r_inc_seg(1),
- in_inc_left => r_inc_seg(0),
- out_right_digit => r_Time_Digits(1),
- out_left_digit => r_Time_Digits(0)
- );
- min_left_digit : min_sec_digit_cntrl
- Generic map(
- DIGIT_SIZE => 6
- )
- Port map(
- in_clk => in_clk,
- in_rst => in_rst,
- in_pulse => r_min_right_pulse,
- in_inc => r_inc_seg(2),
- out_digit => r_Time_Digits(2),
- out_pulse => r_min_left_pulse
- );
- min_right_digit : min_sec_digit_cntrl
- Generic map(
- DIGIT_SIZE => 10
- )
- Port map(
- in_clk => in_clk,
- in_rst => in_rst,
- in_pulse => r_sec_left_pulse,
- in_inc => r_inc_seg(3),
- out_digit => r_Time_Digits(3),
- out_pulse => r_min_right_pulse
- );
- sec_left_digit : min_sec_digit_cntrl
- Generic map(
- DIGIT_SIZE => 6
- )
- Port map(
- in_clk => in_clk,
- in_rst => in_rst,
- in_pulse => r_sec_right_pulse,
- in_inc => r_inc_seg(4),
- out_digit => r_Time_Digits(4),
- out_pulse => r_sec_left_pulse
- );
- sec_right_digit : min_sec_digit_cntrl
- Generic map(
- DIGIT_SIZE => 10
- )
- Port map(
- in_clk => in_clk,
- in_rst => in_rst,
- in_pulse => r_sec_pulse,
- in_inc => r_inc_seg(5),
- out_digit => r_Time_Digits(5),
- out_pulse => r_sec_right_pulse
- );
- seg_pulse_map : pulse_generator
- generic map(
- FREQ => 10_000
- )
- Port map (
- in_clk => in_clk,
- in_rst => in_rst,
- out_sec_pulse => r_seg_pulse
- );
- one_second_pulse_map : pulse_generator
- generic map(
- FREQ => SYS_FREQ
- )
- Port map (
- in_clk => in_clk,
- in_rst => in_rst,
- out_sec_pulse => r_sec_pulse
- );
- end Behavioral;
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- entity pulse_generator is
- generic(
- FREQ : integer := 100_000_000
- );
- Port (
- in_clk : in std_logic;
- in_rst : in std_logic;
- out_sec_pulse : out std_logic
- );
- end pulse_generator;
- architecture Behavioral of pulse_generator is
- signal r_sec_pulse : std_logic := '0';
- signal r_cnt : integer := 0;
- begin
- out_sec_pulse <= r_sec_pulse;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_cnt<= 0;
- r_sec_pulse <= '0';
- elsif rising_edge(in_clk) then
- if r_cnt = FREQ - 1 then
- r_sec_pulse <= '1';
- r_cnt<= 0;
- else
- r_sec_pulse <= '0';
- r_cnt <= r_cnt + 1;
- end if;
- end if;
- end process;
- end Behavioral;
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.STD_LOGIC_UNSIGNED.ALL;
- use IEEE.STD_LOGIC_ARITH.ALL;
- entity min_sec_digit_cntrl is
- Generic(
- DIGIT_SIZE : integer := 10
- );
- Port (
- in_clk : in std_logic;
- in_rst : in std_logic;
- in_pulse : in std_logic;
- in_inc : in std_logic;
- out_digit : out std_logic_vector(3 downto 0);
- out_pulse : out std_logic
- );
- end min_sec_digit_cntrl;
- architecture Behavioral of min_sec_digit_cntrl is
- signal r_digit : std_logic_vector(3 downto 0) := (others => '0');
- signal r_pulse : std_logic := '0';
- begin
- out_digit <= r_digit;
- out_pulse <= r_pulse;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_digit <= (others => '0');
- r_pulse <= '0';
- elsif rising_edge(in_clk) then
- r_pulse <= '0';
- if in_pulse = '1' then
- if r_digit = DIGIT_SIZE - 1 then
- r_pulse <= '1';
- r_digit <= (others => '0');
- else
- r_digit <= r_digit + 1;
- end if;
- end if;
- if in_inc = '1' then
- if r_digit = DIGIT_SIZE - 1 then
- r_digit <= (others => '0');
- else
- r_digit <= r_digit + 1;
- end if;
- end if;
- end if;
- end process;
- end Behavioral;
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.STD_LOGIC_UNSIGNED.ALL;
- use IEEE.STD_LOGIC_ARITH.ALL;
- entity hour_digit_cntrl is
- Port (
- in_clk : in std_logic;
- in_rst : in std_logic;
- in_pulse : in std_logic;
- in_inc_right : in std_logic;
- in_inc_left : in std_logic;
- out_right_digit : out std_logic_vector(3 downto 0);
- out_left_digit : out std_logic_vector(3 downto 0)
- );
- end hour_digit_cntrl;
- architecture Behavioral of hour_digit_cntrl is
- signal r_right_digit : std_logic_vector(3 downto 0);
- signal r_left_digit : std_logic_vector(3 downto 0);
- begin
- out_right_digit <= r_right_digit;
- out_left_digit <= r_left_digit;
- process(in_clk, in_rst)
- begin
- if in_rst = '1' then
- r_right_digit <= (others => '0');
- r_left_digit <= (others => '0');
- elsif rising_edge(in_clk) then
- if in_pulse = '1' then
- if (r_left_digit /= 2 and r_right_digit = 9) or
- (r_left_digit = 2 and r_right_digit = 3) then
- r_right_digit <= (others => '0');
- if r_left_digit = 2 then
- r_left_digit <= (others => '0');
- else
- r_left_digit <= r_left_digit + 1;
- end if;
- else
- r_right_digit <= r_right_digit + 1;
- end if;
- end if;
- if in_inc_right = '1' then
- if (r_left_digit /= 2 and r_right_digit = 9) or
- (r_left_digit = 2 and r_right_digit = 3) then
- r_right_digit <= (others => '0');
- else
- r_right_digit <= r_right_digit + 1;
- end if;
- end if;
- if in_inc_left = '1' then
- if r_left_digit = 2 then
- r_left_digit <= (others => '0');
- else
- r_left_digit <= r_left_digit + 1;
- end if;
- end if;
- end if;
- end process;
- end Behavioral;
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- entity bcd2seven_segment is
- Port (
- in_bcd : in std_logic_vector(3 downto 0);
- out_seven_segment : out std_logic_vector(7 downto 0)
- );
- end bcd2seven_segment;
- architecture Behavioral of bcd2seven_segment is
- signal r_seven_segment : std_logic_vector(7 downto 0) := (others => '0');
- begin
- out_seven_segment <= r_seven_segment;
- process(in_bcd)
- begin
- case in_bcd is
- when "0000" =>
- r_seven_segment <= "10000001";
- when "0001" =>
- r_seven_segment <= "11001111";
- when "0010" =>
- r_seven_segment <= "10010010";
- when "0011" =>
- r_seven_segment <= "10000110";
- when "0100" =>
- r_seven_segment <= "11001100";
- when "0101" =>
- r_seven_segment <= "10100100";
- when "0110" =>
- r_seven_segment <= "10100000";
- when "0111" =>
- r_seven_segment <= "10001111";
- when "1000" =>
- r_seven_segment <= "10000000";
- when "1001" =>
- r_seven_segment <= "10000100";
- when others =>
- r_seven_segment <= "00000000";
- end case;
- end process;
- end Behavioral;
- set_property PACKAGE_PIN E3 [get_ports in_clk]
- set_property IOSTANDARD LVCMOS33 [get_ports in_clk]
- set_property PACKAGE_PIN F15 [get_ports in_rst]
- set_property IOSTANDARD LVCMOS33 [get_ports in_rst]
- set_property PACKAGE_PIN M1 [get_ports {out_seg[7]}]
- set_property PACKAGE_PIN L1 [get_ports {out_seg[6]}]
- set_property PACKAGE_PIN N4 [get_ports {out_seg[5]}]
- set_property PACKAGE_PIN N2 [get_ports {out_seg[4]}]
- set_property PACKAGE_PIN N5 [get_ports {out_seg[3]}]
- set_property PACKAGE_PIN M3 [get_ports {out_seg[2]}]
- set_property PACKAGE_PIN M6 [get_ports {out_seg[1]}]
- set_property PACKAGE_PIN N6 [get_ports {out_seg[0]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[7]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[6]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[5]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[4]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[3]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[2]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[1]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg[0]}]
- set_property PACKAGE_PIN M4 [get_ports {out_seg_leds[7]}]
- set_property PACKAGE_PIN L3 [get_ports {out_seg_leds[6]}]
- set_property PACKAGE_PIN N1 [get_ports {out_seg_leds[5]}]
- set_property PACKAGE_PIN L5 [get_ports {out_seg_leds[4]}]
- set_property PACKAGE_PIN L4 [get_ports {out_seg_leds[3]}]
- set_property PACKAGE_PIN K3 [get_ports {out_seg_leds[2]}]
- set_property PACKAGE_PIN M2 [get_ports {out_seg_leds[1]}]
- set_property PACKAGE_PIN L6 [get_ports {out_seg_leds[0]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[7]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[6]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[5]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[4]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[3]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[2]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[1]}]
- set_property IOSTANDARD LVCMOS33 [get_ports {out_seg_leds[0]}]
- set_property PACKAGE_PIN E16 [get_ports in_set]
- set_property PACKAGE_PIN R10 [get_ports in_inc]
- set_property IOSTANDARD LVCMOS33 [get_ports in_inc]
- set_property IOSTANDARD LVCMOS33 [get_ports in_set]
- set_property PACKAGE_PIN V10 [get_ports in_chng_seg]
- set_property IOSTANDARD LVCMOS33 [get_ports in_chng_seg]
Latest Comments
Helal m ali istersen yapamayacagin birsey yok.