Loading router/router.cpp +19 −6 Changes for router/router.cpp: 19 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -57,8 +57,12 @@ int router(short int size_x, short int size_y, short int line_num, short int boa for(i = 0; i < line_num; i++) { ap_uint<DATA_BIT> t1 = terminals[i][0]; ap_uint<DATA_BIT> t2 = terminals[i][1]; short int dist = abs((short int)t2 - (short int)t1); if(dist == 1 || dist == size_x) { short int t1_x = t1 % size_x; short int t1_y = t1 / size_x; short int t2_x = t2 % size_x; short int t2_y = t2 / size_x; short int dist = abs(t1_x - t2_x) + abs(t1_y - t2_y); // Manhattan dist. if(dist == 1) { adjacents[i] = true; #ifdef PRINT_BOARD cout << "Line #" << i + 1 << " needs no routing" << endl; Loading @@ -79,7 +83,7 @@ int router(short int size_x, short int size_y, short int line_num, short int boa ap_uint<DATA_BIT> t1 = terminals[i][0]; ap_uint<DATA_BIT> t2 = terminals[i][1]; weights[t1] = 1; search(size_x, size_y, &paths_size[i], paths[i], t1, t2, weights); if(search(size_x, size_y, &paths_size[i], paths[i], t1, t2, weights) < 0) { return 0; } weights[t1] = PRIO_MAX; } Loading Loading @@ -147,7 +151,9 @@ int router(short int size_x, short int size_y, short int line_num, short int boa return 0; } int total_wire_length = 0; for(i = 0; i < line_num; i++) { total_wire_length += paths_size[i]; for(p = 0; p < paths_size[i]; p++) { ap_uint<DATA_BIT> cell_id = paths[i][p]; board_str[cell_id] = i + 1; Loading @@ -169,7 +175,7 @@ int router(short int size_x, short int size_y, short int line_num, short int boa } #endif return 1; return total_wire_length; } void lfsr_random_init(ap_uint<32> seed) { Loading @@ -192,7 +198,7 @@ ap_uint<PRIO_BIT> new_weight(ap_uint<16> x) { return (ap_uint<PRIO_BIT>)(y); } void search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]){ int search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]){ ap_uint<PRIO_BIT> dist[MAX_CELLS]; ap_uint<DATA_BIT> prev[MAX_CELLS]; Loading @@ -212,6 +218,7 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA dist[start] = 0; enqueue(pq_nodes, 0, start, &pq_len, &is_empty); bool find_path = false; // No path exists while(!is_empty) { ap_uint<PRIO_BIT> prev_cost; Loading @@ -220,7 +227,10 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA ap_uint<PRIO_BIT> dist_s = dist[s]; if(s == goal) break; if(s == goal) { find_path = true; break; } ap_uint<PRIO_BIT> cost = w[s]; short int s_x = s % size_x; Loading Loading @@ -250,6 +260,7 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA } } } if(!find_path){ return -1; } ap_uint<DATA_BIT> t = prev[goal]; short int p = 0; Loading @@ -268,6 +279,8 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA cout << endl; #endif *path_size = p; return 0; } // Enqueue (Insert an element) Loading router/router.hpp +1 −1 Changes for router/router.hpp: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ void lfsr_random_init(ap_uint<32> seed); ap_uint<32> lfsr_random(); ap_uint<PRIO_BIT> new_weight(ap_uint<16> x); void search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]); int search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]); void enqueue(ap_uint<ELEM_BIT> pq_nodes[MAX_PQ], ap_uint<PRIO_BIT> priority, ap_uint<DATA_BIT> data, ap_uint<PQ_BIT> *pq_len, bool *is_empty); void dequeue(ap_uint<ELEM_BIT> pq_nodes[MAX_PQ], ap_uint<PRIO_BIT> *ret_priority, ap_uint<DATA_BIT> *ret_data, ap_uint<PQ_BIT> *pq_len, bool *is_empty); Loading Loading
router/router.cpp +19 −6 Changes for router/router.cpp: 19 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -57,8 +57,12 @@ int router(short int size_x, short int size_y, short int line_num, short int boa for(i = 0; i < line_num; i++) { ap_uint<DATA_BIT> t1 = terminals[i][0]; ap_uint<DATA_BIT> t2 = terminals[i][1]; short int dist = abs((short int)t2 - (short int)t1); if(dist == 1 || dist == size_x) { short int t1_x = t1 % size_x; short int t1_y = t1 / size_x; short int t2_x = t2 % size_x; short int t2_y = t2 / size_x; short int dist = abs(t1_x - t2_x) + abs(t1_y - t2_y); // Manhattan dist. if(dist == 1) { adjacents[i] = true; #ifdef PRINT_BOARD cout << "Line #" << i + 1 << " needs no routing" << endl; Loading @@ -79,7 +83,7 @@ int router(short int size_x, short int size_y, short int line_num, short int boa ap_uint<DATA_BIT> t1 = terminals[i][0]; ap_uint<DATA_BIT> t2 = terminals[i][1]; weights[t1] = 1; search(size_x, size_y, &paths_size[i], paths[i], t1, t2, weights); if(search(size_x, size_y, &paths_size[i], paths[i], t1, t2, weights) < 0) { return 0; } weights[t1] = PRIO_MAX; } Loading Loading @@ -147,7 +151,9 @@ int router(short int size_x, short int size_y, short int line_num, short int boa return 0; } int total_wire_length = 0; for(i = 0; i < line_num; i++) { total_wire_length += paths_size[i]; for(p = 0; p < paths_size[i]; p++) { ap_uint<DATA_BIT> cell_id = paths[i][p]; board_str[cell_id] = i + 1; Loading @@ -169,7 +175,7 @@ int router(short int size_x, short int size_y, short int line_num, short int boa } #endif return 1; return total_wire_length; } void lfsr_random_init(ap_uint<32> seed) { Loading @@ -192,7 +198,7 @@ ap_uint<PRIO_BIT> new_weight(ap_uint<16> x) { return (ap_uint<PRIO_BIT>)(y); } void search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]){ int search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]){ ap_uint<PRIO_BIT> dist[MAX_CELLS]; ap_uint<DATA_BIT> prev[MAX_CELLS]; Loading @@ -212,6 +218,7 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA dist[start] = 0; enqueue(pq_nodes, 0, start, &pq_len, &is_empty); bool find_path = false; // No path exists while(!is_empty) { ap_uint<PRIO_BIT> prev_cost; Loading @@ -220,7 +227,10 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA ap_uint<PRIO_BIT> dist_s = dist[s]; if(s == goal) break; if(s == goal) { find_path = true; break; } ap_uint<PRIO_BIT> cost = w[s]; short int s_x = s % size_x; Loading Loading @@ -250,6 +260,7 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA } } } if(!find_path){ return -1; } ap_uint<DATA_BIT> t = prev[goal]; short int p = 0; Loading @@ -268,6 +279,8 @@ void search(short int size_x, short int size_y, short int *path_size, ap_uint<DA cout << endl; #endif *path_size = p; return 0; } // Enqueue (Insert an element) Loading
router/router.hpp +1 −1 Changes for router/router.hpp: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ void lfsr_random_init(ap_uint<32> seed); ap_uint<32> lfsr_random(); ap_uint<PRIO_BIT> new_weight(ap_uint<16> x); void search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]); int search(short int size_x, short int size_y, short int *path_size, ap_uint<DATA_BIT> path[MAX_PATH], ap_uint<DATA_BIT> start, ap_uint<DATA_BIT> goal, ap_uint<PRIO_BIT> w[MAX_CELLS]); void enqueue(ap_uint<ELEM_BIT> pq_nodes[MAX_PQ], ap_uint<PRIO_BIT> priority, ap_uint<DATA_BIT> data, ap_uint<PQ_BIT> *pq_len, bool *is_empty); void dequeue(ap_uint<ELEM_BIT> pq_nodes[MAX_PQ], ap_uint<PRIO_BIT> *ret_priority, ap_uint<DATA_BIT> *ret_data, ap_uint<PQ_BIT> *pq_len, bool *is_empty); Loading