LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Tue Mar 27 17:49:14 CEST 2007
    Subject: [cvs-checkins] MODIFIED: jop ...
    Top
    Date: 00/07/03 27:17:49

    Modified: jop/vhdl/fpu/test_bench tb_fpu.vhd
    Added: jop/vhdl/fpu/test_bench fpu_wave.do fpusim.bat maketest.bat
    readme.txt timesoftfloat.exe txt_util.vhd
    Log:
    updated FPU version


    Revision Changes Path
    1.2 jop/vhdl/fpu/test_bench/tb_fpu.vhd

    http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/tb_fpu.vhd.diff?r1=1.1&r2=1.2

    (In the diff below, changes in quantity of whitespace are not shown.)

    Index: tb_fpu.vhd
    ===================================================================
    RCS file: /cvsroot/martin/jop/vhdl/fpu/test_bench/tb_fpu.vhd,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -u -b -r1.1 -r1.2
    --- tb_fpu.vhd 30 Jan 2006 13:12:40 -0000 1.1
    +++ tb_fpu.vhd 27 Mar 2007 15:49:13 -0000 1.2
    @@ -48,8 +48,26 @@
    use ieee.math_real.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_misc.all;
    +use std.textio.all;
    +use work.txt_util.all;

    -
    + -- fpu operations (fpu_op_i):
    + -- ========================
    + -- 000 = add,
    + -- 001 = substract,
    + -- 010 = multiply,
    + -- 011 = divide,
    + -- 100 = square root
    + -- 101 = unused
    + -- 110 = unused
    + -- 111 = unused
    +
    + -- Rounding Mode:
    + -- ==============
    + -- 00 = round to nearest even(default),
    + -- 01 = round to zero,
    + -- 10 = round up,
    + -- 11 = round down


    entity tb_fpu is
    @@ -78,26 +96,8 @@
    );
    end component;

    -component fpu_y
    - port(
    - clk : in std_logic ;
    - fpu_op : in std_logic_vector (2 downto 0) ;
    - opa : in std_logic_vector (31 downto 0) ;
    - opb : in std_logic_vector (31 downto 0) ;
    - rmode : in std_logic_vector (1 downto 0) ;
    - div_by_zero : out std_logic ;
    - fpout : out std_logic_vector (31 downto 0) ;
    - ine : out std_logic ;
    - inf : out std_logic ;
    - overflow : out std_logic ;
    - qnan : out std_logic ;
    - snan : out std_logic ;
    - underflow : out std_logic ;
    - zero : out std_logic
    - );
    -end component;

    -signal clk_i : std_logic:= '0';
    +signal clk_i : std_logic:= '1';
    signal opa_i, opb_i : std_logic_vector(31 downto 0);
    signal fpu_op_i : std_logic_vector(2 downto 0);
    signal rmode_i : std_logic_vector(1 downto 0);
    @@ -105,15 +105,16 @@
    signal start_i, ready_o : std_logic ;
    signal ine_o, overflow_o, underflow_o, div_zero_o, inf_o, zero_o, qnan_o, snan_o: std_logic;

    -signal fpout_y : std_logic_vector (31 downto 0) ;
    -signal ine_y, inf_y, overflow_y, qnan_y, snan_y, underflow_y, zero_y, div_by_zero_y : std_logic ;
    +
    +
    +signal slv_out : std_logic_vector(31 downto 0);

    constant CLK_PERIOD :time := 10 ns; -- period of clk period

    -begin

    +begin

    - -- instantiate the fpu
    + -- instantiate fpu
    i_fpu: fpu port map (
    clk_i => clk_i,
    opa_i => opa_i,
    @@ -133,24 +134,6 @@
    ready_o => ready_o); - -- instantiate the fpu - i_fpu_y: fpu_y port map ( - clk => clk_i, - fpu_op => fpu_op_i, - opa => opa_i, - opb => opb_i, - rmode => rmode_i, - div_by_zero => div_by_zero_y, - fpout => fpout_y, - ine => ine_y, - inf => inf_y, - overflow => overflow_y, - qnan => qnan_y, - snan => snan_y, - underflow => underflow_y, - zero => zero_y); - - --------------------------------------------------------------------------- -- toggle clock --------------------------------------------------------------------------- @@ -158,1460 +141,117 @@ verify : process - begin - ---************* Add/Substract Test Vectors**************** - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000100000000000000000000000"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000110000000000000000000010"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + --The operands and results are in Hex format. The test vectors must be placed in a strict order for the verfication to work. + file testcases_file: TEXT open read_mode is "testcases.txt"; --Name of the file containing the test cases. - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "10000000000000000000000000000111"; - opb_i <= "10000000001111111111111111111000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "00000111000101111000001111100110"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + variable file_line: line; + variable str_in: string(8 downto 1); + variable str_fpu_op: string(3 downto 1); + variable str_rmode: string(2 downto 1); + begin - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "10001100111110100011111000101000"; - opb_i <= "10001100111101111000001111100110"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "01111111110000000000000000000001"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + --------------------------------------------------------------------------------------------------------------------------------------------------- + ---------------------------------------------------SoftFloat test vectors (10000 test cases for each operation) -------------------------------------------------------------------- + start_i <= '0'; + while not endfile(testcases_file) loop - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "01111111100000000000000000000001"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + wait for CLK_PERIOD; start_i <= '1'; - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000100100000000000000000010"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + str_read(testcases_file,str_in); + opa_i <= strhex_to_slv(str_in); - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00100011001000000000000000000000"; - opb_i <= "00101001100100000000000000000100"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + str_read(testcases_file,str_in); + opb_i <= strhex_to_slv(str_in); - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "01110011011100000000000000000011"; - opb_i <= "01101100100000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + str_read(testcases_file,str_fpu_op); + fpu_op_i <= to_std_logic_vector(str_fpu_op); - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000000000011111111111111111"; - opb_i <= "00000000000000000000000000111111"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + str_read(testcases_file,str_rmode); + rmode_i <= to_std_logic_vector(str_rmode); - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000111111111111111111111111111"; - opb_i <= "00000000000001000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + str_read(testcases_file,str_in); + slv_out <= strhex_to_slv(str_in); - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "01110011011100000000000000000011"; - opb_i <= "01101100100000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - wait for CLK_PERIOD; start_i <= '1'; -- MIN #1 - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "00000000000000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y + assert output_o = slv_out report "Error!!!" severity failure; + str_read(testcases_file,str_in); + end loop; - wait for CLK_PERIOD; start_i <= '1'; -- MIN #2 - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "00000000000000000000000000000000"; - opb_i <= "00000000000000000000000000000001"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; + -------- Boundary values----- - wait for CLK_PERIOD; start_i <= '1'; -- MAX + start_i <= '0'; -- seeeeeeeefffffffffffffffffffffff + --infinity + wait for CLK_PERIOD; start_i <= '1'; opa_i <= "01111111011111111111111111111111"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- INF - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111100000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; + opb_i <= "01111111011111111111111111111111"; fpu_op_i <= "000"; rmode_i <= "00"; wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y + assert output_o="01111111100000000000000000000000" report "Error!!!" severity failure; - wait for CLK_PERIOD; start_i <= '1'; -- QNaN -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111111111111111111111111111"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- SNaN - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111001111111111111111111111111"; - opb_i <= "01111111100000000000000000000001"; + -- 1 x1.001 - 1x1.000 = 0x0.001 + wait for CLK_PERIOD; start_i <= '1'; + opa_i <= "00000000100100000000000000000000"; + opb_i <= "10000000100000000000000000000000"; fpu_op_i <= "000"; rmode_i <= "00"; wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y + assert output_o="00000000000100000000000000000000" report "Error!!!" severity failure; - wait for CLK_PERIOD; start_i <= '1'; -- inf + inf -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111100000000000000000000000"; - opb_i <= "01111111100000000000000000000000"; + -- 10 x 1.0001 - 10 x 1.0000 = + wait for CLK_PERIOD; start_i <= '1'; + opa_i <= "00000001000010000000000000000000"; + opb_i <= "10000001000000000000000000000000"; fpu_op_i <= "000"; rmode_i <= "00"; wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y + assert output_o="00000000000100000000000000000000" report "Error!!!" severity failure; - wait for CLK_PERIOD; start_i <= '1'; -- -inf + inf - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "11111111100000000000000000000000"; - opb_i <= "01111111100000000000000000000000"; - fpu_op_i <= "000"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o(30 downto 0)=fpout_y(30 downto 0) and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - --misc. -- seeeeeeeefffffffffffffffffffffff + -- -0 -0 = -0 wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "11110011011100000000000000000011"; - opb_i <= "00000000111111111111111111111111"; + opa_i <= "10000000000000000000000000000000"; + opb_i <= "10000000000000000000000000000000"; fpu_op_i <= "000"; rmode_i <= "00"; wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - - -- substract-------------------- - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000100000000000000000000000"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - ------- - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000110000000000000000000010"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "10000000000000000000000000000111"; - opb_i <= "10000000001111111111111111111000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "00000111000101111000001111100110"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "10001100111110100011111000101000"; - opb_i <= "10001100111101111000001111100110"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "01111111110000000000000000000001"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "01111111100000000000000000000001"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000100100000000000000000010"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00100011001000000000000000000000"; - opb_i <= "00101001100100000000000000000100"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "01110011011100000000000000000011"; - opb_i <= "01101100100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000000000011111111111111111"; - opb_i <= "00000000000000000000000000111111"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000111111111111111111111111111"; - opb_i <= "00000000000001000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "01110011011100000000000000000011"; - opb_i <= "01101100100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- MIN #1 - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "00000000000000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y + assert output_o="10000000000000000000000000000000" report "Error!!!" severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- MIN #2 -- seeeeeeeefffffffffffffffffffffff + -- 0 + x = x + wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000000000000000000000000000"; - opb_i <= "00000000000000000000000000000001"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- MAX - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111011111111111111111111111"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- INF - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111100000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- QNaN - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111111111111111111111111111"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - wait for CLK_PERIOD; start_i <= '1'; -- SNaN - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111001111111111111111111111111"; - opb_i <= "01111111100000000000000000000001"; - fpu_op_i <= "001"; + opb_i <= "01000010001000001000000000100000"; + fpu_op_i <= "000"; rmode_i <= "00"; wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y + assert output_o="01000010001000001000000000100000" report "Error!!!" severity failure; - wait for CLK_PERIOD; start_i <= '1'; -- inf + inf - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "01111111100000000000000000000000"; - opb_i <= "01111111100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - wait for CLK_PERIOD; start_i <= '1'; -- -inf + inf - -- seeeeeeeefffffffffffffffffffffff - opa_i <= "11111111100000000000000000000000"; - opb_i <= "01111111100000000000000000000000"; - fpu_op_i <= "001"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o(30 downto 0)=fpout_y(30 downto 0) and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" + ---------------------------------------------------------------------------------------------------------------------------------------------------- + assert false + report "Success!!!.......Yahoooooooooooooo" severity failure; - - ---************* Multiply Test Vectors************************************************************ - - -- round to nearset even - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000100000000000000000000000"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000000100000000000000000000000"; - opb_i <= "01000000100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- underflow = 1 when tiny(2^-127) and inexact - - -- 2^-127x0.1 * 2^0x1.0 = 2^-127x0.1 (-127 in dn = -126) - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00111111100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.1 * 2^0x1.11 = 2^-127x0.1110 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00111111111000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.1 * 2^-1x1.0 = 2^-127x0.01 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00111111000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.1 * 2^-22x1.0 = 2^-127x0.0..01 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00110100100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.1 * 2^-45x1.0 = 2^-127x0.0..00 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00101001000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.1 * 2^-46x1.0 = 2^-127x0.0..00 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00101000100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.1 * 2^-47x1.0 = 2^-127x0.0..00 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010000000000000000000000"; - opb_i <= "00101000000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-126x1.0 * 2^-1x1.0 = 2^-127x1.0 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000100000000000000000000000"; - opb_i <= "00111111000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-126x1.0 * 2^-2x1.0 = 2^-127x0.1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000100000000000000000000000"; - opb_i <= "00111110100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-126x1.0 * 2^-46x1.0 = 2^-127x0.0..0 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000100000000000000000000000"; - opb_i <= "00101000100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-126x1.0 * 2^-47x1.0 = 2^-127x0.0..0 - shr 46 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000100000000000000000000000"; - opb_i <= "00101000000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-126x1.0 * 2^-48x1.0 = 2^-127x0.0..0 - shr 46 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000100000000000000000000000"; - opb_i <= "00100111100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- e^128 x 1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00111110100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- e^127 x 1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00111110000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - -- and underflow_o=underflow_y - report "Error!!!" - severity failure; - - -- e^126 x 1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00111101100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000111111100000000000000000000"; - opb_i <= "00000000100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000001111111111111111111111"; - opb_i <= "00000000000000000000000000010000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "10000000011101111111111111111101"; - opb_i <= "00111010000000000000000000000001"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- 2^-127x0.11 * 2^-0x1.0 = 2^-127x0.11 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000011000000000000000000000"; - opb_i <= "00111111100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 2^-127x0.11 * 2^-1x1.0 = 2^-127x0.11 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000011000000000000000000000"; - opb_i <= "00111111000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - - -- 2^-127x0.11 * 2^-2x1.11 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000011000000000000000000000"; - opb_i <= "00111110111000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - - -- 2^-127x0.11 * 2^-0x1.11 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000011000000000000000000000"; - opb_i <= "00111111111000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000011110000000000000000000"; - opb_i <= "00111100111110000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "01111111100000000000000000000000"; - opb_i <= "00000111000101111000001111100110"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000011111110100011111000101000"; - opb_i <= "00000111000101111000001111100110"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000000000000000000000000000000"; - opb_i <= "00000111000101111000001111100110"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000011000000000000000000000"; - opb_i <= "00111111111000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000110000000000000000000000"; - opb_i <= "00111111000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- inf - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111110000000000000000000000"; - opb_i <= "00000000000000000000000000000001"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - - -- ******* check rounding ********--- - - --Round to nearst even - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000110000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001110000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000001000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000001000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000000000000000000000..1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000000000000000000000000000..1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00011001000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- round up - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "10"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000110000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001110000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "10"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000001000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000001000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "10"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 0000000000000000000000000100000000000000000000001 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "10"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000000000000000000000000000..1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00011001000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "10"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - - -- round down - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "11"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000110000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001110000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "11"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000001000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000001000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "11"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 0000000000000000000000000100000000000000000000001 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "11"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000000000000000000000000000..1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00011001000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "11"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - - -- round to zero - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "01"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000110000000000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001110000000000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "01"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000010000001000000000000000 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000001000000000000000"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "01"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 0000000000000000000000000100000000000000000000001 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00110010100000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "01"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - -- xx00000000000000000000000xxxxxxxxxxxxxxxxxxxxxxx - -- fract2a= 000000000000000000000000000000000000000000000000..1 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000001100000000000000000000001"; - opb_i <= "00011001000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "01"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y and underflow_y=underflow_o - report "Error!!!" - severity failure; - - - -- inf 2^100x1.0 * 2^128x1.0 = - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01110001100000000000000000000000"; - opb_i <= "01001101100000000000000000000001"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- inf * 0 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111110000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- Qnan * n - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111110000000000000000000001"; - opb_i <= "00000010000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- Snan * n - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111100000000000000000000001"; - opb_i <= "00000010000000000000000000000000"; - fpu_op_i <= "010"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - ---************* Division Test Vectors************************************************************ - - -- round to nearset even - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000001101010000000000000000000"; --21 - opb_i <= "01000000010000000000000000000000"; --3 - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000001111111111111111111111111"; - opb_i <= "01000000000000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00111111100000000000000000000000"; - opb_i <= "01000000010000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 0 / x - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000000000000000000000000000"; - opb_i <= "01000000010000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- x / 0 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000000000000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - - -- overflow - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000000000000000000000000000000"; - opb_i <= "00000000010000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000010100000000000000000000"; - opb_i <= "00000100010000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "10000000010100000000000000000000"; - opb_i <= "00000000010000000000000000011000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o=fpout_y and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- inf / inf - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111111111111111111111111111"; - opb_i <= "01111111111111111111111111111111"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o(30 downto 0)=fpout_y(30 downto 0) and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - -- 0 / 0 - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000000000000000000000000000"; - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "011"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o(30 downto 0)=fpout_y(30 downto 0) and ine_o=ine_y and overflow_o=overflow_y and underflow_o=underflow_y and inf_o=inf_y and zero_y=zero_o and div_zero_o=div_by_zero_y and qnan_o=qnan_y and snan_o=snan_y - report "Error!!!" - severity failure; - - ---************* Square-Root Test Vectors************************************************************ - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000001000100000000000000000000"; --9 - opb_i <= "00000000000000000000000000000000"; - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o= "01000000010000000000000000000000" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' - and snan_o='0' - report "Error!!!" - severity failure; - - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000001001000000000000000000000"; --10 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01000000010010100110001011000010" and ine_o='1' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01010001011011011000111001100111"; - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01001000011101101001101100010011" and ine_o='1' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000001100000000000000000000000"; --16 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01000000100000000000000000000000" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01000000110000000000000000000000"; --6 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01000000000111001100010001110001" and ine_o='1' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01001101110110010011101101001010"; --455567687 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01000110101001101100000000010000" and ine_o='1' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "11001101110110010011101101001010"; -- - 455567687 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="11111111110000000000000000000001" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='1' and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000000000000000000000000001"; --MIN - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="00011010001101010000010011110011" and ine_o='1' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' - and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111011111111111111111111111"; --MAX - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01011111011111111111111111111111" and ine_o='1' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' - and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "00000000000000000000000000000000"; -- +0 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="00000000000000000000000000000000" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' - and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "10000000000000000000000000000000"; -- -0 - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="10000000000000000000000000000000" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='0' - and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111100000000000000000000000"; -- inf - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01111111100000000000000000000000" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='1' and div_zero_o='0' and qnan_o='0' - and snan_o='0' - report "Error!!!" - severity failure; - - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111110000000000000000000001"; -- qnan - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01111111110000000000000000000001" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='1' - and snan_o='0' - report "Error!!!" - severity failure; - - -- seeeeeeeefffffffffffffffffffffff - wait for CLK_PERIOD; start_i <= '1'; - opa_i <= "01111111100000000000000000000001"; -- snan - fpu_op_i <= "100"; - rmode_i <= "00"; - wait for CLK_PERIOD; start_i <= '0'; wait until ready_o='1'; - assert output_o="01111111110000000000000000000001" and ine_o='0' and - overflow_o='0' and underflow_o='0' and inf_o='0' and div_zero_o='0' and qnan_o='1' and snan_o='1' - report "Error!!!" - severity failure; - - - - assert false - report "Success!!!" - severity failure; - - - - wait; end process verify; 1.1 jop/vhdl/fpu/test_bench/fpu_wave.do http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/fpu_wave.do?rev=1.1&content-type=text/x-cvsweb-markup Index: fpu_wave.do =================================================================== onerror {resume} quietly WaveActivateNextPane {} 0 add wave -noupdate -format Logic /tb_fpu/clk_i add wave -noupdate -format Literal /tb_fpu/opa_i add wave -noupdate -format Literal /tb_fpu/opb_i add wave -noupdate -format Literal /tb_fpu/fpu_op_i add wave -noupdate -format Literal /tb_fpu/rmode_i add wave -noupdate -format Literal /tb_fpu/output_o add wave -noupdate -format Logic /tb_fpu/start_i add wave -noupdate -format Logic /tb_fpu/ready_o add wave -noupdate -format Logic /tb_fpu/ine_o add wave -noupdate -format Logic /tb_fpu/overflow_o add wave -noupdate -format Logic /tb_fpu/underflow_o add wave -noupdate -format Logic /tb_fpu/div_zero_o add wave -noupdate -format Logic /tb_fpu/inf_o add wave -noupdate -format Logic /tb_fpu/zero_o add wave -noupdate -format Logic /tb_fpu/qnan_o add wave -noupdate -format Logic /tb_fpu/snan_o TreeUpdate [SetDefaultTree] WaveRestoreCursors {{Cursor 1} {16182 ns} 0} configure wave -namecolwidth 255 configure wave -valuecolwidth 317 configure wave -justifyvalue left configure wave -signalnamewidth 0 configure wave -snapdistance 10 configure wave -datasetprefix 0 configure wave -rowmargin 4 configure wave -childrowmargin 2 configure wave -gridoffset 0 configure wave -gridperiod 1 configure wave -griddelta 40 configure wave -timeline 0 update WaveRestoreZoom {0 ns} {544 ns} 1.1 jop/vhdl/fpu/test_bench/fpusim.bat http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/fpusim.bat?rev=1.1&content-type=text/x-cvsweb-markup Index: fpusim.bat =================================================================== set REL= ..\ vlib work vcom %REL%fpupack.vhd vcom %REL%pre_norm_addsub.vhd vcom %REL%addsub_28.vhd vcom %REL%post_norm_addsub.vhd vcom %REL%pre_norm_mul.vhd vcom %REL%mul_24.vhd vcom %REL%serial_mul.vhd vcom %REL%post_norm_mul.vhd vcom %REL%pre_norm_div.vhd vcom %REL%serial_div.vhd vcom %REL%post_norm_div.vhd vcom %REL%pre_norm_sqrt.vhd vcom %REL%sqrt.vhd vcom %REL%post_norm_sqrt.vhd vcom %REL%comppack.vhd vcom %REL%fpu.vhd vcom txt_util.vhd vcom tb_fpu.vhd pause Start simulation? vsim -do fpu_wave.do tb_fpu 1.1 jop/vhdl/fpu/test_bench/maketest.bat http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/maketest.bat?rev=1.1&content-type=text/x-cvsweb-markup Index: maketest.bat =================================================================== timesoftfloat -nearesteven float32_add > testcases.txt timesoftfloat -nearesteven float32_sub >> testcases.txt timesoftfloat -nearesteven float32_mul >> testcases.txt timesoftfloat -nearesteven float32_div >> testcases.txt timesoftfloat -nearesteven float32_sqrt >> testcases.txt timesoftfloat -tozero float32_add >> testcases.txt timesoftfloat -tozero float32_sub >> testcases.txt timesoftfloat -tozero float32_mul >> testcases.txt timesoftfloat -tozero float32_div >> testcases.txt timesoftfloat -tozero float32_sqrt >> testcases.txt timesoftfloat -up float32_add >> testcases.txt timesoftfloat -up float32_sub >> testcases.txt timesoftfloat -up float32_mul >> testcases.txt timesoftfloat -up float32_div >> testcases.txt timesoftfloat -up float32_sqrt >> testcases.txt timesoftfloat -down float32_add >> testcases.txt timesoftfloat -down float32_sub >> testcases.txt timesoftfloat -down float32_mul >> testcases.txt timesoftfloat -down float32_div >> testcases.txt timesoftfloat -down float32_sqrt >> testcases.txt 1.1 jop/vhdl/fpu/test_bench/readme.txt http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/readme.txt?rev=1.1&content-type=text/x-cvsweb-markup Index: readme.txt =================================================================== To test the FPU core, do the following: 1) Build timesoftfloat.exe for your specific platform(read instructions in folder SoftFloat for howto do that). Before you do that, try the already included file. 2) Create the testcases by running maketest.bat in folder test_bench. Default value is 100000 cases for each arithmetic operation and for each rounding mode. This comes up to 2 million test cases. 3) run fpusim.bat to simulate and test the FPU core using modelsim. 1.1 jop/vhdl/fpu/test_bench/timesoftfloat.exe http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/timesoftfloat.exe?rev=1.1&content-type=text/x-cvsweb-markup <<Binary file>> 1.1 jop/vhdl/fpu/test_bench/txt_util.vhd http://www.opencores.org/cvsweb.shtml/jop/vhdl/fpu/test_bench/txt_util.vhd?rev=1.1&content-type=text/x-cvsweb-markup Index: txt_util.vhd =================================================================== library ieee; use ieee.std_logic_1164.all; use std.textio.all; package txt_util is -- prints a message to the screen procedure print(text: string); -- prints the message when active -- useful for debug switches procedure print(active: boolean; text: string); -- converts std_logic into a character function chr(sl: std_logic) return character; -- converts std_logic into a string (1 to 1) function str(sl: std_logic) return string; -- converts std_logic_vector into a string (binary base) function str(slv: std_logic_vector) return string; -- converts boolean into a string function str(b: boolean) return string; -- converts an integer into a single character -- (can also be used for hex conversion and other bases) function chr(int: integer) return character; -- converts integer into string using specified base function str(int: integer; base: integer) return string; -- converts integer to string, using base 10 function str(int: integer) return string; -- convert std_logic_vector into a string in hex format function hstr(slv: std_logic_vector) return string; -- functions to manipulate strings ----------------------------------- -- convert a character to upper case function to_upper(c: character) return character; -- convert a character to lower case function to_lower(c: character) return character; -- convert a string to upper case function to_upper(s: string) return string; -- convert a string to lower case function to_lower(s: string) return string; -- functions to convert strings into other formats -------------------------------------------------- -- converts a character into std_logic function to_std_logic(c: character) return std_logic; -- converts a string into std_logic_vector function to_std_logic_vector(s: string) return std_logic_vector; -- convert Hex string to 32-bit into std_logic_vector function strhex_to_slv(s : string) return std_logic_vector; -- file I/O ----------- -- read variable length string from input file procedure str_read(file in_file: TEXT; res_string: out string); -- print string to a file and start new line procedure print(file out_file: TEXT; new_string: in string); -- print character to a file and start new line procedure print(file out_file: TEXT; char: in character); end txt_util; package body txt_util is -- prints text to the screen procedure print(text: string) is variable msg_line: line; begin write(msg_line, text); writeline(output, msg_line); end print; -- prints text to the screen when active procedure print(active: boolean; text: string) is begin if active then print(text); end if; end print; -- converts std_logic into a character function chr(sl: std_logic) return character is variable c: character; begin case sl is when 'U' => c:= 'U'; when 'X' => c:= 'X'; when '0' => c:= '0'; when '1' => c:= '1'; when 'Z' => c:= 'Z'; when 'W' => c:= 'W'; when 'L' => c:= 'L'; when 'H' => c:= 'H'; when '-' => c:= '-'; end case; return c; end chr; -- converts std_logic into a string (1 to 1) function str(sl: std_logic) return string is variable s: string(1 to 1); begin s(1) := chr(sl); return s; end str; -- converts std_logic_vector into a string (binary base) -- (this also takes care of the fact that the range of -- a string is natural while a std_logic_vector may -- have an integer range) function str(slv: std_logic_vector) return string is variable result : string (1 to slv'length); variable r : integer; begin r := 1; for i in slv'range loop result(r) := chr(slv(i)); r := r + 1; end loop; return result; end str; function str(b: boolean) return string is begin if b then return "true"; else return "false"; end if; end str; -- converts an integer into a character -- for 0 to 9 the obvious mapping is used, higher -- values are mapped to the characters A-Z -- (this is usefull for systems with base > 10) -- (adapted from Steve Vogwell's posting in comp.lang.vhdl) function chr(int: integer) return character is variable c: character; begin case int is when 0 => c := '0'; when 1 => c := '1'; when 2 => c := '2'; when 3 => c := '3'; when 4 => c := '4'; when 5 => c := '5'; when 6 => c := '6'; when 7 => c := '7'; when 8 => c := '8'; when 9 => c := '9'; when 10 => c := 'A'; when 11 => c := 'B'; when 12 => c := 'C'; when 13 => c := 'D'; when 14 => c := 'E'; when 15 => c := 'F'; when 16 => c := 'G'; when 17 => c := 'H'; when 18 => c := 'I'; when 19 => c := 'J'; when 20 => c := 'K'; when 21 => c := 'L'; when 22 => c := 'M'; when 23 => c := 'N'; when 24 => c := 'O'; when 25 => c := 'P'; when 26 => c := 'Q'; when 27 => c := 'R'; when 28 => c := 'S'; when 29 => c := 'T'; when 30 => c := 'U'; when 31 => c := 'V'; when 32 => c := 'W'; when 33 => c := 'X'; when 34 => c := 'Y'; when 35 => c := 'Z'; when others => c := '?'; end case; return c; end chr; -- convert integer to string using specified base -- (adapted from Steve Vogwell's posting in comp.lang.vhdl) function str(int: integer; base: integer) return string is variable temp: string(1 to 10); variable num: integer; variable abs_int: integer; variable len: integer := 1; variable power: integer := 1; begin -- bug fix for negative numbers abs_int := abs(int); num := abs_int; while num >= base loop -- Determine how many len := len + 1; -- characters required num := num / base; -- to represent the end loop ; -- number. for i in len downto 1 loop -- Convert the number to temp(i) := chr(abs_int/power mod base); -- a string starting power := power * base; -- with the right hand end loop ; -- side. -- return result and add sign if required if int < 0 then return '-'& temp(1 to len); else return temp(1 to len); end if; end str; -- convert integer to string, using base 10 function str(int: integer) return string is begin return str(int, 10) ; end str; -- converts a std_logic_vector into a hex string. function hstr(slv: std_logic_vector) return string is variable hexlen: integer; variable longslv : std_logic_vector(67 downto 0) := (others => '0'); variable hex : string(1 to 16); variable fourbit : std_logic_vector(3 downto 0); begin hexlen := (slv'left+1)/4; if (slv'left+1) mod 4 /= 0 then hexlen := hexlen + 1; end if; longslv(slv'left downto 0) := slv; for i in (hexlen -1) downto 0 loop fourbit := longslv(((i*4)+3) downto (i*4)); case fourbit is when "0000" => hex(hexlen -I) := '0'; when "0001" => hex(hexlen -I) := '1'; when "0010" => hex(hexlen -I) := '2'; when "0011" => hex(hexlen -I) := '3'; when "0100" => hex(hexlen -I) := '4'; when "0101" => hex(hexlen -I) := '5'; when "0110" => hex(hexlen -I) := '6'; when "0111" => hex(hexlen -I) := '7'; when "1000" => hex(hexlen -I) := '8'; when "1001" => hex(hexlen -I) := '9'; when "1010" => hex(hexlen -I) := 'A'; when "1011" => hex(hexlen -I) := 'B'; when "1100" => hex(hexlen -I) := 'C'; when "1101" => hex(hexlen -I) := 'D'; when "1110" => hex(hexlen -I) := 'E'; when "1111" => hex(hexlen -I) := 'F'; when "ZZZZ" => hex(hexlen -I) := 'z'; when "UUUU" => hex(hexlen -I) := 'u'; when "XXXX" => hex(hexlen -I) := 'x'; when others => hex(hexlen -I) := '?'; end case; end loop; return hex(1 to hexlen); end hstr; -- functions to manipulate strings ----------------------------------- -- convert a character to upper case function to_upper(c: character) return character is variable u: character; begin case c is when 'a' => u := 'A'; when 'b' => u := 'B'; when 'c' => u := 'C'; when 'd' => u := 'D'; when 'e' => u := 'E'; when 'f' => u := 'F'; when 'g' => u := 'G'; when 'h' => u := 'H'; when 'i' => u := 'I'; when 'j' => u := 'J'; when 'k' => u := 'K'; when 'l' => u := 'L'; when 'm' => u := 'M'; when 'n' => u := 'N'; when 'o' => u := 'O'; when 'p' => u := 'P'; when 'q' => u := 'Q'; when 'r' => u := 'R'; when 's' => u := 'S'; when 't' => u := 'T'; when 'u' => u := 'U'; when 'v' => u := 'V'; when 'w' => u := 'W'; when 'x' => u := 'X'; when 'y' => u := 'Y'; when 'z' => u := 'Z'; when others => u := c; end case; return u; end to_upper; -- convert a character to lower case function to_lower(c: character) return character is variable l: character; begin case c is when 'A' => l := 'a'; when 'B' => l := 'b'; when 'C' => l := 'c'; when 'D' => l := 'd'; when 'E' => l := 'e'; when 'F' => l := 'f'; when 'G' => l := 'g'; when 'H' => l := 'h'; when 'I' => l := 'i'; when 'J' => l := 'j'; when 'K' => l := 'k'; when 'L' => l := 'l'; when 'M' => l := 'm'; when 'N' => l := 'n'; when 'O' => l := 'o'; when 'P' => l := 'p'; when 'Q' => l := 'q'; when 'R' => l := 'r'; when 'S' => l := 's'; when 'T' => l := 't'; when 'U' => l := 'u'; when 'V' => l := 'v'; when 'W' => l := 'w'; when 'X' => l := 'x'; when 'Y' => l := 'y'; when 'Z' => l := 'z'; when others => l := c; end case; return l; end to_lower; -- convert a string to upper case function to_upper(s: string) return string is variable uppercase: string (s'range); begin for i in s'range loop uppercase(i):= to_upper(s(i)); end loop; return uppercase; end to_upper; -- convert a string to lower case function to_lower(s: string) return string is variable lowercase: string (s'range); begin for i in s'range loop lowercase(i):= to_lower(s(i)); end loop; return lowercase; end to_lower; -- functions to convert strings into other types -- converts a character into a std_logic function to_std_logic(c: character) return std_logic is variable sl: std_logic; begin case c is when 'U' => sl := 'U'; when 'X' => sl := 'X'; when '0' => sl := '0'; when '1' => sl := '1'; when 'Z' => sl := 'Z'; when 'W' => sl := 'W'; when 'L' => sl := 'L'; when 'H' => sl := 'H';