Está en la página 1de 27

Vhdl para síntesis

Alfredo Rosado Muñoz


Universidad de Valencia
Ingeniería Electrónica
Diseño de Circuitos y Sistemas Electrónicos
Objetivos
Realizar descripciones VHDL óptimas para implementación hardware
Saber utilizar las construcciones destinadas a hardware específico
Reset, reloj, triestados, unidades funcionales, ...
Evitar el empleo de VHDL no sintetizable o poco eficiente
Pensar “hardware” a pesar de describir “software”

Síntesis: Definición
Proceso de traducción de un sistema descrito mediante una herramienta de captura de
diseño, y de optimización para la generación de un formato intermedio entre la
herramienta de captura y la de implementación hardware
Conversión del diseño a un nivel de estructuras capaces de ser
acomodadas en el dispositivo destino

Justificación:
Portabilidad Menor tiempo de diseño
Trabajo en grupo Diferentes descripciones (RTL, Comp., Estruct.)

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Tema
TEMA 8. LENGUAJES DE DESCRIPCIÓN HARDWARE ORIENTADOS A
SÍNTESIS. (3 HORAS)

8.1 Herramientas de síntesis: metodología y modo de funcionamiento.


8.2 Síntesis de lógica combinacional
8.3 Síntesis de lógica secuencial: Inferencia de latches, inferencia de flip-flop.
8.4 Tipos de descripción específicos: Puertas triestado y puertos bidireccionales, máquinas de
estados, memorias.
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz.

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Metodología
8.1 Herramientas de síntesis: metodología y modo de funcionamiento

PROBLEMA: SOLUCIÓN:
Software con características Descripciones “universales”
particulares

Metodología de diseño:

Recomendaciones IEEE ieee.std_logic_1164.all ieee.numeric_std.all


Tipos: std_logic, integer signed, unsigned

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Consideraciones
8.1 Herramientas de síntesis: metodología y modo de funcionamiento

Tener presente la estructura hardware a diseñar y el paralelismo de las descripciones


No emplear construcciones claramente no sintetizables: inicialización, “after”, ficheros, ...

Asignar tipos de datos de forma uniforme

No utilizar enteros en puertos I/O, en operaciones lógicas y de desplazamiento

Ciertos operadores aritméticos no son sintetizables: **, /, rem, mod


Evitar la generación indeseada de registros en descripciones combinacionales

Descomponer cualquier diseño en módulos combinacionales y secuenciales

R e g i s tr o s R e g i s tr o s R e g i s tr o s
Lógica Lógica
combinacional combinacional Salidas

Entradas

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Lógica Combinacional
8.2 Síntesis de Lógica Combinacional

No es necesario el uso de procesos

Se admite el uso de cualquier operador predefinido (and, nand, or, nor, not, xor, xnor)

Sentencias concurrentes a emplear: entity


entitypuerta
puertaisis
port
port(a,
(a,b,b,c:
c:ininstd_logic_vector
std_logic_vector(1 (1downto
downto0);
0);
d:
d:out
outstd_logic_vector
std_logic_vector(1 (1downto
downto0));
0));
end
endpuerta;
puerta;
architecture p_a of puerta is
When..else architecture
begin p_a of puerta is
begin d <= a when c="00" else
d <= a b when
when c="00"
c="01" else
else
b "11"when
when
c="01"
c="10"else
else
"11"
"00"
when
when
c="10"
a="11"else
else
"00"
"01"
when
; a="11";
end
endp_a;
p_a;

architecture p_a of puerta is


begin
with c select
d <= a when "00",
b when "01", Completar SIEMPRE todas
"11" when "10", With..select
las condiciones
"00" when "11",
"00" when others;
end p_a;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Lógica Combinacional
8.2 Síntesis de Lógica Combinacional

Uso de if..then..else en procesos: Agrupar en una sola sentencia todas las condiciones
siempre que sea posible
Number of ports : 10
if c="00" then d <= a; e <= b; Number of nets : 28
elsif b="00" then e <= a; d <= b; Number of instances : 22
else
e <= (others =>'0'); Total accumulated area :
d <= (others =>'0'); Number of IBUF : 6
end if; Number of OBUF : 4
Number of gates : 14

