Books | ALBI_Books | Fig_031

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.components.all;

entity Structm is
    port (
        bit0         : in std_logic;
        bit1         : in std_logic;
        bor_en       : out std_logic;
        br_en        : out std_logic;
        clk          : in std_logic;
        comp4_1_dout : in std_logic;
        ctr_mux0     : out std_logic;
        ctr_mux1_0   : out std_logic;
        ctr_mux1_1   : out std_logic;
        ctr_mux1_2   : out std_logic;
        ctr_mux2_0   : out std_logic;
        ctr_mux2_1   : out std_logic;
        ctr_mux2_2   : out std_logic;
        dma          : in std_logic;
        ext_rdwr     : in std_logic;
        idle         : out std_logic;
        inpr_en      : out std_logic;
        ir1_10       : in std_logic;
        ir1_8        : in std_logic;
        ir1_9        : in std_logic;
        ir1_en       : out std_logic;
        ir2_en       : out std_logic;
        m            : in std_logic;
        m0_rdwr      : out std_logic;
        m1_rdwr      : out std_logic;
        pc_count     : out std_logic;
        pc_en        : out std_logic;
        ralu_en      : out std_logic;
        rialu_en     : out std_logic;
        rst          : in std_logic;
        s            : in 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
    );

    signal currentState : FSMStates;

