Diagrama del A/D Sigma-Delta de 1er orden
Análisis del modulador Sigma-Delta
Análisis del modulador Sigma-Delta
Espectro del “noise shaper” – Sigma-Delta de primer orden
Espectro del “noise shaper” – Sigma-Delta de órdenes superiores
Entrada/salida de un A/D Sigma-Delta (1er orden)
Comparación entre los diferentes A/D’s A/D fs A/D k.fs S-D A/D k.fs Filtro digital Dec Filtro digital Dec
Sistemas Digitales: Entidad de diseño Op A Op B Clk Resultado Load
Entidad de diseño Op A Op B Clk Resultado Load entity multiplicador is generic(N: natural:= 5); port( OpA: in std_logic_vector(N-1 downto 0); OpB: in std_logic_vector(N-1 downto 0); Load: in std_logic; Clk: in std_logic; Resultado: out std_logic_vector(2*N-1 downto 0) ); end; (Gp:) Puertos de entrada
(Gp:) Puerto de salida
Método tradicional de multiplicación Pasos a ejecutar Obtención de los productos parciales (cada producto parcial debe estar desplazado una posición a la izquierda respecto del producto parcial anterior) Suma de los productos parciales para obtener el resultado (Gp:) Productos parciales
(Gp:) Resultado
Multiplicando Multiplicador
Arquitectura del multiplicador Hardware básico necesario para la implementación Tres registros (multiplicando, multiplicador y producto) Un sumador destinado a realizar las operaciones parciales
Pasos a ejecutar en hardware (operandos sin signo) Arquitectura del multiplicador
Arquitectura del multiplicador Arquitectura tentativa (operandos sin signo) Dos registros de N bits (uno para cada operando) Un registro de 2N bits (resultado parciales y resultado final) Un sumador de N bits destinado a realizar las operaciones parciales Un multiplexor
Arquitectura optimizada (operandos sin signo) Tres registros de N bits (uno para cada operando y otro para las sumas parciales) Un sumador de N bits destinado a realizar las operaciones parciales Arquitectura del multiplicador (Gp:) Diferencia con la arquitectura anterior
Arquitectura del multiplicador Arquitectura optimizada: funcionamiento
Arquitectura del multiplicador Arquitectura optimizada: funcionamiento (operandos sin signo)
Arquitectura del multiplicador Ejemplo: 5 x 6
Código VHDL – Aquitectura Contenido de la arquitectura del componente multiplicador: Declaración del componente registro Declaración del componente sumador Declaración de señales a utilizar Instanciación del registro A Instanciación del registro B Instanciación del registro P Instanciación del sumador Descripción inline de los dos multiplexores Descripción de las señales de entrada de los registros P y B Descripción del resultado
Parte declarativa
Código VHDL – Aquitectura Contenido de la arquitectura del componente multiplicador (parte declarativa):
(Gp:) component sumador is generic(N: integer:= 4); port( A: in std_logic_vector(N-1 downto 0); B: in std_logic_vector(N-1 downto 0); Cin: in std_logic; Sal: out std_logic_vector(N-1 downto 0); Cout: out std_logic ); end component;
(Gp:) component registro is generic(N: integer:= 4); port( D: in std_logic_vector(N-1 downto 0); clk: in std_logic; rst: in std_logic; ena: in std_logic; Q: out std_logic_vector(2*N-1 downto 0) ); end component;
(Gp:) signal entP, entB, salP, salSum, salB, salA, aux: std_logic_vector(N-1 downto 0); signal Co: std_logic;
Código VHDL – Aquitectura Componente sumador (Gp:) entity sumador is generic(N: integer:= 4); — valor genérico port( A: in std_logic_vector(N-1 downto 0); — operando A B: in std_logic_vector(N-1 downto 0); — operando B Cin: in std_logic; — carry de entrada Sal: out std_logic_vector(N-1 downto 0);– resultado de la operación Cout: out std_logic — carry de salida ); end;
(Gp:) architecture sum of sumador is — declaración de una señal auxiliar signal Sal_aux: std_logic_vector(N+1 downto 0); begin Sal_aux <= ('0' & A & Cin) + ('0' & B & '1'); Sal <= Sal_aux(N downto 1); Cout <= Sal_aux(N+1); end;
Código VHDL – Aquitectura Componente registro (Gp:) entity registro is generic(N: integer:= 4); — valor genérico port( D: in std_logic_vector(N-1 downto 0); — entrada del registro clk: in std_logic; — señal de reloj rst: in std_logic; — señal de reset ena: in std_logic; — señal de habilitación Q: out std_logic_vector(N-1 downto 0) — salida del registro ); end;
Código VHDL – Aquitectura Componente registro (Gp:) architecture pp of registro is begin process(clk, rst, ena) begin if rst = '1' then Q <= (others => '0'); elsif clk = '1' and clk'event then if ena = '1' then Q <= D; end if; end if; end process; end;
Código VHDL – Aquitectura Contenido de la arquitectura del componente multiplicador (parte descriptiva):
(Gp:) Sal <= salP & salB;
(Gp:) — instanciación del registro A regA: registro generic map(N) port map(A, clk, '0', '1', salA); — instanciación del registro B regB: registro generic map(N) port map(entB, clk, '0', '1', salB); — instanciación del registro P regP: registro generic map(N) port map(entP, clk, load, '1', salP); — instanciación del sumador sum: sumador generic map(N) port map(salP, aux, '0', salSum, Co);
(Gp:) entP <= Co & salSum(N-1 downto 1); entB <= B when load = '1' else salSum(0) & salB(N-1 downto 1); aux <= salA when salB(0) = '1' else (others => '0');
Código VHDL – Banco de pruebas Para poder validar el funcionamiento de cualquier componente se lo debe someter a pruebas por medio de un banco de pruebas.
DUT MONITOR ESTIMULOS BANCO DE PRUEBAS
Página anterior | Volver al principio del trabajo | Página siguiente |