OpenCores
URL https://opencores.org/ocsvn/heap_sorter/heap_sorter/trunk

Subversion Repositories heap_sorter

[/] [heap_sorter/] [trunk/] [HLS_implementation/] [Fig6/] [wz_hsort.cc] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 wzab
#include <stdint.h>
2
#include <stdio.h>
3
#include <string.h>
4
#include "wz_hsort.h"
5
 
6
sort_data sort_mem[NM][SORT_LEN];
7
sort_data heap_sort (sort_data val)
8
{
9
#pragma HLS PIPELINE II=2
10
#pragma HLS INTERFACE ap_hs port=val
11
#pragma HLS DATA_PACK variable=val
12
#pragma HLS INTERFACE ap_ctrl_hs port=return
13
#pragma HLS DATA_PACK variable=return
14
#pragma HLS ARRAY_PARTITION variable=sort_mem dim=1
15
#pragma HLS DATA_PACK variable=sort_mem
16
        sort_data res;
17
        sort_data cur = val;
18
        int lev, offs, top, left, right, enable;
19
        cur = sort_mem[0][0];
20
        if (kle(val.key,cur.key))
21
                return val;                     //No need to update the heap
22
        else
23
        {
24
                res = cur;
25
                cur = val;
26
                offs = 0;
27
                enable = 1;
28
                for (lev = 1; lev <= NM; lev++)
29
                {
30
                        top = offs;
31
                        left = offs;
32
                        right = (1 << (lev - 1)) + offs;
33
                        if(enable){
34
                                if ((lev == NM) ||
35
                                                (kle(cur.key,sort_mem[lev][left].key) &&
36
                                                                kle(cur.key,sort_mem[lev][right].key)))
37
                                {
38
                                        sort_mem[lev-1][top] = cur;
39
                                        enable=0;
40
                                }
41
                                else if (klt(sort_mem[lev][left].key,cur.key) &&
42
                                                kle(sort_mem[lev][left].key,sort_mem[lev][right].key))
43
                                {
44
                                        sort_mem[lev-1][top] = sort_mem[lev][left];
45
                                }
46
                                else if (klt(sort_mem[lev][right].key,cur.key))
47
                                {
48
                                        sort_mem[lev-1][top] = sort_mem[lev][right];
49
                                        offs += (1 << (lev - 1));
50
                                }
51
                                else
52
                                {
53
                                        printf ("impossible!!!\n");
54
                                }
55
                        }
56
                }
57
        }
58
        return res;
59
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.