namespace genomics

// typedefs

typedef float custom_float
typedef ap_uint <64> hapLenType
typedef ap_uint <hap_width> hapType
typedef ap_uint <64> hapTypeBundle
typedef ap_uint <512> busType
typedef ap_uint <64> readType
typedef ap_uint <64> longlong
typedef ap_uint <64> bwtint_t
typedef ap_uint <256> smem_t
typedef ap_uint <32> addr_bundle
typedef ap_uint <512> data_bundle
typedef unsigned char byte_t
typedef ap_uint <32> uint_t
typedef hls::stream <addr_bundle> addr_channel
typedef hls::stream <data_bundle> data_channel
typedef hls::stream <byte_t> ctrl_channel
typedef ap_uint <2> uint2_t
typedef ap_uint <1> uint1_t
typedef struct xf::genomics::_pe pe

// structs

struct HapLenPack
struct _pe
struct accData
struct accDataBundle
struct bwtintv_t_fpga
struct cellData
struct readBundle
struct readInfor

// unions

union floatUnion

// global variables

const int read_fifo_depth
const int read_block_size
const int hap_width

computePairhmm

#include "phmmmodules.hpp"
template <unsigned int PU_NUM>
void computePairhmm (
    ap_uint <512>* input_data,
    short numRead,
    short numHap,
    int iterNum,
    float* output_data
    )

PairHMM module to compute the likelihood.

Parameters:

PU_NUM number of process engines in grid
input_data input read/ref data
numRead number of read sequence data
numHap number of hap sequence data
iterNum number of iterations
output_data output data

ddr_streaming

#include "smemmodules.hpp"
void ddr_streaming (
    bwtint_t bwt_primary,
    bwtint_t L2 [5],
    byte_t* seq,
    byte_t* seq_len,
    smem_t* mem,
    uint_t* mem_num,
    int batch_size,
    data_bundle* bwt,
    bwtint_t bwt_size
    )

SMEM module handles SMEM operation and also I/O.

Parameters:

bwt_primary bwt initial value
L2 bwt parameters
seq input sequence
seq_len input sequence length
mem output data
mem_num number of output data
batch_size batch size
bwt bwt of the sequence
bwt_size size of the bwt

swInt

#include "swmaxscore_compute.hpp"
template <
    int DATAWIDTH,
    int FACTOR
    >
void swInt (
    hls::stream <ap_uint <DATAWIDTH>>& inRefStream,
    hls::stream <bool>& refprocessDone,
    hls::stream <ap_uint <DATAWIDTH>>& inReadStream,
    hls::stream <bool>& readprocessDone,
    hls::stream <ap_uint <49>>& outStream
    )

Smithwaterman module computes the max score.

Parameters:

DATAWIDTH input data width
FACTOR number of process engines
inRefStream input reference data
refprocessDone reference end of stream
inReadStream input read data
readprocessDone read end of stream