OpenCores
URL https://opencores.org/ocsvn/raytrac/raytrac/trunk

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [tb/] [tb.vhd] - Diff between revs 53 and 66

Show entire file | Details | Blame | View Log

Rev 53 Rev 66
Line 1... Line 1...
 
------------------------------------------------
 
--! @file tb.vhd
 
--! @brief RayTrac TestBench
 
--! @author Julián Andrés Guarín Reyes
 
--------------------------------------------------
 
 
 
 
 
-- RAYTRAC
 
-- Author Julian Andres Guarin
 
-- tb.vhd
 
-- This file is part of raytrac.
 
-- 
 
--     raytrac is free software: you can redistribute it and/or modify
 
--     it under the terms of the GNU General Public License as published by
 
--     the Free Software Foundation, either version 3 of the License, or
 
--     (at your option) any later version.
 
-- 
 
--     raytrac is distributed in the hope that it will be useful,
 
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
 
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
--     GNU General Public License for more details.
 
-- 
 
--     You should have received a copy of the GNU General Public License
 
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>
 
 
 
library ieee;
 
use ieee.std_logic_1164.all;
 
use ieee.std_logic_unsigned.all;
 
 
 
use std.textio.all;
 
use work.arithpack.all;
 
 
 
 
 
entity tb is
 
 
 
end tb;
 
 
 
 
 
architecture tb_arch of tb is
 
 
 
        signal qa       : std_logic_vector (53 downto 0);
 
        signal qb       : std_logic_vector (53 downto 0);
 
        signal qc       : std_logic_vector (53 downto 0);
 
        signal qd       : std_logic_vector (53 downto 0);
 
        signal clock,rst,ena: std_logic;
 
        signal opcode,addcode:std_logic;
 
        signal dp0,dp1,cpx,cpy,cpz : std_logic_vector(31 downto 0);
 
        signal address: std_logic_vector (8 downto 0);
 
        signal opadd : std_logic_vector(1 downto 0);
 
 
 
