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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp/] [raytrac.vhd] - Diff between revs 158 and 160

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 158 Rev 160
--! @file raytrac.vhd
--! @file raytrac.vhd
--! @brief Archivo con el RTL que describe al RayTrac en su totalidad.
--! @brief Archivo con el RTL que describe al RayTrac en su totalidad.
 
 
--! @author Julián Andrés Guarín Reyes
--! @author Julián Andrés Guarín Reyes
--------------------------------------------------------------
--------------------------------------------------------------
-- RAYTRAC
-- RAYTRAC
-- Author Julian Andres Guarin
-- Author Julian Andres Guarin
-- Rytrac.vhd
-- Rytrac.vhd
-- This file is part of raytrac.
-- This file is part of raytrac.
-- 
-- 
--     raytrac is free software: you can redistribute it and/or modify
--     raytrac is free software: you can redistribute it and/or modify
--     it under the terms of the GNU General Public License as published by
--     it under the terms of the GNU General Public License as published by
--     the Free Software Foundation, either version 3 of the License, or
--     the Free Software Foundation, either version 3 of the License, or
--     (at your option) any later version.
--     (at your option) any later version.
-- 
-- 
--     raytrac is distributed in the hope that it will be useful,
--     raytrac is distributed in the hope that it will be useful,
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
--     but WITHOUT ANY WARRANTY; without even the implied warranty of
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--     GNU General Public License for more details.
--     GNU General Public License for more details.
-- 
-- 
--     You should have received a copy of the GNU General Public License
--     You should have received a copy of the GNU General Public License
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.
--     along with raytrac.  If not, see <http://www.gnu.org/licenses/>.
 
 
 
 
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_1164.all;
use work.arithpack.all;
use work.arithpack.all;
 
 
entity raytrac is
entity raytrac is
        port (
        port (
 
 
                clk : in std_logic;
                clk : in std_logic;
                rst : in std_logic;
                rst : in std_logic;
 
 
                --! Se&ntilde;al de lectura de alguna de las colas de resultados.
                --! Se&ntilde;al de lectura de alguna de las colas de resultados.
                rd      : in std_logic;
                rd      : in std_logic;
 
 
                --! Se&ntilde;al de escritura en alguno de los bloques de memoria de operandos o en la cola de instrucciones.
                --! Se&ntilde;al de escritura en alguno de los bloques de memoria de operandos o en la cola de instrucciones.
                wr      : in std_logic;
                wr      : in std_logic;
 
 
                --! Direccion de escritura o lectura
                --! Direccion de escritura o lectura
                add : in std_logic_vector (12 downto 0);
                add : in std_logic_vector (12 downto 0);
 
 
                --! datos de entrada
                --! datos de entrada
                d       : in std_logic_vector (31 downto 0);
                d       : in std_logic_vector (31 downto 0);
 
 
                --! Interrupciones
                --! Interrupciones
                int     : out std_logic_vector (7 downto 0);
                int     : out std_logic_vector (7 downto 0);
 
 
                --! Salidas
                --! Salidas
                q : out std_logic_vector (31 downto 0)
                q : out std_logic_vector (31 downto 0)
 
 
 
 
 
 
        );
        );
