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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp_sgdma/] [raytrac.vhd] - Diff between revs 248 and 249

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 248 Rev 249
Line 89... Line 89...
        constant reg_vz                         :       integer:=01;
        constant reg_vz                         :       integer:=01;
        constant reg_vy                         :       integer:=02;
        constant reg_vy                         :       integer:=02;
        constant reg_vx                         :       integer:=03;
        constant reg_vx                         :       integer:=03;
        constant reg_scalar                     :       integer:=04;
        constant reg_scalar                     :       integer:=04;
        constant reg_nfetch                     :       integer:=05;
        constant reg_nfetch                     :       integer:=05;
        constant reg_outputcounter              :       integer:=06;
        constant reg_timercounter               :       integer:=06;
        constant reg_inputcounter               :       integer:=07;
        constant reg_inputcounter               :       integer:=07;
        constant reg_fetchstart                 :       integer:=08;
        constant reg_fetchstart                 :       integer:=08;
        constant reg_sinkstart                  :       integer:=09;
        constant reg_sinkstart                  :       integer:=09;
        constant reg_ax                         :       integer:=10;
        constant reg_ax                         :       integer:=10;
        constant reg_ay                         :       integer:=11;
        constant reg_ay                         :       integer:=11;
Line 188... Line 188...
        signal zero : std_logic_vector(31 downto 0);
        signal zero : std_logic_vector(31 downto 0);
 
 
        --!High Register Bank Control Signals or AKA Load Sync Chain Control
        --!High Register Bank Control Signals or AKA Load Sync Chain Control
        signal sdownload_chain  : download_chain;
        signal sdownload_chain  : download_chain;
        signal sdownload_start  : download_chain;
        signal sdownload_start  : download_chain;
        signal srestart_chain   : std_logic;
 
        --!State Machine Hysteresis Control Signals
        --!State Machine Hysteresis Control Signals
        signal sdrain_condition         : std_logic;
        signal sdrain_condition         : std_logic;
        signal sdrain_burstcount        : std_logic_vector(mb downto 0);
        signal sdrain_burstcount        : std_logic_vector(mb downto 0);
        signal sdata_fetch_counter      : std_logic_vector(reg_nfetch_high downto 0);
        signal sdata_fetch_counter      : std_logic_vector(reg_nfetch_high downto 0);
        signal sburstcount_sink         : std_logic_vector(mb downto 0);
        signal sburstcount_sink         : std_logic_vector(mb downto 0);
Line 344... Line 343...
                        sdrain_burstcount <= '1'&zero(mb-1 downto 0);
                        sdrain_burstcount <= '1'&zero(mb-1 downto 0);
                        --! Flow Control: El drenado de datos continuar&aacute; si el n&uacute;mero de datos en la cola es mayor o igual a 2**mb O si hay muy pocos datos y no hay datos transitando por el pipeline.   
                        --! Flow Control: El drenado de datos continuar&aacute; si el n&uacute;mero de datos en la cola es mayor o igual a 2**mb O si hay muy pocos datos y no hay datos transitando por el pipeline.   
                        sdrain_condition <= '1';
                        sdrain_condition <= '1';
                end if;
                end if;
 
 
                --! Restart param load chain
 
                srestart_chain <= sreg_block(reg_ctrl)(reg_ctrl_irq) and sreg_block(reg_ctrl)(reg_ctrl_rlsc);
 
 
 
                --! Data dumpster: Descaratar dato de upload una vez la interconexi&oacute;n haya enganchado el dato.
                --! Data dumpster: Descaratar dato de upload una vez la interconexi&oacute;n haya enganchado el dato.
                if sm=SINK and master_waitrequest='0' and smaster_write='1' then
                if sm=SINK and master_waitrequest='0' and smaster_write='1' then
                        soutb_ack <= '1';
                        soutb_ack <= '1';
                else
                else
                        soutb_ack <= '0';
                        soutb_ack <= '0';
Line 384... Line 380...
                        sreg_block(reg_fetchstart) <= (others => '0');
                        sreg_block(reg_fetchstart) <= (others => '0');
                        --! Control and Status Register
                        --! Control and Status Register
                        sreg_block(reg_ctrl) <= (others => '0');
                        sreg_block(reg_ctrl) <= (others => '0');
                        --! Contador Overall
                        --! Contador Overall
                        sreg_block(reg_inputcounter) <= (others => '0');
                        sreg_block(reg_inputcounter) <= (others => '0');
                        sreg_block(reg_outputcounter) <= (others => '0');
--                      sreg_block(reg_timercounter) <= (others => '0');
                        --! Address Fetch Counter 
                        --! Address Fetch Counter 
                        sreg_block(reg_nfetch) <= (others => '0');
                        sreg_block(reg_nfetch) <= (others => '0');
 
 
 
 
                elsif clk'event and clk='1' then
                elsif clk'event and clk='1' then
