Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial Verilog
Tutorial Verilog
Tutorial Verilog
1 Edio 2011.1
INTRODUO
Resolvi elaborar este documento aps pagar a cadeira de Sistemas Digitais em 2011.1, j que a
maior dificuldade que os alunos (me incluindo) sentiram durante o projeto da 2 unidade, foi
em entender a sintaxe e semntica da linguagem Verilog.
O objetivo deste tutorial esclarecer algumas dvidas a respeito da linguagem, utilizada no
projeto da 2 Unidade de Sistemas Digitais, alm de servir como reviso para a cadeira de
Infraestrura de Hardware, onde ela ser trabalhada mais a fundo.
Aqui voc encontrar a explicao das principais keywords alm de exemplos de como utilizlas, tentei explic-las de uma maneira menos formal para facilitar o entendimento. E no, voc
no vai encontrar o cdigo entregue de bandeja neste tutorial (apesar de dar para pescar
alguma coisa). A lgica com voc, ou como diz um amigo meu: D teus pulo, boy!.
fas5.
1. PRINCIPAIS KEYWORDS
1) module/endmodule a mesma coisa que mtodo (ou funo) em outras linguagens.
OBS.: Um module sempre encerrado com um endmodule.
Sintaxe e Semntica:
module nome_do_modulo (input 1, input N, ..., output1, ..., outputN);
Ex1.:
Ex2.:
Ex2.:
input [3:0] A;
input [3:0] B;
Ex3.:
input [7:0] A, B;
input Clock;
output Out;
Ex2.:
4) reg usado para quando se deseja guardar um valor em uma entrada ou sada at que
outro valor seja enviado para essa entrada ou sada (registrador).
OBS.: Entradas e sadas usadas dentro de blocos always/initial devem ser do tipo reg.
Sintaxe e Semntica:
reg nome_da_entrada/saida;
Ex1.:
Ex2.:
6)
Sintaxe e Semntica:
assign nome_da_entrada/saida = valor;
Ex1.:
Ex2.:
Ex3.:
Ex2.:
// Incio do bloco
// Inicializando In1 com a cadeia de 4 bits 1010
// Inicializando Sel com o bit 1
// Fim do bloco
9) always utilizado para realizar instrues sempre que houver mudana em alguma
entrada/sada pr-determinada.
OBS.: posegde = o bloco always executar na descida do clock.
negedge = o bloco always executar na subida do clock.
Sintaxe e Semntica:
always @ (entrada1 or ... or entradaN) begin
(...)
cdigo;
(...)
end
ou
Ex1.:
Ex2.:
input Clock;
// Declarando uma entrada, Clock, de 1 bit
input [3:0] In1, In2;
// Declarando duas entradas, In1 e In2, de 4 bits
(...)
always @(posedge Clock) begin
/* Incio do bloco. Na descida do clock, o
(...)
* cdigo dentro do bloco ser executado */
cdigo;
(...)
end
// Fim do bloco
OBS.: Se ao invs de posedge estivesse escrito negedge, o cdigo dentro do bloco seria
executado na subida do clock.
Ex2.:
// Incio do bloco
// Caso In seja igual a 00, Out receber 0010
// Caso In seja igual a 01, Out receber 1010
// Caso In seja igual a 10, Out receber 0110
// Caso In seja igual a 11, Out receber 0111
// Fim do bloco
// Incio do bloco
// Caso In seja igual a 00, Out receber 0010
// Caso In seja igual a 01, Out receber 1010
/* Caso In seja igual a 10:
* Out receber 0110 e
* Sel receber 1 */
// Caso In seja igual a 11, Out receber 0111
// Fim do bloco
11) if/else bloco condicional semelhante ao bloco if/else de Java. S pode ser utilizado
dentro de blocos always.
Sintaxe e Semntica:
if (condicao) begin
(...)
cdigo
(...)
end else begin
(...)
end
Ex1.:
Ex2.:
ou
input [3:0] A, B;
output [3:0] Out;
(...)
if (A > B) begin
Out <= A - B;
end else begin
Out <= B - A;
end
(...)
12) parameter usado para rotular dados que sero utilizados muitas vezes, contribuindo
para a legibilidade do cdigo.
Sintaxe e Semntica:
parameter ROTULO = cadeia de bits;
Ex.:
FONTES
http://www.verilogtutorial.info/
http://www.asic-world.com/verilog/index.html