begin

    process (clk , rst)


    procedure proc_Structm is 
    begin

    bor_en <= '0';
    br_en <= '0';
    ctr_mux0 <= '0';
    ctr_mux1_0 <= '0';
    ctr_mux1_1 <= '0';
    ctr_mux1_2 <= '0';
    ctr_mux2_0 <= '0';
    ctr_mux2_1 <= '0';
    ctr_mux2_2 <= '0';
    idle <= '0';
    inpr_en <= '0';
    ir1_en <= '0';
    ir2_en <= '0';
    m0_rdwr <= '0';
    m1_rdwr <= '0';
    pc_count <= '0';
    pc_en <= '0';
    ralu_en <= '0';
    rialu_en <= '0';

    case currentState is
    when a1 =>
        if (s and dma and ext_rdwr and m) = '1' then
            m1_rdwr <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (s and dma and ext_rdwr and not m) = '1' then
            m0_rdwr <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (s and dma and not ext_rdwr and m) = '1' then
            ctr_mux2_0 <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (s and dma and not ext_rdwr and not m) = '1' then
            ctr_mux2_2 <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (s and not dma) = '1' then
            ctr_mux1_1 <= '1';
            ir1_en <= '1';
            currentState <= a2;

        else
            currentState <= a1;
            idle <= '1';

        end if;

    when a2 =>
        
            pc_count <= '1';
            currentState <= a3;

    when a3 =>
        if (bit0 and bit1) = '1' then
            inpr_en <= '1';
            currentState <= a4;

        elsif (bit0 and not bit1 and ir1_10) = '1' then
            ir2_en <= '1';
            ctr_mux1_1 <= '1';
            ctr_mux2_2 <= '1';
            currentState <= a5;

        elsif (bit0 and not bit1 and not ir1_10) = '1' then
            pc_en <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (not bit0 and ir1_10) = '1' then
            ir2_en <= '1';
            ctr_mux1_1 <= '1';
            ctr_mux2_2 <= '1';
            currentState <= a5;

        elsif (not bit0 and not ir1_10 and bit1) = '1' then
            br_en <= '1';
            currentState <= a7;

        else
            ir2_en <= '1';
            currentState <= a8;

        end if;

    when a4 =>
        
            ctr_mux1_0 <= '1';
            ctr_mux0 <= '1';
            bor_en <= '1';
            ctr_mux1_1 <= '1';
            currentState <= a1;
            idle <= '1';

    when a5 =>
        
            pc_count <= '1';
            currentState <= a6;

    when a6 =>
        if (ir1_8 and bit0) = '1' then
            ctr_mux2_1 <= '1';
            pc_en <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (ir1_8 and not bit0 and bit1) = '1' then
            br_en <= '1';
            ctr_mux2_1 <= '1';
            currentState <= a14;

        elsif (ir1_8 and not bit0 and not bit1) = '1' then
            br_en <= '1';
            ctr_mux0 <= '1';
            currentState <= a11;

        elsif (not ir1_8 and ir1_9) = '1' then
            ctr_mux2_0 <= '1';
            br_en <= '1';
            ctr_mux1_0 <= '1';
            currentState <= a12;

        elsif (not ir1_8 and not ir1_9 and comp4_1_dout and bit0) = '1' then
            ctr_mux2_0 <= '1';
            ctr_mux1_0 <= '1';
            pc_en <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (not ir1_8 and not ir1_9 and comp4_1_dout and not bit0) = '1' then
            ctr_mux2_0 <= '1';
            br_en <= '1';
            ctr_mux1_0 <= '1';
            currentState <= a10;

        else
            br_en <= '1';
            currentState <= a16;

        end if;

    when a7 =>
        if (ir1_9) = '1' then
            ctr_mux2_0 <= '1';
            ir2_en <= '1';
            ctr_mux2_1 <= '1';
            currentState <= a9;

        else
            ctr_mux0 <= '1';
            ctr_mux1_2 <= '1';
            bor_en <= '1';
            currentState <= a1;
            idle <= '1';

        end if;

    when a8 =>
        if (ir1_9) = '1' then
            ctr_mux2_0 <= '1';
            br_en <= '1';
            ctr_mux1_0 <= '1';
            currentState <= a10;

        else
            br_en <= '1';
            ctr_mux0 <= '1';
            currentState <= a11;

        end if;

    when a9 =>
        if (bit1) = '1' then
            ctr_mux2_0 <= '1';
            br_en <= '1';
            ctr_mux1_0 <= '1';
            currentState <= a10;

        else
            br_en <= '1';
            ctr_mux0 <= '1';
            currentState <= a11;

        end if;

    when a10 =>
        if (bit1) = '1' then
            ctr_mux0 <= '1';
            ctr_mux1_2 <= '1';
            bor_en <= '1';
            currentState <= a1;
            idle <= '1';

        else
            ctr_mux2_0 <= '1';
            ir2_en <= '1';
            ctr_mux2_1 <= '1';
            currentState <= a9;

        end if;

    when a11 =>
        
            ralu_en <= '1';
            currentState <= a13;

    when a12 =>
        
            ctr_mux2_0 <= '1';
            ir2_en <= '1';
            ctr_mux2_1 <= '1';
            currentState <= a15;

    when a13 =>
        
            ctr_mux1_0 <= '1';
            ctr_mux0 <= '1';
            ctr_mux1_2 <= '1';
            bor_en <= '1';
            currentState <= a1;
            idle <= '1';

    when a14 =>
        
            ctr_mux0 <= '1';
            ctr_mux1_2 <= '1';
            bor_en <= '1';
            currentState <= a1;
            idle <= '1';

    when a15 =>
        if (comp4_1_dout and bit0) = '1' then
            ctr_mux2_0 <= '1';
            ctr_mux1_0 <= '1';
            pc_en <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (comp4_1_dout and not bit0) = '1' then
            ctr_mux2_0 <= '1';
            br_en <= '1';
            ctr_mux1_0 <= '1';
            currentState <= a10;

        else
            br_en <= '1';
            currentState <= a16;

        end if;

    when a16 =>
        
            rialu_en <= '1';
            currentState <= a17;

    when a17 =>
        
            ctr_mux2_0 <= '1';
            ir2_en <= '1';
            ctr_mux2_2 <= '1';
            currentState <= a18;

    when a18 =>
        if (bit0) = '1' then
            ctr_mux2_0 <= '1';
            ctr_mux1_0 <= '1';
            pc_en <= '1';
            currentState <= a1;
            idle <= '1';

        else
            ctr_mux2_0 <= '1';
            br_en <= '1';
            ctr_mux1_0 <= '1';
            currentState <= a10;

        end if;

    end case;
    end proc_Structm;

    begin
        if (rst = '1') then
            bor_en <= '0';
            br_en <= '0';
            ctr_mux0 <= '0';
            ctr_mux1_0 <= '0';
            ctr_mux1_1 <= '0';
            ctr_mux1_2 <= '0';
            ctr_mux2_0 <= '0';
            ctr_mux2_1 <= '0';
            ctr_mux2_2 <= '0';
            idle <= '0';
            inpr_en <= '0';
            ir1_en <= '0';
            ir2_en <= '0';
            m0_rdwr <= '0';
            m1_rdwr <= '0';
            pc_count <= '0';
            pc_en <= '0';
            ralu_en <= '0';
            rialu_en <= '0';

            currentState <= a1;
            idle <= '1';

        elsif (clk'event and clk = '0') then
            idle <= '0';
            proc_Structm;
        end if;
    end process;

end ARC_Structm;

Synthezza logo White 2020.png

PRODUCTS

Synthagate—HLS & RTL

     Synthagate Overview

     What makes Synthagate different

     Examples of High Level and RTL Design

          Synthesis From GUI

          Synthesis From SystemC

          Synthesis From VHDL

Logic Synthesizer

     Overview
     Logic Synthesizer Experiments

     Benchmarks

DESIGN 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

BOOKS

  

DEMO SERIES

  

COMPANY

     About Us

     Contact US

  

Copyright © 2013 - 2020 Synthezza Corporation. All Rights Reserved

Synthezza logo navy.png