Anuj Vaishnav
Published © CC BY-NC

Programming RTL Accelerators via AXI Slave Wrappers

Learn how to wrap your RTL accelerators with AXI Slave for standard interface and software programming.

IntermediateFull instructions provided1 hour1,156
Programming RTL Accelerators via AXI Slave Wrappers

Things used in this project

Story

Read more

Code

SDK example for vadd programming

C/C++
SDK example for vadd programming. It shows how we can read and write values to registers we created in AXI Slave wrapper.
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"

#include "xil_cache.h"

volatile char *control = (volatile char*)0x0080000000;

volatile int *a_addr = (volatile int*)0x0080000040;
volatile int *b_addr = (volatile int*)0x008000004c;
volatile int *c_addr = (volatile int*)0x0080000058;

int main()
{
    init_platform();

    /* initialization */
    int *a, *b, *c;
    int i;
    a = (int*)malloc(10 * sizeof(int));
    b = (int*)malloc(10 * sizeof(int));
    c = (int*)malloc(10 * sizeof(int));
    
    // set input data
    print("Generating input data: \n\r");
    for (i = 0; i < 10; i ++) {
    	a[i] = i;
    	b[i] = i;
    	c[i] = -1;
    }

    Xil_DCacheFlush();

    *a_addr = (unsigned int)a;
    *b_addr = (unsigned int)b;
    *c_addr = (unsigned int)c;

    print("Status of control register: \n\r");
    unsigned int con = *control;
    for (i = 0; i < 8; i ++) {
    	if (con & (1 << i) ) {
    		print("1");
    	} else {
    		print("0");
    	}
    }
    print("\n\r");

    print("Starting vadd execution\n\r");
    *control = *control | 1; /* start */

    /* waiting for hardware to report "done" */
    while (! ((*control) & 2));

    Xil_DCacheInvalidate();

    for (i = 0; i < 10; i ++) {
    	xil_printf("%d, ", c[i]);
    }
    print("\n\r");

    cleanup_platform();
    return 0;
}

Credits

Anuj Vaishnav

Anuj Vaishnav

6 projects • 29 followers

Comments