URL
https://opencores.org/ocsvn/ft816float/ft816float/trunk
Subversion Repositories ft816float
[/] [ft816float/] [trunk/] [rtl/] [verilog2/] [fpDecompReg.sv] - Rev 48
Compare with Previous | Blame | View Log
// ============================================================================// __// \\__/ o\ (C) 2006-2019 Robert Finch, Waterloo// \ __ / All rights reserved.// \/_// robfinch<remove>@finitron.ca// ||//// fpDecompReg.v// - decompose floating point value with registered outputs// - parameterized width////// This source file is free software: you can redistribute it and/or modify// it under the terms of the GNU Lesser General Public License as published// by the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// This source file is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.//// ============================================================================import fp::*;module fpDecomp(i, sgn, exp, man, fract, xz, mz, vz, inf, xinf, qnan, snan, nan);input [MSB:0] i;output sgn;output [EMSB:0] exp;output [FMSB:0] man;output [FMSB+1:0] fract; // mantissa with hidden bit recoveredoutput xz; // denormalized - exponent is zerooutput mz; // mantissa is zerooutput vz; // value is zero (both exponent and mantissa are zero)output inf; // all ones exponent, zero mantissaoutput xinf; // all ones exponentoutput qnan; // nanoutput snan; // signalling nanoutput nan;// Decompose inputassign sgn = i[MSB];assign exp = i[MSB-1:FMSB+1];assign man = i[FMSB:0];assign xz = !(|exp); // denormalized - exponent is zeroassign mz = !(|man); // mantissa is zeroassign vz = xz & mz; // value is zero (both exponent and mantissa are zero)assign inf = &exp & mz; // all ones exponent, zero mantissaassign xinf = &exp;assign qnan = &exp & man[FMSB];assign snan = &exp & !man[FMSB] & !mz;assign nan = &exp & !mz;assign fract = {!xz,i[FMSB:0]};endmodulemodule fpDecompReg(clk, ce, i, o, sgn, exp, man, fract, xz, mz, vz, inf, xinf, qnan, snan, nan);input clk;input ce;input [MSB:0] i;output reg [MSB:0] o;output reg sgn;output reg [EMSB:0] exp;output reg [FMSB:0] man;output reg [FMSB+1:0] fract; // mantissa with hidden bit recoveredoutput reg xz; // denormalized - exponent is zerooutput reg mz; // mantissa is zerooutput reg vz; // value is zero (both exponent and mantissa are zero)output reg inf; // all ones exponent, zero mantissaoutput reg xinf; // all ones exponentoutput reg qnan; // nanoutput reg snan; // signalling nanoutput reg nan;// Decompose inputalways @(posedge clk)if (ce) begino <= i;sgn = i[MSB];exp = i[MSB-1:FMSB+1];man = i[FMSB:0];xz = !(|exp); // denormalized - exponent is zeromz = !(|man); // mantissa is zerovz = xz & mz; // value is zero (both exponent and mantissa are zero)inf = &exp & mz; // all ones exponent, zero mantissaxinf = &exp;qnan = &exp & man[FMSB];snan = &exp & !man[FMSB] & !mz;nan = &exp & !mz;fract = {|exp,i[FMSB:0]};endendmodule
