VHDL: el resultado de la síntesis de la suma no coincide con la simulación

0

Intenté implementar un sumador en mi CPU VHDL en la que estoy trabajando. Soy bastante nuevo en VHDL, por lo que mi código podría no ser tan bonito como debería ser.

De todos modos, estoy usando la placa de desarrollo FPGA Wartwing Spartan 6 de Numato con un XC6SLX45. El problema es que cuando simulo mi proyecto, el operador "+" funciona como debería. Pero cuando sintetizo el proyecto e imprimo el resultado de la adición en los LED, sucede lo siguiente:

Esto es lo que espero:

0000
0001
0010
0011
0100

Esto es lo que los LED realmente emiten:

0000
0001
0011
0111
1111

El programa ensamblado que se ejecuta en la CPU tiene el siguiente aspecto:

_start:
    load r1, $_data
    load r2, 0x0 
    load r4, 0x5 
add:
    addi r2, r2, 0x1 
    write.l r1, r2, 0x0 
    jmp.i $add
_data:
    .data 0x00

No hay necesidad de entenderlo completamente, solo incrementa el registro R2 y escribe el resultado en la memoria que está conectada a la salida de LED en la placa.

Ya verifiqué si la salida de los LED podría no representar el cálculo real, pero este no es el caso.

El código que causa este problema es el siguiente:

S_Res(16 downto 0) <= std_logic_vector(unsigned('0' & I_DataA)
                                       + unsigned('0' & I_Imm));

El proyecto completo está disponible en Github . El problema actual debe ser recreable en la rama de desarrollo.

EDITAR: Olvidé incluir la definición de las señales (también se puede encontrar en GitHub en vhdl / core / alu.vhdl):

I_Imm   : in std_logic_vector(15 downto 0); -- Konstante aus dem Befehl
I_DataA : in std_logic_vector(15 downto 0); -- Daten von Register A
signal S_Res : std_logic_vector(17 downto 0) := (others => '0');
    
pregunta Markus

0 respuestas

Lea otras preguntas en las etiquetas