-
Notifications
You must be signed in to change notification settings - Fork 43
/
Binary_to_One_Hot.html
74 lines (65 loc) · 2.62 KB
/
Binary_to_One_Hot.html
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<html>
<head>
<link rel="shortcut icon" href="./favicon.ico">
<link rel="stylesheet" type="text/css" href="./style.css">
<link rel="canonical" href="./Binary_to_One_Hot.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Generates an output bit vector of up to 2^N bits with one bit set representing the N-bit input binary value.">
<title>Binary to One Hot</title>
</head>
<body>
<p class="inline bordered"><b><a href="./Binary_to_One_Hot.v">Source</a></b></p>
<p class="inline bordered"><b><a href="./legal.html">License</a></b></p>
<p class="inline bordered"><b><a href="./index.html">Index</a></b></p>
<h1>Binary To One-Hot Converter</h1>
<p>Generates an output bit vector of up to 2^N bits with one bit set
representing the N-bit input binary value.</p>
<p>The width of the output vector is limited by the Verilog implementation to
about a million bits, which means a maximum input binary width of 20 bits.
Also, for very large output vectors, the synthesis can take a very long
time. But in practice, you will never get near these limits.</p>
<p>The output vector width may be more or less than all possible binary values.
If the binary value does not map to any of the output bits, the output vector
stays at zero, meaning "no value".</p>
<p>This module is of great use when translating an "address" into a number of
enable signals to select or filter something, such as a portable
<a href="Multiplexer_Binary_Structural.html">multiplexer</a>.</p>
<pre>
`default_nettype none
module <a href="./Binary_to_One_Hot.html">Binary_to_One_Hot</a>
#(
parameter BINARY_WIDTH = 0,
parameter OUTPUT_WIDTH = 0
)
(
input wire [BINARY_WIDTH-1:0] binary_in,
output wire [OUTPUT_WIDTH-1:0] one_hot_out
);
</pre>
<p>Instantiate an address decoder for each possible <em>output</em> value.
This way, binary input values outside of the output range
result in a zero output.</p>
<pre>
generate
genvar i;
for (i=0; i < OUTPUT_WIDTH; i=i+1) begin : per_output
<a href="./Address_Decoder_Behavioural.html">Address_Decoder_Behavioural</a>
#(
.ADDR_WIDTH (BINARY_WIDTH)
)
one_hot_bit
(
.base_addr (i[BINARY_WIDTH-1:0]),
.bound_addr (i[BINARY_WIDTH-1:0]),
.addr (binary_in),
.hit (one_hot_out[i])
);
end
endgenerate
endmodule
</pre>
<hr>
<p><a href="./index.html">Back to FPGA Design Elements</a>
<center><a href="https://fpgacpu.ca/">fpgacpu.ca</a></center>
</body>
</html>