blob: 8e84fb57a35f03f0cbad8ec47a5f92f237245b3b (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 | //
// Copyright 2013 Ettus Research LLC
// Copyright 2018 Ettus Research, a National Instruments Company
//
// SPDX-License-Identifier: LGPL-3.0-or-later
//
`define log2(N) ( N < 2    ? 0 : \
                  N < 4    ? 1 : \
                  N < 8    ? 2 : \
                  N < 16   ? 3 : \
                  N < 32   ? 4 : \
                  N < 64   ? 5 : \
                  N < 128  ? 6 : \
                  N < 256  ? 7 : \
                  N < 512  ? 8 : \
                  N < 1024 ? 9 : \
                             10 \
                )
module priority_encoder
#(
  parameter WIDTH = 16
)
(
  input  [WIDTH-1:0]        in,
  output [`log2(WIDTH)-1:0] out
);
  wire [WIDTH-1:0] one_hot;
  // the priority encoder spits out the position
  // of the leading bit as one hot coding
  priority_encoder_one_hot #
  (
    .WIDTH(WIDTH)
  )
  prio_one_hot0
  (
    .in(in),
    .out(one_hot)
  );
  // binary encoder turns the one hot coding
  // into binary encoding
  binary_encoder #
  (
    .WIDTH(WIDTH)
  )
  binary_enc0
  (
    .in(one_hot),
    .out(out)
  );
endmodule
 |