end entity;
end entity;
 
 
architecture raytrac_arch of raytrac is
architecture raytrac_arch of raytrac is
 
 
        --! Se&ntilde;ales de State Machine -> Memblock
        --! Se&ntilde;ales de State Machine -> Memblock
        --!TBXSTART:SM
        --!TBXSTART:SM
        signal s_int_rd_add             : std_logic_vector (17 downto 0);
        signal s_int_rd_add             : std_logic_vector (17 downto 0);
        signal s_adda                   : std_logic_vector (8 downto 0);
        signal s_adda                   : std_logic_vector (8 downto 0);
        signal s_addb                   : std_logic_vector (8 downto 0);
        signal s_addb                   : std_logic_vector (8 downto 0);
        signal s_iq_rd_ack              : std_logic;
        signal s_iq_rd_ack              : std_logic;
        --! Se&ntilde;ales de State Machine -> DataPathControl
        --! Se&ntilde;ales de State Machine -> DataPathControl
        signal s_sync_chain_0   : std_logic;
        signal s_sync_chain_0   : std_logic;
        signal s_dpc_uca                : std_logic_vector(2 downto 0);
        signal s_dpc_uca                : std_logic_vector(2 downto 0);
        signal s_eoi                    : std_logic;
        signal s_eoi                    : std_logic;
        --! Se&ntilde;ales de State Machine -> Testbench
        --! Se&ntilde;ales de State Machine -> Testbench
        signal s_smState                : macState;
        signal s_smState                : macState;
        --!TBXEND
        --!TBXEND
        --!TBXSTART:MBLK
        --!TBXSTART:MBLK
        --! Se&ntilde;ales de Memblock -> State Machine
        --! Se&ntilde;ales de Memblock -> State Machine
        signal s_iq_empty               : std_logic;
        signal s_iq_empty               : std_logic;
        signal s_iq                             : std_logic_vector (31 downto 0);
        signal s_iq                             : std_logic_vector (31 downto 0);
        --! Se&ntilde;ales de Memblock -> Interruption Machine
        --! Se&ntilde;ales de Memblock -> Interruption Machine
        signal s_rfull_events   : std_logic_vector (3 downto 0); --Estas se&ntilde;ales tambien entran a DPC.
        signal s_rfull_events   : std_logic_vector (3 downto 0); --Estas se&ntilde;ales tambien entran a DPC.
        --! Se&ntilde;ales de Memblock -> DPC.
        --! Se&ntilde;ales de Memblock -> DPC.
        signal s_q                              : vectorblock12;
        signal s_q                              : vectorblock12;
        signal s_normfifo_q             : std_logic_vector (3*32-1 downto 0);
        signal s_normfifo_q             : std_logic_vector (3*32-1 downto 0);
        signal s_dpfifo_q               : std_logic_vector (2*32-1 downto 0);
        signal s_dpfifo_q               : std_logic_vector (2*32-1 downto 0);
        --!TBXEND
        --!TBXEND
        --!TBXSTART:SQR32
        --!TXBXSTART:SQR32
        --!Se&ntilde;ales de Bloque de Ra&iacute;z Cuadrada a DPC
        --!Se&ntilde;ales de Bloque de Ra&iacute;z Cuadrada a DPC
        signal s_sq32                   : std_logic_vector (31 downto 0);
        signal s_sq32                   : std_logic_vector (31 downto 0);
        --!TBXEND
        --!TBXEND
        --!TBXSTART:INV32
        --!TXBXSTART:INV32
        --!Se&ntilde;ales del bloque inversor a DPC.
        --!Se&ntilde;ales del bloque inversor a DPC.
        signal s_qout32                 : std_logic_vector (31 downto 0);
        signal s_qout32                 : std_logic_vector (31 downto 0);
        --!TBXEND
        --!TBXEND
        --!TBXSTART:DPC
        --!TXBXSTART:DPC
        --! Se&ntilde;ales de DataPathControl -> State Machine
        --! Se&ntilde;ales de DataPathControl -> State Machine
        signal s_full_r                 : std_logic;
        signal s_full_r                 : std_logic;
        --! Se&ntilde;ales de DPC a sqrt32.
        --! Se&ntilde;ales de DPC a sqrt32.
        signal s_rd32                   : std_logic_vector (31 downto 0);
        signal s_rd32                   : std_logic_vector (31 downto 0);
        --! Se&ntilde;ales de DPC a inv32.
        --! Se&ntilde;ales de DPC a inv32.
        signal s_dvd32                  : std_logic_vector (31 downto 0);
        signal s_dvd32                  : std_logic_vector (31 downto 0);
        --! Se&ntilde;ales de DPC  a invr32.
        --! Se&ntilde;ales de DPC  a invr32.
        --! Se&ntilde que va desde DPC -> Memblock
        --! Se&ntilde que va desde DPC -> Memblock
        signal s_resultfifo_wr  : std_logic_vector (7 downto 0);
        signal s_resultfifo_wr  : std_logic_vector (7 downto 0);
        signal s_resultsfifo_w  : std_logic_vector (4 downto 0);
        signal s_resultsfifo_w  : std_logic_vector (4 downto 0);
        signal s_dpfifo_w               : std_logic;
        signal s_dpfifo_w               : std_logic;
        signal s_dpfifo_r               : std_logic;
        signal s_dpfifo_r               : std_logic;
        signal s_dpfifo_d               : std_logic_vector (2*32-1 downto 0);
        signal s_dpfifo_d               : std_logic_vector (2*32-1 downto 0);
        signal s_normfifo_w             : std_logic;
        signal s_normfifo_w             : std_logic;
        signal s_normfifo_r             : std_logic;
        signal s_normfifo_r             : std_logic;
        signal s_results_d              : vectorblock08;
        signal s_results_d              : vectorblock08;
        signal s_normfifo_d             : std_logic_vector (3*32-1 downto 0);
        signal s_normfifo_d             : std_logic_vector (3*32-1 downto 0);
        --!Se&ntilde;ales de DPC a Interruption Machine
        --!Se&ntilde;ales de DPC a Interruption Machine
        signal s_eoi_events             : std_logic_vector (3 downto 0);
        signal s_eoi_events             : std_logic_vector (3 downto 0);
        --! Se&ntilde;ales de DPC a ArithBlock
        --! Se&ntilde;ales de DPC a ArithBlock
        signal s_f                              : vectorblock12;
        signal s_f                              : vectorblock12;
        signal s_a                              : vectorblock08;
        signal s_a                              : vectorblock08;
        --! Parcialmente las se&ntilde;ales de salida de los sumadores van al data path control.
        --! Parcialmente las se&ntilde;ales de salida de los sumadores van al data path control.
        signal s_s                              : vectorblock04;
        signal s_s                              : vectorblock04;
        signal s_p                              : vectorblock06;
        signal s_p                              : vectorblock06;
        --!TBXEND
        --!TBXEND
        --!TBXSTART:IM
        --!TBXSTART:IM
        --! Se&ntilde;ales de Interruption Machine al testbench
        --! Se&ntilde;ales de Interruption Machine al testbench
        signal s_iCtrlState             : iCtrlState;
        signal s_iCtrlState             : iCtrlState;
        --!TBXEND       
        --!TBXEND       
