1 hardware description language (hdl) para quê precisamos de uma linguagem de descrição de...

36
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

Upload: manuella-silveira-affonso

Post on 07-Apr-2016

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 2: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 3: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 4: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 5: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 6: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 7: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 8: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 9: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 10: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 11: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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.

Page 12: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 13: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 14: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

14

Modelo de Fluxo de Dados (cont.)

Page 15: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 16: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 17: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 18: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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…

Page 19: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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;

Page 20: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 21: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 22: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

22

Instruções Condicionais Format:

if (condition) procedural_statementelse if (condition) procedural_statementelse

procedural_statement Example:

if (reset) Q = 0;else Q = D;

Page 23: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 24: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 25: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 26: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 27: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 28: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

28

Compiler Directives (cont.) `include – used to include another file Example

`include “./fulladder.v”

Page 29: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 30: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

30

Type of Port Connections Connection by Position

parent_mod

Page 31: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

31

Type of Port Connections (cont.) Connection by Name

parent_mod

Page 32: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 33: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 34: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

34

Test Bench - Generating Stimulus Example: A sequence of

values

initial begin Clock = 0; #50 Clock = 1; #30 Clock = 0; #20 Clock = 1;end

Page 35: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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

Page 36: 1 Hardware Description Language (HDL)  Para quê precisamos de uma Linguagem de Descrição de Hardware ?  Modelar, Representar e simular hardware digital

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