vhdl para síntesis alfredo rosado muñoz universidad de valencia ingeniería electrónica diseño...

27
Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Upload: sal-villa

Post on 25-Jan-2015

15 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Vhdl para síntesis

Alfredo Rosado Muñoz

Universidad de ValenciaIngeniería Electrónica

Diseño de Circuitos y Sistemas Electrónicos

Page 2: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Conversión del diseño a un nivel de estructuras capaces de ser acomodadas en el dispositivo destino

Objetivos

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz 10 de abril de 2023

Realizar descripciones VHDL óptimas para implementación hardwareSaber utilizar las construcciones destinadas a hardware

específicoReset, reloj, triestados, unidades funcionales, ...Evitar el empleo de VHDL no sintetizable o poco

eficientePensar “hardware” a pesar de describir “software”

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

Síntesis: Definición

Justificación:Portabilidad

Trabajo en grupo

Menor tiempo de diseñoDiferentes descripciones (RTL, Comp., Estruct.)

Page 3: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Tema

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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 combinacional8.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.

10 de abril de 2023

Page 4: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Metodología

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

PROBLEMA:Software con características

particulares

SOLUCIÓN:Descripciones “universales”

Metodología de diseño:

Recomendaciones IEEE ieee.std_logic_1164.all ieee.numeric_std.allTipos: std_logic, integer signed, unsigned

10 de abril de 2023

Page 5: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Consideraciones

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

Entradas

R e g is tr o sR e g is tr o s

Lógicacombinacional

Lógicacombinacional

R e g is tr o s

Salidas

10 de abril de 2023

Page 6: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Lógica

Combinacional

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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:

With..select

architecture p_a of puerta isbegin

with c select d <= a when "00",

b when "01", "11" when "10",

"00" when "11", "00" when others;

end p_a;

When..else

Completar SIEMPRE todas las

condiciones

entity puerta isport (a, b, c: in std_logic_vector (1 downto 0); d: out std_logic_vector (1 downto 0));end puerta;architecture p_a of puerta isbegin

d <= a when c="00" else b when c="01" else "11" when c="10" else "00" when a="11" else

"01" ;end p_a;

entity puerta isport (a, b, c: in std_logic_vector (1 downto 0); d: out std_logic_vector (1 downto 0));end puerta; architecture p_a of puerta isbegin

d <= a when c="00" else b when c="01" else "11" when c="10" else "00" when a="11";

end p_a;

10 de abril de 2023

Page 7: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Lógica

Combinacional

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

if c="00" then d <= a; e <= b; elsif b="00" then e <= a; d <= b;else e <= (others =>'0'); d <= (others =>'0'); end if;

if c="00" then d <= a; e <= b; end if;if b="00" then e <= a; d <= b; end if;if c/="00" and b/="00" then e <= (others =>'0'); d <= (others =>'0'); end if;

Number of ports : 10 Number of nets : 41 Number of instances : 35 Total accumulated area : Number of IBUF : 6 Number of Latches : 2 Number of OBUF : 4 Number of gates : 24

Number of ports : 10Number of nets : 28Number of instances : 22 Total accumulated area : Number of IBUF : 6 Number of OBUF : 4 Number of gates : 14

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

10 de abril de 2023

Page 8: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Lógica Secuencial

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

Inferencia de Latches

entity latch isport (a, b: in std_logic; d: out std_logic);end latch;architecture l_a of latch isbeginprocess (a,b)begin if b=’1’ then d <= a; end if;end process;end l_a;

entity latch isport (a, b: in std_logic; d: out std_logic);end latch;architecture l_a of latch isbegind <= a when b=’1’;end l_a;

10 de abril de 2023

Page 9: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Lógica Secuencial

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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:

entity registro isport (d, reset, preset, reloj: in std_logic; q: out std_logic);end registro; architecture r_a of registro isbeginprocess (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;

rising_edge(reloj)if reloj’event and reloj=‘1’if reloj’event and reloj=‘1’ and reloj’last_value=‘0’

Descripción genérica

10 de abril de 2023

Page 10: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Lógica Secuencial

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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 relojEn la misma evaluación if del reloj no se deben comparar otras señales o variables

Sólo se puede incluir una evaluación de flanco por proceso: varios relojes varios procesos

No utilizar relojes derivados, alternativamente, emplear habilitación de reloj

La sentencia if del reloj no debe estar anidada, se pueden incluir más if dentro de ella

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

En comparaciones múltiples, emplear la sentencia case

r_derivado <= reloj and not a and (b or c);process (d, reset, preset, r_derivado)begin if reset = ’1’ then q <= ‘0’; elsif preset = ‘1’ then q <= ‘1’; elsif rising_edge(r_derivado) then q <= d; end if;end process;end r_a;

r_derivado <= not a and (b or c);process (d, reset, preset, reloj, r_derivado)begin if reset = ’1’ then q <= ‘0’; elsif preset = ‘1’ then q <= ‘1’; elsif rising_edge(reloj) then if r_derivado = ‘1’ then q <= d; end if; end if;end process;end r_a;

10 de abril de 2023

Page 11: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Módulos Específicos

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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)

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

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

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

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 impedanciaentity hab isport( entrada1, entrada2, oe1, oe2 : in std_logic; salida : out std_logic );end;architecture hab_a of hab isbeginsalida <= entrada1 when oe1 = '1' else 'Z' ;salida <= entrada2 when oe2 = '1' else 'Z' ;end hab_a;

architecture hab_b of hab isbeginprocess (entrada, oe) beginif (oe = ’1’) then salida <= entrada;else salida <= ’Z’; end if;end process;end hab_b;

10 de abril de 2023

Page 12: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Módulos Específicos

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

8.4 Módulos funcionales específicos: Puertos bidireccionales

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

Máquinas de estados

Es necesaria una descripción específica con definición de un tipo enumerado

entity bidir isport ( bid : inout std_logic ; a, b, c, oe : in std_logic; salida : out std_logic);end bidir ;architecture bidir_a of bidir issignal interna1, interna2 : std_logic ;beginbid <= 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 ;

Hay que hacer una división de la descripción en dos procesos distintos:

1. Cambio síncrono de estado2. Evaluación de condiciones para dirigirse a un estado 10 de abril de 2023

Page 13: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Módulos Específicos

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

8.4 Módulos funcionales específicos: Máquinas de estados

Ejemplo: Preparado

Bebidaservida

RetornoMonedas

InserciónMonedas

Dispensador de bebidas. 40c€.Sólo admite monedas de 10c€ y 20c€

MonedasPreparado

Bebidaservida

RetornoMonedas

InserciónMonedas

Dispensador de bebidas. 40c€.Sólo admite monedas de 10c€ y 20c€

Monedas

entity bebida isport (reloj, reset, veinte, diez : in std_logic ; preparada, servir, devolucion, moneda: out std_logic);end bebida ;architecture bebida_a of bebida istype estados is (A, B, C, D, F, I);signal estado_actual, estado_sig : estados ;begincambiaest: process (reloj, reset) is begin

if (reset ='1') then estado_actual <= A;elsif (rising_edge(reloj)) then

estado_actual <= estado_sig;end if;

end process cambiaest;asignaest: process (veinte, diez, estado_actual) is begin

preparada <= '0';servir <= '0';devolucion <= '0';moneda <= '0';case estado_actual is when A => preparada <= '1'; if (veinte = '1') then estado_sig <= D; elsif (diez = '1') then estado_sig <= C; else estado_sig <= A; end if;

when B => servir <= '1'; estado_sig <= A; when C => moneda <= '1'; if (veinte = '1') then estado_sig <= F; elsif (diez = '1') then estado_sig <= D; else estado_sig <= C; end if; when D => moneda <= '1'; if (veinte = '1') then estado_sig <= B; elsif (diez = '1') then estado_sig <= F; else estado_sig <= D; end if;

when F => moneda <= '1'; if (veinte = '1') then estado_sig <= I; elsif (diez = '1') then estado_sig <= B; else estado_sig <= F; end if; when I => devolucion <= '1'; servir <= '1'; estado_sig <= A;end case;

end process asignaest;end bebida_a;

type estados is (A, B, C, D, F, I, V, W);signal estado_actual, estado_sig : estados ; attribute ENUM_ENCODING : STRING;attribute ENUM_ENCODING of estados : type is ”000 001 010 011 100 101 110 111”;

10 de abril de 2023