Number of ports : 10
Number of nets : 41
if c="00" then d <= a; e <= b; end if; Number of instances : 35
if b="00" then e <= a; d <= b; end if;
if c/="00" and b/="00" then Total accumulated area :
e <= (others =>'0'); Number of IBUF : 6
d <= (others =>'0'); Number of Latches : 2
end if; Number of OBUF : 4
Number of gates : 24

NO incluir la señal de reloj en la lista de sensibilidad de un proceso combinacional

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Lógica Secuencial
8.3 Síntesis de Lógica Secuencial

Es necesario conocer el tipo de descripción concreto a realizar para que se reconozca un elemento
secuencial

Es obligado el uso de procesos (excepto latches), y recomendable que incluyan lista de sensibilidad

Diferencia entre variables y señales

Aconsejable incluir siempre un reset global que aplique un valor de inicialización

entity latch is
Inferencia de Latches port (a, b: in std_logic;
d: out std_logic);
end latch;
architecture l_a of latch is
entity latch is begin
port (a, b: in std_logic; d <= a when b=’1’;
d: out std_logic); end l_a;
end latch;
architecture l_a of latch is
begin
process (a,b)
begin
if b=’1’ then d <= a; end if;
end process;
end l_a;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Lógica Secuencial
8.3 Síntesis de Lógica Secuencial: Inferencia de registros activos por flanco

Es el método más habitual de describir sistemas síncronos

Los dispositivos lógicos incluyen registros activos por flanco (generalmente de tipo D)
Existen varias formas de especificar la llegada de un flanco:

rising_edge(reloj)
if reloj’event and reloj=‘1’
Descripción genérica
if reloj’event and reloj=‘1’ and reloj’last_value=‘0’
entity registro is
port (d, reset, preset, reloj: in std_logic;
q: out std_logic);
end registro;

architecture r_a of registro is


begin
process (d, reset, preset, reloj)
begin
if reset = ’1’ then q <= ‘0’;
elsif preset = ‘1’ then q <= ‘1’;
elsif rising_edge(reloj) then q <= d;
end if;
end process;
end r_a;

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Lógica Secuencial
8.3 Síntesis de Lógica Secuencial: Inferencia de registros activos por flanco

No emplear más condiciones else ó elsif en la misma sentencia


if..then..else después de la condición de evaluación del reloj

En la misma evaluación if del reloj no se deben comparar otras señales o variables


La sentencia if del reloj no puede estar dentro de un bucle

La sentencia if del reloj no debe estar anidada, se pueden incluir más if dentro de ella
Sólo se puede incluir una evaluación de flanco por proceso: varios relojes  varios procesos

En comparaciones múltiples, emplear la sentencia case


No utilizar relojes derivados, alternativamente, emplear habilitación de reloj
r_derivado <= not a and (b or c);
process
r_derivado(d,<=reset,
relojpreset,
and notreloj,
a and r_derivado)
(b or c);
begin
process (d, reset, preset, r_derivado)
if reset = ’1’ then q <= ‘0’;
begin
elsif preset
if reset = ‘1’
= ’1’ then
then q <=
q <= ‘1’;
‘0’;
elsif
elsifrising_edge(reloj)
preset = ‘1’ then then
q <= ‘1’;
if r_derivado = ‘1’ then
elsif rising_edge(r_derivado) then
q <=
q <= d; d;
end if;
end if;
end if;
end process;
end
end process;
r_a;
end r_a;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Módulos Específicos
8.4 Módulos funcionales específicos

En sistemas complejos es necesaria una correcta partición del diseño (Top-Down)


Las descripciones de mayor nivel suelen ser estructurales (componentes y subprogramas)

Aconsejable emplear módulos del fabricante (generadores automáticos, módulos IP, ...)

Consultar documentación del software de síntesis  Herramientas y atributos especiales


Módulos específicos usuales: Multiplicadores, RAM, ROM, UART, filtro FIR, interface PCI, ...

