Books | Robot_Books | Fig_16
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.components.all;
entity Structm is
port (
anglecnt_count : out std_logic;
anglecnt_reset : out std_logic;
anglediff_en : out std_logic;
clk : in std_logic;
comp12_4_dout : in std_logic;
comp12_9_dout : in std_logic;
comp16_7_dout : in std_logic;
comp16_8_dout : in std_logic;
comp20_1_dout : in std_logic;
comp20_2_dout : in std_logic;
comp20_3_dout : in std_logic;
comp20_5_dout : in std_logic;
comp20_6_dout : in std_logic;
compecho : in std_logic;
comprg1_en : out std_logic;
comprg2_en : out std_logic;
comptrig_cnt_count : out std_logic;
comptrig_cnt_reset : out std_logic;
comptrig_reset : out std_logic;
comptrig_set : out std_logic;
ctr_mux0_0 : out std_logic;
ctr_mux0_1 : out std_logic;
distrg_en : out std_logic;
ds_cnt_count : out std_logic;
ds_cnt_reset : out std_logic;
ds_echo : in std_logic;
dstrig_cnt_count : out std_logic;
dstrig_cnt_reset : out std_logic;
dstrig_reset : out std_logic;
dstrig_set : out std_logic;
idle : out std_logic;
lengctrl1_reset : out std_logic;
lengctrl1_set : out std_logic;
lengctrl2_reset : out std_logic;
lengctrl2_set : out std_logic;
pwm_cnt_count : out std_logic;
pwm_cnt_reset : out std_logic;
pwm_reset : out std_logic;
pwm_set : out std_logic;
rengctrl1_reset : out std_logic;
rengctrl1_set : out std_logic;
rengctrl2_reset : out std_logic;
rengctrl2_set : out std_logic;
rst : in std_logic;
speedrg_en : out std_logic;
start : in std_logic;
stopflag : in std_logic;
stopflag_reset : out std_logic;
stopflag_set : out std_logic
);
end Structm;
architecture ARC_Structm of Structm is
type FSMStates is (
a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
a31, a32, a33, a34
);
signal currentState : FSMStates;
begin
process (clk , rst)
procedure proc_Structm is
begin
anglecnt_count <= '0';
anglecnt_reset <= '0';
anglediff_en <= '0';
comprg1_en <= '0';
comprg2_en <= '0';
comptrig_cnt_count <= '0';
comptrig_cnt_reset <= '0';
comptrig_reset <= '0';
comptrig_set <= '0';
ctr_mux0_0 <= '0';
ctr_mux0_1 <= '0';
distrg_en <= '0';
ds_cnt_count <= '0';
ds_cnt_reset <= '0';
dstrig_cnt_count <= '0';
dstrig_cnt_reset <= '0';
dstrig_reset <= '0';
dstrig_set <= '0';
idle <= '0';
lengctrl1_reset <= '0';
lengctrl1_set <= '0';
lengctrl2_reset <= '0';
lengctrl2_set <= '0';
pwm_cnt_count <= '0';
pwm_cnt_reset <= '0';
pwm_reset <= '0';
pwm_set <= '0';
rengctrl1_reset <= '0';
rengctrl1_set <= '0';
rengctrl2_reset <= '0';
rengctrl2_set <= '0';
speedrg_en <= '0';
stopflag_reset <= '0';
stopflag_set <= '0';
case currentState is
when a1 =>
if (start) = '1' then
ds_cnt_reset <= '1';
dstrig_set <= '1';
dstrig_cnt_reset <= '1';
currentState <= a2;
else
currentState <= a1;
idle <= '1';
end if;
when a2 =>
dstrig_cnt_count <= '1';
currentState <= a3;
when a3 =>
if (comp12_4_dout) = '1' then
dstrig_reset <= '1';
currentState <= a4;
else
dstrig_cnt_count <= '1';
currentState <= a3;
end if;
when a4 =>
if (ds_echo) = '1' then
ds_cnt_count <= '1';
currentState <= a5;
else
currentState <= a4;
end if;
when a5 =>
if (ds_echo) = '1' then
ds_cnt_count <= '1';
currentState <= a5;
else
distrg_en <= '1';
currentState <= a6;
end if;
when a6 =>
if (comp20_6_dout) = '1' then
ds_cnt_reset <= '1';
dstrig_set <= '1';
dstrig_cnt_reset <= '1';
currentState <= a7;
else
anglecnt_reset <= '1';
comptrig_set <= '1';
comptrig_cnt_reset <= '1';
currentState <= a8;
end if;
when a7 =>
dstrig_cnt_count <= '1';
currentState <= a9;
when a8 =>
comptrig_cnt_count <= '1';
currentState <= a10;
when a9 =>
if (comp12_4_dout) = '1' then
dstrig_reset <= '1';
currentState <= a11;
else
dstrig_cnt_count <= '1';
currentState <= a9;
end if;
when a10 =>
if (comp12_9_dout) = '1' then
comptrig_reset <= '1';
currentState <= a12;
else
comptrig_cnt_count <= '1';
currentState <= a10;
end if;
when a11 =>
if (ds_echo) = '1' then
ds_cnt_count <= '1';
currentState <= a13;
else
currentState <= a11;
end if;
when a12 =>
if (compecho) = '1' then
anglecnt_count <= '1';
currentState <= a14;
else
currentState <= a12;
end if;
when a13 =>
if (ds_echo) = '1' then
ds_cnt_count <= '1';
currentState <= a13;
else
distrg_en <= '1';
currentState <= a15;
end if;
when a14 =>
if (compecho) = '1' then
anglecnt_count <= '1';
currentState <= a14;
else
comprg1_en <= '1';
currentState <= a16;
end if;
when a15 =>
stopflag_reset <= '1';
currentState <= a17;
when a16 =>
lengctrl2_set <= '1';
rengctrl1_set <= '1';
lengctrl1_reset <= '1';
rengctrl2_reset <= '1';
currentState <= a18;
when a17 =>
if (comp20_3_dout) = '1' then
speedrg_en <= '1';
ctr_mux0_1 <= '1';
currentState <= a20;
elsif (not comp20_3_dout and comp20_2_dout) = '1' then
speedrg_en <= '1';
ctr_mux0_0 <= '1';
currentState <= a20;
elsif (not comp20_3_dout and not comp20_2_dout and comp20_1_dout) = '1' then
speedrg_en <= '1';
currentState <= a20;
else
stopflag_set <= '1';
currentState <= a23;
end if;
when a18 =>
speedrg_en <= '1';
currentState <= a19;
when a19 =>
pwm_set <= '1';
pwm_cnt_reset <= '1';
currentState <= a21;
when a20 =>
pwm_set <= '1';
pwm_cnt_reset <= '1';
currentState <= a22;
when a21 =>
if (comp16_8_dout) = '1' then
pwm_cnt_count <= '1';
currentState <= a24;
else
pwm_reset <= '1';
currentState <= a25;
end if;
when a22 =>
if (comp16_8_dout) = '1' then
pwm_cnt_count <= '1';
currentState <= a26;
else
pwm_reset <= '1';
currentState <= a27;
end if;
when a23 =>
if (stopflag) = '1' then
lengctrl1_set <= '1';
lengctrl2_set <= '1';
rengctrl1_set <= '1';
rengctrl2_set <= '1';
currentState <= a1;
idle <= '1';
else
ds_cnt_reset <= '1';
dstrig_set <= '1';
dstrig_cnt_reset <= '1';
currentState <= a7;
end if;
when a24 =>
if (comp16_7_dout and comp16_8_dout) = '1' then
pwm_cnt_count <= '1';
currentState <= a24;
elsif (comp16_7_dout and not comp16_8_dout) = '1' then
pwm_reset <= '1';
currentState <= a25;
else
anglecnt_reset <= '1';
comptrig_set <= '1';
comptrig_cnt_reset <= '1';
currentState <= a28;
end if;
when a25 =>
pwm_cnt_count <= '1';
currentState <= a24;
when a26 =>
if (comp16_7_dout and comp16_8_dout) = '1' then
pwm_cnt_count <= '1';
currentState <= a26;
elsif (comp16_7_dout and not comp16_8_dout) = '1' then
pwm_reset <= '1';
currentState <= a27;
elsif (not comp16_7_dout and stopflag) = '1' then
lengctrl1_set <= '1';
lengctrl2_set <= '1';
rengctrl1_set <= '1';
rengctrl2_set <= '1';
currentState <= a1;
idle <= '1';
else
ds_cnt_reset <= '1';
dstrig_set <= '1';
dstrig_cnt_reset <= '1';
currentState <= a7;
end if;
when a27 =>
pwm_cnt_count <= '1';
currentState <= a26;
when a28 =>
comptrig_cnt_count <= '1';
currentState <= a29;
when a29 =>
if (comp12_9_dout) = '1' then
comptrig_reset <= '1';
currentState <= a30;
else
comptrig_cnt_count <= '1';
currentState <= a29;
end if;
when a30 =>
if (compecho) = '1' then
anglecnt_count <= '1';
currentState <= a31;
else
currentState <= a30;
end if;
when a31 =>
if (compecho) = '1' then
anglecnt_count <= '1';
currentState <= a31;
else
comprg2_en <= '1';
currentState <= a32;
end if;
when a32 =>
anglediff_en <= '1';
currentState <= a33;
when a33 =>
if (comp20_5_dout) = '1' then
lengctrl1_reset <= '1';
lengctrl2_reset <= '1';
rengctrl1_reset <= '1';
rengctrl2_reset <= '1';
currentState <= a34;
else
lengctrl2_set <= '1';
rengctrl1_set <= '1';
lengctrl1_reset <= '1';
rengctrl2_reset <= '1';
currentState <= a18;
end if;
when a34 =>
ds_cnt_reset <= '1';
dstrig_set <= '1';
dstrig_cnt_reset <= '1';
currentState <= a2;
end case;
end proc_Structm;
begin
if (rst = '1') then
anglecnt_count <= '0';
anglecnt_reset <= '0';
anglediff_en <= '0';
comprg1_en <= '0';
comprg2_en <= '0';
comptrig_cnt_count <= '0';
comptrig_cnt_reset <= '0';
comptrig_reset <= '0';
comptrig_set <= '0';
ctr_mux0_0 <= '0';
ctr_mux0_1 <= '0';
distrg_en <= '0';
ds_cnt_count <= '0';
ds_cnt_reset <= '0';
dstrig_cnt_count <= '0';
dstrig_cnt_reset <= '0';
dstrig_reset <= '0';
dstrig_set <= '0';
idle <= '0';
lengctrl1_reset <= '0';
lengctrl1_set <= '0';
lengctrl2_reset <= '0';
lengctrl2_set <= '0';
pwm_cnt_count <= '0';
pwm_cnt_reset <= '0';
pwm_reset <= '0';
pwm_set <= '0';
rengctrl1_reset <= '0';
rengctrl1_set <= '0';
rengctrl2_reset <= '0';
rengctrl2_set <= '0';
speedrg_en <= '0';
stopflag_reset <= '0';
stopflag_set <= '0';
currentState <= a1;
idle <= '1';
elsif (clk'event and clk = '0') then
idle <= '0';
proc_Structm;
end if;
end process;
end ARC_Structm;