#include "hls_video.h"
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <iostream>
#include <string.h>
void bram_setparam_test(bool mode, int *inputparam,
hls::stream<ap_axiu<32,1,1,1> >& instream, hls::stream<ap_axiu<32,1,1,1> >& outstream){
#pragma HLS INTERFACE axis port = instream
#pragma HLS INTERFACE axis port = outstream
#pragma HLS INTERFACE s_axilite port = mode
#pragma HLS INTERFACE m_axi port = inputparam offset=slave depth=100
#pragma HLS INTERFACE s_axilite port = mode
#pragma HLS INTERFACE s_axilite port = return
static int internal_param[100];
#pragma HLS RESOURCE variable=internal_param core=RAM_1P_BRAM
if(mode == true){
//AXI4 set parameter mode
memcpy(internal_param, inputparam, sizeof(int) * 100);
/*for(int i=0; i<100; i++){
#pragma HLS PIPELINE II=1
internal_param[i] = inputparam[i];
}*/
}else{
//AXI4-stream MODE
for(int i = 0; i < 100; i++){
#pragma HLS PIPELINE II=1
int inval = instream.read().data;
ap_axiu<32,1,1,1> outval;
outval.data = inval * internal_param[i];
outval.last = (i == 99 ? 1 : 0);
outstream.write(outval);
}
}
}
// bram_setparam_test_tb.cpp
// 2019/12/04 by marsee
//
#include "hls_video.h"
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <iostream>
#include <string.h>
void bram_setparam_test(bool mode, int* inputparam,
hls::stream<ap_axiu<32,1,1,1> >& instream, hls::stream<ap_axiu<32,1,1,1> >& outstream);
int inputparam[100];
int main(){
using namespace std;
hls::stream<ap_axiu<32,1,1,1> > ins;
hls::stream<ap_axiu<32,1,1,1> > outs;
ap_axiu<32,1,1,1> streamd;
ap_axiu<32,1,1,1> vals;
for(int i=0; i<100; i++){
inputparam[i] = i;
}
bram_setparam_test(true, inputparam, ins, outs);
for(int i=0; i<100; i++){
streamd.data = i;
if(i == 0)
streamd.user = 1;
else
streamd.user = 0;
if(i == 100-1)
streamd.last = 1;
else
streamd.last = 0;
ins << streamd;
}
bram_setparam_test(false, inputparam, ins, outs);
for(int i=0; i<100; i++){
outs >> vals;
if((int)vals.data != i*i){
fprintf(stderr, "Error: i = %d, i^2 = %d; outs = %d\n", i, i*i, (int)vals.data);
exit(1);
}
printf("i = %d, i^2 = %d; outs = %d\n", i, i*i, (int)vals.data);
}
return(0);
}
if(mode == true){
//AXI4 set parameter mode
//memcpy(internal_param, inputparam, sizeof(int) * 100);
for(int i=0; i<100; i++){
#pragma HLS PIPELINE II=1
internal_param[i] = inputparam[i];
}
}else{
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |