You are on page 1of 34

Design Digital com Verilog

Campina Grande, 16 de maro de 2010

Curso Brazil-IP Design Digital com Verilog

Sumrio
Design no fluxo de projeto de Circuitos Integrados Evoluo das tcnicas de projeto Projeto Particionado Linguagens de Descrio de Hardware Verilog
Nveis de Descrio (Comportamental, Portas, RTL) Modelagem Comportamental (assign e always) Blocking x non-blocking Circuitos Combinacionais Circuitos Seqenciais e Maquinas de Estado
2

Curso Brazil-IP Design Digital com Verilog

Design no Fluxo de Projeto de Circuitos Integrados


Design, implementao e codificao so sinnimos no fluxo de projeto. A equipe de codificao responsvel por, a partir de uma especificao e arquiteturas definidas, transformar em um cdigo de uma linguagem de descrio de harware que, aps sintetizado, se transforma em um circuito que realiza a funo desejada, seja programado em um FPGA, ou transformado em um circuito integrado (CI). O codificador tem que dominar a linguagem de hardware e utiliz-la da melhor forma possvel para traduzir o que est na especificao para um cdigo que seja sintetizvel e realize todas as funes desejadas.

Curso Brazil-IP Design Digital com Verilog

Design no Fluxo de Projeto de Circuitos Integrados


Microarquitetura
Arquiteto de Sistemas Projetista HDL

Especificao

RTL

Verificao Funcional

Portas Lgicas
Sntese Lgica Floorplaning

Portas no layout
Place, Route, outros

GDS II (Layout)

Verificao Formal

Verificao Fsica
4

Curso Brazil-IP Design Digital com Verilog

Evoluo das tcnicas de projeto - Complexidade


N de dispositivos 109 LSI 105 MSI Small Scale IC 10 Vlvula Transistor 10 VLSI

1 1940 1960 1970 1980 1990 Hoje 5

Curso Brazil-IP Design Digital com Verilog

Evoluo das tcnicas de projeto


Antes das Linguagens de descrio de hardware (at meados dos anos 80): Desenho feito a mo, transistor por transistor, fio por fio. Uma mudana ou erro de projeto implicava em um retrabalho imenso. Simulaes SPICE eram necessrias.

Curso Brazil-IP Design Digital com Verilog

Evoluo das tcnicas de projeto


Aps as Linguagens de descrio de hardware (a primeira surgiu em 81):
// Simple 32-bit adder module adder32 (a, b, sum); input [31:0] a,b; output [31:0] sum; assign sum = a + b; endmodule

Modificada facilmente. A arquitetura no definida no cdigo, apenas na sntese. Pode ser simulada com simuladores de HDLs. Codifica-se geralmente a funo do circuito.

Curso Brazil-IP Design Digital com Verilog

Projeto Particionado
Para lidar com a alta complexidade, o projeto de Cis particionado em etapas segundo o fluxo de projeto. Outra tcnica utilizada o projeto hierrquico. O sistema particionado em unidades, que so divididas em blocos funcionais, que contm clulas, que so formadas por transistores. Cada nvel da hierarquia chamado de nvel de abstrao.

Curso Brazil-IP Design Digital com Verilog

Projeto Particionado Grfico Y


Cada nvel mais alto esconde mais detalhes do projeto. Muitas das etapas de projeto so automatizadas e realizadas por ferramentas. Cabe ao projetista conhecer bem o que a ferramenta faz para atingir os requisitos do projeto.

Curso Brazil-IP Design Digital com Verilog

Projeto Particionado Nveis Hierrquicos

10

Curso Brazil-IP Design Digital com Verilog

Linguagens de Descrio de Hardware - HDL


Muito mais produtivo projetar o sistema pela sua funcionalidade. possvel projetar em qualquer nvel de abstrao (exceto transistores). Linguagens mais utilizadas: Verilog HDL(1984)
Sintaxe mais parecida com C. Mais utilizada no Vale do Silcio.

VHDL VHSIC Hardware Description Language (1981)


Criada pelo Departamento de Defesa Americano Mais utilizado na Europa e nos rgo de governo americano.

System Verilog Linguagem para Verificao que abrange o Verilog.


11

Curso Brazil-IP Design Digital com Verilog

Verilog Estrutura Geral


