1 `define FP3_PINF 3'b010
2 `define FP3_NINF 3'b110
3 `define FP3_PNAN 3'b011
4 `define FP3_ANAN 3'b?11
5 `define FP3_ANYF 3'b???
7 // A NaN gate! Computes `Inf - max(x+y, -Inf)`.
8 // See http://tom7.org/nand/
17 {`FP3_ANYF, `FP3_ANAN}, {`FP3_ANAN, `FP3_ANYF}: Y = `FP3_PINF;
18 {`FP3_PINF, `FP3_NINF}, {`FP3_NINF, `FP3_PINF}: Y = `FP3_PINF;
19 {`FP3_ANYF, `FP3_PINF}, {`FP3_PINF, `FP3_ANYF}: Y = `FP3_PNAN;
20 default: Y = `FP3_PINF;
25 // Convert a bit into an fp3
26 module bit_to_fp3(input A, output [2:0] Y);
27 assign Y = A ? `FP3_PNAN : `FP3_PINF;
30 // Convert an fp3 into a bit
31 module fp3_to_bit(input [2:0] A, output reg Y);
40 `define FP4_PINF 4'b0100
41 `define FP4_NINF 4'b1100
42 `define FP4_PNAN 4'b0111
43 `define FP4_1NAN 4'b?101
44 `define FP4_2NAN 4'b?11?
45 `define FP4_ANYF 4'b????
55 {`FP4_ANYF, `FP4_1NAN}, {`FP4_1NAN, `FP4_ANYF}: Y = `FP4_PINF;
56 {`FP4_ANYF, `FP4_2NAN}, {`FP4_2NAN, `FP4_ANYF}: Y = `FP4_PINF;
57 {`FP4_PINF, `FP4_NINF}, {`FP4_NINF, `FP4_PINF}: Y = `FP4_PINF;
58 {`FP4_ANYF, `FP4_PINF}, {`FP4_PINF, `FP4_ANYF}: Y = `FP4_PNAN;
59 default: Y = `FP4_PINF;
64 module bit_to_fp4(input A, output [3:0] Y);
65 assign Y = A ? `FP4_PNAN : `FP4_PINF;
68 module fp4_to_bit(input [3:0] A, output reg Y);
78 `define FP5_PINF 5'b01100
79 `define FP5_NINF 5'b11100
80 `define FP5_PNAN 5'b01111
81 `define FP5_1NAN 5'b?1101
82 `define FP5_2NAN 5'b?111?
83 `define FP5_ANYF 5'b?????
93 {`FP5_ANYF, `FP5_1NAN}, {`FP5_1NAN, `FP5_ANYF}: Y = `FP5_PINF;
94 {`FP5_ANYF, `FP5_2NAN}, {`FP5_2NAN, `FP5_ANYF}: Y = `FP5_PINF;
95 {`FP5_PINF, `FP5_NINF}, {`FP5_NINF, `FP5_PINF}: Y = `FP5_PINF;
96 {`FP5_ANYF, `FP5_PINF}, {`FP5_PINF, `FP5_ANYF}: Y = `FP5_PNAN;
97 default: Y = `FP5_PINF;
102 module bit_to_fp5(input A, output [4:0] Y);
103 assign Y = A ? `FP5_PNAN : `FP5_PINF;
106 module fp5_to_bit(input [4:0] A, output reg Y);