|
Message
From: cvs at opencores.org<cvs@o...>
Date: Tue Mar 27 17:49:14 CEST 2007
Subject: [cvs-checkins] MODIFIED: jop ...
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';
|