always @(posedge clock or posedge button)
if (button == 1) begin
D <= 8'b00110110;
En <= 1'b1;
Op <= 1'b1;
end
Déjame ser tu FPGA. Permítame explicarle qué hardware me han dicho que tenga.
Ok, así que estamos encendidos, permite que el encendido reinicie todos nuestros registros.
Veamos ahora, está bien, tenemos un bloque sincronizado siempre aquí, eso significa que tengo algunos flip-flops. Ooo, también tengo un reinicio asíncrono llamado button
que está activo alto, lo que el bloque siempre me dice que haga bajo esta condición de reinicio. Debido a que me han dicho qué hacer al reiniciar, también lo haré durante el reinicio de encendido - hmm, dice que para configurar D
a 54, genial lo haré.
Ahora he terminado de encender y salí del reinicio, comencemos a ejecutar.
Ok, entonces viene el borde del reloj, ¿qué hago con el registro? Ok, el reinicio ( button
) no se afirma. Hmm, parece que la persona quiere que retenga mi valor. Gran ordenado.
Ahora button
es alto. ¿Qué debo hacer? Ok, voy a restablecer mi registro a 54 de nuevo. Woop, hecho.
Ahora el usuario presionó mi reinicio global. Es hora de reconfigurar completamente. Todas las salidas a HIGH-Z! Arrrrrg. Me he quedado en blanco. ¿Qué hago?
Yay, han lanzado mi botón de reinicio global. Es hora de cargar mi memoria de nuevo.
...
Y de vuelta al principio.
TL;DR;
¿Puedes notar un patrón aquí? Nunca el valor de D
se establece en otra cosa que no sea 54.
Una pista para la próxima vez, con toda seriedad. Las herramientas FPGA como Quartus que utilizará para su tablero DE0 tienen visores de lista de red RTL. Una vez que sintetice su diseño, puede cargar la lista de redes para ver una representación gráfica de lo que se ha deducido del hardware. Esto le dará rápidamente una idea de lo que está pasando.