Puertas triestado

Necesaria la utilización del tipo std_logic ó std_ulogic que define el estado 'Z'

Basta con incluir una condición en la que uno de los resultados ('True' o 'False') deja la salida en alta
impedancia
entity hab is
port( entrada1,
architecture hab_b
entrada2,
of hab is
oe1, oe2 : in std_logic;
begin salida : out std_logic );
end;
process (entrada, oe) begin
architecture
if (oe = ’1’)hab_a
then of
salida
hab is<= entrada;
begin salida <= ’Z’;
else
salida
end if;<= entrada1 when oe1 = '1' else 'Z' ;
salida
end process;
<= entrada2 when oe2 = '1' else 'Z' ;
end hab_b;
hab_a;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Módulos Específicos
8.4 Módulos funcionales específicos: Puertos bidireccionales

Para puertos bidireccionales la descripción es similar a los triestado: Tipo inout

entity bidir is
port ( bid : inout std_logic ;
a, b, c, oe : in std_logic;
salida : out std_logic);
end bidir ;
architecture bidir_a of bidir is
signal interna1, interna2 : std_logic ;
begin
bid <= interna1 when oe = '1' else 'Z';
interna2 <= bid;

interna1 <= (a and b) nor c;


salida <= (c xor interna2) when oe='0' else 'Z';
end bidir_a ;

Máquinas de estados
Es necesaria una descripción específica con definición de un tipo enumerado
Hay que hacer una división de la descripción en dos procesos distintos:
1. Cambio síncrono de estado
2. Evaluación de condiciones para dirigirse a un estado
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Módulos Específicos
8.4 entity
Módulos funcionales específicos: bebidade
Máquinas isestados
port (reloj, reset, veinte, diez : in std_logic ;
when B => preparada, servir, devolucion, when F => out std_logic);
moneda:
Ejemplo: servir end<=bebida
'1'; ; moneda <= '1';
estado_sig
Preparado <= A; bebida_a of bebida is
architecture Monedas if (veinte = '1') then
Preparado Monedas when C =>
type estados is (A, B, C, D, F, I); estado_sig <= I;
Dispensador moneda <= '1';
de bebidas. 40c€.
signal estado_actual, estado_sig : estados ;
Dispensador de bebidas. 40c€.
Inserción
elsif (diez = '1') then
Sólo admite if (veinte
monedas
Inserción
begin de=10c€
'1') then
y 20c€ Monedas
Sólo admite monedas de 10c€ y 20c€ Monedas estado_sig <= B;
estado_sig
cambiaest: <= process
F; (reloj, reset) is begin
elsif (diezBebida
= '1') Retorno
then else
Bebida Retorno
servida if (reset
Monedas='1') then estado_actual <= A;
estado_sig <= F;
servida Monedas
estado_sig <=elsif D; (rising_edge(reloj)) then
else end if;
estado_actual <= estado_sig;
estado_sig <=end C; if;
end if; end process cambiaest; when I =>
asignaest: process (veinte, diez, estado_actual) devolucion <=is'1';
begin
when D => preparada <= '0'; servir <= '1';
moneda <= '1'; servir <= '0'; estado_sig <= A;
if (veinte = '1') then
devolucion <= '0'; end case;
estado_sig <=moneda B; <= '0'; end process asignaest;
elsif (diez = '1') case then
estado_actual is
estado_sig <= F; end bebida_a;
when A =>
else preparada <= '1';
estado_sig <= D; if (veinte = '1') then
end if; estado_sig <= D;
type estados is (A, B, C, D, F, I,elsif V, W); (diez = '1') then
signal estado_actual, estado_sig : estados ; estado_sig <= C;
else
attribute ENUM_ENCODING : STRING; estado_sig <= A;
attribute ENUM_ENCODING of estadosend if; is ”000 001 010 011 100 101 110 111”;
: type
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Módulos Específicos
8.4 Módulos funcionales específicos: Memorias
package ROMS is Memoria ROM
Si el tamaño de la memoria es reducido, ésta constant ANCHO_ROM: INTEGER := 5;
puede implementarse mediante recursos subtype ROM_WORD is BIT_VECTOR (1 to ANCHO_ROM);
lógicos comunes (funciones lógicas y registros) subtype ROM_RANGE is INTEGER range 0 to 7;
type ROM_TABLE is array (0 to 7) of ROM_WORD;
constant ROM : ROM_TABLE := (
("10101"), -- contenido de la ROM
Habitualmente, existen en hardware ("10000"),
estructuras regulares que las implementan y ("11101"),
donde se sintetizan si la descripción VHDL es ("11111"),
("10000"),
apropiada ("10101"),
("00011"),
("11000"));
end ROMS;

