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

Subversion Repositories raytrac

[/] [raytrac/] [trunk/] [rca_logic_block.vhd] - Diff between revs 22 and 27

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

Rev 22 Rev 27
Line 29... Line 29...
 
 
--! En una suma A+B para cada par de bits Ai, Bi, se genera un carry out Couti, este Couti en un bloque generador de carry Ripple Carry, depende del cálculo de los Carry Out anteriores, Couti-1, Couti-2,...., Cout0. Lo que hace el Ripple Carry Adder Logic Block, es calcular secuencialmente los valores de todos los Couti, usando las señales de propagación y generación, Pi y Gi, y los Carry Out anteriores. Comparado con el Carry Look Ahead, empleará el doble del tiempo, pero usará muchas menos elementos lógicos en una FPGA o muchos menos transistores en un procesos de fabricación CMOS. En síntesis se sacrifica desempeño por ahorro de recursos. 
--! En una suma A+B para cada par de bits Ai, Bi, se genera un carry out Couti, este Couti en un bloque generador de carry Ripple Carry, depende del cálculo de los Carry Out anteriores, Couti-1, Couti-2,...., Cout0. Lo que hace el Ripple Carry Adder Logic Block, es calcular secuencialmente los valores de todos los Couti, usando las señales de propagación y generación, Pi y Gi, y los Carry Out anteriores. Comparado con el Carry Look Ahead, empleará el doble del tiempo, pero usará muchas menos elementos lógicos en una FPGA o muchos menos transistores en un procesos de fabricación CMOS. En síntesis se sacrifica desempeño por ahorro de recursos. 
 
 
entity rca_logic_block is
entity rca_logic_block is
        generic (
        generic (
                w : integer := 8 --! Tamaño estandar del bloque Ripple Carry Adder.
                width : integer := 8 --! Tamaño estandar del bloque Ripple Carry Adder.
        );
        );
        port (
        port (
                p,g: in std_logic_vector(w-1 downto 0); --! Señales de Propagación y Generación del carry.
                p,g: in std_logic_vector(width-1 downto 0); --! Señales de Propagación y Generación del carry.
                cin : in std_logic;                                             --! Señal de entrada Carry In.
                cin : in std_logic;                                             --! Señal de entrada Carry In.
 
 
                c : out std_logic_vector(w downto 1)    --! Señales Carry Out Cálculadas. 
                c : out std_logic_vector(width downto 1)        --! Señales Carry Out Cálculadas. 
        );
        );
end rca_logic_block;
end rca_logic_block;
 
 
 
 
--! Arquitectura del bloque Ripple Carry Adder.
--! Arquitectura del bloque Ripple Carry Adder.
Line 58... Line 58...
        --! La razón principal para realizar la instanciación de las funciones combinatorias necesarias con un process en vez de un generate, rádica en utilizar un conjunto de variables que afecte unicamente al proceso comportamental descrito y no a la arquitectura entera. 
        --! La razón principal para realizar la instanciación de las funciones combinatorias necesarias con un process en vez de un generate, rádica en utilizar un conjunto de variables que afecte unicamente al proceso comportamental descrito y no a la arquitectura entera. 
 
 
        rcaProc:                -- rcaProc instancia funciones combinatorias en sCarry(i) haciendo uso de los resultados intermedios obtenidos
        rcaProc:                -- rcaProc instancia funciones combinatorias en sCarry(i) haciendo uso de los resultados intermedios obtenidos
                                -- en sCarry(i-1), por lo que se crea un delay path en el calculo del Cout del circuito
                                -- en sCarry(i-1), por lo que se crea un delay path en el calculo del Cout del circuito
        process (p,g,cin)
        process (p,g,cin)
                variable i:                     integer range 0 to 2*w;
                variable i:                     integer range 0 to 2*width;
                variable sCarry:        std_logic_vector(w downto 1);
                variable sCarry:        std_logic_vector(width downto 1);
        begin
        begin
 
 
                sCarry(w downto 1) := g(w-1 downto 0);
                sCarry(width downto 1) := g(width-1 downto 0);
                sCarry(1) := sCarry(1) or (p(0) and cin);
                sCarry(1) := sCarry(1) or (p(0) and cin);
 
 
                for i in 1 to w-1 loop
                for i in 1 to width-1 loop
                        sCarry(i+1) := sCarry(i+1) or (p(i) and sCarry(i));
                        sCarry(i+1) := sCarry(i+1) or (p(i) and sCarry(i));
                end loop;
                end loop;
 
 
                c <= sCarry;
                c <= sCarry;
 
 

powered by: WebSVN 2.1.0

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