begin
 
 
 
        --! Generador de clock.
 
        clk_inst: clock_gen
 
        port map (clock,rst); -- Instanciacion simple.
 
 
 
        --! Device Under Test
 
        dude: raytrac
 
        generic map ("YES","YES")       -- Test bench y Entrada registrada, pues la ROM no tiene salida registrada.
 
        port map(qa,qb,qc,qd,opadd(1),opadd(0),clock,rst,ena,cpx,cpy,cpz,dp0,dp1);
 
 
 
        --! Procedimiento para escribir los resultados del testbench
 
        sampleproc: process
 
                variable buff : line;
 
                file rombuff : text open write_mode is "TRACE_rom_content.csv";
 
                variable stop : integer := 0;
 
        begin
 
 
 
                write(buff,string'("#ROM memories test benching"));
 
                writeline(rombuff, buff);
 
                write(buff,string'("#{Time} {AddressR} {Opc Adc} {Ax,Ay,Az} {Bx,By,Bz} {Cx,Cy,Cz} {Dx,Dy,Dz}"));
 
                writeline(rombuff, buff);
 
 
 
                wait for 5 ns;
 
                wait until rst=not(rstMasterValue);
 
                wait until clock='1';
 
                wait for tclk2+tclk4; --! Garantizar la estabilidad de los datos que se van a observar en la salida.
 
                displayRom:
 
                loop
 
                        write (buff,string'("{"));
 
                        write (buff,now,unit =>ns);
 
                        write (buff,string'("}{"));
 
                        hexwrite_0 (buff,address(8 downto 0));
 
                        write (buff,string'("}{"));
 
                        hexwrite_0 (buff,opadd);
 
                        write (buff,string'("} { "));
 
                        hexwrite_0 (buff,qa(17 downto 0));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qa(35 downto 18));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qa(53 downto 36));
 
                        write (buff,string'(" } "));
 
                        write (buff,string'(" { "));
 
                        hexwrite_0 (buff,qb(17 downto 0));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qb(35 downto 18));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qb(53 downto 36));
 
                        write (buff,string'(" } "));
 
                        write (buff,string'(" { "));
 
                        hexwrite_0 (buff,qc(17 downto 0));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qc(35 downto 18));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qc(53 downto 36));
 
                        write (buff,string'(" } "));
 
                        write (buff,string'(" { "));
 
                        hexwrite_0 (buff,qd(17 downto 0));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qd(35 downto 18));
 
                        write (buff,string'(","));
 
                        hexwrite_0 (buff,qd(53 downto 36));
 
                        write (buff,string'(" } "));
 
                        writeline(rombuff,buff);
 
                        wait for tclk;
 
 
 
 
 
                        -- STOP FORREST!
 
                        if opadd=X"2" and address=X"00"  then
 
                                if stop=1 then
 
                                        wait;
 
                                else
 
                                        stop:=1;
 
                                end if;
 
                        end if;
 
 
 
                end loop displayRom;
 
 
 
        end process sampleproc;
 
 
 
 
 
 
 
        --! Descripcion del test: 512 x (2/clock) productos punto y 1024 x (1/clock) productos cruz.
 
        thetest:
 
        process (clock,rst)
 
                variable buff : line;
 
                file rombuff : text open write_mode is "TRACE_state_content";
 
                variable tbs : tbState;
 
        begin
 
 
 
                if rst=rstMasterValue then
 
 
 
                        opcode  <= '0';
 
                        addcode <= '1';
 
                        tbs := abcd;
 
                        ena <= '1';
 
                        address <= (others => '0');
 
                elsif clock'event and clock = '1' then
 
 
 
                        opadd <= opcode & addcode;
 
 
 
                        case tbs is
 
                                when abcd  =>
 
                                        if address = X"1FF" then
 
                                                write (buff,now,unit => ns);
 
                                                write (buff,string'(" S: abcd => axb"));
 
                                                writeline (rombuff,buff);
 
                                                tbs := axb;
 
                                                opcode <= '1';
 
                                                addcode <= not(addcode);
 
                                        end if;
 
                                        address <= address + 1;
 
 
 
                                when axb =>
 
                                        write (buff,now,unit => ns);
 
                                        write (buff,string'(" S: axb => cxd"));
 
                                        writeline (rombuff,buff);
 
 
 
                                        tbs := cxd;
 
                                        addcode <= not(addcode);
 
                                when cxd =>
 
 
 
                                        addcode <= not(addcode);
 
                                        if address=X"1FF" then
 
                                                write (buff,now,unit => ns);
 
                                                write (buff,string'(" S: cxd => stop"));
 
                                                writeline (rombuff,buff);
 
                                                tbs := stop;
 
                                        else
 
                                                write (buff,now,unit => ns);
 
                                                write (buff,string'(" S: cxd => axb"));
 
                                                writeline (rombuff,buff);
 
 
 
                                                tbs := axb;
 
                                        end if;
 
                                        address  <= address + 1;
 
                                when others =>
 
                                        null;
 
                        end case;
 
 
 
                end if;
 
        end process thetest;
 
 
 
        --! 512x18 rom con los componentes ax.
 
        AX : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => "memax.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qa (17 downto 0)
 
        );
 
 
 
        --! 512x18 rom con los componentes ay.
 
        AY : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memay.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qa (35 downto 18)
 
        );
 
 
 
        --! 512x18 rom con los componentes az.
 
        AZ : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memaz.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qa (53 downto 36)
 
        );
 
 
 
        --! 512x18 rom con los componentes bx.
 
        BX : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\membx.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qb (17 downto 0)
 
        );
 
 
 
        --! 512x18 rom con los componentes by.
 
        BY : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memby.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qb (35 downto 18)
 
        );
 
 
 
        --! 512x18 rom con los componentes bz.
 
        BZ : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\membz.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qb (53 downto 36)
 
        );
 
 
 
        --! 512x18 rom con los componentes cx.
 
        CX : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memcx.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qc (17 downto 0)
 
        );
 
 
 
        --! 512x18 rom con los componentes cy.
 
        CY : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memcy.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qc (35 downto 18)
 
        );
 
 
 
        --! 512x18 rom con los componentes cz.
 
        CZ : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memcz.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qc (53 downto 36)
 
        );
 
 
 
        --! 512x18 rom con los componentes dx.
 
        DX : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memdx.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qd (17 downto 0)
 
        );
 
 
 
        --! 512x18 rom con los componentes dy.
 
        DY : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memdy.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qd (35 downto 18)
 
        );
 
 
 
        --! 512x18 rom con los componentes dz.
 
        DZ : altsyncram
 
        generic map (
 
                address_aclr_a => "NONE",
 
                clock_enable_input_a => "BYPASS",
 
                clock_enable_output_a => "BYPASS",
 
                init_file => ".\memdz.mif",
 
                intended_device_family => "Cyclone III",
 
                lpm_hint => "ENABLE_RUNTIME_MOD=NO",
 
                lpm_type => "altsyncram",
 
                numwords_a => 512,
 
                operation_mode => "ROM",
 
                outdata_aclr_a => "NONE",
 
                outdata_reg_a => "UNREGISTERED",
 
                ram_block_type => "M9K",
 
                widthad_a => 9,
 
                width_a => 18,
 
                width_byteena_a => 1
 
        )
 
        port map (
 
                clock0 => clock,
 
                address_a => address,
 
                q_a => qd (53 downto 36)
 
        );
 
 
 
end tb_arch;
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.