Paso 4: Controlador de Video
Esta parte del diseño es responsable de dibujar el GUI y formas de onda de entrada. Formas de onda de alcance, líneas de nivel de trigger y otros indicadores de cambio se almacenan en una memoria intermedia de trama, con cada dirección de memoria manteniendo el valor de un píxel. Este buffer de marco es un bloque, que el controlador VGA Lee valores de enviar al puerto VGA que se mostrará en pantalla.
Originalmente, la pantalla se desea que 640 x 480. Sin embargo, no es posible almacenar todos estos valores de los píxeles en un bloque de memoria RAM, como la profundidad de un bloque de ram es 262144 (correspondiente a una dirección con de 18 bits, 2 ^ 18 = 262144) y 640 x 480 = 307200 píxeles. Un compromiso fue hecho y la pantalla se reducirá a 480 x 512, para que el búfer de pantalla completa se podría almacenar en la memoria ram de una cuadra.
Para simplificar la codificación más tarde, la imagen de fondo (rejilla y contornos de la pantalla) se redactaron en la computadora en un editor de imágenes. Una secuencia de comandos de matlab fue escrito (incluido) para convertir el blanco y negro BMP en un archivo .coe, que puede ser cargado en una celda de memoria ram de bloque. Esto significa que la imagen ya está almacenada en la memoria y no necesita ser "dibujado" en código o hardware. Esto es un bloque separado que el búfer de pantalla, para que salidas del dos bloque RAMs se ejecutan en un bloque de IP personalizado (procesador de color) para "decidir" qué color se debe mostrar, con las señales de alcance y los indicadores con mayor prioridad de la capa sobre la rejilla.
-axi_gpio_0: canal 1 es de salida. Controla la dirección, datos y señales de activar para escribir en el búfer de pantalla. Entrada de canal 2. Lee un poco de reconocimiento para confirmar que ha completado la operación de escritura.
-bram_write_controller: toma una dirección, datos y señal de enable desde un módulo GPIO para escribir en un memoria ram de bloque. Las señales de dirección y los datos simplemente se enrutan a través sin cambio. La complicación viene con la señal de at. No estaba seguro de cuánto tiempo llevaría a escribir "1" y "0" de la GPIO (en términos de ciclos de reloj), así que quería asegurarse de que el bloque wram fue escrito sólo una vez. Este controlador de escritura se ejecuta en el flanco ascendente de la señal de at de GPIO para crear un pulso de activar 1 reloj ancho para la Habilitar escritura del ram de bloque. Cuando ha completado este pulso, la señal de reconocimiento puede afirmarse alta para confirmar que fue escrito.
-signals_buffer1: esto es un pedacito 3 bloque amplio utilizado para almacenar los valores cambiantes de pixel en la pantalla, como la forma de onda, activar la línea de nivel y el indicador de voltaje/división. Cada dirección de memoria representa un píxel. El sistema trabaja para que la parte superior 9 bits son la fila del píxel y la parte inferior 9 bits son la columna del píxel.
-gui_buffer: este es un bit 1 bloque amplio utilizado para almacenar la GUI inmutable (rejilla, esquemas etc.) que se carga en via .coe archivo generado a partir de imagen. (matlab script adjuntada)
-vga_driver_0: genera las señales de sincronismo horizontal y vertical para el protocolo VGA. Genera los valores de columna y fila que representa el píxel actual se muestra. Se utilizan para leer el bloque carneros para leer los valores almacenados para el píxel actual
-color_processor_0: IP este decide que el color se mostrará como una función de valores de píxel almacenados. Puse mis prioridades de mayor a menor como (línea de señal de línea de nivel, amarillo gatillo rojo, blanca GUI/red). Valor de cada píxel se almacena como un valor de 3 bits, cada bit que representa una "capa". Señales de prioridad más alto (como la línea de disparo) deben aparecer en la capa "superior", mientras que las señales de prioridad más baja (como la cuadrícula de fondo) deben ser en la capa "fondo".