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 |