coreblocks.func_blocks.fu.fpu package
Submodules
coreblocks.func_blocks.fu.fpu.close_path module
- class coreblocks.func_blocks.fu.fpu.close_path.ClosePathMethodLayout
Bases:
object
Close path module layouts for methods
- Parameters
- fpu_params; FPUParams
FPU parameters
- __init__(*, fpu_params: FPUParams)
r_sign - sign of the result sig_a - two’s complement form of first significand sig_2 - two’s complement form of second significand exp - exponent of result before shifts rounding_mode - rounding mode guard_bit - guard_bit (pth bit of second significand where p is precision)
- class coreblocks.func_blocks.fu.fpu.close_path.ClosePathModule
Bases:
Elaboratable
Close path module Based on http://i.stanford.edu/pub/cstr/reports/csl/tr/90/442/CSL-TR-90-442.pdf. This module computes results for efficient subtraction, whenever difference of exponents is lesser than 2. Besides computing the result, this implementation also performs rounding at the same time as subtraction by using two adders (one computing a+b and the other one computing a+b+1). The correct output is chosen based on flags that are different for each rounding mode.
- Parameters
- fpu_params: FPUParams
FPU rounding module parameters
- Attributes
- close_path_request: Method
Transactional method for initiating close path computation. Takes ‘close_path_in_layout’ as argument. Returns result as ‘close_path_out_layout’.
coreblocks.func_blocks.fu.fpu.far_path module
- class coreblocks.func_blocks.fu.fpu.far_path.FarPathMethodLayout
Bases:
object
Far path module layouts for methods
- Parameters
- fpu_params; FPUParams
FPU parameters
- __init__(*, fpu_params: FPUParams)
r_sign - result sign sig_a - significand of first operand (for effective subtraction in two’s complement form) sig_b - significand of second operand (for effective subtraction in two’s complement form) exp - exponent of result before shift sub_op - effective operation. 1 for subtraction 0 for addition rounding_mode - rounding mode guard_bit - guard bit (pth bit of second significand where p is precision) round_bit - round bit ((p+1)th bit of second significand where p is precision) sticky_bit - sticky_bit (OR of all bits with index >=p of second significand where p is precision)
- class coreblocks.func_blocks.fu.fpu.far_path.FarPathModule
Bases:
Elaboratable
Far Path module Based on: https://userpages.cs.umbc.edu/phatak/645/supl/lza/lza-survey-arith01.pdf. This module implements far path of adder/subtractor. It performs subtraction for operands whose exponent differs by more than 1 and addition for all combinations of operands. Besides addition it also performs rounding at the same time as addition using two adders (one producing a+b and second one producing a+b+1). The correct output is chosen by flags that differ for each rounding mode. To deal with certain complication that may arise during addition in certain rounding modes the input of second may be either input operand or (a & b)<<1 and (a^b). This allows second adder to compute a+b+2 in special cases that are better explained in paper linked above.
- Parameters
- fpu_params: FPUParams
FPU rounding module parameters
- Attributes
- far_path_request: Method
Transactional method for initiating far path computation. Takes ‘far_path_in_layout’ as argument. Returns result as ‘far_path_out_layout’.
coreblocks.func_blocks.fu.fpu.fpu_add_sub module
- class coreblocks.func_blocks.fu.fpu.fpu_add_sub.FPUAddSubMethodLayout
Bases:
object
FPU addition/subtraction top module method layout
- Parameters
- fpu_params; FPUParams
FPU parameters
- add_sub_in_layout
- Input layout for addition/subtractionop_1 - layout containing data of the first operandop_2 - layout containing data of the second operandrounding_mode - selected rounding modeoperation - selected operation; 1 - subtraction, 0 - additionop_1 and op_2 are created using
create_data_input_layout
- add_sub_out_layout
Output layout for addition/subtraction. Created using
create_output_layout
- ext_float_layout
Output layout for raw float with significand larger by two bits from selected format. Created using
create_raw_float_layout
- raw_float_layout
Output layout for raw float. Created using
create_raw_float_layout
- class coreblocks.func_blocks.fu.fpu.fpu_add_sub.FPUAddSubModule
Bases:
Elaboratable
FPU addition/subtraction top moduleThis module implements addition and subtraction using two path approach with rounding prediction.The module can be divided into two segments:1. Receiving data and preparing it for one of the two path submodules by calculating effective operation, swapping operands and aligning exponents.2. Receiving data from one of the path submodules and preparing it for error checking module by checking for various conditionsFor more info about close path and far path checkclose path module
andfar path module
- Parameters
- fpu_params: FPUParams
FPU rounding module parameters
- Attributes
- add_sub_request: Method
Transactional method for initiating addition or subtraction. Takes
add_sub_in_layout
as argument. Returns result asadd_sub_out_layout
.
coreblocks.func_blocks.fu.fpu.fpu_common module
- class coreblocks.func_blocks.fu.fpu.fpu_common.Errors
Bases:
IntFlag
- DIVISION_BY_ZERO = 8
- INEXACT = 1
- INVALID_OPERATION = 16
- OVERFLOW = 4
- UNDERFLOW = 2
- __new__(value)
- class coreblocks.func_blocks.fu.fpu.fpu_common.FPUParams
Bases:
object
FPU parameters
- Parameters
- sig_width: int
Width of significand, including implicit bit
- exp_width: int
Width of exponent
- class coreblocks.func_blocks.fu.fpu.fpu_common.RoundingModes
Bases:
Enum
- ROUND_DOWN = 2
- ROUND_NEAREST_AWAY = 4
- ROUND_NEAREST_EVEN = 0
- ROUND_UP = 3
- ROUND_ZERO = 1
- coreblocks.func_blocks.fu.fpu.fpu_common.create_data_input_layout(params: FPUParams)
A function that creates a layout for FPU modules operands.
- Parameters
- fpu_params; FPUParams
FPU parameters
coreblocks.func_blocks.fu.fpu.fpu_error_module module
- class coreblocks.func_blocks.fu.fpu.fpu_error_module.FPUErrorMethodLayout
Bases:
object
FPU error checking module layouts for methods
- Parameters
- fpu_params: FPUParams
FPU parameters
- class coreblocks.func_blocks.fu.fpu.fpu_error_module.FPUErrorModule
Bases:
Elaboratable
FPU error checking module
- Parameters
- fpu_params: FPUParams
FPU rounding module parameters
- Attributes
- error_checking_request: Method
Transactional method for initiating error checking of a floating point number. Takes ‘error_in_layout’ as argument Returns final number and errors as ‘error_out_layout’
coreblocks.func_blocks.fu.fpu.fpu_rounding_module module
- class coreblocks.func_blocks.fu.fpu.fpu_rounding_module.FPURoudningMethodLayout
Bases:
object
FPU Rounding module layouts for methods
- Parameters
- fpu_params: FPUParams
FPU parameters
- class coreblocks.func_blocks.fu.fpu.fpu_rounding_module.FPURounding
Bases:
Elaboratable
FPU Rounding module
- Parameters
- fpu_params: FPUParams
FPU parameters
- Attributes
- rounding_request: Method
Transactional method for initiating rounding of a floating point number. Takes ‘rounding_in_layout’ as argument Returns rounded number and errors as ‘rounding_out_layout’
coreblocks.func_blocks.fu.fpu.fpu_sign_injection module
- class coreblocks.func_blocks.fu.fpu.fpu_sign_injection.SIMethodLayout
Bases:
object
Sign injection module layouts for methods
- Parameters
- fpu_params: FPUParams
FPU parameters
- class coreblocks.func_blocks.fu.fpu.fpu_sign_injection.SIModule
Bases:
Elaboratable
Sign injection module Module responsible for performing sign injection operations. Only things worth noting about this module are: 1. Sign injection do not set floating-point exception flags 2. Sign injection do not canonicalize NaNs
- Parameters
- fpu_params: FPUParams
FPU rounding module parameters
- Attributes
- si_request: Method
Transactional method for initiating leading sign injection. Takes ‘si_in_layout’ as argument Returns result as ‘si_out_layout’
coreblocks.func_blocks.fu.fpu.lza module
- class coreblocks.func_blocks.fu.fpu.lza.LZAMethodLayout
Bases:
object
LZA module layouts for methods
- Parameters
- fpu_params: FPUParams
FPU parameters
- class coreblocks.func_blocks.fu.fpu.lza.LZAModule
Bases:
Elaboratable
LZA module Based on: https://userpages.cs.umbc.edu/phatak/645/supl/lza/lza-survey-arith01.pdf After performing subtracion, we may have to normalize floating point numbers and For that, we have to know the number of leading zeros. The most basic approach includes using LZC (leading zero counter) after subtracion, a more advanced approach includes using LZA (Leading Zero Anticipator) to predict the number of leading zeroes. It is worth noting that this LZA module works under assumptions that significands are in two’s complement and that before complementation sig_a was greater or equal to sig_b. Another thing worth noting is that LZA works with error = 1. That means that if ‘n’ is the result of the LZA module, in reality, to normalize number we may have to shift left by ‘n’ or ‘n+1’. There are few techniques of dealing with that error like specially designed shifters or predicting the error but the most basic approach is to just use multiplexer after shifter to perform one more shift left if necessary.
- Parameters
- fpu_params: FPUParams
FPU rounding module parameters
- Attributes
- predict_request: Method
Transactional method for initiating leading zeros prediction. Takes ‘predict_in_layout’ as argument Returns shift amount as ‘predict_out_layout’