Mdulo: Estrutura Principal
module brazil_ip (entrada1, entrada2, saida);
entrada1 8 entrada2 8 saida

brazil_ip
8

input [7:0] entrada1, entrada2; output [7:0] saida; // comentario /* Este cdigo no faz nada, uma caixa vazia */ endmodule

Obs: Verilog case sensitive

12

Curso Brazil-IP Design Digital com Verilog

Verilog Estrutura Geral


1 Tipo de Dados: wire Hierarquia: instanciao de mdulos.
brazil_ip
entrada1 8 entrada2 8 a int1 b int2 8 saida

module brazil_ip (entrada1, entrada2, saida); input [7:0] entrada1, entrada2; output [7:0] saida; wire [7:0] a, b; /* Este codigo ainda no faz nada, mas tem duas caixas vazias dentro */ //instanciacao dos modulos internos int1 X1 (.x(entrada1), .y(entrada2), .w(a), .z(b)); int2 X2 (.j(a), .k(b), .out(saida)); endmodule

Obs: a descrio dos mdulos internos no prximo slide.


13

Curso Brazil-IP Design Digital com Verilog

Verilog Estrutura Geral


Operadores: precedncia
module int1 (x, y, w, z); input [7:0] x, y; output [7:0] w, z; /* Este codigo tem uma funcao, que funcao ser essa? */ assign w = ~x & y | x & (x ^ y); assign z = x | y; module int2 (j, k, out); input [7:0] j, k; output [7:0] out; assign out = j + k; endmodule
14

x y int1

w j z k int2 out

endmodule

Curso Brazil-IP Design Digital com Verilog

Verilog Estrutura Geral


Operadores: precedncia

15

Curso Brazil-IP Design Digital com Verilog

Verilog Nveis de descrio


Comportamental (Behavioral): Descreve o que o mdulo faz.
j k l sum out

Estrutural (Structural): Especifica como o mdulo composto de outros mdulos ou primitivas.


module brazil_ip (entrada1, entrada2, saida); input [7:0] entrada1, entrada2; output [7:0] saida; wire [7:0] a, b; int1 X1 (.x(entrada1), .y(entrada2), .w(a), .z(b)); int2 X2 (.j(a), .k(b), .out(saida)); endmodule
16

module sum (j, k, out); input [7:0] j, k, l; output [7:0] out; assign out = j + k; endmodule

Curso Brazil-IP Design Digital com Verilog

Verilog Construes no sintetizveis

Construes no suportadas por sintetizadores: Delays Wait Initial entre outros; Construes suportadas para sntese: Captulo 20 do Guia de referncia da linguagem.

17

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental

Duas formas de descrever: Continuous Assignment (assign). Blocos always. assign descreve apenas lgica combinacional. always descreve tanto lgica combinacional quanto seqencial.

18

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental - assign


Qualquer mudana nos sinais do lado direito causa atualizao imediata no lado esquerdo da igualdade. Descreve apenas circuitos combinacionais. Todos os sinais so do tipo wire.
module gates (input [3:0] a, b, output [3:0] y1, y2, y3, y4, y5); /* 5 diferentes portas de 2 entradas e 4 bits */ assign y1 = a & b; //AND assign y2 = a | b; //OR assign y3 = a ^ b; //XOR assign y4 = -( a & b ); //NAND assign y5 = - ( a | b ); //NOR endmodule
19

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental - assign


Operadores condicionais (select ? TRUE : FALSE).

module mux2 (input [3:0] d0, d1, input s, output [3:0] y); assign y = s ? d1 : d0 ; //mux 2 entradas endmodule

20

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental - assign


Constantes.

21

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental - assign


Operador de multiplicao (*). Concatenao ({ }).
module mul (input [7:0] a, b, output [7:0] upper, lower); assign {upper, lower} = a * b ; endmodule

22

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental - always


H atualizao de valores quando os sinais da lista de sensibilidade variam. Pode-se descrever circuitos combinacionais ou sequnciais. 2 tipo de dados: reg
module flop (input clk, input [3:0] d, output reg [3:0] q); always @ (posedge clk) // lista de sensibilidade q <= d; // se houver mais de uma atribuio usa-se begin e end endmodule
23

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental blocking x non-blocking


Exemplo: Registrador de deslocamento

24

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental blocking x non-blocking


