Rango de división de punto fijo sin signo en VHDL

1

Estaba pensando en el rango que debe tener una señal de resultado para acomodar una división de punto fijo sin firmar. Supongamos que tenemos:

SEÑAL a: UFIXED (3 DOWNTO -3);

SEÑAL b: UFIXED (4 DOWNTO -2);

estoy equivocado asumiendo:

SEÑAL y < = a / b debería tener

y'RANGE = (a'LEFT - b'RIGHT DOWNTO a'RIGHT- b'LEFT +1)

¿

para acomodar cualquier y resultante de esta división?

    
pregunta cr4150n

1 respuesta

0

Hay una función de división declarada en el paquete IEEE que demuestra la aritmética correcta para encontrar los límites del operador de división:

-- ufixed(a downto b) / ufixed(c downto d) = ufixed(a-d downto b-c-1)

Y debido a que las reglas para los límites pueden ser complejas, existen funciones (ufixed_high, ufixed_low) donde se pasa la operación:

library ieee;
use ieee.std_logic_1164.all;
use ieee.fixed_pkg.all;

entity ufixed_div_range is
end entity;

architecture fum of ufixed_div_range is
    signal a : ufixed (3 downto -3); 
    signal b : ufixed (4 downto -2);
begin

    a <= to_ufixed(1.75, a'LEFT, a'RIGHT);
    b <= to_ufixed(2.5,  b'LEFT, b'RIGHT);

    process          
        variable result: ufixed 
         (ufixed_high(a, '/', b) downto ufixed_low(a, '/', b));
    begin
        wait for 1 ns;
        result := a/b;
        report LF & HT & "to_real(result) = " & real'image(to_real(result))
              & LF & HT & "result'LEFT = " & integer'image(result'left)
              & LF & HT &"result'RIGHT = " & integer'image(result'right);
        wait;
    end process;
end architecture;

Y cuando se ejecuta esto da:

ufixed_div_range.vhdl:35:9:@1ns:(report note):
        to_real(result) = 6.9921875e-1
        result'LEFT = 5
        result'RIGHT = -8

Observando que el valor real depende tanto de la precisión del resultado (número de bits de fracción) como de los modos de redondeo. (Y los reales son aproximados de todos modos).

Esto se demostró utilizando VHDL-2008.

    
respondido por el user8352

Lea otras preguntas en las etiquetas