Generador de números aleatorios - Conclusión

Cuarta Parte - Grabación de datos en archivos

Veremos como realizar la grabación de datos a archivos, para luego analizarlos en Matlab. Si están siguiendo esta serie, en el mensaje número 3 propuse algunas tareas. Si piensan hacerlas no sigan leyendo ya que a continuación se presentan algunas de las soluciones a las preguntas del mensaje anterior.

En los mensajes siguientes sólo destacaré las diferencias con respecto a versiones anteriores para no pegar extensos (y repetidos) trozos de código. Al final de esta sección podrán encontrar los archivos completos.

Dicho sea de paso, como editor uso y recomiendo al Notepad++, que incluye números de líneas y reconoce la sintaxis de VHDL.

El siguiente proceso fue agregado al testbench para grabar datos de la simulación a un archivo:

Listado:
-- File name      : lfsr1.vhd
-- Comments    : Random number generator in VHDL - Version 1
-----------------------------------------------------------------
library ieee;
    use ieee.std_logic_1164.all;

entity lfsr1 is
  port (
    reset  : in  std_logic;
    clk    : in  std_logic;                    
    count  : out std_logic_vector (3 downto 0)
  );
end entity;

architecture rtl of lfsr1 is
    signal count_i      : std_logic_vector (3 downto 0);
    signal feedback     : std_logic;

begin
    feedback <= not(count_i(3) xor count_i(2));              -- LFSR size 4

    process (reset, clk) 
        begin
        if (reset = '1') then
            count_i <= (others=>'0');
        elsif (rising_edge(clk)) then
            count_i <= count_i(2 downto 0) & feedback;
        end if;
    end process;
    count <= count_i;
end architecture;

Los números de línea mencionados a continuación se refieren al archivo completo:
67 a 69: Se abre el archivo y se espera hasta que la señal enable y clock se hacen activas
72 a 76: Lazo en el que se escriben los datos al archivo. Noten el uso de función de conversión de std_logic_vector a unsigned y de ahí a entero(*), la escritura de este dato a una "línea" y de la línea al archivo. Se realiza una escritura por cada flanco ascendiente del clk.
78 a 80: Se cierra el archivo y se activa la bandera que termina la simulación

(*) VHDL soporta operaciones matemáticas con std_logic_vector. Pero cuando existe una duda sobre si tal vector tiene o no signo, se lo debe aclarar como en este caso en que decidimos tomar las salidas del LFSR como sin signo (unsigned).

El archivo generado res.log se ve así (fragmento):

El archivo generado res.log se ve así (fragmento):

Código:
0
1
3
7
15
31
62
124

y posee como era de esperarse 2048 líneas.

A continuación, la lista completa de los cambios de tb_lfsr1 a tb_lfsr1_1, según números de línea:

18: definición del nombre del archivo a grabar
22, 30, 39, 56: agregado el soporte a la nueva señal "enable"
60 a 82: nuevo proceso para grabación de archivos de datos de salida de la simulación

 

 

Archivos fuente
Archivo vhdl fuente, package y test bench para la versión 1.1
tb_lfsr_1_1.zip
Archivo comprimido formato ZIP 1.9 KB

Quinta y última parte - Análisis de los datos mediante Matlab

 

En este capítulo tomamos los datos de salida de la simulación en VHDL y la analizamos en Matlab. A continuación el código que utilicé en Matlab para analizar en el campo frecuencial la salida del LFSR, en diversas configuraciones (con cada vez más bits). A medida que aumentan los bits, vemos que aumenta de forma significativa el desempeño del LFSR para crear una señal lo más parecida posible a ruido.

 

 

Código:
NFFT = 2048;
y = dlmread('res.log');

% Normalize the input
m = (max(y)-min(y))/2;
y = (y-m)/m;

Y = fft(y,NFFT)/NFFT;
f = linspace(0,1,NFFT/2+1);
subplot

% Plot single-sided amplitude spectrum.
subplot(1,2,1);
plot(f,20*log(abs(Y(1:NFFT/2+1)))) 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

% Plot time domain
subplot(1,2,2);
plot(y(1:250));
title('Time domain')
xlabel('time')

El código en Matlab normaliza los datos de entrada, y después simplemente genera el gráfico en frecuencia (con frecuencia también normalizada) de los generadores LFSR. También muestra un fragmento de la respuesta temporal.

A continuación los resultados para tamaños de registro de 5, 7, 9 y 11 bits:

Comentarios: 0

Temas Nuevos


22-Agosto

Cuento: Marte en Nueva York


17-Agosto

Humor: Más refranes de-formados


13-Agosto

Tres juegos nuevos: Curvy, Pentapuzzle y Pucked



8-Agosto

Acertijos matemáticos de Agosto


3-Agosto

Cuadracópteros atléticos y acrobáticos


2-Agosto

Nuevos desafíos en el juego de la Vida de Conway


2-Agosto

Capítulo 5 del Curso de PLCs



1ro-Agosto

La máquina de Antikhytera, hecha con Lego




26-Julio

Otro capítulo del Curso de PLCs


Visitantes: