6 Comentários

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 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Hardware » Sistemas Digitais » Tutorial de Verilog - Operadores
Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Fábio Bispo de Jesus
Fábio Bispo
28/04/2015 11:44

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
Rodrigo Vinicius Mendonca Pere
Reply to  Fábio Bispo
06/05/2015 18:47

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
Fábio Bispo
Reply to  Rodrigo Vinicius Mendonca Pere
07/05/2015 11:29

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
Rodrigo Vinicius Mendonca Pere
Reply to  Fábio Bispo
07/05/2015 12:06

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.

Cássio Kruger
Cássio Kruger
04/07/2017 17:02

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.

trackback
17/04/2015 01:01

[…] à 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 […]

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link