From 2c7d96cadfe90cbb55e7487505b04149d933940e Mon Sep 17 00:00:00 2001 From: Lucian Petrica Date: Tue, 14 Dec 2021 15:14:07 +0000 Subject: [PATCH 1/3] Added conversions for command and status to/from ap_uint --- include/hlslib/xilinx/Axi.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/hlslib/xilinx/Axi.h b/include/hlslib/xilinx/Axi.h index af32a86..0867b97 100644 --- a/include/hlslib/xilinx/Axi.h +++ b/include/hlslib/xilinx/Axi.h @@ -43,6 +43,20 @@ struct Command { Command(decltype(address) const &_address, decltype(length) const &_length) : length(_length), address(_address) {} Command() : length(0), address(0) {} + Command(ap_uint const &cmd) + : length(cmd(22,0)), type(cmd(23,23)), dsa(cmd(29,24)), eof(cmd(30,30)), drr(cmd(31,31)), address(cmd(95,32)), tag(cmd(99,96)) {} + operator ap_uint(){ + ap_uint ret; + ret(22,0) = length; + ret(23,23) = type; + ret(29,24) = dsa; + ret(30,30) = eof; + ret(31,31) = drr; + ret(95,32) = address; + ret(99,96) = tag; + ret(103,100) = 0; + return ret; + } }; /// Implements the status bus interface for the DataMover IP @@ -57,6 +71,20 @@ struct Status { // 8 bits Status(bool _okay) : okay(_okay) {} Status() : okay(true) {} + Status(ap_uint<32> sts) + : tag(sts(3,0)), internalError(sts(4,4)), decodeError(sts(5,5)), slaveError(sts(6,6)), + okay(sts(7,7)), bytesReceived(sts(30,8)), endOfPacket(sts(31,31)) {} + operator ap_uint<32>(){ + ap_uint<32> ret; + ret(3,0) = tag; + ret(4,4) = internalError; + ret(5,5) = decodeError; + ret(5,5) = slaveError; + ret(7,7) = okay; + ret(30,8) = bytesReceived; + ret(31,31) = endOfPacket; + return ret; + } }; } // End namespace axi From 2b383cc8528821e875225138269bf31a7a787890 Mon Sep 17 00:00:00 2001 From: Lucian Petrica Date: Wed, 15 Dec 2021 18:15:51 +0000 Subject: [PATCH 2/3] Fixed casting for Command, added indeterminate BTT fields for Status --- include/hlslib/xilinx/Axi.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/include/hlslib/xilinx/Axi.h b/include/hlslib/xilinx/Axi.h index 0867b97..088db60 100644 --- a/include/hlslib/xilinx/Axi.h +++ b/include/hlslib/xilinx/Axi.h @@ -47,14 +47,14 @@ struct Command { : length(cmd(22,0)), type(cmd(23,23)), dsa(cmd(29,24)), eof(cmd(30,30)), drr(cmd(31,31)), address(cmd(95,32)), tag(cmd(99,96)) {} operator ap_uint(){ ap_uint ret; - ret(22,0) = length; - ret(23,23) = type; - ret(29,24) = dsa; - ret(30,30) = eof; - ret(31,31) = drr; - ret(95,32) = address; - ret(99,96) = tag; - ret(103,100) = 0; + ret(bttWidth-1,0) = length; + ret(bttWidth,bttWidth) = type; + ret(bttWidth+6,bttWidth+1) = dsa; + ret(bttWidth+7,bttWidth+7) = eof; + ret(bttWidth+8,bttWidth+8) = drr; + ret(addressWidth+bttWidth+8,bttWidth+9) = address; + ret(addressWidth+bttWidth+12,addressWidth+bttWidth+9) = tag; + ret(addressWidth+bttWidth+16,addressWidth+bttWidth+13) = 0; return ret; } }; @@ -68,6 +68,8 @@ struct Status { // 8 bits ap_uint<1> decodeError{0}; ap_uint<1> slaveError{0}; ap_uint<1> okay; + ap_uint<23> bytesReceived{0}; + ap_uint<1> endOfPacket{0}; Status(bool _okay) : okay(_okay) {} Status() : okay(true) {} From 2f22018353063783a58ee76355a029c5f3109a90 Mon Sep 17 00:00:00 2001 From: Lucian Petrica Date: Wed, 15 Dec 2021 18:18:54 +0000 Subject: [PATCH 3/3] Fixed bit assignment for slave error in Status --- include/hlslib/xilinx/Axi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/hlslib/xilinx/Axi.h b/include/hlslib/xilinx/Axi.h index 088db60..d8bc033 100644 --- a/include/hlslib/xilinx/Axi.h +++ b/include/hlslib/xilinx/Axi.h @@ -81,7 +81,7 @@ struct Status { // 8 bits ret(3,0) = tag; ret(4,4) = internalError; ret(5,5) = decodeError; - ret(5,5) = slaveError; + ret(6,6) = slaveError; ret(7,7) = okay; ret(30,8) = bytesReceived; ret(31,31) = endOfPacket;