Skip to content
Snippets Groups Projects
Commit 01a68e4b authored by Yaman Umuroglu's avatar Yaman Umuroglu
Browse files

[Pack, Test] fix npy<>stream packing for fixed pt, add test

parent 77abf944
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "hls_stream.h" #include "hls_stream.h"
#include "ap_int.h" #include "ap_int.h"
#include <vector> #include <vector>
#include <stdio.h>
#ifdef DEBUG #ifdef DEBUG
#define DEBUG_NPY2APINTSTREAM(x) std::cout << "[npy2apintstream] " << x << std::endl; #define DEBUG_NPY2APINTSTREAM(x) std::cout << "[npy2apintstream] " << x << std::endl;
...@@ -34,7 +35,7 @@ void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream, b ...@@ -34,7 +35,7 @@ void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream, b
NpyT loaded_elem_npyt = *loaded_data; NpyT loaded_elem_npyt = *loaded_data;
ElemT loaded_elem = (ElemT) loaded_elem_npyt; ElemT loaded_elem = (ElemT) loaded_elem_npyt;
DEBUG_NPY2APINTSTREAM("NpyT " << loaded_elem_npyt << " elem " << loaded_elem) DEBUG_NPY2APINTSTREAM("NpyT " << loaded_elem_npyt << " elem " << loaded_elem)
packed_elem((i+1)*ElemBits-1, i*ElemBits) = loaded_elem; packed_elem((i+1)*ElemBits-1, i*ElemBits) = *reinterpret_cast<ap_uint<ElemBits>*>(&loaded_elem);
loaded_data++; loaded_data++;
} }
DEBUG_NPY2APINTSTREAM("packed hls elem " << std::hex << packed_elem << std::dec) DEBUG_NPY2APINTSTREAM("packed hls elem " << std::hex << packed_elem << std::dec)
...@@ -59,7 +60,11 @@ void apintstream2npy(hls::stream<PackedT> & in_stream, const std::vector<size_t> ...@@ -59,7 +60,11 @@ void apintstream2npy(hls::stream<PackedT> & in_stream, const std::vector<size_t>
DEBUG_APINTSTREAM2NPY("packed hls elem " << std::hex << packed_elem << std::dec) DEBUG_APINTSTREAM2NPY("packed hls elem " << std::hex << packed_elem << std::dec)
for(size_t ii = 0; ii < inner_dim_elems; ii++) { for(size_t ii = 0; ii < inner_dim_elems; ii++) {
size_t i = reverse_inner ? inner_dim_elems-ii-1 : ii; size_t i = reverse_inner ? inner_dim_elems-ii-1 : ii;
ElemT elem = packed_elem((i+1)*ElemBits-1, i*ElemBits); ap_uint<ElemBits> tmp_elem = packed_elem((i+1)*ElemBits-1, i*ElemBits);
// important: don't init elem = reinterpret_cast.. directly here
// this causes weird behavior for conversion to NpyT afterwards
ElemT elem;
elem = reinterpret_cast<ElemT&>(tmp_elem);
NpyT npyt = (NpyT) elem; NpyT npyt = (NpyT) elem;
DEBUG_APINTSTREAM2NPY("elem " << elem << " NpyT " << npyt) DEBUG_APINTSTREAM2NPY("elem " << elem << " NpyT " << npyt)
data_to_save.push_back(npyt); data_to_save.push_back(npyt);
......
...@@ -39,7 +39,8 @@ from finn.util.data_packing import numpy_to_hls_code ...@@ -39,7 +39,8 @@ from finn.util.data_packing import numpy_to_hls_code
@pytest.mark.parametrize( @pytest.mark.parametrize(
"dtype", [DataType["BINARY"], DataType["INT2"], DataType["INT32"]] "dtype",
[DataType["BINARY"], DataType["INT2"], DataType["INT32"], DataType["FIXED<9,6>"]],
) )
@pytest.mark.parametrize("test_shape", [(1, 2, 4), (1, 1, 64), (2, 64)]) @pytest.mark.parametrize("test_shape", [(1, 2, 4), (1, 1, 64), (2, 64)])
@pytest.mark.vivado @pytest.mark.vivado
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment