Coyote/examples_hw/apps/tcp_iperf/hls/axi_utils.cpp

312 lines
6.2 KiB
C++

/*
* Copyright (c) 2019, Systems Group, ETH Zurich
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "axi_utils.hpp"
ap_uint<64> lenToKeep(ap_uint<6> length)
{
switch (length)
{
case 1:
return 0x01;
case 2:
return 0x03;
case 3:
return 0x07;
case 4:
return 0x0F;
case 5:
return 0x1F;
case 6:
return 0x3F;
case 7:
return 0x7F;
case 8:
return 0xFF;
case 9:
return 0x01FF;
case 10:
return 0x03FF;
case 11:
return 0x07FF;
case 12:
return 0x0FFF;
case 13:
return 0x1FFF;
case 14:
return 0x3FFF;
case 15:
return 0x7FFF;
case 16:
return 0xFFFF;
case 17:
return 0x01FFFF;
case 18:
return 0x03FFFF;
case 19:
return 0x07FFFF;
case 20:
return 0x0FFFFF;
case 21:
return 0x1FFFFF;
case 22:
return 0x3FFFFF;
case 23:
return 0x7FFFFF;
case 24:
return 0xFFFFFF;
case 25:
return 0x01FFFFFF;
case 26:
return 0x03FFFFFF;
case 27:
return 0x07FFFFFF;
case 28:
return 0x0FFFFFFF;
case 29:
return 0x1FFFFFFF;
case 30:
return 0x3FFFFFFF;
case 31:
return 0x7FFFFFFF;
case 32:
return 0xFFFFFFFF;
case 33:
return 0x01FFFFFFFF;
case 34:
return 0x03FFFFFFFF;
case 35:
return 0x07FFFFFFFF;
case 36:
return 0x0FFFFFFFFF;
case 37:
return 0x1FFFFFFFFF;
case 38:
return 0x3FFFFFFFFF;
case 39:
return 0x7FFFFFFFFF;
case 40:
return 0xFFFFFFFFFF;
case 41:
return 0x01FFFFFFFFFF;
case 42:
return 0x03FFFFFFFFFF;
case 43:
return 0x07FFFFFFFFFF;
case 44:
return 0x0FFFFFFFFFFF;
case 45:
return 0x1FFFFFFFFFFF;
case 46:
return 0x3FFFFFFFFFFF;
case 47:
return 0x7FFFFFFFFFFF;
case 48:
return 0xFFFFFFFFFFFF;
case 49:
return 0x01FFFFFFFFFFFF;
case 50:
return 0x03FFFFFFFFFFFF;
case 51:
return 0x07FFFFFFFFFFFF;
case 52:
return 0x0FFFFFFFFFFFFF;
case 53:
return 0x1FFFFFFFFFFFFF;
case 54:
return 0x3FFFFFFFFFFFFF;
case 55:
return 0x7FFFFFFFFFFFFF;
case 56:
return 0xFFFFFFFFFFFFFF;
case 57:
return 0x01FFFFFFFFFFFFFF;
case 58:
return 0x03FFFFFFFFFFFFFF;
case 59:
return 0x07FFFFFFFFFFFFFF;
case 60:
return 0x0FFFFFFFFFFFFFFF;
case 61:
return 0x1FFFFFFFFFFFFFFF;
case 62:
return 0x3FFFFFFFFFFFFFFF;
case 63:
return 0x7FFFFFFFFFFFFFFF;
default:
return 0xFFFFFFFFFFFFFFFF;
}//switch
}
//Input argument cannot be templatized, otherwise the case statement leads to duplicate definitions
ap_uint<8> keepToLen(ap_uint<64> keepValue)
{
#pragma HLS INLINE
switch (keepValue)
{
case 0x01:
return 0x1;
case 0x3:
return 0x2;
case 0x07:
return 0x3;
case 0x0F:
return 0x4;
case 0x1F:
return 0x5;
case 0x3F:
return 0x6;
case 0x7F:
return 0x7;
case 0xFF:
return 0x8;
//#if W > 64
case 0x01FF:
return 0x9;
case 0x3FF:
return 0xA;
case 0x07FF:
return 0xB;
case 0x0FFF:
return 0xC;
case 0x1FFF:
return 0xD;
case 0x3FFF:
return 0xE;
case 0x7FFF:
return 0xF;
case 0xFFFF:
return 0x10;
//#if W > 128
case 0x01FFFF:
return 0x11;
case 0x3FFFF:
return 0x12;
case 0x07FFFF:
return 0x13;
case 0x0FFFFF:
return 0x14;
case 0x1FFFFF:
return 0x15;
case 0x3FFFFF:
return 0x16;
case 0x7FFFFF:
return 0x17;
case 0xFFFFFF:
return 0x18;
case 0x01FFFFFF:
return 0x19;
case 0x3FFFFFF:
return 0x1A;
case 0x07FFFFFF:
return 0x1B;
case 0x0FFFFFFF:
return 0x1C;
case 0x1FFFFFFF:
return 0x1D;
case 0x3FFFFFFF:
return 0x1E;
case 0x7FFFFFFF:
return 0x1F;
case 0xFFFFFFFF:
return 0x20;
//#if W > 256
case 0x01FFFFFFFF:
return 0x21;
case 0x3FFFFFFFF:
return 0x22;
case 0x07FFFFFFFF:
return 0x23;
case 0x0FFFFFFFFF:
return 0x24;
case 0x1FFFFFFFFF:
return 0x25;
case 0x3FFFFFFFFF:
return 0x26;
case 0x7FFFFFFFFF:
return 0x27;
case 0xFFFFFFFFFF:
return 0x28;
case 0x01FFFFFFFFFF:
return 0x29;
case 0x3FFFFFFFFFF:
return 0x2A;
case 0x07FFFFFFFFFF:
return 0x2B;
case 0x0FFFFFFFFFFF:
return 0x2C;
case 0x1FFFFFFFFFFF:
return 0x2D;
case 0x3FFFFFFFFFFF:
return 0x2E;
case 0x7FFFFFFFFFFF:
return 0x2F;
case 0xFFFFFFFFFFFF:
return 0x30;
case 0x01FFFFFFFFFFFF:
return 0x31;
case 0x3FFFFFFFFFFFF:
return 0x32;
case 0x07FFFFFFFFFFFF:
return 0x33;
case 0x0FFFFFFFFFFFFF:
return 0x34;
case 0x1FFFFFFFFFFFFF:
return 0x35;
case 0x3FFFFFFFFFFFFF:
return 0x36;
case 0x7FFFFFFFFFFFFF:
return 0x37;
case 0xFFFFFFFFFFFFFF:
return 0x38;
case 0x01FFFFFFFFFFFFFF:
return 0x39;
case 0x3FFFFFFFFFFFFFF:
return 0x3A;
case 0x07FFFFFFFFFFFFFF:
return 0x3B;
case 0x0FFFFFFFFFFFFFFF:
return 0x3C;
case 0x1FFFFFFFFFFFFFFF:
return 0x3D;
case 0x3FFFFFFFFFFFFFFF:
return 0x3E;
case 0x7FFFFFFFFFFFFFFF:
return 0x3F;
case 0xFFFFFFFFFFFFFFFF:
return 0x40;
default:
return 0xFF;
//#endif
//#endif
//#endif
}
}