1 hardware description language (hdl) para quê precisamos de uma linguagem de descrição de...
TRANSCRIPT
1
Hardware Description Language (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
2
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
3
Module Definição geral
module module_name ( port_list );port declarations;…variable declaration;…description of behavior
endmodule
Exemplo
module HalfAdder (A, B, Sum, Carry);
input A, B;output Sum, Carry;assign Sum = A ^ B; //^ denotes XORassign Carry = A & B; // & denotes ANDendmodule
4
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 text é ignorado termina com a linha abaixo*/
Númerosdecimal, hexadecimal, octal, binariounsized decimal formsize base forminclude underlines, +,-
Cadeias de caracteres"Delimite usando aspas numa mesma linha"limitados a 1024 caracteres
5
Convenções Lexicais (cont.) Identifier
A ... Za ... z0 ... 9Underscore
Strings are limited to 1024 chars First char of identifier must not be a digit Keywords: See text. Operators: See text.
Verilog diferencia letras maiúsculos de minúsculos
6
Estilos de Descrição Estrutural: representa circuitos lógicos usando
primitivas da linguagem Verilog Exemplo:not n1(sel_n, sel);and a1(sel_b, b, sel_b);and a2(sel_a, a, sel);or o1(out, sel_b, sel_a);
selb
a outsel_n
sel_b
sel_a
n1 a1
a2
o1
7
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
outsel_n
sel_b
sel_a
8
Estilo de Descrição (cont.) Comportamental: representa o comportamento
na forma de um algoritmo Exemplo:if (select == 0) begin
out = b;endelse if (select == 1) begin
out = a;end a
b
sel
outBlack Box2x1 MUX
9
Estilo de Descrição (cont.) RTL (Register Transfer Level): descreve o que
acontece a cada transição ativa do sinal de relogio
Exemplo:always @(posedge clock) begin
pisca = ~pisca;end
10
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
11
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 orden das atribuições dentro do arquivo Verilog não tem efeito sobre a execução.
12
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/resolução 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
13
Modelo de Fluxo de Dados (cont.) Exemplo:
`timescale 1ns/10psmodule HalfAdder (A, B, Sum, Carry);input A, B;output Sum, Carry;assign #3 Sum = A ^ B;assign #6 Carry = A & B;
endmodule
14
Modelo de Fluxo de Dados (cont.)
15
Modelo comportamental Exemplo:
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
endmodule
Sensitivity List
16
Modelo comportamental RTL (cont.) always statement : Sequential Block Sequential Block: All statements within the block
are executed sequentially When is it executed?
Occurrence of an event in the sensitivity list Event: Change in the logical value
Statements with a Sequential Block: Procedural Assignments
Delay in Procedural Assignments Inter-Statement Delay Intra-Statement Delay
17
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
18
Construções Procedurais Existem dois:
initial : Executa uma única vez ni início da simulação,NÃO sintetizável
always : Executa repetidamente, sintetizável Exemplo:
…initial begin Sum = 0; Carry = 0;end…
…always @(A or B) begin Sum = A ^ B; Carry = A & B;end…
19
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;
20
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
21
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
22
Instruções Condicionais Format:
if (condition) procedural_statementelse if (condition) procedural_statementelse
procedural_statement Example:
if (reset) Q = 0;else Q = D;
23
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
24
Data Types Net Type: Wire
wire [ msb : lsb ] wire1, wire2, … Example
wire Reset; // A 1-bit wirewire [6:0] Clear; // A 7-bit wire
Register Type: Regreg [ msb : lsb ] reg1, reg2, … Examplereg [ 3: 0 ] cla; // A 4-bit registerreg cla; // A 1-bit register
25
Restrictions on Data Types Data Flow and Structural Modeling
Can use only wire data type Cannot use reg data type
Behavioral Modeling Can use only reg data type (within initial and always
constructs) Cannot use wire data type
26
Memories An array of registers
reg [ msb : lsb ] memory1 [ upper : lower ]; Example
reg [ 0 : 3 ] mem [ 0 : 63 ];// An array of 64 4-bit registersreg mem [ 0 : 4 ];// An array of 5 1-bit registers
27
Compiler Directives `define – (Similar to #define in C) used to define
global parameter Example:
`define BUS_WIDTH 16 reg [ `BUS_WIDTH - 1 : 0 ] System_Bus;
`undef – Removes the previously defined directive Example:
`define BUS_WIDTH 16 … reg [ `BUS_WIDTH - 1 : 0 ] System_Bus; …`undef BUS_WIDTH
28
Compiler Directives (cont.) `include – used to include another file Example
`include “./fulladder.v”
29
System Tasks Display tasks
$display : Displays the entire list at the time when statement is encountered
$monitor : Whenever there is a change in any argument, displays the entire list at end of time step
Simulation Control Task $finish : makes the simulator to exit $stop : suspends the simulation
Time $time: gives the simulation
30
Type of Port Connections Connection by Position
parent_mod
31
Type of Port Connections (cont.) Connection by Name
parent_mod
32
Empty Port Connections If an input port of an instantiated module is empty,
the port is set to a value of z (high impedance).module child_mod(In1, In2, Out1, Out2) module parent_mod(…….) input In1; input In2; child_mod mod(A, ,Y1, Y2); output Out1; //Empty Input output Out2; endmodule //behavior relating In1 and In2 to Out1endmodule
If an output port of an instantiated module is left empty, the port is considered to be unused.
module parent_mod(…….) child_mod mod(A, B, Y1, ); //Empty Outputendmodule
33
Test Bench`timescale 1ns/100psmodule Top;
reg PA, PB;wire PSum, PCarry;
HalfAdder G1(PA, PB, PSum, PCarry);
initial begin: LABEL reg [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 // forend // initial
endmodule
Test Bench
DesignModule
Apply Inputs
Observe Outputs
34
Test Bench - Generating Stimulus Example: A sequence of
values
initial begin Clock = 0; #50 Clock = 1; #30 Clock = 0; #20 Clock = 1;end
35
Test Bench - Generating Clock Repetitive Signals (clock)
Clock
A Simple Solution:wire Clock;assign #10 Clock = ~ Clock
Caution: Initial value of Clock (wire data type)
= z ~z = x and ~x = x
36
Test Bench - Generating Clock (cont.) Initialize the Clock signal
initial beginClock = 0;
end Caution: Clock is of data type wire, cannot be used in an
initial statement Solution:
reg Clock;…initial begin Clock = 0;end…always begin#10 Clock = ~ Clock;end
forever loop can also be used to generate clock