Tutorial de Verilog - Operadores

Tutorial de Verilog

Esse é o primeiro de uma série de artigos que visa trazer diversas informações de como desenvolver um bom código em Verilog.

 

 

Estados do Bit

 

Primeiramente vou apresentar todos os estados que os bits podem ter em um design com Verilog. Esse fato é muito importante pois impacta no desenvolvimento do projeto e sempre ter isso em mente ajuda a não cometermos gafes simples. Em HDL, todo bit pode ter os seguintes estados:

 

bits verilog

 

Operadores em Verilog

 

Vamos criar um módulo bem simples de hardware descrevendo seu comportamento em Verilog. Conforme foi discutido no post de Rodrigo Pereira sobre a implementação de um processador em Verilog, o modelo comportamental descreve exatamente como um circuito deve funcionar, utilizando uma linguagem HDL, e deixa a responsabilidade da criação da lógica e da simulação correta para as ferramentas de síntese.

 

Conforme André Prado cita em seu artigo sobre sistemas digitais, no nível comportamental o sistema é descrito em função do seu comportamento, é uma representação funcional do mesmo. Estamos, nesse caso, preocupados em descrever o que acontece na saída do sistema quando há uma alteração em uma entrada, é a relação direta de entrada/saída. 

 

Uma porta AND, ilustrada na figura 1, pode ser reproduzida simplesmente como:

 

and
Figura 1: AND

 

 

Abaixo demonstro um código para um circuito com 3 portas lógicas descrito na figura 2.

 

 

figura 1 verilog
Figura 2: Circuito combinacional proposto para o segundo exemplo

 

 

 

 

Note algumas características interessantes do módulo escrito em Verilog:

  • A palavra module inicia o módulo;
  • Depois dos parenteses, há um ponto-e-virgula; 
  • Entradas são identificadas com a palavra input e as saídas com a palavra output;
  • Os fios intermediários são identificados com a palavra wire;
  • O modulo é finalizado por endmodule.

 

Todas as operações são realizadas em paralelo. Veja que para o circuito combinacional mostrado anteriormente, o caminho mais rápido é relativo a operação:

 

 

Confira abaixo todos os operadores que podem ser utilizados com Verilog. 

 

 

Operadores unitários

 

+                a = b + c ;               // Soma , adição binaria
-a = b - c ; // Subtração, subtração binaria

 

 

Operadores de todos os bits

 

|a = |b ; // OR para todos os bits de b
&a = &b ; // AND para todos os bits de b
^a = ^b ; // XOR para todos os bits de b
~|a = ~|b ; // NOR para todos os bits de b
~&a = ~&b ; // NAND para todos os bits de b
~^              a = ~^b ;                 // XNOR para todos os bits de b

 

 

Operadores de bit-wise

 

~a = ~b;  // inverte b 
a = b | c;  // OR bit a bit
 & a = b & c;  // AND bit a bit
 ^ a = b ^ c;  // XOR bit a bit
 ~| a = b ~| c;  // NOR bit a bit
 ~& a = b ~& c; // NAND bit a bit
 ~^             a = b ~^ c;             // XNOR bit a bit

 

 

Operadores de igualdade

 

=a = b a recebe o valor de b
==a == bO valor de a é igual ao valor de b? 
===            a === b                   O valor de a é igual ao valor de b?  Inclui os estados Z e X.
!=a != bO valor de a nao é igual ao valor de b?
!==a !== bO valor de a nao é igual ao valor de b?  Inclui os estados Z e X.

 

 

Saiba mais sobre Verilog

 

PROCESSADORES PROGRAMÁVEIS - como projetar um processador em VERILOG - Arquitetura - parte 1

PROCESSADORES PROGRAMÁVEIS - como projetar um processador em VERILOG - Organização - parte 2

PROCESSADORES PROGRAMÁVEIS - como projetar um processador em VERILOG - Codificação - parte 3

Formas de representar um sistema digital

Tutorial de Modelsim: Verificando o VHDL antes de programar o FPGA

Tutorial de Verilog - Operadores Lógicos e Aritméticos Shift Right e Shift Left

 

Outros artigos da série

Tutorial de Verilog - Operadores Lógicos e Aritméticos Shift Right e Shift Left >>
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Thiago Lima
Sou formado em Engenharia Elétrica na USP Sao Carlos, com mestrado em Engenharia Elétrica no Rochester Institute of Technology pelo CsF. Tenho 17 anos de experiência em projetos de circuitos eletrônicos. Escrevo regularmente para o Embarcados, adoro eventos sobre tecnologia, onde posso rever amigos e conhecer pessoas do ramo.

6
Deixe um comentário

avatar
 
3 Comment threads
3 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Rodrigo Vinicius Mendonca PereFábio Bispo de JesusCássio KrugerTutorial de Verilog - Operadores Lógicos e Aritméticos Shift Right e Shift Left Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Cássio Kruger
Visitante
Cássio Kruger

Opa, tudo bem? Cara, to precisando fazer um filtro FIR com 8 Taps e 8 bits. Tem alguma referência bibliográfica pra me indicar? Preciso de uma luz. Obrigado.

Fábio Bispo de Jesus
Visitante
Fábio Bispo

No exemplo 1, nas linhas 4 e 5, qual a necessidade de definir o tipo como wire? Por padrão, entradas não são sempre wire? E saídas sem definir o tipo como reg também já não são wire por padrão?

Rodrigo Vinicius Mendonca Pere
Visitante
Rodrigo Vinicius Mendonca Pere

Muito boa pergunta Fábio. Realmente não existe a necessidade da definição do tipo WIRE em entradas (na linha 4), eu costumo colocar por seguir a premissa de que devemos ter a consciência de tudo que estamos declarando, nesse sentido, todos os meus códigos sempre estarão com este padrão. Já a linha 5 se dá pela necessidade de ser uma saída de um bloco combinacional. Obrigado por questionar. Espero ter ajuda em algo.

Fábio Bispo de Jesus
Visitante
Fábio Bispo

Olá Rodrigo, obrigado pelo retorno.

Ainda em relação a linha 5, você também não tem necessidade de dizer que é um wire porque a saída também é do tipo wire por padrão, podendo assim ser usado no comando assign sem nenhum problema. Abraço.

Rodrigo Vinicius Mendonca Pere
Visitante
Rodrigo Vinicius Mendonca Pere

Realmente, é força do hábito. Minha resposta está mal escrita, deixei a entender que era obrigatório, obrigado pela correção. Eu costumo definir sempre por conta de certificações de código, que em geral pedem que o tipo seja explicitamente declarado. Isso mostra como a linguagem é bem poderosa. Grato e sucesso.

trackback

[…] à série de artigos, proposta por Thiago Lima [1], no post sobre operadores em Verilog [2]. Neste artigo vamos abordar os Operadores Lógicos e Aritméticos Shift Right e Shift […]