-------------------------------------------------------------------------------- -- UPC - EETAC - EEL - CSD: Digital Circuits and Systems - DIGSYS -------------------------------------------------------------------------------- -- P8 example tutorial on prototyping: Timer_MMSS top -- Target board: DE10-Lite Terasic -- Target PLD: MAX10 10M50DAF484C7 -- Plan C2: FSM and some additional components for: -- Adapting buttons and LEDs -- Adapting 7-segment displays -- Alarm LED will be represented as character "A" at HEX5 display -- Generating CLK signals from board oscillator 50 MHz -- HEX4 is a 7-segment decoding for displaying FSM internal states. -- "A" --> Idle; "B" --> Set_Time_Up; "C" --> Set_Time_Down; -- "D" --> Timing; "E" --> Alarm_Set; -- Reference schematics at: https://digsys.upc.edu/csd/P08/P8.html#prototyping -------------------------------------------------------------------------------- LIBRARY ieee; USE IEEE.STD_LOGIC_1164.all; ENTITY Timer_MMSS_top IS PORT( CD : IN std_logic; -- SWITCH SW0 OSC_CLK_in : IN std_logic; -- KEY0, KEY1 Start_L, Stop_L : IN std_logic; ST_up, ST_down : IN std_logic; -- SWITCHES SW9, SW8 HEX3_MT_L, HEX2_MU_L : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- HEX3, HEX2 HEX1_ST_L, HEX0_SU_L : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- HEX1, HEX0 HEX2_DP_Seconds_LED_L : OUT STD_LOGIC; HEX5_Alarm_L : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- HEX5, Timer_LED : OUT STD_LOGIC; Soundwave : OUT STD_LOGIC; HEX4_States_L : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- HEX4 LED : OUT STD_LOGIC_VECTOR(9 DOWNTO 1)-- 9 LED not used ); END Timer_MMSS_top; -------------------------------------------------------------------------------- -- The description of the proposed schematic -- ARCHITECTURE schematic_planC2 OF Timer_MMSS_top IS COMPONENT Timer_MMSS IS -- The complete Timer_MMSS PORT( CD : IN std_logic; OSC_CLK_in : IN std_logic; Start, Stop : IN std_logic; ST_up, ST_down : IN std_logic; DMT, DMU : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DST, DSU : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); S_LED : OUT STD_LOGIC; Alarm_LED : OUT STD_LOGIC; Timer_LED : OUT STD_LOGIC; Soundwave : OUT STD_LOGIC; CU_states : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END COMPONENT; COMPONENT Hex_7seg_decoder IS PORT ( X_IN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); BI_L : IN STD_LOGIC; A_L, B_L, C_L, D_L, E_L, F_L, G_L : OUT STD_LOGIC ); end COMPONENT; -- Signals for connecting components together (the wires) SIGNAL S_LED, Alarm_LED, Start, Stop : std_logic; Signal DMT, DMU : STD_LOGIC_VECTOR(3 downto 0); Signal DST, DSU : STD_LOGIC_VECTOR(3 downto 0); Signal CU_states: STD_LOGIC_VECTOR(3 downto 0); BEGIN -- Instantiation of components Chip1 : Timer_MMSS -- from component name => to signal or port name PORT MAP ( OSC_CLK_in => OSC_CLK_in, CD => CD, Start => Start, Stop => Stop, ST_up => ST_up, ST_down => ST_down, DMT => DMT, DMU => DMU, DST => DST, DSU => DSU, S_LED => S_LED, Alarm_LED => Alarm_LED, Timer_LED => Timer_LED, Soundwave => Soundwave, CU_states => CU_states ); Chip2 : Hex_7seg_decoder -- from component name => to signal or port name PORT MAP ( X_IN => DSU, -- digit seconds units BI_L => '1', A_L => HEX0_SU_L(0), B_L => HEX0_SU_L(1), C_L => HEX0_SU_L(2), D_L => HEX0_SU_L(3), E_L => HEX0_SU_L(4), F_L => HEX0_SU_L(5), G_L => HEX0_SU_L(6) ); Chip3 : Hex_7seg_decoder -- from component name => to signal or port name PORT MAP ( X_IN => DST, -- digit seconds tens BI_L => '1', A_L => HEX1_ST_L(0), B_L => HEX1_ST_L(1), C_L => HEX1_ST_L(2), D_L => HEX1_ST_L(3), E_L => HEX1_ST_L(4), F_L => HEX1_ST_L(5), G_L => HEX1_ST_L(6) ); Chip4 : Hex_7seg_decoder -- from component name => to signal or port name PORT MAP ( X_IN => DMU, -- digit minutes units BI_L => '1', A_L => HEX2_MU_L(0), B_L => HEX2_MU_L(1), C_L => HEX2_MU_L(2), D_L => HEX2_MU_L(3), E_L => HEX2_MU_L(4), F_L => HEX2_MU_L(5), G_L => HEX2_MU_L(6) ); Chip5 : Hex_7seg_decoder -- from component name => to signal or port name PORT MAP ( X_IN => DMT, -- digit minutes tens BI_L => '1', A_L => HEX3_MT_L(0), B_L => HEX3_MT_L(1), C_L => HEX3_MT_L(2), D_L => HEX3_MT_L(3), E_L => HEX3_MT_L(4), F_L => HEX3_MT_L(5), G_L => HEX3_MT_L(6) ); -------------------------------------------------------------------------------- Chip6 : Hex_7seg_decoder -- from component name => to signal or port name PORT MAP ( X_IN => CU_states, -- HEX codes for representing states BI_L => '1', A_L => HEX4_States_L(0), B_L => HEX4_States_L(1), C_L => HEX4_States_L(2), D_L => HEX4_States_L(3), E_L => HEX4_States_L(4), F_L => HEX4_States_L(5), G_L => HEX4_States_L(6) ); -- Buffers and logic to adapt the board hardware Start <= not (Start_L); -- The board has active-low push-button KEY0 Stop <= not (Stop_L); -- The board has active-low push-button KEY1 HEX2_DP_Seconds_LED_L <= NOT(S_LED); -- active-low seconds LED HEX5_Alarm_L(0) <= not(Alarm_LED); -- to show character "A" after timing period HEX5_Alarm_L(1) <= not(Alarm_LED); HEX5_Alarm_L(2) <= not(Alarm_LED); HEX5_Alarm_L(3) <= '1'; HEX5_Alarm_L(4) <= not(Alarm_LED); HEX5_Alarm_L(5) <= not(Alarm_LED); HEX5_Alarm_L(6) <= not(Alarm_LED); -- All LED not used connected to '0': LED(9 downto 1) <= "000000000"; END schematic_planC2;