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

Download Report

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

Slide 1

Vhdl para síntesis

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


Slide 2

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
Trabajo en grupo
03 de noviembre de 2015

Menor tiempo de diseño
Diferentes descripciones (RTL, Comp., Estruct.)
TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Slide 3

Tema
TEMA 8. LENGUAJES DE DESCRIPCIÓN HARDWARE ORIENTADOS A
SÍNTESIS. (3 HORAS)
8.1
8.2
8.3
8.4
8.5

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

03 de noviembre de 2015

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


Slide 4

Metodología
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

03 de noviembre de 2015

ieee.std_logic_1164.all
Tipos: std_logic, integer

ieee.numeric_std.all
signed, unsigned
TEMA: VHDL para Síntesis. Alfredo Rosado Muñoz


Slide 5

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

Ló gica
com b inaciona l

L ó gica
co m b in a cion a l

R e g i s tr o s

S a lid as

E n tra das

03 de noviembre de 2015

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


Slide 6

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:

When..else

architecture p_a of puerta is
begin
with c select
d <= a
when
b
when
"11" when
"00" when
"00" when
end p_a;
03 de noviembre de 2015

"00",
"01",
"10",
"11",
others;

entity
entitypuerta
puertais
is
port
port(a,
(a,b,
b,c:
c:in
instd_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
architecture
begin
p_a of puerta is
begin d <= a when c="00" else
d <=
b when
a
c="01"
when c="00"
else else
"11"bwhenwhen
c="10"
c="01"
elseelse
"00""11"
whenwhen
a="11"
c="10"
elseelse
"01""00"
;
when a="11";
end
endp_a;
p_a;

With..select

Completar SIEMPRE
todas las condiciones

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


Slide 7

Lógica Combinacional
8.2

Síntesis de Lógica Combinacional

Uso de if..then..else en procesos:

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;

Agrupar en una sola sentencia todas las
condiciones siempre que sea posible
Number of ports : 10
Number of nets : 28
Number of instances : 22
Total accumulated area :
Number of IBUF : 6
Number of OBUF : 4
Number of gates : 14
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

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

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


Slide 8

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
Inferencia de Latches

entity latch is
port (a, b: in std_logic;
d: out std_logic);
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;
03 de noviembre de 2015

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

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


Slide 9

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:

Descripción genérica
entity registro is
port (d, reset, preset, reloj: in std_logic;
q: out std_logic);
end registro;

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

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;

03 de noviembre de 2015

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


Slide 10

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
(d,<=
reset,
r_derivado
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
= ‘1’
then
q <=
‘1’;
if reset
= ’1’
then
q <=
‘0’;
elsif
elsifrising_edge(reloj)
preset = ‘1’ then then
q <= ‘1’;
if
r_derivado
=
‘1’
then
elsif rising_edge(r_derivado) then
<=d;
d;
qq<=
end
if;
end if;
end
if;
end process;
end
end process;
r_a;
end r_a;
03 de noviembre de 2015

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


Slide 11

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;
03 de noviembre de 2015

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


Slide 12

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
03 de noviembre de 2015

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


Slide 13

Módulos Específicos
8.4

entity bebida
is de estados
Módulos funcionales específicos:
Máquinas

port (reloj, reset, veinte, diez : in std_logic ;
when B =>
when
F => out std_logic);
preparada, servir, devolucion,
moneda:
Ejemplo:
servir
'1'; ;
moneda <= '1';
end<=bebida
estado_sig
<= A; Mbebida_a
P re p a ra
d o architecture
onedas
of bebida is if (veinte = '1') then
P re p a ra d o
M o n e d a s when C =>
estado_sig <= I;
type estados is (A, B, C, D, F, I);
moneda
<=
D is p e n s a d
o r d esignal
beb
id a '1';
s . estado_actual,
40c€.
Inestado_sig
s e rc ió n
: estados
;
elsif (diez
= '1') then
D is p e n s a d o r d e b e b id a s . 4 0 c € .
In sif
e rc ióm
n (veinte
M onedas
S ó lo a d m
ite
o n e d a s d e=1 0'1')
c € y 2 then
0c€
begin
M onedas
estado_sig <= B;
S ó lo a d m ite m o n e d a s d e 1 0 c € y 2 0 c €
estado_sig
<= process
F;
cambiaest:
(reloj,
reset)
is
begin
else
R e to rn o
B e b id a
elsif (diez
= '1')
then
R e to rn o
B e b id a
M o n e d a s='1') then estado_actual <= A;
if
(reset
s e rvid a
estado_sig <= F;
M onedas
s e rvid a
estado_sig <=elsif
D; (rising_edge(reloj)) then
end if;
else
estado_actual <= estado_sig;
estado_sig <=end
C; if;
end if;
when I =>
end process cambiaest;
devolucion <=is'1';
asignaest: process (veinte, diez, estado_actual)
begin
when D =>
servir <= '1';
preparada <= '0';
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
end bebida_a;
estado_sig <= F;
when A =>
else
preparada <= '1';
estado_sig <= D; if (veinte = '1') then
end if;
estado_sig <= D;
elsif
(diez = '1') then
type estados is (A, B, C, D, F, I, V, W);
estado_sig
<= C;
signal estado_actual, estado_sig : estados
;
else
estado_sig <= A;
attribute ENUM_ENCODING : STRING;
if; is ”000 001 010 011 100 101 110 111”;
attribute ENUM_ENCODING of estadosend
: type
03 de noviembre de 2015

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


Slide 14

Módulos Específicos
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 is
Memoria ROM
constant 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 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;

03 de noviembre de 2015

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


Slide 15

Módulos Específicos
8.4

Módulos funcionales específicos: Memorias

En el caso de RAM, es necesario comprobar que
el dispositivo
library ieee;
incorpora este
use ieee.std_logic_1164.all;
recurso lógico
entity ram1 is
port (

Memoria RAM
use ieee.numeric_std.all;

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;
03 de noviembre de 2015

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


Slide 16

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

+



d(n)

y(n)
Salida filtrada

Señal seno 50Hz
(ruido)

Retardo

90º
u1(n)

e(n)
w0(n)



w1(n)

Filtro
adaptativo

u0(n)
03 de noviembre de 2015

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


Slide 17

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) 

w
i0

i

(n)  u i (n)

y (n)  d (n)  e(n)

w

i

( n  1) 

w

i

   u i (n)  y (n)

Siendo la constante de adaptación :

0 

2

2

2

M  E (u )

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

E (u ) 

1
M

M 1

 ui

2

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)
03 de noviembre de 2015

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


Slide 18

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)
u0(n)
u1(n)
Clock
Reset
Hab_ext
03 de noviembre de 2015

Filtro
LMS
FSM
Clock
Reset
Hab_ext

y(n)
hmul
hsum
hres
C1
C2
C4
C5
fin

Fin

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


Slide 19

Aplicación
8.5

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

Propuesta:

u0

1

2

MUX

u1

*

C1

w0

0

w1

1

y

2

0

0,1

0

MUX

+

C2

hmult

hsum

Accumulador

DMUX

w1

2

C5

d(n)

-

0

MUX

C2

1

w0

Acc
Multiplicador

w0
w1

hrest
1
MUX
2

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
03 de noviembre de 2015

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

y


Slide 20

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
:
constant external_length :
constant internal_length :
subtype external_vector is
subtype internal_vector is
end LMS_pkg;

03 de noviembre de 2015

integer:=9; -- 2**beta_desp=beta real
integer:=12;
integer:=(2*external_length);
signed ((external_length-1) downto 0);
signed ((internal_length-1) downto 0);

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


Slide 21

Aplicación
8.5

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;

03 de noviembre de 2015

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


Slide 22

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
reset,reloj
acc_salida
end LMS6_acc;

: in external_vector;
: in std_logic;
: out external_vector);

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;

03 de noviembre de 2015

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


Slide 23

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;
03 de noviembre de 2015

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


Slide 24

Aplicación
8.5

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

Módulo
FSM: Gestiona
entity LMS6_estados
is el control desde activación de Hab_ext hasta la salida fin
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;
03 de noviembre de 2015

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


Slide 25

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
hab_ext,clock,reset
lms_out
ending
end LMS6;

:
:
:
:

in external_vector;
in std_logic;
out external_vector;
out std_logic);

architecture LMS6archi of LMS6 is
component LMS6_mult
port (sen_in,cos_in,weight1,weight2,salida_ext
reset,reloj,hmul,control1
control2
mul_salida
end component;
component LMS6_acc
port (

mult_result
reset,reloj
acc_salida

:
:
:
:

in external_vector;
in std_logic;
in std_logic_vector (1 downto 0);
out external_vector);

: in external_vector;
: in std_logic;
: out external_vector);

end component;

03 de noviembre de 2015

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


Slide 26

Aplicación
8.5

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

NEWDATA
process
Módulo:de
prueba: Lee datos de fichero, escribe resultado
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;
03 de noviembre de 2015

en fichero y genera Reloj y Reset

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


Slide 27

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
Flops:
12
Latches:
0
Number of IOBs driving Global Buffers 1 out of 8

85%

Number of CLBs
Total CLB Flops:
4 input LUTs:
3 input LUTs:

44%
11%
39%
11%

Number of PRI-CLKs
Number of STARTUPs

176
92
315
44

out
out
out
out

of
of
of
of

400
800
800
400

1 out of 4
1 out of 1

12%

25%
100%

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

03 de noviembre de 2015

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