Desarrollando con Vitis HLS - Sesión 2 - Simulación de la Top Function

  •  Introducción.
    En esta sección se da a conocer el proceso para realizar una simulación de la top function. Antes de realizar el componente y exportarlo al catalogo de Ip Core de Vivado es necesario hacer una simulación del programa escrito a nivel de código C/C++ esto da como resultado la garantia de que el programa no posee incongruencias o errores lógicos. la simulación a nivel de código C/C++ consiste en la creación de un archivo programa en C/C++ cuya función "main" manda a llamar a la función designada como Top Function y le pasa parámetros de entrada equivalentes a los valores de entradas que se esperan inyectar al componente, luego la Función Top realizará su función y generará datos de salida los cuales son devueltos a la función "Main" para lo cual se sugiere almacenar en memoria local por medio de variables y mostrar su valor en la consola de salida. La estructura del proceso de simulación se puede apreciar en la figura 1. 
    Note que la simulación posee como entrada el bloque de Test Bench el cual representa valor que pueden entrar de una consola, archivo de texto, stream de audio o video, etc. y la salida con los resultados permite que la herramienta de Vitis HLS mejorar el diseño del componente RTL por lo cual, tenga siempre en consideración el valor de la simulación. 

  • Creación de archivo test bench.
    Haciendo uso de un editor de texto se procede con la creación de un archivo que llamaremos testbeanch.cpp, escribimos el programa que se ve en la figura 2. Note que el archivo testbeanch.cpp es un código en C++ que hace un llamado a la top function, sin embargo debemos recordar que los argumentos de la top function son dos variables del tipo "TD" y un puntero del tipo "TD" por lo cual es importante respetar esos parámetros ya que el resultado de la top function no será un valor retornado por la top function sino que será un valor almacenado en un espacio de memoria al cual apuntemos con el parámetro "*dato3".
     
  • Simulación.
    El objetivo de la simulación es verificar que la Top Function tenga la capacidad de realizar una suma de 2 valores de 8 bits y genere un resultado de 8 bits sin signo. En ese sentido creamos 2 ventores llamados dato1 y dato2 de 5 posiciones a los cuales asignamos valores hexadecimales como se puede ver en la tabla 1.

    La columna del dato 3 representa la suma en de dato1 y dato2 en formato hexadecimal ya que es el formato en el cual se pretende imprimir los resultados en la consola a la hora de lanzar la simulación.

  • Salida a consola.
    Para el proceso de simulación hacemos click en la sección de C SIMULATION en Run C Simulation y automaticamente dará inicio la ejecución del programa TestBench.cpp al finalizar desplegará una nueva ventana en el espacio de trabajo con una salida de consola, la cual, si no hay ningún error de sintaxis mostrará lo siguiente.

    En la programación puede ver que el argumento de la top function es dato1 y dato2 dentro de un bucle For el cual va introduciendo los valores de los vectores uno a la ves por cada iteración del For y el dato de salida se ve reflejado en la dirección de la variable Result por lo cual imprimimos el contenido de la variable y se logra apreciar que los datos son congruentes con los esperados.

  • Bibliografía.
    • Vitis High-Level Synthesis User Guide (UG1399) - Sección Creación de un proyecto nuevo con Vitis HLS - trabajar con fuentes.

Comentarios

Entradas populares de este blog

Desarrollando con Vitis HLS - Sesión 1 - Introducción.