ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 33 ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 3.1. INTRODUCCIÓN En este apartado vamos a hacer un estudio de un filtro FIR en particular, en concreto un filtro FIR paso de baja con los siguientes parámetros: - Frecuencia de paso: fp = 5 Khz, - Frecuencia de corte: fs = 6 Khz., - Atenuación en la banda de paso: rp = 1 dB, José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 34 - Atenuación en la banda de rechazo: rs = 5 dB, - Frecuencia de muestreo: fsim = 48 Khz., Este filtro será el que tendremos que implementar en la FPGA para después estudiar su sensibilidad en presencia de SEU (Single Event Upset). Para implementarlo tendremos que saber sus coeficientes ya que como vimos en el apartado teórico, un filtro FIR se representa mediante tantos retrasos como orden tenga y estas muestras retrasadas de la entrada se van multiplicando por unos coeficientes para, una vez sumadas, obtener la respuesta final deseada. Una vez que sepamos el orden del filtro y los coeficientes, lo que tendremos que hacer es implementarlo en un lenguaje de descripción hardware (VHDL) en el que sólo tendremos que generar los sumadores, multiplicadores y los retrasos (estos se harán con flip-flops). Cuando tengamos implementado el filtro en la FPGA el siguiente paso será comprobar si efectivamente funciona como debe de funcionar, es decir si filtra lo que tiene que filtrar (en nuestro caso todas las componentes frecuenciales por encima de 6 Khz.), para ello lo que haremos será comprobar nuestro filtro “real” implementado en la FPGA con el mismo filtro “teórico” realizado en MATLAB, y comprobando que ambos filtros responde idénticamente (o al menos parecido) ante los mismos estímulos de entrada. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 35 Llegados a este momento, ya tenemos nuestro filtro FIR implementado en la FPGA, ahora es cuando vamos a hacer un estudio exhaustivo sobre él realizándole diversas pruebas para ver como de sensible es en presencia de SEU. Todos estos pasos lo vamos a ir detallando paso a paso en los siguientes apartados. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 36 3.2. CARACTERIZACIÓN DEL FILTRO FIR EN MATLAB Una vez que sabemos las especificaciones del filtro, el primer paso que debemos de dar será saber cual es el orden de dicho filtro y cuales son sus coeficientes. Para esto utilizamos MATLAB. Lo primero que tenemos que averiguar es el orden del filtro, para ello, hacemos uso por ejemplo de la aproximación de butterworth y escribiendo la siguiente función en MATLAB: rp=1; rs=5; fp=5000; fs=6000; fsim=48000; wp=2*fp/fsim; ws=2*fs/fsim; [N,Wn]=buttord (wp,ws,rp,rs); En la cual, definimos unas variables con las especificiaciones del filtro, calculamos las frecuencias discretas wp y ws y se las pasamos, junto a las atenuaciones de la banda de paso y de rechazo, como parámetros a la función buttor, y esta nos devuelve en N el orden del filtro, en nuestro caso N = 11. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 37 Una vez que sabemos el orden del filtro para una aproximación en concreta, solo nos falta por saber los coeficientes del filtro FIR, para ello usamos la función de MATLAB “fir2”, a la cual se le pasa como parámetros el orden del filtro, y un vector de puntos de refenrencias frecuenciales normalizadas y otro vector con la amplitud de dichas frecuencias, por ejemplo: Fir2 (11, [0, 0.2, 0.3, 0.8, 1], [1, 1, 1e-5, 1e-5, 1e-5]); y nos devuelve los coeficientes de nuestro filtro, que son: Coeficiente Valor a0 -0.0033 a1 -0.0058 a2 0.0116 a3 0.0969 a4 0.2305 a5 0.2988 a6 0.2305 a7 0.0969 a8 0.0116 a9 -0.0058 a10 -0.0033 Tabla 1: Coeficientes del filtro FIR Estos son los coeficientes que tendremos que digitalizar para poder implementar el filtro en la FPGA. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 38 Para comprobar que esto funciona bien, hacemos uso de la herramienta SIMULINK de MATLAB y hacemos el siguiente montaje: Figura 13: Montaje en simulink filtro FIR En la figura 13 lo que hemos realizado ha sido meter un bloque “Discrete filter” en el que le hemos pasado como parámetro, dentro de la variable a2(z) los coeficientes de la tabla 1. Para probarlo, le hemos metido 2 señales de entrada, un seno de gran amplitud a una frecuencia de 3.980 Hz y una señal de ruido de gran potencia, y comprobamos que a la salida se “filtra” la señal sinusoidal limpiándola de ruido. Si simulamos, lo que se obtiene es lo siguiente: José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 39 Figura 14: Salida del filtro FIR Como se observa en la figura 13, en el osciloscopio se mete tanto la entrada como la salida, para poder visualizar las dos señales a la vez. La entrada (señal sinusoidal más ruido) es la señal amarilla, y la señal de salida, la filtrada (que debe de ser solo la sinusoidal) es la señal rosa. Para ver mejor el resultado, vamos a hacer un zoom de la figura 14 y lo mostramos en la figura 15: José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 40 Figura 15: Zoom de la señal de salida del filtro Y en ella se ve claramente como el filtro funciona bien, y a la salida tenemos solamente la señal sinusoidal (discretizada claro está al tratarse de un filtro discreto) y hemos conseguido quitar el ruido. Si hacemos un análisis espectral de nuestro sistema, poniendo a la salida de nuestro filtro FIR un analizador de espectro obtenemos la imagen de la figura 16, en la que podemos ver la señal de salida en el tiempo, la densidad espectral de potencia y la fase. Como cabía de esperar tenemos una sampling centrada a la frecuencia del seno (3.980 hz). José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 41 Figura 16: Análisis espectral de la salida del filtro Si cambiamos el seno de entrada por otro seno de frecuencia 10 Khz. a la salida se tendría que tener un seno “casi” atenuado, ya que la frecuencia de corte de nuestro filtro era de 6 Khz. y la del seno esta por encima de esta frecuencia. Si simulamos, obtenemos la siguiente respuesta: Figura 17: Salida del sistema a 10 Khz. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 42 El análisis espectral de la salida con una entrada de un seno de 10 Khz. más una componente de ruido es el siguiente: Figura 18: Análisis espectral de la salida con entrada de 10 Khz. En el que se observa claramente en la señal de salida en el tiempo que ya no se tiene un seno tan claro como antes, y que la densidad espectral de potencia no es tan “limpia” como en el caso en el que la señal de entrada era a una frecuencia por debajo de los 5 Khz. de frecuencia de paso de nuestro filtro. Así que con todo esto nuestro filtro queda perfectamente caracterizado. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 43 3.3. IMPLEMENTACIÓN DEL FILTRO EN LA FPGA Una vez que ya tenemos nuestro filtro perfectamente caracterizado y definido ( El filtro es de orden 11, y sabemos todos sus coeficientes) el siguiente paso será implementarlo en una FPGA, y para ello habrá que escribirlo en lenguaje de programación hardware, que en nuestro caso será el VHDL. La estructura que tenemos que implementar en hardware es la siguiente: Figura 19: Estructura directa filtro FIR Que como vimos en los fundamentos teóricos, se trata de la estrutura directa I. En el dibujo, solo se han representado 8 etapas, pero sabemos que nuestro diseño debe de tener 11 etapas, siguiendo la estructura de la figura 19, que es fácil de implementar. Para nuestro diseño, hemos decidido, que la señal digital que entra en el filtro (X(n)) provenga de digitalizar la señal analógica con 18 bits, así que las muestras de la señal de entrada estarán codificadas con 18 bits, ya José Manuel Marín de la Rosa 44 ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. que así logramos tener una buena precisión. Y los 11 coeficientes de nuestro filtro los vamos a codificar con 9 bits. Lo primero que tenemos que realizar es codificar los coeficientes de la tabla 1 en 9 bits, como lo vamos a codificar con 9 bits, si cuantizamos (multiplicamos por 29) todos los coeficientes y redondeamos al entero más cercano (redondeamos por arriba si el número es positivo y por abajo si el número es negativo) obtenemos la siguiente tabla: Coeficiente Valor Codificación con 9 bits en CA2 a0 -2 111111110 a1 -2 111111110 a2 6 000000110 a3 50 000110010 a4 118 001110110 a5 154 010011010 a6 118 001110110 a7 50 000110010 a8 6 000000110 a9 -2 111111110 a10 -2 111111110 Tabla 2: Coeficientes del filtro Codificados en CA2 con 9 bits Para implementar en hardware la estructura de la figura 19 con N=11, lo que vamos a tener que hacer es modelar los retrasos con flipflops, en nuestro caso 11 flip-flops, a los que le entra un vector de 18 bits y sale otro vector de 18 bits retrasados un ciclo. La salida de cada biestable José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 45 que son las señales X(n-L) son multiplicadas por los coeficientes correspondientes h(L), para implementar dicha multiplicación, usaremos multiplicadores de 18X9 bits, y el resultado lo meteremos en un vector de 27 bits para evitar el overflow. Luego se hace la suma de todas las multiplicaciones (teniendo en cuenta el redondeo, según el resultado sea un número positivo o un número negativo) y por ultimo, el resultado se mete en un vector de salida de 18 bits (así que aquí hacemos truncado del resultado). Esto, a grosso modo, es lo que se ha realizado para implementar el filtro en la FPGA. El código en VHDL, queda de la siguiente manera: ------------------------------------------------------------------------------------------------- Filtro Fir: -Señal digital de entrada de 18 bits -Coeficientes de 9 Bits -Multiplicadores de 18X9 (tantos como coef. se tengan, o sea, tantos como retrasos halla) -Acumulador (sumador) de dichas multiplicaciones -Filtro paso de baja tipo Butterworth, con frecuencia de corte de 5 Khz. -Caso 1: Filtro fir sin redundar ------------------------------------------------------------------------------------------------- -- Bloque para describir los coeficientes del filtro FIR library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package fir_coef is subtype coef_word is signed(8 downto 0);--coeficientes de 9 bits subtype coef_range is integer range 0 to 10; --numero de coeficientes que hay, o sea, retrasos José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. type coef_table is array (0 to 10) of coef_word; constant coef_rom: coef_table:= ( ("111111110"), ("111111110"), ("000000110"), ("000110010"), ("001110110"), ("010011010"), ("001110110"), ("000110010"), ("000000110"), ("111111110"), ("111111110")); end package fir_coef; -- Filtro Fir library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.fir_coef.all; entity fir is port (clk,reset,load: in std_logic; data_in: in std_logic_vector(17 downto 0); -- señal digital de entrada de 20 bits data_out: out std_logic_vector(17 downto 0); ultima_etapa: out std_logic_vector(17 downto 0)); end fir; architecture a_fir of fir is type fifo_array is array (0 to 10) of signed (17 downto 0); signal fifo,p_fifo: fifo_array; signal data_outi: std_logic_vector(17 downto 0); component regTmr is Generic(N:integer:=18); Port ( clk : in std_logic; reset : in std_logic; d : in signed (N-1 downto 0); José Manuel Marín de la Rosa 46 ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 47 q : out signed (N-1 downto 0)); end component; component regSimple is Generic(N:integer:=18); Port ( clk : in std_logic; reset : in std_logic; d : in signed (N-1 downto 0); q : out signed (N-1 downto 0)); end component; begin sinc:process (reset,clk) begin if reset = '1' then data_out <= (others => '0'); elsif clk'event and clk = '1' then data_out <= data_outi; end if; end process sinc; r0: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(0), q => fifo(0)); r1: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(1), q => fifo(1)); r2: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(2), q => fifo(2)); r3: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(3), q => fifo(3)); r4: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(4), q => fifo(4)); r5: regSimple José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 48 Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(5), q => fifo(5)); r6: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(6), q => fifo(6)); r7: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(7), q => fifo(7)); r8: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(8), q => fifo(8)); r9: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(9), q => fifo(9)); r10: regSimple Generic map (N=>18) port map (clk => clk, reset => reset, d => p_fifo(10), q => fifo(10)); regs: process(load,fifo,data_in) begin if load = '1' then for i in 1 to 10 loop p_fifo(i) <= fifo(i-1); end loop; p_fifo (0) <= signed (data_in); else for i in 0 to 10 loop p_fifo(i) <= fifo(i); end loop; end if; end process regs; firstruct: process (fifo) variable prod: signed (26 downto 0); variable idata_tmp: signed (19 downto 0); variable data_tmp: signed (17 downto 0); begin data_tmp := (others => '0'); for i in 0 to 10 loop José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 49 prod := fifo(i) * coef_rom(i); if (prod(26)='1') then prod:=prod+255; --redondeo end if; idata_tmp := (data_tmp(17)&data_tmp(17)&data_tmp) + (prod(26)&prod(26)&prod(26 downto 9)); if idata_tmp(19 downto 18) = "01" then -significa que desborda por arriba data_tmp:=(17=>'0',others=>'1'); elsif idata_tmp(19 downto 18) = "10" then -significa que desborda por abajo data_tmp:=(17=>'1',others=>'0'); - else data_tmp:=idata_tmp(17 downto 0); end if; end loop; data_outi <= std_logic_vector (data_tmp); end process firstruct; ultima_etapa <= (others =>'0'); end a_fir; Este código, junto con la descripción de los componentes, y los sucesivos códigos que debemos de generar para realizar las pruebas oportunas se adjuntan al final de la documentación en el apartado “Anexos”. Una vez que ya tenemos implementado nuestro filtro FIR en la FPGA, lo que tenemos que hacer es probar si realmente funciona bien, para ello, como dijimos anteriormente, lo que vamos a hacer es compararlo con el filtro “teórico” que caracterizamos en MATLAB, para ello, a los dos le vamos a meter la misma entrada, y por lo tanto deberíamos de obtener “parecidas” salidas. Para meterle al filtro que tenemos en la FPGA la misma entrada que al que tenemos generado en MATLAB, tenemos que meter la entrada en un José Manuel Marín de la Rosa 50 ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. fichero, para hacer eso, como vemos en la figura 12 la señal de entrada la hacemos pasar por un cuantizador para cuantizarla, después la hacemos pasar por un convertidor, para convertirla a un entero, y posteriormente ese resultado lo guardamos en una variable con nombre “Entrada1”, el contenido de esa variable lo pasamos a un fichero, para que, generando el código VHDL oportuno, se le pase dicho fichero como parámetro de entrada a nuestro filtro, y genere otro fichero, que se llame “fichero_de_salida” el cual debemos de comparar con el contenido de la variable “Salida” que se genera a la salida del filtro fir de MATLAB. Si vemos un “trocito” de dichos ficheros (los ficheros completos se expondrán en el anexo) podemos ver los resultados. El contenido de la variable “Entrada1”,que se obtuvo haciendo la simulación en SIMULINK, y que será el contenido de el “fichero_de_entrada” que se le va a pasar al filtro fir de la FPGA es el siguiente: 55232 131071 -19665 131071 131071 6925 -131072 -42095 -22712 -91978 -36006 8165 -25592 131071 30943 -131072 -123440 José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 51 131071 -60393 -131072 -131072 -131072 -131072 -131072 -41356 131071 120188 131071 131071 125974 -80548 -127333 -131072 -131072 131071 77463 -117338 -97165 82961 131071 77966 -122143 -127018 -56718 74885 -131072 22310 . . . . . En la variable “Salida” obtenida en SIMULINK se tiene los siguientes datos: José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. -215 -727 212 6494 24274 45896 62441 73451 77939 57781 10047 -36816 -55662 -55306 -47519 -32944 -6155 21507 26957 -2367 -35016 -38912 -29105 -45700 -85468 -117894 -127643 -117936 -79567 -13482 58438 107103 123037 104276 49421 -26336 -85322 -91846 -47561 -834 3607 -17750 José Manuel Marín de la Rosa 52 ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 53 . . . . . Que si lo comparamos con el “fichero_de_salida” que genera la FPGA: -216 -728 211 6492 24274 45895 62439 73448 77936 57778 10044 -36821 -55665 -55308 -47519 -32946 -6158 21503 26954 -2372 -35020 -38916 -29108 -45702 -85471 -117896 -127644 -117938 -79569 -13484 58435 José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 54 107099 123034 104274 49418 -26338 -85325 -91849 -47564 -837 3604 -17754 . . . . Como se observa, la salida de ambos filtros son prácticamente idénticas, los errores que se tienen son errores difíciles de evitar debido a los redondeos y truncamientos que se hacen en el filtro digital para obtener la salida. José Manuel Marín de la Rosa 55 ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 3.4. ESTUDIO EXHAUSTIVO DEL FILTRO FIR. PRUEBAS REALIZADAS. Llegados a este punto, empezamos, ahora sí, a estudiar el verdadero propósito de ésta investigación, que no es otro sino que estudiar el comportamiento de filtros en presencia de SEU. Vamos a comenzar estudiando el filtro FIR, para después, hacer lo propio con un filtro IIR y así poder comparar los resultados obtenidos. Como sabemos, cuando un circuito electrónico se encuentra en presencia de SEU, éste puede hacer que varíe algunas de las propiedades físicas de dicho circuito, haciendo que el resultado obtenido a la salida no sea el esperado. Nosotros, para “simular” ese SEU, vamos introducir errores en distintas partes de nuestro filtro (como si esos errores fueran provocados por el SEU) y vamos a ver como se comporta nuestro filtro, comparando la salida “ideal” que daría sin introducir fallos con la salida que se obtiene introduciendo estos fallos “voluntariamente”. Para introducir estos “errores” vamos a hacer uso de una herramienta diseñada en la Universidad de Sevilla por AICIA-GTE, ESA en un proyecto denominado “FT-UNSHADES” más en concreto de las publicaciones: “FT-UNSHADES Design Preparation Tools” y “FT-UNSHADES Design Test and Analysis Tools” cuya documentación está incluida en los anexos de esta memoria. A grosso modo esta herramienta lo que hace es crear en la FPGA 2 copias del sistema a estudiar y unos vectores para testearlas. Una de las José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 56 copias será la ide., sin fallos, y metiéndole los vectores de entrada, obtenemos las salidas correspondientes a esos vectores. En la otra copia es en la que se introduce fallos en distintos sitios (como si esos fallos fuesen producidos por el SEU) se le meten los mismos vectores de entrada y compara la salida de esta con la anterior, si es la misma es que el fallo introducido no ha producido errores, si la salida es distinta, quiere decir que el fallo que se ha introducido (y sabemos dónde) produce fallo. Los fallos que se meten en la copia del diseño, se introducirán muchas veces en distintos tiempos, por eso algunas veces introducir un error en un registro en concreto de nuestro diseño puede dar fallos o no, dependiendo de el ciclo de reloj en el que se encuentre. Con ésta información vamos a intentar hacer un “mapa” de nuestro filtro viendo donde si se produce fallo en ese sitio es mas “grave” para nuestro sistema, ya que como veremos, habrá bits en los cuales, aunque se introduzca un fallo, la salida no lo notará y será igual que la “ideal”, mientras que habrá otros bits, en los cuales si se tiene un fallo en ese bit, será crítico para nuestro filtro, ya que un fallo en ese bit puede que siempre produzca un fallo en la salida. Esa será nuestra primera misión, después, una vez realizado eso vamos a introducir triple redundancia modular en nuestro filtro y elección por mayoría, o sea, replicar nuestro diseño tres veces y elegir la salida mediante “votación” de los tres. Veremos que si redundamos todos los registros de nuestro filtro, aunque se produzcan fallos dentro de algún registro, nunca se tendrá error a la salida, o sea, esto sería lo ideal, ya que tendríamos un 0% de fallos a la salida en presencia de SEU, pero claro está José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 57 también es la solución mas cara, ya que redundar todo el sistema, es 3 veces mas caro que el circuito original. Por todo esto, lo q vamos a intentar es hacer un estudio que consistirá en ver que registros internos del filtro “merecen la pena” redundar, y cuales no. Redundaremos aquellos en los cuales un error en ese registro tenga un alto porcentaje de que produzca un error a la salida, y no redundaremos aquellos registros en los cuales un error en ellos tenga un porcentaje muy bajo de que se produzca error a la salida. Para hacer esto creamos en VHDL 2 módulos, uno que será el registro simple, que será un registro normal (biestable) con un vector de entrada y de salida de 18 bits, y un registro que llamaremos registroTmr, el cual tendrá triple redundancia modular, ya que será un registro que está triplicado. (los códigos están en el anexo). Y “jugaremos” poniendo en nuestro filtro algunos registros como registros simples y otros como registrosTmr y viendo los resultados. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 58 3.4.1. PRUEBAS REALIZADAS El siguiente paso que dimos, una vez realizado todo lo anterior, fue la realización de diversas pruebas, redundando partes de nuestro circuito, y comparar los recursos (biestables) consumidos con la eficiencia del filtro, ya que como dijimos antes, si se redunda todo el sistema estamos seguros de que se tendrá un 100% de eficiencia, pero claro está pagando el mas alto precio en recursos. Habrá aplicaciones, en las que claro está, se requerirá que el sistema tenga un 100% de eficiencia, por ejemplo en sistemas integrados en aplicaciones críticas como pueden ser sistemas para proyectos espaciales, circuitos electrónicos de láser para operaciones oculares (imaginad por un instante que ese láser falla por un momento, sería un desastre para la operación y podría dejar ciega de por vida a la persona en cuestión), etc,…. Está claro que para estas aplicaciones no se repara en recursos y se redundaría el sistema un 100% para evitar desastres. Sin embargo, hay otras muchas aplicaciones, como por ejemplo contadores de surtidor de gasolina, circuitos de electrodomésticos, y de propósito general, en los que no se requieren un 100% de eficiencia, son en estos circuitos en los que se busca una mejor relación eficiencia-precio y para ello se estudia que es lo que merece la pena redundar y que no. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 59 Para estudiar nuestro filtro FIR, hemos realizado diversas pruebas, en concreto 11, para ver donde se producen más fallos, y estudiar la mejor relación eficiencia-precio de nuestro sistema. Las pruebas consisten en introducir 10.000 errores en distintos lugares y en distintos momentos en nuestro diseño y ver si esos errores producen fallos en la salida o no. PRUEBA 1: La primera prueba que realizamos fue ver como funcionaba nuestro filtro sin protección, o sea, sin redundar nada, en presencia de SEU, y los resultados fueron los siguientes: - Recursos utilizados : 204 flip-flops, - Eficiencia: 18 % Como se observa, se tienen muchos errores, se consigue una eficiencia muy baja. Si se observa el fichero resultante de realizar la prueba 1 (en CD adjunto) se ve que los errores son más críticos cuanto más cerca de la entrada se produce, o sea, que los registros más críticos son los las cercanos a la entrada, el registro0, el registro1, el registro2… y así sucesivamente, y dentro de los registros son mucho mas críticos los errores que se producen en los bits altos, ya que un error en un bit alto produce error seguro a la salida. A modo de resumen, detallo donde alguna vez no se produce fallos, aunque se introduzca ahí un error (otras veces sí): Registro 0, reigstro 1, registro 2, registro 3, registro 4, registro 5: En estos registros no siempre se tiene fallo en la salida si se introduce un error en los bits 0 y 1. Si se introduce el error en los otros bits, siempre se tiene fallo en la salida. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 60 Registro 6: No siempre se tiene fallo en la salida si se introduce un error en los bits 0, 1 y 2. Si se introduce en los demás si. Registro 7: No siempre se tiene fallo en la salida si se introduce un error en los bits 0, 1, 2 y 3. Si se introduce en los demás si. Registro 8: No siempre se tiene fallo en la salida si se introduce un error en los bits que van del 0 al 6, en los demás si. Registro 9 y registro 10: No se produce fallo en la salida si se introduce un error en los bits que van del 0 al 7 en los demás sí. En conclusión, los bits mas significativos son críticos!, ya que un error en ellos da lugar a fallo seguro en la salida, y mirando los registros, los registros mas cercanos a la entrada son más críticos que los que están mas cercanos a la salida. (Código VHDL en anexos) PRUEBA 2: La siguiente prueba que hicimos fue redundando todo el sistema. Como cabría de esperar tuvimos un 100 % de eficiencia por eso no anexo el fichero de salida de esta prueba, ya que es obvio como sería. - Recursos utilizados: 612 flip-flops, - Eficiencia: 100% Como se observa, se tiene 3 veces mas de recursos que en el caso anterior. (Código en Anexos) José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. PRUEBA 3: 61 Visto el resultado de la primera prueba, lo primero que debemos de hacer es empezar a redundar los registros mas bajo, y así vamos a empezar. En esta tercera prueba lo que vamos a hacer es lo siguiente: Registro 0: Totalmente redundado (ya que es el más importante) Registro 1: Totalmente redundado menos el bit menos significativo Registro 2: Totalmente redundado menos los 2 bits menos significativos. Registro 3: Totalmente redundado menos los 3 bits menos significativos. Registro 4: Totalmente redundado menos los 4 bits menos significativos. Registro 5: Totalmente redundado menos los 5 bits menos significativos. Registro 6: Totalmente redundado menos los 6 bits menos significativos. Registro 7: Totalmente redundado menos los 7 bits menos significativos. Registro 8: Totalmente redundado menos los 8 bits menos significativos. Registro 9: Totalmente redundado menos los 9 bits menos significativos. Registro 10: Totalmente redundado menos los 10 bits menos significativos. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 62 Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 502 flip-flops - Eficiencia 93.56% Como vemos, hemos conseguido quitar un número considerable de flip-flops (110) y seguimos teniendo un elevado porcentaje de eficiencia que es de mas del 93%. (El fichero con el resultado en CD adjunto). Viendo el fichero de salida, se observa, como cabría esperar, que los fallos se tienen en los bits más significativos de cada registro, que son los que no están redundados. Y como en esos bits eran en los que menos fallos se tenían sin redundar por esa razón baja nuestra tasa de fallos. PRUEBA 4: En esta prueba vamos a intentar utilizar menos recursos, o sea redundar un poco menos, pero intentando mantener el porcentaje de eficiencia. La prueba que vamos a realizar es la siguiente: Registro 0: Totalmente redundado (ya que es el más importante) Registro 1: Totalmente redundado menos los 2 bits menos significativos. Registro 2: Totalmente redundado menos los 3 bits menos significativos. Registro 3: Totalmente redundado menos los 4 bits menos significativos. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 63 Registro 4: Totalmente redundado menos los 5 bits menos significativos. Registro 5: Totalmente redundado menos los 6 bits menos significativos. Registro 6: Totalmente redundado menos los 7 bits menos significativos. Registro 7: Totalmente redundado menos los 8 bits menos significativos. Registro 8: Totalmente redundado menos los 9 bits menos significativos. Registro 9: Totalmente redundado menos los 10 bits menos significativos. Registro 10: Totalmente redundado menos los 11 bits menos significativos. Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 482 flip-flops - Eficiencia 91.28% Hemos reducido los recursos utilizados con respecto a la prueba anterior en 20 flip-flops con apenas notarse la eficiencia, ya que sigue siendo bastante alta con más del 91% de eficiencia. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 64 PRUEBA 5 : En esta prueba vamos a seguir intentando utilizar menos recursos que en la anterior, siempre manteniendo el porcentaje de eficiencia relativamente alto. En esta haremos lo siguiente: Registro 0: Totalmente redundado (ya que es el más importante) Registro 1: Totalmente redundado menos los 3 bits menos significativos. Registro 2: Totalmente redundado menos los 4 bits menos significativos. Registro 3: Totalmente redundado menos los 5 bits menos significativos. Registro 4: Totalmente redundado menos los 6 bits menos significativos. Registro 5: Totalmente redundado menos los 7 bits menos significativos. Registro 6: Totalmente redundado menos los 8 bits menos significativos. Registro 7: Totalmente redundado menos los 9 bits menos significativos. Registro 8: Totalmente redundado menos los 10 bits menos significativos. Registro 9 : Totalmente redundado menos los 12 bits menos significativos. Registro 10: Totalmente redundado menos los 13 bits menos significativos. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 65 Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 462 flip-flops - Eficiencia: 88.33% Hemos vuelto a reducir los recursos utilizados, en concreto en 20 flip-flops con respecto a la prueba anterior, y la eficiencia la podemos seguir considerando bastante alta (según para la aplicación que se quiera claro está) con un 88.33% PRUEBA 6: En esta prueba haremos: Registro 0: Totalmente redundado (ya que es el más importante) Registro 1: Totalmente redundado menos los 4 bits menos significativos. Registro 2: Totalmente redundado menos los 5 bits menos significativos. Registro 3: Totalmente redundado menos los 6 bits menos significativos. Registro 4: Totalmente redundado menos los 7 bits menos significativos. Registro 5: Totalmente redundado menos los 8 bits menos significativos. Registro 6: Totalmente redundado menos los 9 bits menos significativos. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 66 Registro 7: Totalmente redundado menos los 10 bits menos significativos. Registro 8 : Totalmente redundado menos los 12 bits menos significativos. Registro 9: Totalmente redundado menos los 13 bits menos significativos. Registro 10: Totalmente redundado menos los 14 bits menos significativos Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 442 flip-flops - Eficiencia: 85.02% Como se sigue observando, seguimos reduciendo los recursos, y la eficiencia sigue siendo relativamente alta. PRUEBA 7: En esta prueba vamos a cambiar un poco nuestra forma de actuar hasta ahora. Hasta el momento hemos visto que si vamos dejando sin redundar los bits LSB de los registros, vamos ahorrando en recursos y conseguimos mantener la eficiencia bastante alta (siempre por encima del 85%, por lo visto hasta ahora). En esta prueba y la siguiente vamos a investigar otra cosa, y es ver que registro son los más importantes, si los registros pares o los registros impares. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 67 En esta prueba vamos a redundar los registros pares y no los impares y vamos a ver que resultados se obtiene, mientras que en la siguiente vamos a hacer lo contrario, o sea, redundar los impares y no los pares, y veremos en cual de las dos se obtiene mejores resultados. Registro 0: Totalmente redundado Registro 1: Totalmente sin redundar Registro 2: Totalmente redundado Registro 3: Totalmente sin redundar Registro 4: Totalmente redundado Registro 5: Totalmente sin redundar Registro 6: Totalmente redundado Registro 7: Totalmente sin redundar Registro 8: Totalmente redundado Registro 9: Totalmente sin redundar Registro 10: Totalmente redundado Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 432 flip-flops - Eficiencia: 80.89% José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. PRUEBA 8: 68 Y ahora hacemos lo contrario, redundamos los registros impares totalmente, y dejamos sin redundar los pares Registro 0: Totalmente sin redundar Registro 1: Totalmente redundado Registro 2: Totalmente sin redundar Registro 3: Totalmente redundado Registro 4: Totalmente sin redundar Registro 5: Totalmente redundado Registro 6: Totalmente sin redundar Registro 7: Totalmente redundado Registro 8: Totalmente sin redundar Registro 9: Totalmente redundado Registro 10: Totalmente sin redundar Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 396 flip-flops - Eficiencia: 72.60% A vista de los resultados obtenidos, parece mejor redundar los registros pares que los impares, esto más o menos se esperaba por dos motivos: 1.- Hay mas registros pares que impares, si se redundan los pares, se redundan más registros que cuando redundamos los impares, eso se ve en los recursos usados, ya que para la prueba 7 se usan 432 flip-flops, mientras José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 69 que para la 8 sólo 396. Así que si se tiene más redundancia, claro está que se tendrá mejores resultados. 2.- El segundo motivo es porque como vimos en la prueba 1, los registros que están más cerca de la entrada son más importantes y más sensible a los errores introducidos. Al tomar el registro 0 como registro par lo redundamos en la prueba 7 y no en la 8 y por eso en la 7 se obtienen mejores resultados que en la prueba 8. Si queremos comprobar si es mejor redundar los pares que los impares, lo que podemos hacer es realizar una nueva prueba en la que se redundan solo los registros impares y no los pares pero además también redundamos el registro 0 totalmente. Eso es lo que haremos en la siguiente prueba. PRUEBA 9: Redundamos todos los registros impares y además el registro 0, y los demás los dejamos sin redundar. Registro 0: Totalmente redundado Registro 1: Totalmente redundado Registro 2: Totalmente sin redundar Registro 3: Totalmente redundado Registro 4: Totalmente sin redundar Registro 5: Totalmente redundado Registro 6: Totalmente sin redundar Registro 7: Totalmente redundado Registro 8: Totalmente sin redundar José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 70 Registro 9: Totalmente redundado Registro 10: Totalmente sin redundar Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 432 flip-flops - Eficiencia: 83.09% Ahora si podemos comprobar los resultados de esta prueba, con los obtenidos en la prueba 7, ya que tenemos el mismo número de flip-flops en las dos. Pues bien, se observa que por muy poco, apenas el 3% es mejor redundar los impares (más el registro 0) que los pares (más el registro 0). Esto también puede tener una explicación, y es que, como dijimos en la prueba 1, los registros más sensibles son los más cercanos a la entrada, si en las dos pruebas tenemos redundado el registro 0 que es el más cercano, el siguiente en importancia es el registro 1, y ese se redunda por completo en los impares (prueba 9) y no en los pares (prueba 7) de ahí los resultados obtenidos. Por último, vamos a comprobar que es más útil redundar, si los 9 bits más significativos o los 9 bits menos significativos de cara registro. Para ello vamos a hacer 2 pruebas, 1 en la que vamos a redundar los 9 bits más significativos de todos los registros dejando si redundar los 9 LSB, y después haremos la prueba complementaria, es decir redundar los 9 bits menos significativos y dejar sin redundar los 9 MSB de cada registro. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 71 PRUEBA 10: Redundaremos los 9 bits MSB de cada registro, y dejar sin redundar los 9 bits LSB. Registro 0: 9 MSB redundados y los 9 LSB sin redundar. Registro 1: 9 MSB redundados y los 9 LSB sin redundar. Registro 2: 9 MSB redundados y los 9 LSB sin redundar. Registro 3: 9 MSB redundados y los 9 LSB sin redundar. Registro 4: 9 MSB redundados y los 9 LSB sin redundar. Registro 5: 9 MSB redundados y los 9 LSB sin redundar. Registro 6: 9 MSB redundados y los 9 LSB sin redundar. Registro 7: 9 MSB redundados y los 9 LSB sin redundar. Registro 8: 9 MSB redundados y los 9 LSB sin redundar. Registro 9: 9 MSB redundados y los 9 LSB sin redundar. Registro 10: 9 MSB redundados y los 9 LSB sin redundar Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 414 flip-flops - Eficiencia: 81.78% RUEBA 11: Redundaremos los 9 LSB de cada registro y dejaremos sin redundar los 9 MSB. Registro 0: 9 LSB redundados y los 9 MSB sin redundar. Registro 1: 9 LSB redundados y los 9 MSB sin redundar. Registro 2: 9 LSB redundados y los 9 MSB sin redundar. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 72 Registro 3: 9 LSB redundados y los 9 MSB sin redundar. Registro 4: 9 LSB redundados y los 9 MSB sin redundar. Registro 5: 9 LSB redundados y los 9 MSB sin redundar. Registro 6: 9 LSB redundados y los 9 MSB sin redundar. Registro 7: 9 LSB redundados y los 9 MSB sin redundar. Registro 8: 9 LSB redundados y los 9 MSB sin redundar. Registro 9: 9 LSB redundados y los 9 MSB sin redundar. Registro 10: 9 LSB redundados y los 9 MSB sin redundar. Realizamos esta prueba en VHDL (código en Anexos) y la analizamos, obteniendo los siguientes resultados: - Recursos utilizados: 414 flip-flops - Eficiencia: 76.02% Como podemos observar se obtiene mejores resultados si redundamos los 9 bits MSB que si redundamos los 9 bits LSB, esto ya era algo previsible, pues como hemos ido observando en las pruebas anteriores, los bits MSB son más sensibles que los LSB, ya que si uno de ellos falla por cualquier motivo con una gran probabilidad se va a tener error en la salida de nuestro filtro. Así que es mucho más importante redundar los bits más significativos que redundar los bits menos significativos. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. 73 3.4.2. CONCLUSIONES FILTRO FIR Tras haber realizado todas estas pruebas para intentar estudiar la sensibilidad de un filtro FIR en presencia de SEU, llegamos a las siguientes conclusiones: 1.- Los registros más sensibles, o sea con mayor porcentaje de que al introducir en ellos un fallo se tenga un error en la salida, son los registros más cercanos a la entrada. Algo que puede ser comprensible, ya que si se produce un fallo en la primera etapa del filtro ese error se va a ir “multiplicando” en las demás etapas y casi con toda probabilidad va a producir un error en la salida de nuestro sistema. A la vez que nos vamos acercando a la salida, un fallo en un registro más cercano a ella es menos problemático. 2.- Los bits más sensibles de cada registro, o sea los que tienen mayor porcentaje de que al provocar un fallo en ellos se tenga un error en la salida, son los bits más significativos (los MSB). 3.- Si queremos un filtro que sea bastante tolerante a los SEU los más importante de redundar son siempre los registros más cercanos a la entrada, o sea las primeras etapas del filtro y también redundar siempre los bits más significantes de las etapas. Ya que haciendo esto, hemos visto que podemos obtener filtros bastante eficientes y ahorrando gran cantidad de recursos. José Manuel Marín de la Rosa ESTUDIO DEL FILTRO FIR EN PRESENCIA DE S.E.U. José Manuel Marín de la Rosa 74