--------------------------------------------- -- SPINNING DISPLAY -- this is the top level component for all display functions -- INPUTS: from keypad, temp sensor, clock from PLL -- OUTPUTS: LED display vector library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity spinning_display is generic (numleds : positive := 5); port ( slow_clock : in std_logic; fast_clock : in std_logic; displayT,displayB : out std_logic_vector (numleds-1 downto 0); hrbutton, minbutton, motor_reset : in std_logic ); end spinning_display; architecture blocks of spinning_display is --declare components------------------------- component complete_time is port( clock: in std_logic; to_lookup: out std_logic_vector(3 downto 0); digit_count : out std_logic_vector(2 downto 0); hrbutton, minbutton: in std_logic); end component complete_time; ---------------------- component LookUpTable is generic(incounterwidth: positive:=4); port( num_from_counter: in std_logic_vector(3 downto 0); clock,reset: in std_logic; disp_value: out std_logic_vector(14 downto 0) ); end component LookupTable; ------------------------- component OutputBuffer is generic ( width : positive := 20; char_width : positive := 4; height : positive := 5; ctrl_width : positive := 3 ); port ( clock : in std_logic; index : in std_logic_vector (ctrl_width-1 downto 0); char_bitmap : in std_logic_vector (((char_width-1)*height)-1 downto 0); LED_0_pattern : out std_logic_vector (width-1 downto 0); LED_1_pattern : out std_logic_vector (width-1 downto 0); LED_2_pattern : out std_logic_vector (width-1 downto 0); LED_3_pattern : out std_logic_vector (width-1 downto 0); LED_4_pattern : out std_logic_vector (width-1 downto 0) ); end component OutputBuffer; --------------------------- component OutputDecoder is generic( Ni : positive := 20; -- Number of input lines per channel S : positive := 10; E : positive := 30; No : positive := 5; -- Number of channels / outputs Nc : positive := 5 ); -- Number of control lines port( in1 : in std_logic_vector(Ni-1 downto 0); in2 : in std_logic_vector(Ni-1 downto 0); in3 : in std_logic_vector(Ni-1 downto 0); in4 : in std_logic_vector(Ni-1 downto 0); in5 : in std_logic_vector(Ni-1 downto 0); PLL_Clock : in std_logic; reset : in std_logic; -- Active low LEDs : out std_logic_vector(No-1 downto 0) ); end component; ------------------------- -- these magic numbers need to be connected to generics from the top level signal time_digit : std_logic_vector(3 downto 0); signal bitmap : std_logic_vector (14 downto 0); signal count : std_logic_vector (2 downto 0); signal led0T, led1T, led2T, led3T, led4T : std_logic_vector(19 downto 0); signal led0B, led1B, led2B, led3B, led4B : std_logic_vector(19 downto 0); signal reset_one, reset_zero : std_logic; begin time_block : component complete_time port map( clock => fast_clock, to_lookup =>time_digit, digit_count=>count, hrbutton => hrbutton, minbutton => minbutton); reset_zero <= '0'; LUT : component lookuptable --generic map (incounterwidth => 4); --bitmap dimensions, digit code length port map ( num_from_counter => time_digit, clock => fast_clock, reset => reset_zero, disp_value => bitmap ); display_buf : component OutputBuffer -- these magic numbers have to be linked to generics from the top level --generic map (width =>20, char_width =>4, height =>5, ctrl_width =>3 ); port map (clock => fast_clock, index => count, char_bitmap => bitmap, LED_0_pattern => led0T, LED_1_pattern => led1T, LED_2_pattern => led2T, LED_3_pattern => led3T, LED_4_pattern => led4T ); output_mux_top : component OutputDecoder generic map (Ni => 20, S => 10, E => 30, No => 5, Nc => 5) --pixels in one rotation, width of led streams port map ( in1 => led0T, in2 => led1T, in3 => led2T, in4 => led3T, in5 => led4T, PLL_clock => slow_clock, reset => motor_reset, LEDs => displayT); --led0B<="11101110111011101110"; --led1B<="10001000100010000010"; --led2B<="11001100111011101110"; --led3B<="10001000001000101000"; --led4B<="11101110111011101110"; --output_mux_bottom : component OutputDecoder -- generic map (Ni => 20, S => 50, E => 70, No => 5, Nc => 5) --pixels in one rotation, width of led streams -- port map ( in1 => led0B, -- in2 => led1B, -- in3 => led2B, -- in4 => led3B, -- in5 => led4B, -- PLL_clock => slow_clock, -- reset => reset_one, -- LEDs => displayB); displayB <= (others => '0'); end blocks;