Eu estava lendo esta página http://www.asic-world.com/verilog/verilog_one_day3.html quando me deparei com o seguinte:
Normalmente, temos que redefinir os flip-flops; assim, toda vez que o relógio faz a transição de 0 para 1 (posedge), verificamos se o reset é afirmado (redefinição síncrona) e continuamos com a lógica normal. Se olharmos atentamente, veremos que, no caso da lógica combinacional, tínhamos "=" para atribuição e, para o bloco seqüencial, tínhamos o operador "<=". Bem, "=" está bloqueando a atribuição e "<=" está bloqueando a atribuição. "=" executa o código sequencialmente dentro de um início / fim, enquanto o não bloqueador "<=" é executado em paralelo.
Eu tinha quase certeza de que as tarefas sem bloqueio eram seqüenciais enquanto as tarefas de bloqueio eram paralelas. Afinal, você pode fazer atribuições de bloqueio com instruções de atribuição fora dos blocos sempre, e todas elas são executadas em paralelo. Isso é um erro ou o comportamento é diferente dentro de um bloco always? E, se o comportamento for diferente dentro de um bloco always, as atribuições de não bloqueio podem ser feitas fora de um bloco always?