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?