Os operadores executam uma operação em um ou mais operandos dentro de uma expressão. Uma expressão combina operandos com operadores apropriados para produzir a expressão funcional desejada.
1. Operadores Aritméticos
Para o FPGA, a divisão e a multiplicação são muito caras e às vezes não conseguimos sintetizar a divisão. Se usarmos Z ou X para valores, o resultado é desconhecido. As operações tratam os valores como não assinados.
Personagem | Operação realizada | Exemplo |
+ | Adicionar | b + c = 11 |
- | Subtrair | b - c = 9, -b=-10 |
/ | Dividir | b / a = 2 |
* | Multiplicar | uma * b = 50 |
% | Módulo | b % a = 0 |
2. Operadores bit a bit
Cada bit é operado, o resultado é o tamanho do operando maior, e o operando menor é deixado estendido com zeros até o tamanho do operando maior.
Personagem | Operação realizada | Exemplo |
~ | Inverta cada bit | ~a = 3'b010 |
& | E cada pedaço | b e c = 3'b010 |
| | Ou cada pedaço | um | b = 3'b111 |
^ | Xor cada bit | uma ^ b = 3'b011 |
^~ ou ~^ | Xnor cada bit | a ^~ b = 3'b100 |
3. Operadores de Redução
Esses operadores reduzem os vetores a apenas um bit. Se houver os caracteres z e x, o resultado pode ser um valor conhecido.
Personagem | Operação realizada | Exemplo |
& | E todos os pedaços | &a = 1'b0, &d = 1'b0 |
~& | N e todos os bits | ~&a = 1'b1 |
| | Ou todos os bits | |a = 1'b1, |c = 1'bX |
~| | Nem todos os bits | ~|a= 1'b0 |
^ | Xou todos os bits | ^a = 1'b1 |
^~ ou ~^ | Xnor todos os bits | ~^a = 1'b0 |
4. Operadores Relacionais
Esses operadores comparam operandos e resultados em um valor booleano escalar de 1 bit. Os operadores de igualdade e desigualdade de caso podem ser usados para valores de impedância desconhecidos ou altos (z ou x), e se os dois operandos forem desconhecidos, o resultado é 1.
Personagem | Operação realizada | Exemplo |
> | Maior que | uma > b = 1'b0 |
< | Menor que | a |
>= | Maior ou igual | uma >= d = 1'bX |
<=< td> | Menor ou igual | a<= e='1'bX</td'> => | =<>
== | Igualdade | uma == b = 1'b0 |
!= | Desigualdade | uma! = b = 1'b1 |
=== | Igualdade de casos | e === e = 1'b1 |
!=== | Desigualdade de caso | e! == d = 1'b1 |
5. Operadores Lógicos
Esses operadores comparam operandos e resultados em um valor booleano escalar de 1 bit.
Personagem | Operação realizada | Exemplo |
! | Não é verdade | !(a && b) = 1'b1 |
&& | Ambas as expressões são verdadeiras | a && b = 1'b0 |
|| | Um minério ambas as expressões são verdadeiras | e || b = 1'b1 |
6. Operadores de turno
Esses operadores deslocam os operandos para a direita ou para a esquerda, o tamanho é mantido constante, os bits deslocados são perdidos e o vetor é preenchido com zeros.
como determinar o tamanho do monitor
Personagem | Operação realizada | Exemplo |
>> | Deslocar para a direita | b >> 1 resultado 4?b010X |
<< | Deslocar para a esquerda | a << 2 resultados 4?b1000 |
7. Operadores de Atribuição
Existem três operadores de atribuição, cada um dos quais executa tarefas diferentes e são usados com diferentes tipos de dados:
- atribuir (atribuição contínua)
- <= (non-blocking assignment)< li>
- = (bloqueio de atribuição) =>
8. Outros Operadores
Estes são operadores usados para testes de condições e para criar vetores.
Personagem | Operação realizada | Exemplo |
?: | Teste de condições | teste cond. ? se for verdade faça isso ou se não faça isso |
{} | Concatenar | c = {a,b} = 8'101010x0 |
{{}} | Replicar | {3{2'b10}}= 6'b101010 |
9. Precedência dos Operadores
A ordem da tabela indica qual operação será realizada primeiro. O primeiro tem a maior prioridade. O () pode ser usado para substituir o padrão.
Precedência de operadores |
---|
+, -,!, ~ (unário) |
+,- (binário) |
<> |
,= |
==,!= |
& |
^, ^~ ou ~^ |
| |
&& |
|| |
?: |