verilog alex vidigal bastos - decom · com as linguagens de descrição de hardware, o processo...
TRANSCRIPT
VERILOG
Alex Vidigal Bastos
● Objetivos
● Introdução● Hierarquia● Estruturas de Modelagem
Sumário
● Identificar os modelos de componentes doVerilog, incluindo módulos, instâncias e portas;
● Correta sintaxe para cada um dos modelos doscomponentes do Verilog;
● Indicar as relações entre os diferentes modelosdos componentes do Verilog;
● Identificar e corrigir a sintaxe para as estruturasde modelagem que são componentes dosmódulos Verilog;
Objetivos
Com as linguagens de descrição de hardware, oprocesso passou a ser como o de sedesenvolver um software. Um exemplo seria:
● Especificação
● Design de Alto Nível
● Codificação
● Verificação / Testes
● Sintetização
Verilog
Linguagens de descrição de hardware, ou HDL,são linguagens utilizadas para projetar hardware.Tal como o nome implica, um HDL também podeser usado para descrever a funcionalidade dohardware, bem como a sua aplicação.
Introdução
A principal característica de uma linguagem dedescrição de hardware é que ele contém acapacidade para descrever a função de umapeça de hardware de forma independente daaplicação.
Introdução
O grande avanço com HDL modernos foi oreconhecimento de que uma linguagem únicapode ser utilizada para descrever a função doprojeto e também para descrever aimplementação. Isto permite que o processo deconcepção inteira para ter lugar numa únicalinguagem, e, assim, uma representação únicado projeto.
Introdução
História
Verilog permite representar a hierarquia de um projeto. As estruturas de Verilog que constrõem a hierarquia são:
● Módulos;
● Portas;
Hierarquia
● Um modelo de Verilog é composto de módulos.
● Um módulo é a unidade básica do modelo, epode ser composto de instâncias de outrosmódulos. Um módulo de que é composto deinstâncias dos outros módulos é chamado umparent module, e as instâncias são chamadasparent children.
Hierarquia
Hierarquia
Verilog - Exemplo
module and2 (a, b, y);input a, b;output y;assign y = a & b;
endmodule
Verilog - Exemplo
14
Linguagens de Descrição de Hardware - HDL
�Para quê precisamos de uma Linguagem de Descrição de Hardware ?
�Modelar, Representar e simular hardware digital�Concorrência�Paralelismo�Semântica para valores de sinais no tempo
�Construções e semântica especiais�Transições (bordas) de valores de sinais�Atrasos de propagação de sinais�Verificação de condições temporais
15
VERILOG HDL�A unidade básica – o modulo
�Modulo (module)� Descreve a funcionalidade do circuito� Define terminais (pinos, portas) de entrada e saída
�Exemplo: Um computador�Funcionalidade: Realizar operações programadas�Portas de entrada/saída: conector para teclado, mouse, conector VGA, conector USB
16
Module�Definição geral
module module module module module_name ( port_list );
port declarations;
…
variable declaration;
…
description of behavior
endmoduleendmoduleendmoduleendmodule
�Exemplo
module module module module HalfAdder (A, B, Sum, Carry);
input A, B;output Sum, Carry;assign Sum = A ^ B;//^ denotes XORassign Carry = A & B;// & denotes ANDendmoduleendmoduleendmoduleendmodule
17
Convenções Lexicais�Comentários
// comentário de uma linha só/* outra forma de comentário de uma linha *//* inicio de comentário com múltiplas linhas
todo texto é ignoradotermina com a linha abaixo
*/�Números
decimal, hexadecimal, octal, bináriounsized decimal formsize base forminclude underlines, +,-�Cadeias de caracteres
"Delimite usando aspas numa mesma linha"limitados a 1024 caracteres
18
Convenções Lexicais (cont.)�Identifier
A ... Z
a ... z
0 ... 9
Underscore
�Strings são limitadas a 1024 caracteres
�Primeiro caractere de identificação não deve ser um dígito
Operators:
Verilog diferencia letras maiúsculos de minúsculos
19
Estilos de Descrição�Estrutural: representa circuitos lógicos usando primitivas da linguagem Verilog
�Exemplo:not n1(sel_n, sel);
and a1(sel_n, b, sel_b);
and a2(sel_a, a, sel);
or o1(out, sel_b, sel_a);
sel
b
a
out
sel_n
sel_b
sel_a
n1a1
a2
o1
20
Estilo de Descrição (cont.)�Fluxo de dados: Representa sinais de saída em função de sinais de entrada
�Exemplo:assign out = (sel & a) | (~sel & b);
sel
b
a
out
sel_n
sel_b
sel_a
21
Estilo de Descrição (cont.)�Comportamental: representa o comportamento na forma de um algoritmo
�Exemplo:if (select == 0)
begin
out = b;
end
else if (select == 1)
begin
out = a;
end
a
b
select
outBlack Box
2x1 MUX
22
Estilo de Descrição (cont.)�RTL (Register Transfer Level): descreve o que acontece a cada transição ativa do sinal de relógio
�Exemplo:always @(posedge clock)
begin
pisca = ~pisca;
end
23
Modelo estrutural
�Execução: Concorrente
�Formato (portas lógicas primitivas):
and G2(Carry, A, B);�Primeiro parâmetro (Carry) – Output
�Outros parâmetros (A, B) - Inputs
24
Modelo de Fluxo de Dados�Usa atribuição permanente para sinais�Format: assign [ delay ] net = expression;
�Example: assign sum = a ^ b;
�delay : Atraso de propagação da expressão para o sinal
�Todas as atribuições permanentes executam simultaneamente
�A ordens das atribuições dentro do arquivo Verilog não tem efeito sobre a execução.
25
Modelo de Fluxo de Dados (cont.)
�Atraso�Exemplo: assign #2 sum = a ^ b;
� “#2” indica 2 unidades de tempo
�Sem especificação de atraso: 0 (default)
�Associação entre unidade de tempo e tempo simulado�`timescale unidade de tempo/ precisão tempo� Exemplo: `timescale 1 ns / 10 ps•1 unidade de tempo = 1 ns
• resolução é 10 ps (0.01 ns)
•10.512 ns é interpretado como 10.51 ns
26
�Exemplo:
`timescale 1ns/10ps
modulemodulemodulemodule HalfAdder (A, B, Sum, Carry);
input A, B;
output Sum, Carry;
assign #3 Sum = A ^ B;
assign #6 Carry = A & B;
endmoduleendmoduleendmoduleendmodule
Modelo de Fluxo de Dados (cont.)
27
Modelo de Fluxo de Dados (cont.)
28
Modelo comportamental�Exemplo:
module module module module mux_2x1(a, b, sel, out);
input a, a, sel;
output out;
always @(a or b or sel)
begin
if (sel == 1)
out = a;
else out = b; end
endmoduleendmoduleendmoduleendmodule
Sensitivity List
29
Modelo comportamental RTL (cont.)
�always statement : Sequência do bloco;
Sequential Block: Todas as declarações dentro do bloco são executados sequencialmente;
�Quando é executado?– Ocorrência de um evento na lista de sensibilidade;
– Evento: Mudança do valor lógico
30
Modelo comportamental RTL (cont.)
- Declarações com um bloco seqüencial: Atribuições processuais
- Atraso na Atribuições processuais
Inter-Statement DelayIntra-Statement Delay
31
Modelo comportamental (cont.)�Atraso entre atribuições:�Exemplo:Sum = A ^ B;
#2 Carry = A & B;
�Execução atrasada
�Atraso dentro de uma atribuição:�Exemplo:Sum = A ^ B;
Carry = #2 A & B;
�Atribuição atrasada
32
Construções Procedurais�Existem dois:
�initial : Executa uma única vez no início da simulação,NÃO sintetizável
�always : Executa repetidamente, sintetizável
�Exemplo:
…initial beginSum = 0;Carry = 0;
end…
…always @(A or B) beginSum = A ^ B;Carry = A & B;
end…
33
Controle por evento�Controle por evento
�Disparo do evento por transição (borda)
�Disparo do evento por nível
�Controle por evento de transição
@ (posedge CLK) // transição positiva de CLK
Curr_State = Next_state;
�Controle por evento de nível lógico
@ (A or B) // mudança nos valores de A ou B
Out = A & B;
34
Instruções de Laço�Laços�Repeat�While�For
�Laço repeat�Exemplo:
repeat (Count)
sum = sum + 5;
�Se a condição é x or z ela é tratada como 0
35
Instruções de Laço (cont.)�Laço While
�Exemplo:while (Count < 10) begin
sum = sum + 5;
Count = Count +1;
end
�Se a condição é x or z ela é tratada como 0
�Laço For
�Exemplo:for (Count = 0; Count < 10; Count = Count + 1) begin
sum = sum + 5;
end
36
Instruções Condicionais�Formato:if (condition)
procedural_statementelse if (condition)
procedural_statementelse
procedural_statement�Exemplo:if (reset)
Q = 0;
else
Q = D;
37
Instruções Condicionais (cont.)�Instrução Case�Exemplo 1:case (X)
2’b00: Y = A + B;
2’b01: Y = A – B;
2’b10: Y = A / B;
endcase
�Example 2:case (3’b101 << 2)
3’b100: A=B+C;
4’b0100: A=B–C;
5’b10100: A=B/C; //This statement is executed
endcase
38
Tipos de Dados�Net Type: Wirewire [ msb : lsb ] wire1, wire2, …
�Exemplo:
wire Reset; // A 1-bit wirewire [6:0] Clear; // A 7-bit wire
�Register Type: Regreg [ msb : lsb ] reg1, reg2, …
�Exemplo:
reg [ 3: 0 ] cla; // A 4-bit registerreg cla; // A 1-bit register
39
Restrições sobre Tipos de Dados
� Fluxo de Dados e Modelagem Estrutural- Pode usar somente tipos de dados wire- Não pode usar tipo de dados reg
� Modelos de Comportamento- Pode usar somente tipos de dados reg (dentro das construções iniciais e always)- Não pode usar tipo de dados wire
40
Memórias� Um array de registros
reg [ msb : lsb ] memory1 [ upper : lower ];
�Examplereg [ 0 : 3 ] mem [ 0 : 63 ];// Um array de 64-4bit de registradoresreg mem [ 0 : 4 ];// Um array de 5 1-bit registers
41
Diretivas de Compilação�`define – (Similar ao define em C) usado para definir parâmetros globais�Example:`define BUS_WIDTH 16reg [ `BUS_WIDTH - 1 : 0 ] System_Bus;
`undef – Remove a diretiva previamente definida
�Example:`define BUS_WIDTH 16
…reg [ `BUS_WIDTH - 1 : 0 ] System_Bus;…
`undef BUS_WIDTH
42
Compiler Directives (cont.)�`include – usado para incluir outro arquivo
�Example`include “./fulladder.v”
43
Tarefas de Sistema�Exibir as tarefas- $display : Mostra toda a lista no momento em que
declaração é encontrada;$monitor : Sempre que há uma mudança em qualquer
argumento, exibe toda a lista no final do passo detempo;
�Tarefa de Controle de Simulação�$finish : Faz o simulador sair;�$stop : Suspende a simulação
�Time�$time: dá o tempo da simulação;
44
Tipos de Conexões de portas�Connection by Position
parent_mod
45
�Connection by Nameparent_mod
Tipos de Conexões de portas (cont.)
46
Conexões de Portas Vazias�Se uma porta de entrada de um módulo instanciado estivervazia, a porta está definida para um valor de z (alta impedância).
module child_mod(In1, In2, Out1, Out2) module parent_mod(…….)input In1; input In2; child_mod mod(A, ,Y1, Y2);output Out1; //Empty Inputoutput Out2; endmodule
//behavior relating In1 and In2 to Out1endmodule
�Se uma porta de saída de um módulo instanciado é deixado vazio, a porta é considerado como não utilizada.
module parent_mod(…….)child_mod mod(A, B, Y1, ); //Empty Output
endmodule
47
Bancada de Teste`timescale 1ns/100psmodule Top;
reg PA, PB;wire PSum, PCarry;
HalfAdder G1(PA, PB, PSum, PCarry);
initial begin: LABELreg [2:0] i;for (i=0; i<4; i=i+1) begin
{PA, PB} = i;#5 $display (“PA=%b PB=%b PSum=%b
PCarry=%b”, PA, PB, PSum, PCarry);end // for
end // initialendmodule
Test Bench
Design
Module
Apply Inputs
Observe Outputs
48
Bancada de Teste - Estímulo gerador
�Exemplo: uma sequência de valores;
initial begin
Clock = 0;
#50 Clock = 1;
#30 Clock = 0;
#20 Clock = 1;
end
49
Bancada de Teste – Gerando Clock�Sinais Repetitivos Signals (clock)
Clock
�Solução Simples:wire Clock;assign #10 Clock = ~ Clock
�Cuidados:�Iniciar valores de clock (wire data type) = z�~z = x and ~x = x
50
Inicializar o sinal de clockinitial begin
Clock = 0;end�Cuidado: Clock is of data type wire, cannot be used in an initial statement�Solução:reg Clock;…initial beginClock = 0;
end…always begin#10 Clock = ~ Clock;end
SEMPRE loop pode
ser usado paragerar clock
Bancada de Teste – Gerando Clock
?
Perguntas