use work.ROMS.all;

entity ROM5x8 is
port( ADDR: in ROM_RANGE;
DATA: out ROM_WORD);
end ROM5x8;

architecture rom_a of ROM5x8 is


begin
DATA <= ROM(ADDR);
end rom_a;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Módulos Específicos
8.4 Módulos funcionales específicos: Memorias

En el caso de RAM, es necesario comprobar que el


dispositivo Memoria RAM
library ieee;
incorpora este use ieee.std_logic_1164.all; use ieee.numeric_std.all;
recurso lógico
entity ram1 is
port ( dato: in std_logic_vector (7 downto 0);
direccion: in unsigned (5 downto 0);
we, inclock, outclock: in std_logic;
q: out std_logic_vector (7 downto 0));
end ram1;

architecture ram1_a of ram1 is


type mem_type is array (63 downto 0) of std_logic_vector (7 downto 0);
signal mem: mem_type;
begin
l0: process (inclock, outclock, we, direccion) begin
if (rising_edge(inclock)) then
if (we = '1') then
mem(to_integer(direccion)) <= dato;
end if;
end if;
if (rising_edge(outclock)) then
q <= mem(to_integer(direccion));
end if;
end process;
end ram1_a;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Se propone un ejemplo que incluya:


1. Descripción de VHDL para síntesis
2. Diseño de sistemas digitales, desde su concepción hasta su descripción
3. Uso intensivo de recursos VHDL para simulación: bancos de pruebas

Planteamiento: Se desea reducir el ruido de 50Hz en las señales de adquisición de ECG

Solución: Filtro adaptativo LMS

Señal + ruido + y(n)


d(n)
 Salida filtrada
-
Señal seno 50Hz
(ruido)
e(n)
Retardo
w0(n)

90º w1(n)

u1(n) Filtro
adaptativo
u0(n)
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Las ecuaciones que rigen el valor de los pesos y la salida filtrada:


1
e(n)   wi (n)  u i (n)
i 0

y ( n )  d ( n )  e( n )
w (n  1)  w    u (n)  y (n)
i i i
Siendo la constante de adaptación :
2 1 M 1 2
E (u  ui
2
0  M= núm etapas del filtro (M=2) )
M  E (u )
2
M i 0

Recuento de operaciones aritméticas: 4 multiplicaciones (dos con tres factores)


3 sumas
1 resta

Restricción: Sólo se debe emplear un módulo aritmético de cada tipo


(multiplicador, sumador y restador)

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Especificaciones: 1. Entradas/salidas de 12bits


2. Números con signo (compl. a 2)
3. =0,25012  =512 (desnormalizado)
4. Existen 3 entradas de 12 bits:
Señal con ruido, ruido 50Hz y ruido 50Hz desplazado 90º
5. Existen entradas Reloj, Reset y dato listo Hab_ext
6. Existe salida fin de final de filtrado de muestra

d(n)
Filtro
u0(n) LMS
y(n)
hmul
FSM
u1(n)
hsum
hres Fin
C1
Clock
C2
Clock Reset C4
Reset Hab_ext C5
Hab_ext fin

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Propuesta:

0,1 0
0 w0
u0

+
2 MUX 1
1 MUX w1
*
u1 DMUX
C2 2

