use std.textio.line; package bv_arithmetic is -- Arithmetic on bit_vectors. -- Bit vectors are treated as either unsigned or signed (2's complement) numbers -- bv'first is the msb and bv'last is the lsb -- Dyadic operations assume the two bit vectors are the same length and index range. -- Functions assume the result is the same length and index range as arguments. function bv_to_natural (bv : in bit_vector) return natural; function natural_to_bv (nat : in natural; length : in natural) return bit_vector; function bv_to_integer (bv : in bit_vector) return integer; function integer_to_bv (int : in integer; length : in natural) return bit_vector; procedure bv_add (bv1, bv2 : in bit_vector; bv_result : out bit_vector; overflow : out boolean); procedure bv_sub (bv1, bv2 : in bit_vector; bv_result : out bit_vector; overflow : out boolean); procedure bv_addu (bv1, bv2 : in bit_vector; bv_result : out bit_vector; overflow : out boolean); procedure bv_subu (bv1, bv2 : in bit_vector; bv_result : out bit_vector; overflow : out boolean); function bv_sll (bv : in bit_vector; shift_count : in natural) return bit_vector; function bv_srl (bv : in bit_vector; shift_count : in natural) return bit_vector; function bv_sra (bv : in bit_vector; shift_count : in natural) return bit_vector; function bv_lt (bv1, bv2 : in bit_vector) return boolean; function bv_le (bv1, bv2 : in bit_vector) return boolean; function bv_gt (bv1, bv2 : in bit_vector) return boolean; function bv_ge (bv1, bv2 : in bit_vector) return boolean; function bv_sext (bv : in bit_vector; length : in natural) return bit_vector; function bv_zext (bv : in bit_vector; length : in natural) return bit_vector; procedure write_hex (L : inout line; b : in bit_vector); end bv_arithmetic;