entity fsm_tb is
end entity fsm_tb;
architecture arc_fsm_tb of fsm_tb is
--====================== fsm ports ===========================================
signal System_Clk_50MHz : std_logic:= '0'; --
signal System_N_Reset : std_logic:= '0'; --
signal FSM_enable_led : std_logic:= '0'; --
signal FSM_init_led : std_logic:= '0'; --
signal FSM_type_led : std_logic:= '0'; --
signal FSM_stop_led : std_logic:= '0'; --
--====================== communication ports ===========================================
signal UART_baud_sel : std_logic_vector(2 downto 0):= (others => '0'); --
signal UART_rx : std_logic:= '0'; --
signal UART_tx : std_logic:= '0'; --
signal led_sec : std_logic:= '0'; --
signal UART_rxerr_led : std_logic:= '0'; --
signal UART_txbusy : std_logic:= '0'; --
signal UART_rx_done : std_logic:= '0'; --
signal UART_dout : std_logic_vector(7 downto 0):= (others => '0'); --
signal UART_ready_tx : std_logic:= '0'; --
--====================== motion encoder ports ===========================================
signal M_E_done : std_logic:= '0'; --
signal M_E_DataIn : std_logic:= '0';--
--====================== steer encoder ports ===========================================
signal S_E_done : std_logic_vector (2 downto 0):= (others => '0'); --
signal S_E_DataIn : std_logic_vector (1 downto 0):= (others => '0'); --
--====================== motion pwm ports ===========================================
signal M_P_Pwm : std_logic:= '0'; --
--====================== steer pwm ports ===========================================
signal S_P_Pwm : std_logic:= '0';--
component Steer_Pwm is
generic (
DC: time:=17 ms; -- changeable
clock_period: time:=20 ns; -- changeable
max_pulse: time:= 1 ms; -- changeable
min_pulse: time:= 2 ms; -- changeable
neutral_pulse: time:= 1.5 ms -- changeable
);
port (
Rst : In std_logic; -- joined Rst to the FSM system
Clk : In std_logic; -- joined clock to the FSM system
Enable : in std_logic; -- Enable Steer motor
Pwm : Out std_logic; -- PWM pulse
pulse_length : in integer
);
end component Steer_Pwm;
component Motion_Pwm is
generic (
DC: time:=17 ms; -- changeable
clock_period: time:=20 ns; -- changeable
max_pulse: time:= 1 ms; -- changeable
min_pulse: time:= 2 ms; -- changeable
neutral_pulse: time:= 1.5 ms -- changeable
);
port (
Rst : In std_logic;
Clk : In std_logic;
Enable : in std_logic;
Pwm : Out std_logic;
pulse_length : in integer
);
end component Motion_Pwm;
component Steer_Encoder is
port (
done: out std_logic_vector (2 downto 0);
Rst: in std_logic;
Enable: in std_logic;
Clk: in std_logic;
DataIn: in std_logic_vector (1 downto 0);
angle: in integer;
slot_number: in integer;
spare: out integer;
turns_number: out integer;
res: in integer;
spare_flag: in std_logic;
turn_flag: in std_logic;
turn_pulse: in integer
);
end component Steer_Encoder;
component Motion_Encoder is
port (
done: out std_logic;
Rst: in std_logic;
Enable: in std_logic;
Clk: in std_logic;
DataIn: in std_logic;
distance: in integer;
slot_number: in integer;
wheel_radius: in integer
);
end component Motion_Encoder;
component Communication is
generic ( ndbits : natural := 8);
port (
Clk : in std_logic;
Rst : in std_logic;
baud_sel : in std_logic_vector(2 downto 0);
rx : in std_logic;
tx : out std_logic;
led_sec : out std_logic;
rxerr_led : out std_logic;
txbusy : out std_logic;
rx_done : out std_logic;
dout : out std_logic_vector(7 downto 0);
ready_tx : in std_logic;
din : in std_logic_vector(7 downto 0)
);
end component Communication;
begin
test : entity work.fsm
generic map (
DC => 17 ms,
clock_period => 20 ns,
max_pulse => 1 ms,
min_pulse => 2 ms,
neutral_pulse => 1.5 ms
)
port map (
--====================== fsm ports ===========================================
System_Clk_50MHz => System_Clk_50MHz,
System_N_Reset => System_N_Reset,
FSM_enable_led => FSM_enable_led,
FSM_init_led =>FSM_init_led,
FSM_type_led => FSM_type_led,
FSM_distance_value_led => FSM_distance_value_led,
FSM_stop_led =>FSM_stop_led,
FSM_angle_value_led => FSM_angle_value_led,
--====================== communication ports ===========================================
UART_baud_sel =>UART_baud_sel,
UART_rx => UART_rx,
UART_tx => UART_tx,
led_sec=> led_sec,
UART_rxerr_led => UART_rxerr_led,
UART_txbusy => UART_txbusy,
UART_rx_done=> UART_rx_done,
UART_dout=> UART_dout,
UART_ready_tx=> UART_ready_tx,
--====================== motion encoder ports ===========================================
M_E_done=> M_E_done,
M_E_DataIn=> M_E_DataIn,
--====================== steer encoder ports ===========================================
S_E_done => S_E_done,
S_E_DataIn => S_E_DataIn,
--====================== motion pwm ports ===========================================
M_P_Pwm=> M_P_Pwm,
--====================== steer pwm ports ===========================================
S_P_Pwm => S_P_Pwm
);
steer_pwm_comp: Steer_Pwm generic map (
DC => 17 ms,
clock_period => 20 ms,
max_pulse => 1 ms,
min_pulse => 2 ms,
neutral_pulse => 1.5 ms
)
port map (
Rst => System_N_Reset,
Clk => System_Clk_50MHz,
Enable => S_P_En,
Pwm => S_P_Pwm,
pulse_length => S_FSM_S_P_pulse_length
);
motion_pwm_comp:Motion_Pwm generic map (
DC => 17 ms,
clock_period => 20 ms,
max_pulse => 1 ms,
min_pulse => 2 ms,
neutral_pulse => 1.5 ms
)
port map (
Rst => System_N_Reset,
Clk => System_Clk_50MHz,
Enable => M_P_En,
Pwm => M_P_Pwm,
pulse_length => S_FSM_M_P_pulse_length
);
Uart_comp:communication generic map (
ndbits => 8
)
port map (
Clk => System_Clk_50MHz,
Rst => System_N_Reset,
baud_sel => UART_baud_sel,
rx => UART_rx,
tx => UART_tx,
led_sec => led_sec,
rxerr_led => UART_rxerr_led,
txbusy => UART_txbusy,
rx_done => UART_rx_done,
dout => UART_dout,
ready_tx => UART_ready_tx,
din => S_FSM_dout_reg
);
M_Encoder_comp:Motion_Encoder
port map (
done => S_M_E_done,
Rst => System_N_Reset,
Enable => M_E_En,
Clk => System_Clk_50MHz,
DataIn => M_E_DataIn,
distance => S_FSM_distance,
slot_number => S_FSM_slot_number,
wheel_radius => S_FSM_Wheel_radius
);
S_Encoder_comp:Steer_Encoder
port map (
done => S_S_E_done,
Rst => System_N_Reset,
Enable => S_E_En,
Clk => System_Clk_50MHz,
DataIn => S_E_DataIn,
angle => S_FSM_angle,
slot_number => S_FSM_slot_number,
spare => S_FSM_spare_angle,
turns_number => S_FSM_turns_number,
res => S_FSM_res,
spare_flag => S_FSM_spare_flag,
turn_pulse => S_FSM_turn_pulse,
turn_flag => S_FSM_turn_flag
);
System_Clk_50MHz <= not System_Clk_50MHz after 10 ns;
process
begin
wait until rising_edge(System_Clk_50MHz);
System_N_Reset <= '0';
wait until rising_edge(System_Clk_50MHz);
System_N_Reset <= '1';
wait until rising_edge(System_Clk_50MHz);
end process;
end architecture arc_fsm;