--------------------------------------------- --Project Gump --Marc Binette --Ralph Nevins --Lambert Lo ---------------------------------------------- --servo_controller --This is the top level of the servo controller. --It connects all the components together. --input=>clock(1bit), load(4bit), data(8bit), reset(1bit) --output=>servo_L_thigh(1bit),servo_L_knee(1bit) -- servo_R_thigh(1bit),servo_R_knee(1bit) LIBRARY ieee; USE ieee.std_logic_1164.ALL; LIBRARY work; USE work.servo_controller_package.ALL; --entity declaration for the controller ENTITY servo_controller IS PORT(clock, rst : IN std_logic; load : IN std_logic_vector(3 DOWNTO 0); data : IN std_logic_vector(7 DOWNTO 0); sixteen_ms, eight_ms, four_ms, two_ms : BUFFER std_logic; servo_L_thigh, servo_L_knee, servo_R_thigh, servo_R_knee : BUFFER std_logic); END servo_controller; --structural discription of how the components are connected ARCHITECTURE structural OF servo_controller IS --signals used to connect the differ components SIGNAL sig_invreset : std_logic; SIGNAL sig_topfour_counter : std_logic_vector(3 DOWNTO 0); SIGNAL sig_count_out : std_logic_vector(11 DOWNTO 0); SIGNAL sig_count_overflow : std_logic; SIGNAL sig_Lthigh_hold, sig_Lknee_hold, sig_Rthigh_hold, sig_Rknee_hold : std_logic_vector(7 DOWNTO 0); SIGNAL sig_Lthigh_reg, sig_Lknee_reg, sig_Rthigh_reg, sig_Rknee_reg : std_logic_vector(7 DOWNTO 0); SIGNAL sig_Lthigh_comp, sig_Lknee_comp, sig_Rthigh_comp, sig_Rknee_comp : std_logic; BEGIN sig_invreset <= NOT(rst); sixteen_ms <= sig_topfour_counter(3); eight_ms <= sig_topfour_counter(2); four_ms <= sig_topfour_counter(1); two_ms <= sig_topfour_counter(0); --counter counter : servo_controller_counter PORT MAP( clock => clock, overflow => sig_count_overflow, topfourbits => sig_topfour_counter, count_out => sig_count_out); --components used for controlling the left thigh servo L_thigh_hold : servo_controller_8bithold PORT MAP( reset => sig_invreset, load => load(3), data => data, hold_out => sig_Lthigh_hold); L_thigh_reg : servo_controller_register8bit PORT MAP( reset => sig_invreset, load => sig_count_overflow, data_in => sig_Lthigh_hold, register_out => sig_Lthigh_reg); L_thigh_compare : servo_controller_comparator PORT MAP( reg_in => sig_Lthigh_reg, cnt_in => sig_count_out, compare_out => sig_Lthigh_comp); L_thigh_dflip : servo_controller_dflip PORT MAP( load => clock, datain => sig_Lthigh_comp, dataout =>servo_L_thigh); --components used for controlling the left knee servo L_knee_hold : servo_controller_8bithold PORT MAP( reset => sig_invreset, load => load(2), data => data, hold_out => sig_Lknee_hold); L_knee_reg : servo_controller_register8bit PORT MAP( reset => sig_invreset, load => sig_count_overflow, data_in => sig_Lknee_hold, register_out => sig_Lknee_reg); L_knee_compare : servo_controller_comparator PORT MAP( reg_in => sig_Lknee_reg, cnt_in => sig_count_out, compare_out => sig_Lknee_comp); L_knee_dflip : servo_controller_dflip PORT MAP( load => clock, datain => sig_Lknee_comp, dataout =>servo_L_knee); --components used for controlling the right thigh servo R_thigh_hold : servo_controller_8bithold PORT MAP( reset => sig_invreset, load => load(1), data => data, hold_out => sig_Rthigh_hold); R_thigh_reg : servo_controller_register8bit PORT MAP( reset => sig_invreset, load => sig_count_overflow, data_in => sig_Rthigh_hold, register_out => sig_Rthigh_reg); R_thigh_compare : servo_controller_comparator PORT MAP( reg_in => sig_Rthigh_reg, cnt_in => sig_count_out, compare_out => sig_Rthigh_comp); R_thigh_dflip : servo_controller_dflip PORT MAP( load => clock, datain => sig_Rthigh_comp, dataout =>servo_R_thigh); --components used for controlling the left knee servo R_knee_hold : servo_controller_8bithold PORT MAP( reset => sig_invreset, load => load(0), data => data, hold_out => sig_Rknee_hold); R_knee_reg : servo_controller_register8bit PORT MAP( reset => sig_invreset, load => sig_count_overflow, data_in => sig_Rknee_hold, register_out => sig_Rknee_reg); R_knee_compare : servo_controller_comparator PORT MAP( reg_in => sig_Rknee_reg, cnt_in => sig_count_out, compare_out => sig_Rknee_comp); R_knee_dflip : servo_controller_dflip PORT MAP( load => clock, datain => sig_Rknee_comp, dataout =>servo_R_knee); END structural;