Books | Four_Books | Fig_64

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;
        blink_reset   : out std_logic;
        blink_set     : out std_logic;
        clk           : in std_logic;
        comp8_1_dout  : in std_logic;
        comp8_2_dout  : in std_logic;
        comp8_3_dout  : in std_logic;
        comp8_4_dout  : in std_logic;
        ctr_mux0_0    : out std_logic;
        ctr_mux0_1    : out std_logic;
        ctr_mux1_0    : out std_logic;
        ctr_mux1_1    : out std_logic;
        ctr_mux1_2    : out std_logic;
        ctr_mux1_3    : out std_logic;
        ctr_mux2_0    : out std_logic;
        ctr_mux2_1    : out std_logic;
        ctr_mux2_2    : out std_logic;
        ctr_mux3      : out std_logic;
        guess_en      : out std_logic;
        hi_button     : in std_logic;
        high_en       : out std_logic;
        idle          : out std_logic;
        largest_en    : out std_logic;
        lo_button     : in std_logic;
        low_en        : out std_logic;
        rst           : in std_logic;
        s             : in std_logic;
        sum_en        : out std_logic;
        temp_en       : out std_logic;
        tempreg8_1_en : out std_logic;
        x_en          : out std_logic;
        y_en          : 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
    );

    signal currentState : FSMStates;

begin

    process (clk , rst)


    procedure proc_Structm is 
    begin

    blink_reset <= '0';
    blink_set <= '0';
    ctr_mux0_0 <= '0';
    ctr_mux0_1 <= '0';
    ctr_mux1_0 <= '0';
    ctr_mux1_1 <= '0';
    ctr_mux1_2 <= '0';
    ctr_mux1_3 <= '0';
    ctr_mux2_0 <= '0';
    ctr_mux2_1 <= '0';
    ctr_mux2_2 <= '0';
    ctr_mux3 <= '0';
    guess_en <= '0';
    high_en <= '0';
    idle <= '0';
    largest_en <= '0';
    low_en <= '0';
    sum_en <= '0';
    temp_en <= '0';
    tempreg8_1_en <= '0';
    x_en <= '0';
    y_en <= '0';

    case currentState is
    when a1 =>
        if (s and bit0 and bit1) = '1' then
            ctr_mux1_0 <= '1';
            ctr_mux1_1 <= '1';
            sum_en <= '1';
            currentState <= a2;

        elsif (s and bit0 and not bit1) = '1' then
            ctr_mux1_0 <= '1';
            ctr_mux1_1 <= '1';
            largest_en <= '1';
            currentState <= a3;

        elsif (s and not bit0 and bit1) = '1' then
            ctr_mux2_2 <= '1';
            ctr_mux1_3 <= '1';
            ctr_mux2_0 <= '1';
            blink_reset <= '1';
            ctr_mux1_1 <= '1';
            high_en <= '1';
            low_en <= '1';
            currentState <= a4;

        elsif (s and not bit0 and not bit1) = '1' then
            x_en <= '1';
            y_en <= '1';
            ctr_mux1_3 <= '1';
            ctr_mux2_1 <= '1';
            ctr_mux2_0 <= '1';
            currentState <= a5;

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

        end if;

    when a2 =>
        
            x_en <= '1';
            ctr_mux1_3 <= '1';
            currentState <= a6;

    when a3 =>
        
            ctr_mux1_0 <= '1';
            x_en <= '1';
            ctr_mux1_3 <= '1';
            currentState <= a7;

    when a4 =>
        
            ctr_mux1_2 <= '1';
            ctr_mux2_1 <= '1';
            guess_en <= '1';
            ctr_mux1_1 <= '1';
            currentState <= a8;

    when a5 =>
        if (comp8_4_dout) = '1' then
            ctr_mux1_0 <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (not comp8_4_dout and comp8_3_dout) = '1' then
            ctr_mux1_0 <= '1';
            ctr_mux2_2 <= '1';
            ctr_mux2_1 <= '1';
            ctr_mux2_0 <= '1';
            ctr_mux0_0 <= '1';
            tempreg8_1_en <= '1';
            currentState <= a9;

        else
            ctr_mux1_0 <= '1';
            ctr_mux1_2 <= '1';
            ctr_mux1_1 <= '1';
            ctr_mux0_0 <= '1';
            tempreg8_1_en <= '1';
            currentState <= a10;

        end if;

    when a6 =>
        if (comp8_2_dout) = '1' then
            ctr_mux1_1 <= '1';
            currentState <= a1;
            idle <= '1';

        else
            ctr_mux1_1 <= '1';
            tempreg8_1_en <= '1';
            currentState <= a11;

        end if;

    when a7 =>
        
            ctr_mux1_0 <= '1';
            ctr_mux1_2 <= '1';
            temp_en <= '1';
            currentState <= a12;

    when a8 =>
        
            ctr_mux2_2 <= '1';
            ctr_mux2_1 <= '1';
            tempreg8_1_en <= '1';
            ctr_mux0_1 <= '1';
            currentState <= a13;

    when a9 =>
        
            ctr_mux1_2 <= '1';
            x_en <= '1';
            currentState <= a5;

    when a10 =>
        
            ctr_mux2_2 <= '1';
            y_en <= '1';
            currentState <= a5;

    when a11 =>
        
            ctr_mux1_2 <= '1';
            sum_en <= '1';
            currentState <= a2;

    when a12 =>
        if (comp8_2_dout) = '1' then
            currentState <= a1;
            idle <= '1';

        elsif (not comp8_2_dout and comp8_1_dout) = '1' then
            ctr_mux1_0 <= '1';
            largest_en <= '1';
            currentState <= a3;

        else
            ctr_mux1_0 <= '1';
            x_en <= '1';
            ctr_mux1_3 <= '1';
            currentState <= a7;

        end if;

    when a13 =>
        
            ctr_mux3 <= '1';
            guess_en <= '1';
            currentState <= a14;

    when a14 =>
        if (hi_button and lo_button) = '1' then
            blink_set <= '1';
            currentState <= a1;
            idle <= '1';

        elsif (hi_button and not lo_button) = '1' then
            high_en <= '1';
            currentState <= a4;

        elsif (not hi_button and lo_button) = '1' then
            ctr_mux2_0 <= '1';
            low_en <= '1';
            currentState <= a4;

        else
            currentState <= a14;

        end if;

    end case;
    end proc_Structm;

    begin
        if (rst = '1') then
            blink_reset <= '0';
            blink_set <= '0';
            ctr_mux0_0 <= '0';
            ctr_mux0_1 <= '0';
            ctr_mux1_0 <= '0';
            ctr_mux1_1 <= '0';
            ctr_mux1_2 <= '0';
            ctr_mux1_3 <= '0';
            ctr_mux2_0 <= '0';
            ctr_mux2_1 <= '0';
            ctr_mux2_2 <= '0';
            ctr_mux3 <= '0';
            guess_en <= '0';
            high_en <= '0';
            idle <= '0';
            largest_en <= '0';
            low_en <= '0';
            sum_en <= '0';
            temp_en <= '0';
            tempreg8_1_en <= '0';
            x_en <= '0';
            y_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