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

Subversion Repositories raytrac

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /raytrac/trunk/tb
    from Rev 64 to Rev 66
    Reverse comparison

Rev 64 → Rev 66

/tb.vhd
0,0 → 1,495
------------------------------------------------
--! @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;
 

powered by: WebSVN 2.1.0

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