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

Subversion Repositories heap_sorter

[/] [heap_sorter/] [trunk/] [HLS_implementation/] [Fig3/] [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
  sort_data res;
16
  sort_data cur = val;
17
  int lev, offs, top, left, right;
18
  cur = sort_mem[0][0];
19
  if (val.key <= cur.key)
20
    return val;                 //No need to update the heap
21
  else
22
    {
23
      res = cur;
24
      cur = val;
25
      offs = 0;
26
      for (lev = 1; lev <= NM; lev++)
27
        {
28
          top = offs;
29
          left = offs;
30
          right = (1 << (lev - 1)) + offs;
31
          if ((lev == NM) ||
32
              ((cur.key <= sort_mem[lev][left].key) &&
33
               (cur.key <= sort_mem[lev][right].key)))
34
            {
35
              sort_mem[lev-1][top] = cur;
36
              break;
37
            }
38
          else if ((sort_mem[lev][left].key < cur.key) &&
39
                   (sort_mem[lev][left].key <= sort_mem[lev][right].key))
40
            {
41
              sort_mem[lev-1][top] = sort_mem[lev][left];
42
            }
43
          else if (sort_mem[lev][right].key < cur.key)
44
            {
45
              sort_mem[lev-1][top] = sort_mem[lev][right];
46
              offs += (1 << (lev - 1));
47
            }
48
          else
49
            {
50
              printf ("impossible!!!\n");
51
            }
52
        }
53
    }
54
  return res;
55
}

powered by: WebSVN 2.1.0

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