Problema de VHDL Xilinx IP Core Divisor para un punto fijo firmado

0

Espero que me puedas ayudar ya que creo que este es un error muy específico y no sé cómo resolverlo.

Quiero dividir 2 números representados como:

  • 4bits: parte entera
  • 4bits: parte fraccionaria

Entonces instalo un divisor en el generador de núcleo xilinx y estos parámetros

  • firmado
  • Parte fraccionaria (en su lugar o resto)

y con estos puertos:

component div8_signed
    port(
        clk : in std_logic;
        dividend : in std_logic_vector(7 downto 0);
        divisor : in std_logic_vector(7 downto 0); 
        quotient : out std_logic_vector(7 downto 0);
        fractional : out std_logic_vector(7 downto 0)
    );
end component;

Luego, para las pruebas, trato de implementar la división entre estos números (por ejemplo):

  • División1: - 2 / 1.5
  • División2: - 1.5 / 2

Entonces, hago cálculos de puntos fijos antes de ir a la VHDL y obtengo estos valores con esta representación:

Division 1:
r = x/y
  Floating P. Fixed point  Hex  Bin
x: -2.000000, X: -2.000000 0xe0 0b11100000
y: 1.500000,  Y: 1.500000  0x18 0b00011000
r: -1.333333, R: -1.312500 0xeb 0b11101011

Division2:
r = x/Y
  Floating P. Fixed Point  Hex  Bin
x: -1.500000, X: -1.500000 0xe8 0b11101000
y: 2.000000,  Y: 2.000000  0x20 0b00100000
r: -0.750000, R: -0.750000 0xf4 0b11110100

Así que lo tengo simulado y aquí están los resultados:

El cociente y la parte fraccionaria están mal de acuerdo con mis cálculos. Sé que necesitaría tomar los últimos 4 bits del cociente para la parte entera del resultado y los primeros 4 bits del fraccionario para la parte fraccionaria. Pero aún así, el cociente y el fraccionario muestran números que no coinciden con lo que esperaba ver.

Haciendo un poco de prueba y error, encontré que para las divisiones de números firmados en las siguientes combinaciones funciona o no:

  • positivo / positivo: funciona
  • negativo / negativo: funciona
  • positivo / negativo: no funciona
  • negativo / positivo: no funciona

Ya lo he intentado todo sin éxito y no sé cómo hacer que esto funcione. ¿Alguna idea de lo que puede estar pasando?

    
pregunta JVGD

0 respuestas

Lea otras preguntas en las etiquetas