Line 396... Line 392...
                        --! Nevermind the State, discount the incoming valid data counter.
                        --! Nevermind the State, discount the incoming valid data counter.
                        sdata_fetch_counter <= sdata_fetch_counter-master_readdatavalid;
                        sdata_fetch_counter <= sdata_fetch_counter-master_readdatavalid;
 
 
                        --! Debug Counter.
                        --! Debug Counter.
                        sreg_block(reg_inputcounter) <= sreg_block(reg_inputcounter) + master_readdatavalid;
                        sreg_block(reg_inputcounter) <= sreg_block(reg_inputcounter) + master_readdatavalid;
                        sreg_block(reg_outputcounter) <= sreg_block(reg_outputcounter) + soutb_ack;
 
 
                        --!Timer Counter.
 
--                      case sm is
 
--                              when IDLE =>
 
--                                      sreg_block(reg_timercounter) <= sreg_block(reg_timercounter) + 0;
 
--                              when others => 
 
--                                      sreg_block(reg_timercounter) <= sreg_block(reg_timercounter) + 1;
 
--                      end case;                                
 
 
                        --! Flags
                        --! Flags
 
 
 
 
                        case sm is
                        case sm is
Line 504... Line 507...
                                                                --! Solo se permitira escribir en el registro de control si no hay una interrupci&oacute;n activa o si la hay solamente si se esta intentando desactivar la interrupci&acute;n 
                                                                --! Solo se permitira escribir en el registro de control si no hay una interrupci&oacute;n activa o si la hay solamente si se esta intentando desactivar la interrupci&acute;n 
                                                                if sreg_block(reg_ctrl)(reg_ctrl_irq)='0' or sslave_writedata(reg_ctrl_irq)='0' then
                                                                if sreg_block(reg_ctrl)(reg_ctrl_irq)='0' or sslave_writedata(reg_ctrl_irq)='0' then
                                                                        sreg_block(reg_ctrl)<= sslave_writedata;
                                                                        sreg_block(reg_ctrl)<= sslave_writedata;
                                                                end if;
                                                                end if;
                                                        when x"5" => sreg_block(reg_nfetch) <= sslave_writedata;
                                                        when x"5" => sreg_block(reg_nfetch) <= sslave_writedata;
                                                        when x"6" => sreg_block(reg_outputcounter) <= sslave_writedata;
--                                                      when x"6" => sreg_block(reg_timercounter) <= sslave_writedata; 
                                                        when x"7" => sreg_block(reg_inputcounter) <= sslave_writedata;
                                                        when x"7" => sreg_block(reg_inputcounter) <= sslave_writedata;
                                                        when x"8" => sreg_block(reg_fetchstart) <= sslave_writedata;
                                                        when x"8" => sreg_block(reg_fetchstart) <= sslave_writedata;
                                                        when x"9" => sreg_block(reg_sinkstart) <= sslave_writedata;
                                                        when x"9" => sreg_block(reg_sinkstart) <= sslave_writedata;
                                                        when others => null;
                                                        when others => null;
                                                end case;
                                                end case;
Line 519... Line 522...
 
 
                                                        --! Flow Control: Existe un n&uacute;mero de descargas programadas por el sistema, comenzar a realizarlas.
                                                        --! Flow Control: Existe un n&uacute;mero de descargas programadas por el sistema, comenzar a realizarlas.
                                                        --! Ir al estado Source.
                                                        --! Ir al estado Source.
                                                        sm <= SOURCE;
                                                        sm <= SOURCE;
                                                        sreg_block(reg_ctrl)(reg_ctrl_rom) <= '1';
                                                        sreg_block(reg_ctrl)(reg_ctrl_rom) <= '1';
 
 
                                                else
                                                else
                                                        sreg_block(reg_ctrl)(reg_ctrl_rom) <= '0';
                                                        sreg_block(reg_ctrl)(reg_ctrl_rom) <= '0';
 
 
                                                end if;
                                                end if;
                                        end if;
                                        end if;
Line 646... Line 648...
                        for i in reg_bz downto reg_ax loop
                        for i in reg_bz downto reg_ax loop
                                sreg_block(i) <= (others => '0');
                                sreg_block(i) <= (others => '0');
                        end loop;
                        end loop;
                elsif clk'event and clk='1' then
                elsif clk'event and clk='1' then
                        ssync_chain_1   <= '0';
                        ssync_chain_1   <= '0';
                        if master_readdatavalid='1' and sreg_block(reg_ctrl)(reg_ctrl_dma)='0' then
                        if master_readdatavalid='1' and sreg_block(reg_ctrl)(reg_ctrl_dma)='0' and (sreg_block(reg_ctrl)(reg_ctrl_irq)='0' or sreg_block(reg_ctrl)(reg_ctrl_rlsc)='0') then
                                --! El dato en la interconexi&oacute;n es valido, se debe enganchar. 
                                --! El dato en la interconexi&oacute;n es valido, se debe enganchar. 
                                case sdownload_chain is
                                case sdownload_chain is
                                        when DWAX | DWAXBX  =>
                                        when DWAX | DWAXBX  =>
                                                --! Cargar el operando correspondiente al componente "X" del vector "A" 
                                                --! Cargar el operando correspondiente al componente "X" del vector "A" 
                                                ssync_chain_1 <= '0';
                                                ssync_chain_1 <= '0';