Page 14: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Módulos Específicos

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

8.4 Módulos funcionales específicos: Memorias

Si el tamaño de la memoria es reducido, ésta puede implementarse mediante recursos lógicos comunes (funciones lógicas y registros)Habitualmente, existen en hardware estructuras regulares que las implementan y donde se sintetizan si la descripción VHDL es apropiada

package ROMS isconstant ANCHO_ROM: INTEGER := 5;subtype ROM_WORD is BIT_VECTOR (1 to ANCHO_ROM);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 ("10000"), ("11101"), ("11111"), ("10000"), ("10101"), ("00011"), ("11000"));

end ROMS; use work.ROMS.all;  entity ROM5x8 isport( ADDR: in ROM_RANGE;

DATA: out ROM_WORD);end ROM5x8; architecture rom_a of ROM5x8 isbegin

DATA <= ROM(ADDR); end rom_a;

Memoria ROM

10 de abril de 2023

Page 15: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Módulos Específicos

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

8.4 Módulos funcionales específicos: Memorias

En el caso de RAM, es necesario comprobar que el dispositivo incorpora este recurso lógico

library ieee;use ieee.std_logic_1164.all; use ieee.numeric_std.all; 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 istype mem_type is array (63 downto 0) of std_logic_vector (7 downto 0);signal mem: mem_type;beginl0: process (inclock, outclock, we, direccion) begin

if (rising_edge(inclock)) thenif (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;

Memoria RAM

10 de abril de 2023

Page 16: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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íntesis2. Diseño de sistemas digitales, desde su concepción hasta su

descripción3. Uso intensivo de recursos VHDL para simulación: bancos de

pruebasPlanteamiento: Se desea reducir el ruido de 50Hz en las señales de adquisición de ECGSolución: Filtro adaptativo LMS

Señal + ruido +

-Salida filtrada

Señal seno 50Hz (ruido)

90ºRetardo

Filtroadaptativo

d(n)

u0(n)

u1(n)

y(n)

e(n)w0(n)

w1(n)

10 de abril de 2023

Page 17: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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(

)()()(

)()()(1

0

nynn

nendny

nnne

uww

uw

iii

iii

M= núm etapas del filtro (M=2)

02

2

M E u( )

EM iu u

i

M

( )2 2

0

11

Siendo la constante de adaptación :

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

3 sumas1 resta

Restricción: Sólo se debe emplear un módulo aritmético de cada tipo (multiplicador, sumador y restador)

10 de abril de 2023

Page 18: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

LMS

d(n)

u0(n)

u1(n)

y(n)

ClockResetHab_ext

FinClockResetHab_ext

FSMhmulhsumhresC1C2C4C5fin

Filtro

10 de abril de 2023

Page 19: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

Propuesta:

MUX

MUX

MUX

MUX

*Acc

DMUX+-hmult

hsum

hrest

C1

C2

C2

C4

C5

0

1

0

1

2

0,1

2

0

1

2

0

1

2

d(n)y

u

u

w

w

0

1

1

0

yw0

w1

w0

w1

Multiplicador

Accumulador

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 10 de abril de 2023

Page 20: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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ódulo3. Las señales de control son generadas por la FSM4. Se unen los módulos en un diseño de nivel

superior5. Se genera un banco de pruebas que simule el

sistemaSe proponen 4 módulos: Multiplicador, sumador-restador, FSM y memoria intermediaSe 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 isconstant beta_desp : integer:=9; -- 2**beta_desp=beta realconstant 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;

10 de abril de 2023

Page 21: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50HzMó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; 10 de abril de 2023

Page 22: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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;

10 de abril de 2023

Page 23: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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;

10 de abril de 2023

Page 24: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

8.5 Ejemplo de aplicación: Filtro LMS de eliminación de ruido de red de 50HzMódulo FSM: Gestiona el control desde activación de Hab_ext hasta la salida

finentity LMS6_estados is 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;

10 de abril de 2023

Page 25: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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 isport (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;

10 de abril de 2023

Page 26: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

Módulo de prueba: Lee datos de fichero, escribe resultado en fichero y genera Reloj y Reset

NEWDATA : process 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;

10 de abril de 2023

Page 27: Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos

Aplicación

TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz

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

10 de abril de 2023