1
Fork 0
mirror of https://github.com/Steffo99/unimore-hpc-assignments.git synced 2024-11-25 09:34:23 +00:00

hls vector add co-simulation

This commit is contained in:
Gianluca Brilli 2022-05-26 17:05:36 +02:00
parent b558d22f47
commit 9a9a8ba614
7 changed files with 1085 additions and 56 deletions

View file

@ -1,11 +0,0 @@
#ifndef VADD_HPP
#define VADD_HPP
#include <stdio.h>
//#define TEST_DATA_SIZE 4194304 // 2^22
#define TEST_DATA_SIZE 12
void vadd(int *a, int *b, int *c, const int len);
#endif

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,41 @@
#include <stdlib.h>
#include <stdio.h>
#include "vadd.h"
int main () {
int n = max_elem;
int * a = (int *) malloc(n*sizeof(int));
int * b = (int *) malloc(n*sizeof(int));
int * c = (int *) malloc(n*sizeof(int));
for (int i = 0; i < n; i++) {
a[i] = i;
b[i] = 2*i;
}
sum (a, b, c, n);
FILE *fp = fopen("ground_truth.txt", "r");
for (int i = 0; i < n; i++) {
int buff;
fscanf(fp, "%d", &buff);
if (buff != c[i]) {
return 1;
}
}
fclose(fp);
free(a);
free(b);
free(c);
return 0;
}

View file

@ -0,0 +1,15 @@
#include "vadd.h"
void sum (int *a, int *b, int *c, int n) {
#pragma HLS INTERFACE s_axilite port=n bundle=regfile
#pragma HLS_INTERFACE s_axilite port=return bundle=regfile
#pragma HLS INTERFACE m_axi port=a offset=slave depth=max_elem bundle=a_mem
#pragma HLS INTERFACE m_axi port=b offset=slave depth=max_elem bundle=bc_mem
#pragma HLS INTERFACE m_axi port=c offset=slave depth=max_elem bundle=bc_mem
for (int i = 0; i < n; i++) {
#pragma HLS LOOP_TRIPCOUNT min=max_elem max=max_elem
c[i] = a[i] + b[i];
}
}

View file

@ -0,0 +1,5 @@
//const int max_elem = 4194304; // for testing
const int max_elem = 1024; // for co-simulation
void sum (int *a, int *b, int *c, int n);

View file

@ -1,17 +0,0 @@
#include "exercise_0.hpp"
const unsigned int c_dim = TEST_DATA_SIZE;
void vadd(int *a, int *b, int *c, const int len)
{
#pragma HLS INTERFACE m_axi port=a offset=slave depth=c_dim bundle=mem
#pragma HLS INTERFACE m_axi port=b offset=slave depth=c_dim bundle=mem
#pragma HLS INTERFACE m_axi port=c offset=slave depth=c_dim bundle=mem
#pragma HLS INTERFACE s_axilite port=len bundle=params
#pragma HLS INTERFACE s_axilite port=return bundle=params
loop: for(int i = 0; i < len; i++) {
#pragma HLS LOOP_TRIPCOUNT min=c_dim max=c_dim
c[i] = a[i] + b[i];
}
}

View file

@ -1,28 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include "exercise_0.hpp"
int main(int argc, char ** argv) {
int * a = (int *)malloc(TEST_DATA_SIZE*sizeof(int));
int * b = (int *)malloc(TEST_DATA_SIZE*sizeof(int));
int * c = (int *)malloc(TEST_DATA_SIZE*sizeof(int));
for(int i = 0; i < TEST_DATA_SIZE; i++) {
a[i] = i*i;
b[i] = i;
}
vadd(a, b, c, TEST_DATA_SIZE);
for(int i = 0; i < TEST_DATA_SIZE; i++) {
printf("%d\n", c[i]);
}
free(a);
free(b);
free(c);
return 0;
}