Open paulopacitti opened 1 year ago
Detalhe: a mmu
não possuí esses erros pois o @daniel-pg já havia notado tal comportamento, os testes funcionam como o esperado. Mas a cpu.v
possui vários desses problemas.
Uma forma de consertar isso, é gerar os sinais internos do estágio com o assign
, fora do bloco always
, e utilizar condicionais if
e case
necessárias dentro dos blocos always
Conversando com o professor, notamos que muitos dos valores atribuídos em blocos
always
não tem o funcionamento correto. Isso acontece porque em HDLs, no nosso caso o Verilog, as atribuições são apenas feitas do anterior para o próximo, mas não para valores seguintes. Em hardware, a cada mudança de sinal, um código de feed-forward é executado, e não comandos sequenciais.Exemplo:
O que realmente acontece é que
c= b_clock_anterior
eb = a
. Para arrumar isso, pode ser utilizado diretamentec <= a
ou o uso de instruçõesassign
fora dos blocosalways
.MUITOS pedaços de código no
cpu.v
estão dessa forma, e precisamos consertar isso gradualmente senão o código não será corretamente sintetizado.