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;

Synthezza High Level and RTL Design

PRODUCTS

Synthagate—HLS & RTL

     Synthagate Overview

     What makes Synthagate different

Logic Synthesizer

     Overview

HLS & RTL TECHNOLOGY

Algorithmic State machines in HLS

     What is Algorithmic State Machine?

     Time in ASM

     ASM in GUI, System C and VHDL

     ASM Transformations

          Asm Combining

          Asm Minimization

          SubAsm Inclusion

High Level Synthesis

     How Does Synthagate Work

     ASM Creator Short Manual

Synthesis at Register Transfer Level (RTL)

     Data Path

     Control Unit

     Top Design

ASM Creator Manual

BENCHMARKS

Benchmarks of High Level Synthesis

Benchmarks of FSMs and Logic Circuits

     FSM Benchmarks

     Logic Circuits

DESIGN EXAMPLES

 

105 Designs at High Level and RTL

Logic Designs

     Logic Circuits

     FSMs

DEMO SERIES

  

COMPANY

     About Us

     Contact US

  

Get in touch with us at support@synthezza.com

  • YouTube
  • White Amazon Icon

Copyright © 2013 - 2020 Synthezza Corporation. All Rights Reserved

Synthezza High Level and RTL Design Logo