Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Embedded Acceleration
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Vipin Thomas
Embedded Acceleration
Commits
637dda3a
Commit
637dda3a
authored
3 years ago
by
Majd Hafiri
Browse files
Options
Downloads
Patches
Plain Diff
Update pixel.cpp
parent
4ce950ee
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
pixel.cpp
+66
-68
66 additions, 68 deletions
pixel.cpp
with
66 additions
and
68 deletions
pixel.cpp
+
66
−
68
View file @
637dda3a
#include
<stdio.h>
#include
<hls_stream.h>
#include
<ap_axi_sdata.h>
#include
<math.h>
#include
<string.h>
using
namespace
std
;
typedef
ap_int
<
32
>
apint
;
typedef
ap_axis
<
32
,
0
,
0
,
0
>
pkt_t
;
typedef
hls
::
stream
<
pkt_t
>
stream
;
//Initializations
static
int
count_streams
=
0
;
//counter of data input streams
static
long
long
charIn
=
0
;
// to store binary values for each charachter decimal val
static
long
long
final_char
=
0
;
// binary value of decoded data
int
addNum
=
0
;
// holds lsb of CharIn
static
int
decNum
=
0
;
//holds the decimal value for all characters
static
int
decimalCounter
=
0
;
//used to shift to other charachter decimal value
static
int
decimalOut
=
0
;
// holds the decimal value of the characters (decoding)
int
lastDecimalVal
;
//holds decimal value of one character
long
long
convert
(
int
n
);
int
convertBinInt
(
long
long
n
);
void
decrypt
(
int
data
);
void
toAscii
(
char
*
c
);
int
getDecimal
(
int
n
);
pkt_t
tmpA
;
#include
"pixel.hpp"
void
pixel
(
apint
&
in_decimal
,
apint
selector
,
apint
stream_count
,
stream
&
din
,
stream
&
dout
apint
selector
,
apint
stream_count
,
stream
&
din
,
stream
&
dout
)
{
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE s_axilite port=in_decimal
#pragma HLS INTERFACE s_axilite port=selector
#pragma HLS INTERFACE s_axilite port=stream_count
#pragma HLS INTERFACE s_axilite port=in_decimal
// ascii values for the characters(word)
#pragma HLS INTERFACE s_axilite port=selector
// to select the mode (encoding or decoding)
#pragma HLS INTERFACE s_axilite port=stream_count
// size of data stream
#pragma HLS INTERFACE axis port=din
#pragma HLS INTERFACE axis port=dout
din
>>
tmpA
;
din
>>
tmpA
;
//input data
switch
(
selector
)
{
{
// case 0 is for encoding
case
0
:
if
(
count_streams
==
0
){
final_char
=
0
;
decNum
=
in_decimal
;
final_char
=
0
;
decNum
=
in_decimal
;
//getting the ascii values of the word from the register
}
addNum
=
0
;
if
(
decimalCounter
%
8
==
0
){
/*checking if the counter is 8 which means the process reached the 8th bit*/
lastDecimalVal
=
getDecimal
(
decNum
);
decNum
/=
100
;
charIn
=
convert
(
lastDecimalVal
);
decNum
/=
100
;
//to delete the processed ascii value and get the next one
charIn
=
convert
(
lastDecimalVal
);
//to find the binary of the next ascii value
}
addNum
=
charIn
%
10
;
charIn
=
(
int
)
charIn
/
10
;
addNum
=
charIn
%
10
;
//LSB of charIn
charIn
=
(
int
)
charIn
/
10
;
//deleting lsb and get the next bit(lsb)
//updating the input data according to addNum and lsb of the input data.
//if addNum is equal to 1 and input data is even , 1 will be added to input data which turns to odd
//otherwise no action needed
if
(
tmpA
.
data
%
2
==
0
&&
addNum
==
1
){
tmpA
.
data
+=
1
;
}
else
if
(
tmpA
.
data
%
2
!=
0
&&
addNum
==
0
){
}
//if addNum is equal to 0, input data is odd, 1 will be subtracted fro the input data which will turn it to even
//otherwise no action needed
else
if
(
tmpA
.
data
%
2
!=
0
&&
addNum
==
0
){
tmpA
.
data
-=
1
;
}
decimalCounter
++
;
break
;
//case 1 is for decoding
case
1
:
decrypt
(
tmpA
.
data
);
decode
(
tmpA
.
data
);
//getting decoded binary value bit by bit for every character
decimalCounter
++
;
if
(
decimalCounter
==
8
){
//after processing 8 bits, the ascii value will be returned by the convertBinInt
decimalOut
=
decimalOut
*
100
+
convertBinInt
(
final_char
);
decimalCounter
=
0
;
final_char
=
0
;
...
...
@@ -92,6 +80,7 @@ void pixel(apint &in_decimal,
count_streams
++
;
if
(
count_streams
==
stream_count
){
//resetting variables
count_streams
=
0
;
charIn
=
0
;
addNum
=
0
;
...
...
@@ -105,17 +94,19 @@ void pixel(apint &in_decimal,
}
if
(
count_streams
==
stream_count
){
tmpA
.
last
=
1
;
//setting TLAST signal to 1
tmpA
.
last
=
1
;
}
tmpA
.
strb
=
0xf
;
dout
<<
tmpA
;
}
long
long
convert
(
int
n
)
{
/**/
/*
This function converts a decimal number to a Binary number and returns it
*/
long
long
bin
=
0
;
int
rem
,
i
=
1
,
step
=
1
;
while
(
n
!=
0
)
{
...
...
@@ -127,33 +118,40 @@ long long convert(int n) {
return
bin
;
}
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
;
void
decode
(
int
data
)
{
/*
get the binary value of the embedded ascii values by combining the LSBs.
*/
int
bit
;
if
(
data
%
2
==
0
){
bit
=
0
;
}
else
if
(
data
%
2
!=
0
){
bit
=
1
;
}
final_char
=
final_char
*
10
+
bit
;
}
int
convertBinInt
(
long
long
n
)
{
/**/
int
dec
=
0
,
i
=
7
,
b
=
0
,
rem
=
0
;
while
(
n
!=
0
)
{
b
=
pow
(
10
,
i
);
rem
=
n
/
b
;
n
=
n
%
b
;
dec
+=
rem
*
pow
(
2
,
7
-
i
);
--
i
;
}
/*
This function returns decimal value from a binary number
*/
int
dec
=
0
,
i
=
7
,
b
=
0
,
rem
=
0
;
while
(
n
!=
0
)
{
b
=
pow
(
10
,
i
);
rem
=
n
/
b
;
n
=
n
%
b
;
dec
+=
rem
*
pow
(
2
,
7
-
i
);
--
i
;
}
return
dec
;
}
int
getDecimal
(
int
n
)
{
/**/
/*
returns the last two digits (which represents one character) of the corresponding ascii values passed to this function.
*/
int
num
=
0
;
num
=
n
%
100
;
return
num
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment