Books | ALBI_Books | Fig_32

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

package MY_PACKAGE is
    procedure wave_gen (signal clk: out std_logic);
    procedure exec_inst(signal idle : in std_logic; signal clk : out std_logic);

    procedure alub(
 
        alu_in1     : in  std_logic_vector(15 downto 0); -- operand 1
        alu_in2     : in  std_logic_vector(15 downto 0); -- operand 2
        alu_ctr     : in  std_logic_vector(4 downto 0);  -- instruction alu_ctr
        alu            : out std_logic_vector(15 downto 0)  -- alu out
        
    );
    procedure ialub(
 
        ialu_in1   : in  std_logic_vector(15 downto 0);  -- operand 1
        ialu_in2   : in  std_logic_vector(15 downto 0);  -- operand 2
        ialu       : out std_logic_vector(15 downto 0)   -- output  
        
    );
end MY_PACKAGE;

package body MY_PACKAGE is
    procedure wave_gen (signal clk: out std_logic) is
    begin
        clk    <= '0';
            wait for 10 ns;
        clk    <= '1';
        wait for 10 ns;
    end wave_gen;

    procedure exec_inst(signal idle : in std_logic; signal clk : out std_logic) is
    begin
        wave_gen(clk);
        while idle = '0' loop
            wave_gen(clk);
        end loop;
    end exec_inst;

    procedure alub(
 
        alu_in1     : in  std_logic_vector(15 downto 0); -- operand 1
        alu_in2     : in  std_logic_vector(15 downto 0); -- operand 2
        alu_ctr     : in  std_logic_vector(4 downto 0);  -- instruction alu_ctr
        alu            : out std_logic_vector(15 downto 0)  -- alu out
        
        ) is

        constant add         : std_logic_vector (4 downto 0) := "00001";
        constant log_and    : std_logic_vector (4 downto 0) := "00010";
        constant sub         : std_logic_vector (4 downto 0) := "00011";
        constant shl         : std_logic_vector (4 downto 0) := "00100";
        constant shr         : std_logic_vector (4 downto 0) := "00101";
        constant inc         : std_logic_vector (4 downto 0) := "10010";
        constant com           : std_logic_vector (4 downto 0) := "10100";

        variable valu_in1, valu_in2 : signed (15 downto 0);        
        variable vout                 : signed (15 downto 0);            
        
    
    begin
-- process     

             valu_in1 := signed (alu_in1);
             valu_in2 := signed (alu_in2);
             vout := x"0000"; 
     
     case alu_ctr is      

         when add => -------------- add signed-----------------

             vout := valu_in1 + valu_in2;                             
             
         when sub => ------------ sub signed---------

             vout := valu_in1 - valu_in2;
                                
         when log_and =>-------------- logic and ------
         
             vout := valu_in1 and valu_in2;
             
         when shl =>-------------- shift left ---------
         
          vout := valu_in2 (14 downto 0) & '0';
            
         when shr =>  -------------- shift right --------
             
          vout := '0' & valu_in2 (15 downto 1);
            
         when inc =>  ------------ increment -------------
            
         vout := valu_in1 + 1;                        
         
          when com =>  ----------- complement -------------

             vout := not valu_in1;
             
        when others => null;  ------- others for case          

     end case;
              
     -- assign alu_out signals       
     
     alu := std_logic_vector(vout);
     
     
    end alub;

    procedure ialub(
 
        ialu_in1   : in  std_logic_vector(15 downto 0);  -- operand 1
        ialu_in2   : in  std_logic_vector(15 downto 0);  -- operand 2
        ialu       : out std_logic_vector(15 downto 0)   -- output  
        
        ) is

        
    begin
ialu := std_logic_vector(unsigned(ialu_in1) + unsigned(ialu_in2));
    
    end ialub;

end MY_PACKAGE;

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