Books | Four_Books | Fig_56

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

entity Funcmi is
    port (
        bit0         : in std_logic;
        bit1         : in std_logic;
        blink        : out std_logic;
        clk          : in std_logic;
        data_in      : in std_logic_vector(7 downto 0);
        data_in1     : in std_logic_vector(7 downto 0);
        data_in2     : in std_logic_vector(7 downto 0);
        data_out     : out std_logic_vector(7 downto 0);
        hi_button    : in std_logic;
        idle         : out std_logic;
        lo_button    : in std_logic;
        rst          : in std_logic;
        s            : in std_logic
    );
end Funcmi;

architecture ARC_Funcmi of Funcmi is

    type FSMStates is (
        a1, a2, a3, a4, a5, a6, a7, a8, a9, a10
    );

    signal currentState : FSMStates;
    signal guess : std_logic_vector(7 downto 0);
    signal high : std_logic_vector(7 downto 0);
    signal largest : std_logic_vector(7 downto 0);
    signal low : std_logic_vector(7 downto 0);
    signal sum : std_logic_vector(7 downto 0);
    signal temp : std_logic_vector(7 downto 0);
    signal x : std_logic_vector(7 downto 0);
    signal y : std_logic_vector(7 downto 0);

begin

    process (clk , rst)


    procedure proc_Funcmi is 
    begin


    case currentState is
    when a1 =>
        if (s and bit0 and bit1) = '1' then
            sum <= x"00";
            currentState <= a2;

        elsif (s and bit0 and not bit1) = '1' then
            largest <= x"00";
            currentState <= a3;

        elsif (s and not bit0 and bit1) = '1' then
            low <= x"00";
            high <= x"64";
            blink <= '0';
            currentState <= a4;

        elsif (s and not bit0 and not bit1) = '1' then
            x <= data_in1;
            y <= data_in2;
            currentState <= a5;

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

        end if;

    when a2 =>
        
            x <= data_in1;
            currentState <= a6;

    when a3 =>
        
            x <= data_in;
            currentState <= a7;

    when a4 =>
        
            guess <= std_logic_vector(unsigned(low) + unsigned(high));
            currentState <= a8;

    when a5 =>
        if (x = y) then
            data_out <= x;
            currentState <= a1;
            idle <= '1';

        elsif (not (x = y) and x > y) then
            x <= std_logic_vector(unsigned(x) - unsigned(y));
            currentState <= a5;

        else
            y <= std_logic_vector(unsigned(y) - unsigned(x));
            currentState <= a5;

        end if;

    when a6 =>
        if (x = x"00") then
            data_out <= sum;
            currentState <= a1;
            idle <= '1';

        else
            sum <= std_logic_vector(unsigned(sum) + unsigned(x));
            currentState <= a2;

        end if;

    when a7 =>
        
            data_out <= largest;
            temp <= largest;
            currentState <= a9;

    when a8 =>
        
            guess <= std_logic_vector(unsigned(guess) srl 1);
            currentState <= a10;

    when a9 =>
        if (x = x"00") then
            currentState <= a1;
            idle <= '1';

        elsif (not (x = x"00") and x > temp) then
            largest <= x;
            currentState <= a3;

        else
            x <= data_in;
            currentState <= a7;

        end if;

    when a10 =>
        if (hi_button and lo_button) = '1' then
            blink <= '1';
            data_out <= guess;
            currentState <= a1;
            idle <= '1';

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

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

        else
            currentState <= a10;

        end if;

    end case;
    end proc_Funcmi;

    begin
        if (rst = '1') then
            blink <= '0';
            data_out <= (others => '0');
            guess <= (others => '0');
            high <= (others => '0');
            idle <= '0';
            largest <= (others => '0');
            low <= (others => '0');
            sum <= (others => '0');
            temp <= (others => '0');
            x <= (others => '0');
            y <= (others => '0');

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

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

end ARC_Funcmi;
 

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