Valor de punto fijo negativo pequeño redondo

0

Estoy utilizando la multiplicación de dos números de punto fijo: Q1.11 y Q1.18 y obtengo Q1.18 como resultado de FPGA en VHDL.

Como resultado de la multiplicación, recibiré Q2.29 - vector de 31 bits donde los dos bits más altos representarán el signo. Después de la multiplicación, tengo que cortar el vector hasta el tamaño de Q1.18 - (29 abajo a 11) en términos de VHDL. Todo está bien si el resultado es positivo, pero con números negativos las cosas se vuelven más complicadas. Si el resultado es menor que -2 ^ -18, digamos -2 ^ -20, después del truncamiento obtendré -2 ^ -18 cuando quiero obtener 0.

Entonces, mi pregunta es si hay algún algoritmo "matemático", que requiera solo la suma y la resta, de redondear números negativos pequeños a 0 o el método "si, entonces, más" es una forma de hacerlo.

Editar # 1 Esto es lo que espero lograr:

>> a = fi(-2^-20,true,31,29)
   a = 

   -9.5367e-07

      DataTypeMode: Fixed-point: binary point scaling
        Signedness: Signed
        WordLength: 31
    FractionLength: 29
>> b = fi(a,true,19,18)

 b = 

    0

      DataTypeMode: Fixed-point: binary point scaling
        Signedness: Signed
        WordLength: 19
    FractionLength: 18

Y esto es lo que obtendré si truncara la variable más larga:

     bin(a)

     ans =

'1111111111111111111111000000000'

 q = quantizer('mode','fixed', 'format', [19 18], 'overflowmode', 'wrap')

 q =


    DataMode = fixed
   RoundMode = floor
OverflowMode = wrap
      Format = [19  18]

c = bin2num(q, '1111111111111111111')

c =

  -3.8147e-06
    
pregunta confucij

0 respuestas

Lea otras preguntas en las etiquetas