Pergunta

Eu estou um pouco confuso sobre o que é considerado uma entrada quando você usar o caractere curinga @* em um bloco de sensibilidade lista.Por exemplo, no exemplo a seguir que os sinais são interpretados como factores que causam a bloquear sempre ser reavaliada?Pelo que eu entendo clk e repor não estão incluídos porque eles não aparecem no lado direito de qualquer instrução processual na bloquear sempre. um e b estão incluídos porque eles ambos aparecem no lado direito processual declarações de bloquear sempre.Mas onde eu estou realmente confuso sobre pt e mux.Porque eles são usados como condições de ensaio no se e caso as declarações são considerados insumos?É a bloquear sempre reavaliada a cada vez que pt e mux alterar o valor?Eu estou muito bem de um noob, e no 3 Verilog livros eu ainda não encontrei uma explicação satisfatória.Eu sempre achei as explicações aqui para ser realmente útil.Obrigado

module example
( 
    input wire clk, reset, en, a, b,
    input wire [1:0] mux,
    output reg x,y, z
);

always @*    
begin  
 x = a & b;    
  if (en)
    y= a | b;
  case(mux)
    2'b00: z = 0;
    2'b01: z = 1;
    2'b10: z = 1;
    2'b11: z = 0;
  endcase
end
endmodule
Foi útil?

Solução

Qualquer sinal de que é lido dentro de um bloco, e isso pode fazer com que o resultado de um bloco para mudar se as alterações de valor, será incluída pela @*.Qualquer alteração na leitura do sinal usado deve causa o bloco a ser re-avaliada, como poderia fazer com que as saídas do bloco para mudar.Como eu tenho certeza que você sabe, se você não tivesse usado @* você seria listar esses sinais com a mão.

No caso de o código que você forneceu é qualquer sinal que é:

  • Avaliado sobre o lado direito de uma atribuição (a e b)
  • Avaliada como parte de uma condicional (en e mux)

...mas nenhum sinal de que iria ser avaliadas por qualquer motivo.(Eu não consigo pensar em nenhum outro motivo para a direita agora, mas talvez alguém o)

clk e reset não estão na lista de sensibilidade, porque eles não são usados.Simples assim.Não há nada de especial sobre eles;eles são sinais, como qualquer outro.

Outras dicas

No seu exemplo, os seguintes sinais estão incluídas no implícita sensibilidade lista:

a
b
en
mux

clk e reset não fazem parte da lista de sensibilidade.

Isso é completamente descrito no padrão IEEE Std para Verilog (1800-2009, por exemplo).A especificação IEEE é a melhor fonte de informações detalhadas sobre o Verilog.A documentação para o seu simulador também pode descrever como @* de obras.

A resposta mais simples depende se você está escrevendo RTL, ou um testbench.Se você estiver escrevendo RTL, em seguida, você deve tentar esquecer o conceito de Sensibilidade listas, como eles realmente não existem.Não há lógica que só atualiza quando um item na lista é acionado.Toda a sensibilidade listas podem fazer em RTL é fazer com que seu simulação e real de circuitos diferentes, eles não fazem nada de bom.

Por isso, use sempre "sempre @*" ou melhor ainda "always_comb" e esquecer-se sobre o conceito de sensibilidade listas.Se o item de código é avaliada ele irá disparar o processo.Simples assim.É um item está em um if/else, caso, atribuída a uma variável, ou qualquer outra coisa, ele vai ser "avaliada" e, assim, fazer com que o processo a ser desencadeado.

Mas, lembre-se que, em circuitos digitais, não há sensibilidade lista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top