#ifndef __ROUTER_HPP__ #define __ROUTER_HPP__ #include /** #ifdef SOFTWARE #include "ap_int.h" #else #include #endif **/ using namespace std; #define ROUND_LIMIT 32768 // Max=65534(=2^16-2) #define PRINT_BOARD //#define PRINT_SEARCH // for router debug #define MAX_LINES 256 #define MAX_PATH 128 #define MAX_CELLS 16384 // 128x128 #define PQ_BIT 16 #define MAX_PQ 65536 #define PRIO_BIT 16 #define DATA_BIT 16 #define ELEM_BIT 32 // ELEM_BIT = PRIO_BIT + DATA_BIT #define DATA_MASK 65535 // 0000 FFFF #define DATA_MAX 65535 // FFFF #define PRIO_MAX 65535 // FFFF /** top function (User can set "seed" value manually when calling this function.) **/ int router(short int size_x, short int size_y, short int line_num, short int board_str[], unsigned int seed = 12345); static unsigned int lfsr; void lfsr_random_init(unsigned int seed); unsigned int lfsr_random(); unsigned short int new_weight(unsigned short int x); int search(short int size_x, short int size_y, short int *path_size, unsigned short int path[MAX_PATH], unsigned short int start, unsigned short int goal, unsigned short int w[MAX_CELLS]); void enqueue(unsigned int pq_nodes[MAX_PQ], unsigned short int priority, unsigned short int data, unsigned short int *pq_len, bool *is_empty); void dequeue(unsigned int pq_nodes[MAX_PQ], unsigned short int *ret_priority, unsigned short int *ret_data, unsigned short int *pq_len, bool *is_empty); #endif /* __ROUTER_HPP__ */