¿Por qué iSim da un resultado diferente al hardware?

0

Estoy trabajando en una CPU MIPS para un FPGA, este es principalmente un proyecto personal para entender los FPGA.

Tengo una implementación de CPU de tubería de 5 etapas que funciona correctamente cuando se ejecuta en iSim, sin embargo, cuando la ejecuto directamente en el hardware (Spartan 6) obtengo un resultado diferente.

El programa de prueba que tengo es simple:

load 0x128 into reg[1]   
nop*
load 0x160 into reg[2]
nop*
add reg[1] to reg[2]
assert "finished" flag

cuando ejecuto esto en iSim, obtengo el resultado correcto en reg [2] (0x288), sin embargo, cuando ejecuto el programa en el FPGA obtengo el resultado 0x3b0 - parece que la instrucción final está ejecutando múltiples momentos

Las instrucciones nop están presentes para forzar una falla de caché durante la ejecución, y esto es lo que causa el problema, sin el resultado es correcto.

Lo que creo que está sucediendo es que afirmo un indicador de "bloqueo" en el borde positivo del ciclo del reloj, y otra cosa que se ejecuta en el borde positivo se basa en la presencia / ausencia de este indicador. iSim por casualidad se ejecuta correctamente (debido al orden arbitrario en el que ejecuta la simulación de bloques siempre), sin embargo, el FPGA falla ya que el cambio de bloqueo no está disponible hasta el borde negativo.

Ya he rastreado mi implementación de verilog para encontrar dónde está, y todavía estoy buscando. Mi pregunta es: ¿cómo puedo obligar a iSim a exponer este error?

    
pregunta Zack Newsham

1 respuesta

0

El problema fue causado por RAMB16WER leyendo datos en el borde positivo. Mi código de recuperación también estaba cambiando estas señales en el borde positivo. Moviendo este código al negativo siempre bloquee lo arreglado.

Es extraño que haya funcionado hasta cierto punto en el dispositivo y que haya funcionado completamente en iSim, pero supongo que esto se debe a la forma en que iSim ejecuta los bloques siempre.

    
respondido por el Zack Newsham

Lea otras preguntas en las etiquetas