Line 702... Line 704...
                                                        sdownload_chain <= DWAX;
                                                        sdownload_chain <= DWAX;
                                                end if;
                                                end if;
                                        when others =>
                                        when others =>
                                                null;
                                                null;
                                end case;
                                end case;
 
                        --! Ok operation check if operation has ended.  If that's the case.
                                if srestart_chain='1' then
                        elsif sreg_block(reg_ctrl)(reg_ctrl_irq)='1' and sreg_block(reg_ctrl)(reg_ctrl_rlsc)='1' then
                                        sdownload_chain <= sdownload_start;
                                        sdownload_chain <= sdownload_start;
                                end if;
                                end if;
 
 
                        end if;
 
                end if;
                end if;
        end process;
        end process;
--! *************************************************************************************************************************************************************************************************************************************************************
--! *************************************************************************************************************************************************************************************************************************************************************
--! AVALON MEMORY MAPPED MASTER FINISHED
--! AVALON MEMORY MAPPED MASTER FINISHED
--! *************************************************************************************************************************************************************************************************************************************************************
--! *************************************************************************************************************************************************************************************************************************************************************
Line 724... Line 724...
        begin
        begin
                if rst=rstMasterValue then
                if rst=rstMasterValue then
                        for i in reg_scalar downto reg_vz loop
                        for i in reg_scalar downto reg_vz loop
                                sreg_block(i) <= (others => '0');
                                sreg_block(i) <= (others => '0');
                        end loop;
                        end loop;
 
                        sreg_block(reg_timercounter) <= (others => '0');
                        slave_readdata <= (others => '0');
                        slave_readdata <= (others => '0');
                        sslave_address <= (others => '0');
                        sslave_address <= (others => '0');
                        sslave_writedata <= (others => '0');
                        sslave_writedata <= (others => '0');
                        sslave_write <= '0';
                        sslave_write <= '0';
                        sslave_read <= '0';
                        sslave_read <= '0';
Line 738... Line 738...
                        sslave_address          <= slave_address;
                        sslave_address          <= slave_address;
                        sslave_write            <= slave_write;
                        sslave_write            <= slave_write;
                        sslave_read                     <= slave_read;
                        sslave_read                     <= slave_read;
                        sslave_writedata        <= slave_writedata;
                        sslave_writedata        <= slave_writedata;
 
 
                        for i in reg_scalar downto reg_scalar loop
                        if sslave_write='1' and sslave_address=reg_timercounter then
                                if sslave_address=i then
                                sreg_block(reg_timercounter) <= sslave_writedata;
                                        if sslave_write='1' then
                        else
                                                sreg_block(i) <= sslave_writedata;
                                sreg_block(reg_timercounter) <= sreg_block(reg_timercounter)+1;
                                        end if;
                                        end if;
 
 
 
                        if sslave_write='1' and sslave_address=reg_scalar then
 
                                sreg_block(reg_scalar) <= sslave_writedata;
 
                        else
 
                                sreg_block(reg_scalar) <= sreg_block(reg_scalar);
                                end if;
                                end if;
                        end loop;
 
 
--                      for i in reg_scalar downto reg_scalar loop
 
--                              if sslave_address=i then
 
--                                      if sslave_write='1' then
 
--                                              sreg_block(i) <= sslave_writedata;
 
--                                      end if;
 
--                              end if;
 
--                      end loop;
                        for i in 15 downto 0 loop
                        for i in 15 downto 0 loop
                                if sslave_address=i then
                                if sslave_address=i then
                                        if sslave_read='1' then
                                        if sslave_read='1' then
 
 
                                                if (i<10 and i>3) or i=0 then
                                                if (i<10 and i>3) or i=0 then
Line 886... Line 898...
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --! Result Vector Scalar component (reg_scalar) BASE_ADDRESS + 0x10                                                                                                                                                     |
        --! Result Vector Scalar component (reg_scalar) BASE_ADDRESS + 0x10                                                                                                                                                     |
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --! Scratch Vector 00   (reg_nfetch) BASE_ADDRESS +     0x14                                                                                                                                                            |
        --! Scratch Vector 00   (reg_nfetch) BASE_ADDRESS +     0x14                                                                                                                                                            |
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --! output Data Counter (reg_outputcounter) BASE_ADDRESS + 0x18                                                                                                                                                         |
        --! output Data Counter (reg_timercounter) BASE_ADDRESS + 0x18                                                                                                                                                          |
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --! Input Data Counter  (reg_inputcounter) BASE_ADDRESS + 0x1C                                                                                                                                                          |
        --! Input Data Counter  (reg_inputcounter) BASE_ADDRESS + 0x1C                                                                                                                                                          |
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --! Data Fetch Start Address (reg_fetchstart) BASE_ADDRESS + 0x20                                                                                                                                                       |
        --! Data Fetch Start Address (reg_fetchstart) BASE_ADDRESS + 0x20                                                                                                                                                       |
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|
        --!---------|-----------|-------------------------------------------------------------------------------------------------------------------|

powered by: WebSVN 2.1.0

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