Skip to content
Snippets Groups Projects
pixel.cpp 2.58 KiB
Newer Older
Vipin Thomas's avatar
Vipin Thomas committed
#include <stdio.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
Vipin Thomas's avatar
Vipin Thomas committed
#include<math.h>
Vipin Thomas's avatar
Vipin Thomas committed
#include <string.h>

using namespace std;

Vipin Thomas's avatar
Vipin Thomas committed
typedef ap_axis<32,0,0,0> pkt_t;
Vipin Thomas's avatar
Vipin Thomas committed
static int count_streams = 0;
static long long charIn=0;
Vipin Thomas's avatar
Vipin Thomas committed
static long long final_char=0;
Vipin Thomas's avatar
Vipin Thomas committed
int addNum=0;

Vipin Thomas's avatar
Vipin Thomas committed
long long convert(int n);
Vipin Thomas's avatar
Vipin Thomas committed
int convertBinInt(long long n);
Vipin Thomas's avatar
Vipin Thomas committed
void decrypt(int data);
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
void pixel(ap_int<32> selector,
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> position1,
		ap_int<32> position2,
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> stream_count,
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> &ascii,
		hls::stream< pkt_t > &din,
Vipin Thomas's avatar
Vipin Thomas committed
		hls::stream< pkt_t > &dout
) {
	#pragma HLS INTERFACE ap_ctrl_none port=return
Vipin Thomas's avatar
Vipin Thomas committed
    #pragma HLS INTERFACE s_axilite port=selector
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=position1
	#pragma HLS INTERFACE s_axilite port=position2
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=stream_count
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=ascii 
	#pragma HLS INTERFACE axis port=din
	#pragma HLS INTERFACE axis port=dout

Vipin Thomas's avatar
Vipin Thomas committed
    pkt_t pkt=din.read();
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
    switch(selector)
    {
        case 0:
            
            if (count_streams == 0){
                charIn=convert(ascii);
            }
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
            if((count_streams >= 3 * (position1 - 1)) && (count_streams < 3 * (position2) - 1)){
                addNum=0;
                if(charIn!=0){
                    addNum=charIn%10;
		            charIn=(int)charIn/10;
                }
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
                if(pkt.data % 2 == 0 && addNum == 1){
                    pkt.data += 1;
                }else if(pkt.data % 2 != 0 && addNum == 0){
                    pkt.data -= 1;
                }
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
            }

            break;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
        case 1:
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
            if((count_streams >= 3 * (position1 - 1)) && (count_streams < 3 * (position2)-1)){
                
Vipin Thomas's avatar
Vipin Thomas committed
                
                decrypt(pkt.data);
            
            }
            break;

        default:
            break;
    }
	
Vipin Thomas's avatar
Vipin Thomas committed
	count_streams++;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
	if (count_streams == stream_count){
Vipin Thomas's avatar
Vipin Thomas committed
		count_streams = 0;
Vipin Thomas's avatar
Vipin Thomas committed
        charIn=0;
Vipin Thomas's avatar
Vipin Thomas committed
        addNum=0;
Vipin Thomas's avatar
Vipin Thomas committed
        ascii=0;
Vipin Thomas's avatar
Vipin Thomas committed
        if(selector == 1){
            ascii= convertBinInt(final_char);
Vipin Thomas's avatar
Vipin Thomas committed
            final_char=0;
Vipin Thomas's avatar
Vipin Thomas committed
        }
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
	}
Vipin Thomas's avatar
Vipin Thomas committed
    dout.write(pkt);
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
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;
}

Vipin Thomas's avatar
Vipin Thomas committed
void decrypt(int data) {
int bit;
if(data % 2 == 0){
   bit = 0;
}else if(data % 2 != 0){
    bit=1;
}
final_char= final_char*10+bit;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
}
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
int convertBinInt(long long n) {
Vipin Thomas's avatar
Vipin Thomas committed
    int dec = 0, i = 7, rem=0;
Vipin Thomas's avatar
Vipin Thomas committed
    while (n != 0) {
Vipin Thomas's avatar
Vipin Thomas committed
        rem = n % 10;
        n /= 10;
Vipin Thomas's avatar
Vipin Thomas committed
        dec += rem * pow(2, i);
Vipin Thomas's avatar
Vipin Thomas committed
        ++i;
Vipin Thomas's avatar
Vipin Thomas committed
    }
    return dec;
}