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

Subversion Repositories raytrac

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

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

Rev 27 Rev 52
Line 1... Line 1...
--! @file rca_logic_block.vhd
--! @file rca_logic_block.vhd
--! @author Julian Andres Guarin
--! @author Julian Andres Guarin
--! @brief Bloque de lógica Carry Look Ahead. 
--! @brief Bloque de lógica Carry Look Ahead. 
-- rca_logic_block.vhd
-- rca_logic_block.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
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 (
                width : 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(width-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 Propagacin 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(width downto 1)        --! Señales Carry Out Cálculadas. 
                c : out std_logic_vector(width downto 1)        --! Señales Carry Out Calculadas. 
        );
        );
end rca_logic_block;
end rca_logic_block;
 
 
 
 
--! Arquitectura del bloque Ripple Carry Adder.
--! Arquitectura del bloque Ripple Carry Adder.
 
 
--! El bloque de lógica de Ripple Carry Adder, se sintetiza a partir de un código comportamental.
--! El bloque de logica de Ripple Carry Adder, se sintetiza a partir de un código comportamental.
--! Para cada Couti, se instancia una función combinatoria. 
--! Para cada Couti, se instancia una función combinatoria. 
 
 
 
 
architecture rca_logic_block_arch of rca_logic_block is
architecture rca_logic_block_arch of rca_logic_block is
 
 
 
 
 
 
begin
begin
        --! El siguiente proceso instancia funciones combinatorias para CADA UNO de los valores de Couti a calcular. En TODO momemnto se utiliza el resultado de los Cout antrerioes a Couti, optimizando en uso de recursos. 
        --! El siguiente proceso instancia funciones combinatorias para CADA UNO de los valores de Couti a calcular. En TODO momemnto se utiliza el resultado de los Cout antrerioes a Couti, optimizando en uso de recursos. 
 
 
        --! 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 razon principal para realizar la instanciación de las funciones combinatorias necesarias con un process en vez de un generate, radica 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*width;
                variable i:                     integer range 0 to 2*width;

powered by: WebSVN 2.1.0

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