Atribuio blocking (=)
module shift_reg ( input clk, sin, output reg [3:0] q); always @ (posedge clk) begin q[0] = sin; q[1] = q[0]; q[2] = q[1]; q[3] = q[2]; end endmodule

Atribuio non-blocking (<=)


module shift_reg ( input clk, sin, output reg [3:0] q); always @ (posedge clk) begin q[0] <= sin; q[1] <= q[0]; q[2] <= q[1]; q[3] <= q[2]; end endmodule

25

Curso Brazil-IP Design Digital com Verilog

Verilog Modelagem Comportamental blocking x non-blocking


Atribuio blocking (=)
So avaliadas seqencialmente; Semelhante a linguagem de programao; USO NO RECOMENDADO PARA DESIGN, APENAS EM CDIGOS PARA SIMULAO.

Atribuio non-blocking (<=)


So avaliadas em paralelo; Assemelha-se ao funcionamento do hardware; USAR SEMPRE NON-BLOCKING (<=) EM CDIGOS PARA SNTESE.

Mais detalhes: Slides Sutherland

26

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais

As sadas so atualizadas quando qualquer das entradas mudam de valor. As sadas dependem somente das entradas. No h elementos de memria. Pode ser descrito usando assign ou always blocks; Ex: mux, ALU, codificadores, decod ...
27

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais


* na lista de sensibilidade. quando reg no se torna registrador aps a sntese.
module shift_reg ( input [3:0] a, b, output reg [3:0] y1, y2, y3, y4, y5 ); always @ (*) begin y1 <= a & b; //AND y2 <= a | b; // OR y3 <= a ^ b; // XOR y4 <= ~(a & b); // NAND y5 <= ~(a | b); // NOR end endmodule
28

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais


estrutura if-else.
always @ (*) begin if (sel3 == 1) out <= in6; else if (sel2 == 1) out <= in4; else if (sel1 == 1) out <= in2; else out <= in1; end

Obs1: Nesse caso o blocking assignment pode ser usado. Obs 2: o begin e end do always pode ser dispensado. Obs 3: Com assign pode-se fazer o mesmo.
29

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais


estrutura case.
module 4X1_mux (out, in1, in2, in3, in4, sel); input in1, in2, in3, in4; input [1:0] sel; output reg out; always @ (*) begin case (sel) 2b00 : out <= in1; 2b01 : out <= in2; 2b10 : out <= in3; 2b11 : out <= in4; endcase end endmodule

Obs1: Nesse caso o blocking assignment pode ser usado. Obs 2: Com assign pode-se fazer o mesmo.
30

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais


CUIDADO! Latches indesejados. No uso de estruturas de deciso (case, if-else, etc) todas as condies de seleo devem ser cobertas no cdigo. Se houver condies no cobertas surgiro elementos de memria (latches) indesejados.
always @ (*) begin if (sel3 == 1) out <= in6; else if (sel2 == 1) out <= in4; else if (sel1 == 1) out <= in2; end always @ (*) begin case (sel) 2b00 : out <= in1; 2b01 : out <= in2; 2b10 : out <= in3; endcase end
31

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais


Modelar circuitos combinacionais com assign deixa o cdigo menor. Modelar utilizando always deixa o cdigo mais fcil de entender. Modelando circuitos combinacionais com assign corre-se o risco de errar o uso de operadores de deciso ou a precedncia dos operadores. Modelando utilizando always corre-se o risco de criar latches indesejados. Em estruturas mais complexas, o always mais eficaz e seguro.

32

Curso Brazil-IP Design Digital com Verilog

Verilog Circuitos Combinacionais


Exerccio: Escrever um cdigo sintetizvel que descreva uma ALU (unidade lgica aritmtica) que realiza as funes de soma, subtrao, negao e operaes lgicas (AND, OR, NAND, NOR, XOR, XNOR). As entradas so de 4 bits. A sada s apresenta um resultado por vez, variando de acordo com uma entrada de seleo. Utilizar o mximo de conhecimentos possveis. Duas verses, uma utilizando always e outra utilizando assign. Enviar por email para bafvufrn@gmail.com Sejam eficientes mas no esqueam dos detalhes.
33

Curso Brazil-IP Design Digital com Verilog

Verilog Introduo ao Quartus II

.* na instanciao (system verilog).

34