begin
begin
 
 
 
 
 
 
 
 
 
 
        --! Instanciar el bloque de memorias MEMBLOCK
        --! Instanciar el bloque de memorias MEMBLOCK
        s_resultfifo_wr <= s_resultsfifo_w(4)&s_resultsfifo_w(4)&s_resultsfifo_w(4)&s_resultsfifo_w(3)&s_resultsfifo_w(2)&s_resultsfifo_w(1)&s_resultsfifo_w(2)&s_resultsfifo_w(0);
        s_resultfifo_wr <= s_resultsfifo_w(4)&s_resultsfifo_w(4)&s_resultsfifo_w(4)&s_resultsfifo_w(3)&s_resultsfifo_w(2)&s_resultsfifo_w(1)&s_resultsfifo_w(2)&s_resultsfifo_w(0);
        s_int_rd_add  <= s_addb&s_adda;
        s_int_rd_add  <= s_addb&s_adda;
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        MemoryBlock : memblock
        MemoryBlock : memblock
        generic map (
        generic map (
                blocksize                                       => 512,
                blocksize                                       => 512,
                external_readable_widthad       => 3,
                external_readable_widthad       => 3,
                external_writeable_widthad      => 4
                external_writeable_widthad      => 4
        )
        )
        port map (
        port map (
                clk                                     => clk,
                clk                                     => clk,
                rst                                     => rst,
                rst                                     => rst,
                dpfifo_rd                       => s_dpfifo_r,
                dpfifo_rd                       => s_dpfifo_r,
                normfifo_rd                     => s_normfifo_r,
                normfifo_rd                     => s_normfifo_r,
                dpfifo_wr                       => s_dpfifo_w,
                dpfifo_wr                       => s_dpfifo_w,
                normfifo_wr                     => s_normfifo_w,
                normfifo_wr                     => s_normfifo_w,
                instrfifo_rd            => s_iq_rd_ack,
                instrfifo_rd            => s_iq_rd_ack,
                resultfifo_wr           => s_resultfifo_wr,
                resultfifo_wr           => s_resultfifo_wr,
                instrfifo_empty         => s_iq_empty,
                instrfifo_empty         => s_iq_empty,
                ext_rd                          => rd,
                ext_rd                          => rd,
                ext_wr                          => wr,
                ext_wr                          => wr,
                ext_wr_add                      => add,
                ext_wr_add                      => add,
                ext_rd_add                      => add(12 downto 10),
                ext_rd_add                      => add(12 downto 10),
                ext_d                           => d,
                ext_d                           => d,
                resultfifo_full         => s_rfull_events,
                resultfifo_full         => s_rfull_events,
                int_d                           => s_results_d,
                int_d                           => s_results_d,
                ext_q                           => q,
                ext_q                           => q,
                instrfifo_q                     => s_iq,
                instrfifo_q                     => s_iq,
                int_q                           => s_q,
                int_q                           => s_q,
                int_rd_add                      => s_int_rd_add,
                int_rd_add                      => s_int_rd_add,
                dpfifo_d                        => s_dpfifo_d,
                dpfifo_d                        => s_dpfifo_d,
                normfifo_d                      => s_normfifo_d,
                normfifo_d                      => s_normfifo_d,
                dpfifo_q                        => s_dpfifo_q,
                dpfifo_q                        => s_dpfifo_q,
                normfifo_q                      => s_normfifo_q
                normfifo_q                      => s_normfifo_q
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
 
 
        --! Instanciar el bloque DPC
        --! Instanciar el bloque DPC
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        DataPathControl_And_Syncronization_Block: dpc
        DataPathControl_And_Syncronization_Block: dpc
        port map (
        port map (
 
 
                clk                             => clk,
                clk                             => clk,
                rst                             => rst,
                rst                             => rst,
                paraminput              => s_q,
                paraminput              => s_q,
                prd32blko               => s_p,
                prd32blko               => s_p,
                add32blko               => s_s,
                add32blko               => s_s,
                sqr32blko               => s_sq32,
                sqr32blko               => s_sq32,
                inv32blko               => s_qout32,
                inv32blko               => s_qout32,
                fifo32x23_q             => s_normfifo_q,
                fifo32x23_q             => s_normfifo_q,
                fifo32x09_q             => s_dpfifo_q,
                fifo32x09_q             => s_dpfifo_q,
                unary                   => s_dpc_uca(2),
                unary                   => s_dpc_uca(2),
                crossprod               => s_dpc_uca(1),
                crossprod               => s_dpc_uca(1),
                addsub                  => s_dpc_uca(0),
                addsub                  => s_dpc_uca(0),
                sync_chain_0    => s_sync_chain_0,
                sync_chain_0    => s_sync_chain_0,
                eoi_int                 => s_eoi,
                eoi_int                 => s_eoi,
                eoi_demuxed_int => s_eoi_events,
                eoi_demuxed_int => s_eoi_events,
                sqr32blki               => s_rd32,
                sqr32blki               => s_rd32,
                inv32blki               => s_dvd32,
                inv32blki               => s_dvd32,
                fifo32x26_d             => s_normfifo_d,
                fifo32x26_d             => s_normfifo_d,
                fifo32x09_d             => s_dpfifo_d,
                fifo32x09_d             => s_dpfifo_d,
                prd32blki               => s_f,
                prd32blki               => s_f,
                add32blki               => s_a,
                add32blki               => s_a,
                resw                    => s_resultsfifo_w,
                resw                    => s_resultsfifo_w,
                fifo32x09_w             => s_dpfifo_w,
                fifo32x09_w             => s_dpfifo_w,
                fifo32x23_w             => s_normfifo_w,
                fifo32x23_w             => s_normfifo_w,
                fifo32x09_r             => s_dpfifo_r,
                fifo32x09_r             => s_dpfifo_r,
                fifo32x23_r             => s_normfifo_r,
                fifo32x23_r             => s_normfifo_r,
                resf_vector             => s_rfull_events,
                resf_vector             => s_rfull_events,
                resf_event              => s_full_r,
                resf_event              => s_full_r,
                resultoutput    => s_results_d
                resultoutput    => s_results_d
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
 
 
 
 
        --! Instanciar el bloque de inversion
        --! Instanciar el bloque de inversion
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        inversion_block : invr32
        inversion_block : invr32
        port map (
        port map (
                clk             => clk,
                clk             => clk,
                dvd32   => s_dvd32,
                dvd32   => s_dvd32,
                qout32  => s_qout32
                qout32  => s_qout32
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
 
 
        --! Instanciar el bloque de ra&iacute;z cuadrada.
        --! Instanciar el bloque de ra&iacute;z cuadrada.
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        square_root : sqrt32
        square_root : sqrt32
        port map (
        port map (
                clk     => clk,
                clk     => clk,
                rd32    => s_rd32,
                rd32    => s_rd32,
                sq32    => s_sq32
                sq32    => s_sq32
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
 
 
        --! Instanciar el bloque aritm&eacute;tico.
        --! Instanciar el bloque aritm&eacute;tico.
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        arithmetic_block : arithblock
        arithmetic_block : arithblock
        port map (
        port map (
                clk => clk,
                clk => clk,
                rst => rst,
                rst => rst,
                dpc => s_dpc_uca(1),
                dpc => s_dpc_uca(1),
                f       => s_f,
                f       => s_f,
                a       => s_a,
                a       => s_a,
                s       => s_s,
                s       => s_s,
                p       => s_p
                p       => s_p
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
 
 
        --! Instanciar la maquina de interrupciones
        --! Instanciar la maquina de interrupciones
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        interruption_machine : im
        interruption_machine : im
        generic map (
        generic map (
                num_events              => 4,
                num_events              => 4,
                cycles_to_wait  => 1023
                cycles_to_wait  => 1023
        )
        )
        port map (
        port map (
                clk                             => clk,
                clk                             => clk,
                rst                             => rst,
                rst                             => rst,
                rfull_events    => s_rfull_events,
                rfull_events    => s_rfull_events,
                eoi_events              => s_eoi_events,
                eoi_events              => s_eoi_events,
                eoi_int                 => int(3 downto 0),
                eoi_int                 => int(3 downto 0),
                rfull_int               => int(7 downto 4),
                rfull_int               => int(7 downto 4),
                state                   => s_iCtrlState
                state                   => s_iCtrlState
 
 
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
        --!Instanciar la maquina de estados
        --!Instanciar la maquina de estados
 
 
        --!TBXINSTANCESTART
        --!TBXINSTANCESTART
        state_machine : sm
        state_machine : sm
 
 
        port map (
        port map (
                clk                     => clk,
                clk                     => clk,
                rst                     => rst,
                rst                     => rst,
                instrQq                 => s_iq,
                instrQq                 => s_iq,
                instrQ_empty    => s_iq_empty,
                instrQ_empty    => s_iq_empty,
                adda                    => s_adda,
                adda                    => s_adda,
                addb                    => s_addb,
                addb                    => s_addb,
                sync_chain_0    => s_sync_chain_0,
                sync_chain_0    => s_sync_chain_0,
                instrRdAckd             => s_iq_rd_ack,
                instrRdAckd             => s_iq_rd_ack,
                full_r                  => s_full_r,
                full_r                  => s_full_r,
                eoi                             => s_eoi,
                eoi                             => s_eoi,
                dpc_uca                 => s_dpc_uca,
                dpc_uca                 => s_dpc_uca,
                state                   => s_smState
                state                   => s_smState
 
 
        );
        );
        --!TBXINSTANCEEND
        --!TBXINSTANCEEND
 
 
end architecture;
end architecture;
 
 

powered by: WebSVN 2.1.0

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