![Page 1: 1 Hardware Description Language (HDL) Para quê precisamos de uma Linguagem de Descrição de Hardware ? Modelar, Representar e simular hardware digital](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062522/5706384b1a28abb8238f5f8d/html5/thumbnails/36.jpg)
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