#include <iostream> #include <hls_stream.h> #include <ap_axi_sdata.h> using namespace std; typedef ap_axis<32,0,0,0> pkt_t; static int count_streams = 0; static long long charIn=0; long long convert(int n) long long toAscii(chr number); int convertBinInt(long long n); void pixel( ap_int<32> position1, ap_int<32> position2, ap_int<32> w, ap_int<32> h, ap_int<32> character, hls::stream< pkt_t > &din, hls::stream< pkt_t > &dout ) { #pragma HLS INTERFACE ap_ctrl_none port=return #pragma HLS INTERFACE s_axilite port=position1 #pragma HLS INTERFACE s_axilite port=position2 #pragma HLS INTERFACE s_axilite port=w #pragma HLS INTERFACE s_axilite port=h #pragma HLS INTERFACE s_axilite port=character #pragma HLS INTERFACE axis port=din #pragma HLS INTERFACE axis port=dout charIn=toAscii(character) pkt_t pkt=din.read(); if(count_streams > 3 * (position - 1) && count_streams < 3 * (position2)){ addNum=charIn%10; charIn=(int)charIn/10; pkt.data=convertBinInt((convert(pkt.data)/10)*10+addNum); } count_streams++; if (count_streams == w*h*3){ count_streams = 0; } // pending: have to make count=0 when TLAST signal is active - for w not in the range of 0 to n(size of the array) //(count_streams==(position1+3*count_streams*w))&&((position1+3*count_streams*w) < position2) || (count_streams2==(position1 //+3*count_streams*w)) && ((position2-3*count_streams*w) > position1) dout.write(pkt); } long long convert(int n) { long long bin = 0; int rem, i = 1, step = 1; while (n != 0) { rem = n % 2; n /= 2; bin += rem * i; i *= 10; } return bin; } int convertBinInt(long long n) { int dec = 0, i = 0, rem; while (n != 0) { rem = n % 10; n /= 10; dec += rem * pow(2, i); ++i; } return dec; } long long toAscii(char c) { int n=(int)c; long long bin = convert(n); return bin; }