As instruções de atribuição são usadas para gerar valores na rede. E também é usado em Modelagem de Fluxo de Dados .
Sinais do tipo fio ou tipo de dados requerem a atribuição contínua de um valor. Contanto que a bateria de +5V seja aplicada a uma extremidade do fio, o componente conectado à outra extremidade do fio obterá a tensão necessária.
Este conceito é realizado pela instrução de atribuição, onde qualquer fio ou outro fio semelhante (tipos de dados) pode ser acionado continuamente com um valor. O valor pode ser uma constante ou uma expressão composta por um grupo de sinais.
Sintaxe
A sintaxe de atribuição começa com a palavra-chave atribuir, seguida pelo nome do sinal, que pode ser um sinal ou uma combinação de diferentes redes de sinais.
O força motriz e atraso são opcionais e usados principalmente para modelagem de fluxo de dados do que para síntese em hardware real.
O sinal do lado direito é avaliado e atribuído à rede ou expressão de redes do lado esquerdo.
assign = [drive_strength] [delay]
Os valores de atraso são úteis para especificar atrasos para portas e são usados para modelar o comportamento de temporização em hardware real. O valor determina quando a rede deve receber o valor avaliado.
Regras
Algumas regras precisam ser seguidas durante o uso de uma instrução de atribuição:
- LHS deve sempre ser um escalar, um vetor ou uma combinação de redes escalares e vetoriais, mas nunca um registrador escalar ou vetorial.
- O RHS pode conter registradores escalares ou vetoriais e chamadas de função.
- Sempre que qualquer operando no RHS mudar de valor, o LHS será atualizado com o novo valor.
- As instruções de atribuição também são chamadas de atribuições contínuas.
Atribuir variáveis de registro
Não podemos dirigir ou atribuir registro digite variáveis com uma instrução de atribuição porque uma variável reg é capaz de armazenar dados e não é acionada continuamente.
Os sinais Reg só podem ser acionados em blocos procedurais, como sempre e inicial.
Atribuição Contínua Implícita
Quando uma instrução de atribuição é usada para atribuir algum valor a uma determinada rede, ela é chamada de explícito atribuição
Se uma atribuição a ser feita durante a rede for declarada, ela é chamada de implícito atribuição.
wire [1:0] a; assign a = x & y; // Explicit assignment wire [1:0] a = x & y; // Implicit assignment
Projeto Lógico Combinacional
Considere o seguinte circuito digital feito de portas combinacionais e o correspondente Verilog código.
A lógica combinacional exige que as entradas sejam continuamente acionadas para manter a saída, ao contrário de elementos sequenciais como flip-flops, onde o valor é capturado e armazenado na borda de um clock.
Uma instrução atribuída satisfaz o propósito porque a saída o é atualizada sempre que qualquer uma das entradas do lado direito muda.
// This module takes four inputs and performs a Boolean // operation and assigns output to o. // logic is realized using assign statement. module combo (input a, b, c, d, output o); assign o = ~((a & b) | c ^ d); endmodule
Esquema de Hardware
Após a elaboração e síntese do projeto, um circuito combinacional se comporta da mesma maneira que o modelado pela instrução de atribuição.
O sinal o torna-se 1 sempre que a expressão combinacional no RHS se torna verdadeira.
Da mesma forma, o torna-se 0 quando RHS é falso. A saída o é X de 0ns a 10ns porque as entradas são X durante o mesmo tempo.