-
C1
0 hmult C5 y
w0 Accumulador
hsum
1
d(n)
w1 MUX
0
2
Acc hrest
y 1
w0 MUX
C2 Multiplicador 2
w1
C4 Sumador-Restador
Características: 1. Pipeline: Son necesarias cinco etapas para obtener todos los resultados
2. Existen periodos de latencia, o bien la señal de reloj es más rápida que
el periodo de muestreo de las señales de entrada
3. Una máquina de estados debe controlar el acceso a las unidades de
cálculo
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Diseño VHDL estructurado: 1. Se diseña cada módulo por separado


2. Se simula la funcionalidad de cada módulo
3. Las señales de control son generadas por la FSM
4. Se unen los módulos en un diseño de nivel superior
5. Se genera un banco de pruebas que simule el sistema

Se proponen 4 módulos: Multiplicador, sumador-restador, FSM y memoria intermedia


Se define un paquete con las definiciones globales del sistema

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

package LMS_pkg is
constant beta_desp : integer:=9; -- 2**beta_desp=beta real
constant external_length : integer:=12;
constant internal_length : integer:=(2*external_length);
subtype external_vector is signed ((external_length-1) downto 0);
subtype internal_vector is signed ((internal_length-1) downto 0);
end LMS_pkg;

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


8.5
Aplicación
Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz
Módulo multiplicador: Realiza la multiplicación de los valores de entrada que correspondan
mux_y_mul : process (reset,reloj,hmul)
variable mul_result : internal_vector; variable mul1,mul2,mul_sal : external_vector;
begin
if reset = '0' then mul_salida <= (others =>'0');
elsif rising_edge(reloj) then
if hmul = '1' then
if control1 = '0' then mul1 := sen_in; -- sen_in corresponde a u0
else mul1 := cos_in; -- control1 = '1', cos_in corresponde a u1
end if;
if control2 = "00" then mul2 := weight1;
elsif control2 = "01" then mul2 := weight2;
elsif (control2 = "10") or (control2 = "11") then mul2 := salida_ext;
end if;
mul_result := mul1 * mul2;
mul_sal(external_length-1) := mul_result(internal_length-1);
if control2 = "10" then -- En este caso se debe desplazar el resultado
mul_sal(beta_desp-1 downto 0) := mul_result((internal_length-3) downto
(internal_length-2-beta_desp));
for i in beta_desp to external_length-2 loop
mul_sal(i) := mul_result(internal_length-1);
end loop;
else -- se redondea el valor sin desplazar
mul_sal(external_length-2 downto 0) := mul_result(internal_length-3 downto
external_length-1);
end if;
mul_salida <= mul_sal;
end if; end if; end process;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Módulo almacenamiento: Almacena el resultado del multiplicador un ciclo de reloj

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use WORK.LMS_pkg4.all;

entity LMS6_acc is
port (mult_result : in external_vector;
reset,reloj : in std_logic;
acc_salida : out external_vector);
end LMS6_acc;

architecture LMS6_accarchi of LMS6_acc is


