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

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [uf.vhd] - Diff between revs 27 and 28

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

Rev 27 Rev 28
Line 39... Line 39...
--! \n\n
--! \n\n
--! La característica fundamental de uf, es que puede realizar 2 operaciones de producto punto al mimso tiempo ó una operación de producto cruz al mismo tiempo. La otra característica importante es que el pipe de producto punto es mas largo que el pipe de producto cruz: el producto punto tomará 3 clocks para realizarse, mientras que el procto punto tomara 4 clocks para realizarse.    
--! La característica fundamental de uf, es que puede realizar 2 operaciones de producto punto al mimso tiempo ó una operación de producto cruz al mismo tiempo. La otra característica importante es que el pipe de producto punto es mas largo que el pipe de producto cruz: el producto punto tomará 3 clocks para realizarse, mientras que el procto punto tomara 4 clocks para realizarse.    
 
 
entity uf is
entity uf is
        generic (
        generic (
                        use_std_logic_signed : string := "YES"
                        use_std_logic_signed : string := "NO"
        );
        );
        port (
        port (
                opcode          : in std_logic; --! Entrada que dentro de la arquitectura funciona como selector de la operación que se lleva a cabo en la primera etapa de sumadores/restadores. 
                opcode          : in std_logic; --! Entrada que dentro de la arquitectura funciona como selector de la operación que se lleva a cabo en la primera etapa de sumadores/restadores. 
                m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : in std_logic_vector(17 downto 0); --! Entradas que van conectadas a los multiplicadores en la primera etapa de la descripción.  
                m0f0,m0f1,m1f0,m1f1,m2f0,m2f1,m3f0,m3f1,m4f0,m4f1,m5f0,m5f1 : in std_logic_vector(17 downto 0); --! Entradas que van conectadas a los multiplicadores en la primera etapa de la descripción.  
                cpx,cpy,cpz,dp0,dp1 : out std_logic_vector(31 downto 0); --! Salidas donde se registran los resultados de las operaciones aritméticas: cpx,cpy,cpz serán los componentes del vector que da por resultado el producto cruz entre los vectores AxB ó CxD.  
                cpx,cpy,cpz,dp0,dp1 : out std_logic_vector(31 downto 0); --! Salidas donde se registran los resultados de las operaciones aritméticas: cpx,cpy,cpz serán los componentes del vector que da por resultado el producto cruz entre los vectores AxB ó CxD.  
Line 55... Line 55...
 
 
        -- Stage 0 signals
        -- Stage 0 signals
 
 
        signal stage0mf00,stage0mf01,stage0mf10,stage0mf11,stage0mf20,stage0mf21,stage0mf30,stage0mf31,stage0mf40,stage0mf41,stage0mf50,stage0mf51 : std_logic_vector(17 downto 0); --! Señales que conectan los operandos seleccionados en opcode a las entradas de los multiplicadores.
        signal stage0mf00,stage0mf01,stage0mf10,stage0mf11,stage0mf20,stage0mf21,stage0mf30,stage0mf31,stage0mf40,stage0mf41,stage0mf50,stage0mf51 : std_logic_vector(17 downto 0); --! Señales que conectan los operandos seleccionados en opcode a las entradas de los multiplicadores.
        signal stage0p0,stage0p1, stage0p2, stage0p3, stage0p4, stage0p5 : std_logic_vector(31 downto 0); --! Señales / buses, con los productos de los multiplicadores. 
        signal stage0p0,stage0p1, stage0p2, stage0p3, stage0p4, stage0p5 : std_logic_vector(31 downto 0); --! Señales / buses, con los productos de los multiplicadores. 
        signal stage0opcode : std_logic; --! Señal de atraso del opcode. Revisar el diagrama de bloques para mayor claridad.
        signal stageMopcode : std_logic; --! Señal de atraso del opcode. Revisar el diagrama de bloques para mayor claridad.
 
 
        --Stage 1 signals 
        --Stage 1 signals 
 
 
        signal stage1p0, stage1p1, stage1p2, stage1p3, stage1p4, stage1p5 : std_logic_vector (31 downto 0); --! Señales provenientes de los productos de la etapa previa de multiplicadores.
        signal stage1p0, stage1p1, stage1p2, stage1p3, stage1p4, stage1p5 : std_logic_vector (31 downto 0); --! Señales provenientes de los productos de la etapa previa de multiplicadores.
        signal stage1a0, stage1a1, stage1a2 : std_logic_vector (31 downto 0); --! Señales / buses, con los resultados de los sumadores. 
        signal stage1a0, stage1a1, stage1a2 : std_logic_vector (31 downto 0); --! Señales / buses, con los resultados de los sumadores. 
        signal stage1opcode : std_logic; --! Señal proveniente del opcode que selecciona si los sumadores deben ejecutar una resta o una suma dependiendo de la operación que se ejecute en ese momento del pipe.  
        signal stageSRopcode : std_logic; --! Señal proveniente del opcode que selecciona si los sumadores deben ejecutar una resta o una suma dependiendo de la operación que se ejecute en ese momento del pipe.  
 
 
        -- Some support signals
        -- Some support signals
        signal stage1_internalCarry     : std_logic_vector(2 downto 0); --! Cada uno de los 3 sumadores de la etapa de sumadores está compuesto de una cascada de 2 sumadores Carry Look Ahead: aXhigh y aXlow. El carry out del componente low y el carry in del componente high, se conectará a través de las señales internal carry.   
        signal stage1_internalCarry     : std_logic_vector(2 downto 0); --! Cada uno de los 3 sumadores de la etapa de sumadores está compuesto de una cascada de 2 sumadores Carry Look Ahead: aXhigh y aXlow. El carry out del componente low y el carry in del componente high, se conectará a través de las señales internal carry.   
        signal stage2_internalCarry : std_logic_vector(1 downto 0); --! Cada uno de los 2 sumadores de la última etapa de sumadores está compuesto de una cascada de 2 sumadores Carry Look AheadÑ: aXhigh y aXlow. El carry out del componente low y el carry in del componente high, se conectará a través de las señales internal carry.  
        signal stage2_internalCarry : std_logic_vector(1 downto 0); --! Cada uno de los 2 sumadores de la última etapa de sumadores está compuesto de una cascada de 2 sumadores Carry Look AheadÑ: aXhigh y aXlow. El carry out del componente low y el carry in del componente high, se conectará a través de las señales internal carry.  
 
 
Line 141... Line 141...
 
 
        useIeee:
        useIeee:
        if use_std_logic_signed="YES" generate
        if use_std_logic_signed="YES" generate
                -- Adder Instantiation (sTaGe 1)
                -- Adder Instantiation (sTaGe 1)
                stage1adderProc:
                stage1adderProc:
                process (stage1p0,stage1p1,stage1p2,stage1p3,stage1p4,stage1p5,stage1opcode)
                process (stage1p0,stage1p1,stage1p2,stage1p3,stage1p4,stage1p5,stageSRopcode)
                begin
                begin
                        case (stage1opcode) is
                        case (stageSRopcode) is
                                when '1' =>             -- Cross Product
                                when '1' =>             -- Cross Product
                                        stage1a0 <= stage1p0-stage1p1;
                                        stage1a0 <= stage1p0-stage1p1;
                                        stage1a2 <= stage1p4-stage1p5;
                                        stage1a2 <= stage1p4-stage1p5;
                                when others =>  -- Dot Product
                                when others =>  -- Dot Product
                                        stage1a0 <= stage1p0+stage1p1;
                                        stage1a0 <= stage1p0+stage1p1;
Line 164... Line 164...
        if use_std_logic_signed="NO" generate
        if use_std_logic_signed="NO" generate
                --! Adder 0, 16 bit carry lookahead low adder.
                --! Adder 0, 16 bit carry lookahead low adder.
                a0low : adder
                a0low : adder
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                port map        (stage1p0(15 downto 0),stage1p1(15 downto 0),stage1opcode,'0',stage1a0(15 downto 0),stage1_internalCarry(0));
                port map        (stage1p0(15 downto 0),stage1p1(15 downto 0),stageSRopcode,'0',stage1a0(15 downto 0),stage1_internalCarry(0));
                --Adder 0, 16 bit carry lookahead high adder.
                --Adder 0, 16 bit carry lookahead high adder.
                a0high : adder
                a0high : adder
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                port map        (stage1p0(31 downto 16),stage1p1(31 downto 16),stage1opcode,stage1_internalCarry(0),stage1a0(31 downto 16),open);
                port map        (stage1p0(31 downto 16),stage1p1(31 downto 16),stageSRopcode,stage1_internalCarry(0),stage1a0(31 downto 16),open);
                --! Adder 1, 16 bit carry lookahead low adder. 
                --! Adder 1, 16 bit carry lookahead low adder. 
                a1low : adder
                a1low : adder
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                port map        (stage1p2(15 downto 0),stage1p3(15 downto 0),'1','0',stage1a1(15 downto 0),stage1_internalCarry(1));
                port map        (stage1p2(15 downto 0),stage1p3(15 downto 0),'1','0',stage1a1(15 downto 0),stage1_internalCarry(1));
Line 184... Line 184...
                port map        (stage1p2(31 downto 16),stage1p3(31 downto 16),'1',stage1_internalCarry(1),stage1a1(31 downto 16),open);
                port map        (stage1p2(31 downto 16),stage1p3(31 downto 16),'1',stage1_internalCarry(1),stage1a1(31 downto 16),open);
                --! Adder 2, 16 bit carry lookahead low adder. 
                --! Adder 2, 16 bit carry lookahead low adder. 
                a2low : adder
                a2low : adder
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                port map        (stage1p4(15 downto 0),stage1p5(15 downto 0),stage1opcode,'0',stage1a2(15 downto 0),stage1_internalCarry(2));
                port map        (stage1p4(15 downto 0),stage1p5(15 downto 0),stageSRopcode,'0',stage1a2(15 downto 0),stage1_internalCarry(2));
                --! Adder 2, 16 bit carry lookahead high adder.
                --! Adder 2, 16 bit carry lookahead high adder.
                a2high : adder
                a2high : adder
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                generic map (16,"CLA","YES")    -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                                                                                -- Yes instantiate Xor gates stage in the adder so we can substract on the opcode signal command.
                port map        (stage1p4(31 downto 16),stage1p5(31 downto 16),stage1opcode,stage1_internalCarry(2),stage1a2(31 downto 16),open);
                port map        (stage1p4(31 downto 16),stage1p5(31 downto 16),stageSRopcode,stage1_internalCarry(2),stage1a2(31 downto 16),open);
                -- Adder Instantiation (Stage 2)
                -- Adder Instantiation (Stage 2)
                --! Adder 3, 16 bit carry lookahead low adder. 
                --! Adder 3, 16 bit carry lookahead low adder. 
                a3low : adder
                a3low : adder
                generic map (16,"CLA","NO")             -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                generic map (16,"CLA","NO")             -- Carry Look Ahead Logic (More Gates Used, But Less Time)
                                                                                -- Dont instantiate Xor gates stage in the adder.
                                                                                -- Dont instantiate Xor gates stage in the adder.
Line 246... Line 246...
        dp0 <= stage2a3;
        dp0 <= stage2a3;
        dp1 <= stage2a4;
        dp1 <= stage2a4;
 
 
        -- Looking into the design the stage 1 to stage 2 are the sequences pipe stages that must be controlled in this particular HDL.
        -- Looking into the design the stage 1 to stage 2 are the sequences pipe stages that must be controlled in this particular HDL.
        --! Este proceso describe la manera en que se organizan las etapas de pipe.
        --! Este proceso describe la manera en que se organizan las etapas de pipe.
        --! Todas las señales internas en las etapas de pipe, en el momento en que la entrada rst alcanza el nivel rstMasterValue, se colocan en '0'. Nótese que, salvo stage0opcode<=stage1opcode, las señales que vienen desde la entrada hacia los multiplicadores en la etapa 0 y desde la salida de los multiplicadores desde la etapa0 hacia la etapa 1, no están siendo descritas en este proceso, la explicación de es simple: Los multiplicadores que se están instanciado tienen registros a la entrada y la salida, permitiendo así, registrar las entradas y registrar los productos o salidas de los  multiplicadores, hacia la etapa 1 o etapa de sumadores/restadores. 
        --! Todas las señales internas en las etapas de pipe, en el momento en que la entrada rst alcanza el nivel rstMasterValue, se colocan en '0'. Nótese que, salvo stageMopcode<=stageSRopcode, las señales que vienen desde la entrada hacia los multiplicadores en la etapa 0 y desde la salida de los multiplicadores desde la etapa0 hacia la etapa 1, no están siendo descritas en este proceso, la explicación de es simple: Los multiplicadores que se están instanciado tienen registros a la entrada y la salida, permitiendo así, registrar las entradas y registrar los productos o salidas de los  multiplicadores, hacia la etapa 1 o etapa de sumadores/restadores. 
 
 
        uf_seq: process (clk,rst)
        uf_seq: process (clk,rst)
        begin
        begin
 
 
                if rst=rstMasterValue then
                if rst=rstMasterValue then
                        stage0opcode    <= '0';
                        stageMopcode    <= '0';
                        stage1opcode    <= '0';
                        stageSRopcode   <= '0';
 
 
                        stage2a2 <= (others => '0');
                        stage2a2 <= (others => '0');
                        stage2p3 <= (others => '0');
                        stage2p3 <= (others => '0');
                        stage2p2 <= (others => '0');
                        stage2p2 <= (others => '0');
                        stage2a0 <= (others => '0');
                        stage2a0 <= (others => '0');
Line 268... Line 268...
                        stage2p3 <= stage1p3;
                        stage2p3 <= stage1p3;
                        stage2p2 <= stage1p2;
                        stage2p2 <= stage1p2;
                        stage2a0 <= stage1a0;
                        stage2a0 <= stage1a0;
 
 
                        -- Opcode control sequence
                        -- Opcode control sequence
                        stage0opcode <= opcode;
                        stageMopcode <= opcode;
                        stage1opcode <= stage0opcode;
                        stageSRopcode <= stageMopcode;
 
 
                end if;
                end if;
        end process uf_seq;
        end process uf_seq;
 
 
 
 

powered by: WebSVN 2.1.0

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