tb_fpu.vhd
来自「Java Op Processor java vhdl processor」· VHDL 代码 · 共 1,389 行 · 第 1/5 页
VHD
1,389 行
----------------------------------------------------------------------------------- Project: <Floating Point Unit Core>-- -- Description: test bench for the FPU core----------------------------------------------------------------------------------- 100101011010011100100-- 110000111011100100000-- 100000111011000101101-- 100010111100101111001-- 110000111011101101001-- 010000001011101001010-- 110100111001001100001-- 110111010000001100111-- 110110111110001011101-- 101110110010111101000-- 100000010111000000000---- Author: Jidan Al-eryani -- E-mail: jidan@gmx.net---- Copyright (C) 2006---- This source file may be used and distributed without -- restriction provided that this copyright statement is not -- removed from the file and that any derivative work contains -- the original copyright notice and the associated disclaimer.-- -- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY -- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR -- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- POSSIBILITY OF SUCH DAMAGE. --library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.math_real.all;use ieee.std_logic_arith.all;use ieee.std_logic_misc.all;entity tb_fpu isend tb_fpu;architecture rtl of tb_fpu iscomponent fpu port ( clk_i : in std_logic; opa_i : in std_logic_vector(31 downto 0); opb_i : in std_logic_vector(31 downto 0); fpu_op_i : in std_logic_vector(2 downto 0); rmode_i : in std_logic_vector(1 downto 0); output_o : out std_logic_vector(31 downto 0); ine_o : out std_logic; overflow_o : out std_logic; underflow_o : out std_logic; div_zero_o : out std_logic; inf_o : out std_logic; zero_o : out std_logic; qnan_o : out std_logic; snan_o : out std_logic; start_i : in std_logic; ready_o : out std_logic ); 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 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);signal output_o : std_logic_vector(31 downto 0);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 ;constant CLK_PERIOD :time := 10 ns; -- period of clk periodbegin -- instantiate the fpu i_fpu: fpu port map ( clk_i => clk_i, opa_i => opa_i, opb_i => opb_i, fpu_op_i => fpu_op_i, rmode_i => rmode_i, output_o => output_o, ine_o => ine_o, overflow_o => overflow_o, underflow_o => underflow_o, div_zero_o => div_zero_o, inf_o => inf_o, zero_o => zero_o, qnan_o => qnan_o, snan_o => snan_o, start_i => start_i, 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 --------------------------------------------------------------------------- clk_i <= not(clk_i) after 5 ns; 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; -- 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; -- 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; -- 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; -- 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; -- 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; -- 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; -- 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; -- seeeeeeeefffffffffffffffffffffff wait for CLK_PERIOD; start_i <= '1'; opa_i <= "00000111111111111111111111111111"; opb_i <= "00000000000001000000000000000000"; fpu_op_i <= "000"; rmode_i <= "00";
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?