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
|