dlx/bv_arithmetic.vhdl

    1 --------------------------------------------------------------------------
    2 --
    3 --  Copyright (C) 1993, Peter J. Ashenden
    4 --  Mail:	Dept. Computer Science
    5 --		University of Adelaide, SA 5005, Australia
    6 --  e-mail:	petera@cs.adelaide.edu.au
    7 --
    8 --  This program is free software; you can redistribute it and/or modify
    9 --  it under the terms of the GNU General Public License as published by
   10 --  the Free Software Foundation; either version 1, or (at your option)
   11 --  any later version.
   12 --
   13 --  This program is distributed in the hope that it will be useful,
   14 --  but WITHOUT ANY WARRANTY; without even the implied warranty of
   15 --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16 --  GNU General Public License for more details.
   17 --
   18 --  You should have received a copy of the GNU General Public License
   19 --  along with this program; if not, write to the Free Software
   20 --  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   21 --
   22 --------------------------------------------------------------------------
   23 --
   24 --  $RCSfile: bv_arithmetic.vhdl,v $  $Revision: 1.1 $  $Date: 2000/05/08 14:36:47 $
   25 --
   26 --------------------------------------------------------------------------
   27 --
   28 --  Bit vector arithmetic package specification.
   29 --  
   30 --  Does arithmetic and logical operations on bit vectors, treating them
   31 --  as either unsigned or signed (2's complement) integers.  Leftmost bit
   32 --  is most significant or sign bit, rightmost bit is least significant
   33 --  bit.  Dyadic operations need the two arguments to be of the same
   34 --  length, however their index ranges and directions may differ.  Results
   35 --  must be of the same length as the operands.
   36 --  
   37 --------------------------------------------------------------------------
   38 
   39 use std.textio.line;
   40 
   41 package bv_arithmetic is
   42 
   43   ----------------------------------------------------------------
   44   --  Type conversions
   45   ----------------------------------------------------------------
   46 
   47   -- Convert bit vector encoded unsigned integer to natural.
   48 
   49   function bv_to_natural (bv : in bit_vector) return natural;
   50 
   51   -- Convert natural to bit vector encoded unsigned integer.
   52   -- (length is used as the size of the result.)
   53 
   54   function natural_to_bv (nat : in natural;
   55                           length : in natural) return bit_vector;
   56 
   57   -- Convert bit vector encoded signed integer to integer
   58 
   59   function bv_to_integer (bv : in bit_vector) return integer;
   60 
   61   -- Convert integer to bit vector encoded signed integer.
   62   -- (length is used as the size of the result.)
   63 
   64   function integer_to_bv (int : in integer;
   65                           length : in natural) return bit_vector;
   66 
   67   ----------------------------------------------------------------
   68   --  Arithmetic operations
   69   ----------------------------------------------------------------
   70 
   71   -- Signed addition with overflow detection
   72 
   73   procedure bv_add (bv1, bv2 : in bit_vector;
   74                     bv_result : out bit_vector;
   75                     overflow : out boolean);
   76 
   77   -- Signed addition without overflow detection
   78 
   79   function "+" (bv1, bv2 : in bit_vector) return bit_vector;
   80 
   81   -- Signed subtraction with overflow detection
   82 
   83   procedure bv_sub (bv1, bv2 : in bit_vector;
   84                     bv_result : out bit_vector;
   85                     overflow : out boolean);
   86 
   87   -- Signed subtraction without overflow detection
   88 
   89   function "-" (bv1, bv2 : in bit_vector) return bit_vector;
   90 
   91   -- Unsigned addition with overflow detection
   92 
   93   procedure bv_addu (bv1, bv2 : in bit_vector;
   94                      bv_result : out bit_vector;
   95                      overflow : out boolean);
   96 
   97   -- Unsigned addition without overflow detection
   98 
   99   procedure bv_addu (bv1, bv2 : in bit_vector;
  100                      bv_result : out bit_vector);
  101 
  102   -- Unsigned subtraction with overflow detection
  103 
  104   procedure bv_subu (bv1, bv2 : in bit_vector;
  105                      bv_result : out bit_vector;
  106                      overflow : out boolean);
  107 
  108   -- Unsigned subtraction without overflow detection
  109 
  110   procedure bv_subu (bv1, bv2 : in bit_vector;
  111                      bv_result : out bit_vector);
  112 
  113   -- Signed negation with overflow detection
  114 
  115   procedure bv_neg (bv : in bit_vector;
  116                     bv_result : out bit_vector;
  117                     overflow : out boolean);
  118 
  119   -- Signed negation without overflow detection
  120 
  121   function "-" (bv : in bit_vector) return bit_vector;
  122 
  123   -- Signed multiplication with overflow detection
  124 
  125   procedure bv_mult (bv1, bv2 : in bit_vector;
  126                      bv_result : out bit_vector;
  127                      overflow : out boolean);
  128 
  129   -- Signed multiplication without overflow detection
  130 
  131   function "*" (bv1, bv2 : in bit_vector) return bit_vector;
  132 
  133   -- Unsigned multiplication with overflow detection
  134 
  135   procedure bv_multu (bv1, bv2 : in bit_vector;
  136                       bv_result : out bit_vector;
  137                       overflow : out boolean);
  138 
  139   -- Unsigned multiplication without overflow detection
  140 
  141   procedure bv_multu (bv1, bv2 : in bit_vector;
  142                       bv_result : out bit_vector);
  143 
  144   -- Signed division with divide by zero and overflow detection
  145 
  146   procedure bv_div (bv1, bv2 : in bit_vector;
  147                     bv_result : out bit_vector;
  148                     div_by_zero : out boolean;
  149                     overflow : out boolean);
  150 
  151   -- Signed division without divide by zero and overflow detection
  152 
  153   function "/" (bv1, bv2 : in bit_vector) return bit_vector;
  154 
  155   -- Unsigned division with divide by zero detection
  156 
  157   procedure bv_divu (bv1, bv2 : in bit_vector;
  158                      bv_result : out bit_vector;
  159                      div_by_zero : out boolean);
  160 
  161   -- Unsigned division without divide by zero detection
  162 
  163   procedure bv_divu (bv1, bv2 : in bit_vector;
  164                      bv_result : out bit_vector);
  165 
  166   ----------------------------------------------------------------
  167   --  Logical operators
  168   --  (Provided for VHDL-87, built in for VHDL-93)
  169   ----------------------------------------------------------------
  170 
  171   -- Shift left logical (fill with '0' bits)
  172 
  173   function bv_sll (bv : in bit_vector;
  174                    shift_count : in natural) return bit_vector;
  175 
  176   -- Shift right logical (fill with '0' bits)
  177 
  178   function bv_srl (bv : in bit_vector;
  179                    shift_count : in natural) return bit_vector;
  180 
  181   -- Shift right arithmetic (fill with copy of sign bit)
  182 
  183   function bv_sra (bv : in bit_vector;
  184                    shift_count : in natural) return bit_vector;
  185 
  186   -- Rotate left
  187 
  188   function bv_rol (bv : in bit_vector;
  189                    rotate_count : in natural) return bit_vector;
  190 
  191   -- Rotate right
  192 
  193   function bv_ror (bv : in bit_vector;
  194                    rotate_count : in natural) return bit_vector;
  195 
  196   ----------------------------------------------------------------
  197   --  Arithmetic comparison operators.
  198   --  Perform comparisons on bit vector encoded signed integers.
  199   --  (For unsigned integers, built in lexical comparison does
  200   --  the required operation.)
  201   ----------------------------------------------------------------
  202 
  203   -- Signed less than comparison
  204 
  205   function bv_lt (bv1, bv2 : in bit_vector) return boolean;
  206 
  207   -- Signed less than or equal comparison
  208 
  209   function bv_le (bv1, bv2 : in bit_vector) return boolean;
  210 
  211   -- Signed greater than comparison
  212 
  213   function bv_gt (bv1, bv2 : in bit_vector) return boolean;
  214 
  215   -- Signed greater than or equal comparison
  216 
  217   function bv_ge (bv1, bv2 : in bit_vector) return boolean;
  218 
  219   ----------------------------------------------------------------
  220   --  Extension operators - convert a bit vector to a longer one
  221   ----------------------------------------------------------------
  222 
  223   -- Sign extension - replicate the sign bit of the operand into
  224   -- the most significant bits of the result.  Length parameter
  225   -- determines size of result.  If length < bv'length, result is
  226   -- rightmost length bits of bv.
  227 
  228   function bv_sext (bv : in bit_vector;
  229                     length : in natural) return bit_vector;
  230 
  231   -- Zero extension - replicate zero bits into the most significant
  232   -- bits of the result.  Length parameter determines size of result.
  233   -- If length < bv'length, result is rightmost length bits of bv.
  234 
  235   function bv_zext (bv : in bit_vector;
  236                     length : in natural) return bit_vector;
  237 
  238 end bv_arithmetic;
  239 

This page was generated using GHDL 0.14 (20040829) [Sokcho edition], a program written by Tristan Gingold