begin
acc_or_direct : process(reset,reloj)
begin
if reset='0' then acc_salida <= (others => '0');
elsif reloj'event and reloj='1' then
acc_salida <= mult_result;
end if;
end process;
end LMS6_accarchi;

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Módulo Sumador-restador: Dependiendo del control suma dos valores, o suma y resta
suma_y_resta : process(reset,reloj)
variable suma1,salida,suma_def,weight1s,weight2s : external_vector;
variable resta1 : external_vector;
begin
if reset='0' then -- inicializacion de pesos y puesta a cero
salida_re <= (others => '0'); salida_def <= (others => '0');
weight1 <= (others => '0'); weight1s := (others => '0');
weight2 <= (others => '0'); weight2s := (others => '0');
elsif reloj'event and reloj='1' then
if hsum='1' then
if control4 = "00" then suma1 := weight1s;
elsif control4 = "01" then suma1 := weight2s;
elsif (control4 = "10") or (control4 = "11") then suma1 := acc1;
end if;
suma_def := suma1 + suma2;
if control5 = "00" then weight1s := suma_def;
weight1 <= suma_def;
elsif control5 = "01" then weight2s := suma_def;
weight2 <= suma_def;
elsif (control5 = "10") or (control5 = "11") then resta1 := suma_def;
if hrest = '1' then
salida := in_sig - resta1; salida_def <= salida; salida_re <= salida;
end if;
end if;
end if; end if; end process;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
8.5
Aplicación
Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz
Módulo FSM: Gestionaisel control desde activación de Hab_ext hasta la salida fin
entity LMS6_estados
port (reloj,reset,extern_hab : in std_logic;
hmul,hsum,hres,control1,fin : out std_logic;
control2,control4,control5 : out std_logic_vector (1 downto 0));
end LMS6_estados;
architecture LMS6_estadosarchi of LMS6_estados is
type estados_lms4 is (reset_estado,espera,ini_calc,genera_salida,
peso1_mult,actualiza1_mult2,peso2_sum,peso2_calc_y_fin);
signal estado_actual,estado_sig : estados_lms4;
begin
cambia_estado : process(reloj,reset) begin
if reset = '0' then estado_actual <= reset_estado;
elsif reloj'event and reloj = '1' then
estado_actual <= estado_sig;
end if;
end process;
maquina_estados : process(estado_actual,extern_hab) begin
control1 <= '0'; -- se asignan valores por defecto
control2 <= "00"; control4 <= "10";
control5 <= "10"; hmul <= '0';
hsum <= '0'; hres <= '0'; fin <= '0';
case estado_actual is
when reset_estado =>
control1 <= '0'; control2 <= "00"; control4 <= "10";
control5 <= "10"; hmul <= '0'; hsum <= '0';
hres <= '0'; fin <= '0';
if extern_hab = '1' then estado_sig <= espera;
else estado_sig <= ini_calc; end if;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Módulo Global: Descripción estructural para unir los módulos

entity LMS6 is
port (in_sig,sen_in,cos_in : in external_vector;
hab_ext,clock,reset : in std_logic;
lms_out : out external_vector;
ending : out std_logic);
end LMS6;

architecture LMS6archi of LMS6 is

component LMS6_mult
port (sen_in,cos_in,weight1,weight2,salida_ext : in external_vector;
reset,reloj,hmul,control1 : in std_logic;
control2 : in std_logic_vector (1 downto 0);
mul_salida : out external_vector);
end component;

component LMS6_acc
port ( mult_result : in external_vector;
reset,reloj : in std_logic;
acc_salida : out external_vector);
end component;

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Módulo :deprocess
NEWDATA prueba: Lee datos de fichero, escribe resultado en fichero y genera Reloj y Reset
begin
habi_ext <= '0';
wait for 215 ns;
habi_ext <= '1';
wait for 615 ns;
end process;
MAIN : process
variable noise,sinus,cosinus : integer;
variable filtered : integer;
variable linea1,linea2: LINE;
begin
while not ENDFILE(file_noise) loop
READLINE(file_noise,linea1);
READ(linea1,noise);
READ(linea1,sinus);
READ(linea1,cosinus);
input_signal <= to_signed(noise,external_length);
sen_signal <= to_signed(sinus,external_length);
cos_signal <= to_signed(cosinus,external_length);
wait until fin_cal'event and fin_cal='1';
filtered := to_integer(out_signal);
WRITE(linea2,filtered);
WRITELINE(file_filtered,linea2);
end loop;
wait;
end process;
12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz
Aplicación
8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50Hz

Implementación: Sobre FPGA XC4010E –3 PC84


Device utilization summary:

Number of External IOBs 52 out of 160 85%


Flops: 12
Latches: 0
Number of IOBs driving Global Buffers 1 out of 8 12%

Number of CLBs 176 out of 400 44%


Total CLB Flops: 92 out of 800 11%
4 input LUTs: 315 out of 800 39%
3 input LUTs: 44 out of 400 11%

Number of PRI-CLKs 1 out of 4 25%


Number of STARTUPs 1 out of 1 100%

Design statistics:
Minimum period: 102.065ns (Maximum frequency: 9.798MHz)
Maximum net delay: 28.538ns

12 de septiembre de 2023 TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

También podría gustarte