Está bien, he estado creando cosas geniales en VHDL pero me he encontrado con un problema peculiar.
Estoy creando una ALU e intentando escribir un banco de pruebas para ella, pero por alguna razón, el tiempo está apagado y mis señales no se actualizan correctamente.
Cuando pruebo algunas funciones lógicas, funcionan correctamente, pero cuando llego a un punto adicional, falla. Mis entradas se actualizan, pero la adición de las dos entradas no se actualiza hasta el próximo ciclo.
Aquí hay un fragmento del código: "0010" es la señal de control para la adición.
Aquíestánlosvaloresdelasseñalesduranteeseciclo:A_extestáenazul,yB_extestáenrojo,peroelvectordesuma(flechamarrón)tieneunvalorincorrecto.SuvaloresenrealidadlasumadeA_extyB_extdelcicloanterior.
Y aquí está la transición al siguiente ciclo. Puede ver en la flecha marrón que ahora la suma se ha actualizado al valor correcto del ciclo anterior.
Asíqueestoyunpococonfundido.¿Esestounproblemaconlaformaenqueseescribemicódigo,oestetiemponormalenVHDLynohayformadecambiarlo?
Editar
Comodijeenelcomentarioacontinuación,algunosdeloscasosdepruebaparecenactualizarsealmismotiempo,sinembargo,estánenelmismoprocesoydeclaracióndecasoqueelcasodepruebadeadición,¡loscasosdebancodepruebaestántodoscodificadosdelamismamanera!
Observalasiguienteimagen.Laflecharojaapuntaalprimercasodeprueba,quees:
11111111(topsignal)AND00000000(2ndsignal)
Elresultadoescorrectamente00000000(señalinferior).
Elsegundocasodeprueba(flechamarrón)es
1001100010011000....OR1000100110001001...
quedacomoresultadocorrectamente1001100110011001...
SilasalidaseactualizabaenelsiguientecicloparaelcasodepruebaCADA,entonceslaseñaldesalidasobrelaflechamarrónseríalasalidaparaelprimercasodeprueba,00000000...,peronoloes.
Aquí hay un segmento más grande del código. He estado usando señales de 33 bits, A_ext y B_ext, para agregar las señales de 32 bits, A y B porque, para ser honesto, no conozco ninguna otra forma de hacerlo y capturar el bit de transferencia, pero si alguien Sabe de una mejor manera, estoy a favor!