29
Verilog AULA - 3

Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Embed Size (px)

Citation preview

Page 1: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Verilog

AULA - 3

Page 2: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Introdução

Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente.

Histórico:

Inicialmente, Verilog era uma linguagem proprietária desenvolvida pela empresa Gateway.

Verilog foi desenvolvida nos anos 1980 e foi inicialmente usada para modelar dispositivos ASIC. Em 1990, Verilog caiu no dominio público e agora está sendo padronizado como IEEE 1364.

Page 3: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

CaracterísticasExemplo de programa:

module add (a, b, out); // cabeçalho

input [7:0] a, b; // entradas

output [7:0] out; // saidas

assign out = a + b; // operação

endmodule +

8

8

8

a

b out

Page 4: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Modulo (conveniente que um arquivo contenha um módulo)

module nome_do_modulo ( , , ...., );

lista de terminais

declaração { terminais,

registradores,

wires

construção da lógica { assign,

function

allways

endmodule

Terminais são pinos de entrada e saída do FPGA

registradores e wires são drivers que guardam valores e ligam pontos do circuito, respectiva/.

Page 5: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Declaração dos terminais

• Usar uma linha de declaração para terminais com mesmo número de bits:

input a,b;

output [7:0] c,e;

output [3:0] d; d[3], d[2], d[1], d[0]

[7:0] bits na configuração little endian (menos sign. a direita)[0:7] big endian

Page 6: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exercicio: fazer a declaração dos terminais da caixa preta

usuario

3

3

altera

dmwin

cm

simbolo

Page 7: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Declaração de registradores e wires (fiações ou nós)

• Reg• Wire

reg a; //registrador a

reg [3:0] b,c ; // registradores de 4 bits b,c

wire d; // sinal da fiacao, d

wire [7:0] e; // sinal de 8 bits da fiacao, e

Registradores são drivers que guardam valores

Wires são drivers que apenas conectam dois pontos (equivale ao signal do VHDL)

Page 8: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Parte Lógica

Comandos: assign, assign + function, always

elementos combinatórios podem ser modelados usando comandos assign e always

elementos sequenciais so podem ser modelados com comandos always

Page 9: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

assign assign add_out = a + b; // soma assign or_out = a|b|c; // or de 3 entradas

operacoes logicas: and & or | xor ^ not ~ nand ~& nor ~| right shift >> left shift << concatenacao { } condicional ?

operacoes aritmeticas: adicao + subtracao - multiplicacao * divisao / modulo %

assign é usada para modelar somente lógica combinatória.

Page 10: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exemplo: alta impedância

assign out = (enable) ? data:1’bz;

Exemplo de um buffer tri-state.

Quando enable e 1, data é conduzida

para a saida, senão ocorre alta

impedância.

Page 11: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Operacoes de comparação

Igual == a == b Desigual != a != bMenor < a < bMenor/igual <= a <= bMaior > a > bMaior/igual >= a >= b

Exemplos:

reg [3:0] a,b; wire comp; // quando a igual a b comp = 1 assign comp = (a == b);

Page 12: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

redução

Resumir uma quantidade de bits em uma única operação

Exemplo:

assign and4 = &a;

Equivale a: assign and4 = a[3]&a[2]&a[1]&a[0];

Possível também para: & (and), |(or), ^ (xor)

a0

a1

a2

a3

and4

Page 13: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

concatenaçãoTransforma duas variáveis em uma única variável:

assign c = {a, b};

c

assign { a, b} = c

assign {cout, out} = a + b;

a b

Page 14: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

function

• Usado quando um mesmo código e repetido várias vezes.

• Exemplo: function parity; input [31:0] data; integer i; begin parity = 0; for (i = 0; i < 32; i = i + 1) begin parity = parity^data[i]; end end

Page 15: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Assign + function

assign out = sel2to1(a,b,sel); function [3:0] sel2to1; input [3:0] a,b; input sel; if (sel) sel2to1 = a; else sel2to1 = b; endfunction

function

a

sel

bsel2to1

case (sel) 1: sel2to1 = a; 0: sel2to1 = b; endcase

Page 16: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Comando if

Possível usar internamente a function e always:

if ( , ) begin

;

;

end

else if ( , )

;

else

;

Quando tiver mais de um comando, cercar com begin … end.

// exemplo de comando if if (enable ==1’b1) begin data = 10; // atribuição decimal address = 16’Hdead; // hexadecimal wr_enable = 1’b1; // binário end else begin data = 32’b0; wr_enable = 1’b0; address = address + 1;end

Page 17: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Comando case

Possível usar internamente a function e always:

case ( )

A: --- ;

B: --- ;

.

.

.

default: --- ;

endcase

Page 18: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Representação de valores

8’hff // representa ff em 8 bits

8’b1111_1111

8’d15

Número de bits sistema: d decimal

h hexadecimal

b binário

Pode usar para facilitar a leitura

Page 19: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Comando always

• O comando always do Verilog é equivalente ao process do VHDL

• Todos os comandos always são executados em paralelo, enquanto, internamente a um comando always, os comandos são executados em sequência.

always @ (a or b or sel) begin y = 0; if (sel ==0) begin y = a; end else begin y = b; end end

lista de sensibilidade – diz quando o bloco de código é executado.

Page 20: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

always

always @ (posedge clk) begin

dff_c <= dff_n;

endLista

Lista de sensibilidade posedge – borda de subida negedge – borda de descida

D Q

>

dff_n dff_c

clk

usamos a atribuição = no caso da lógica combinatória, e para lógica sequencial usamos <=. = representa blocking assignment executa o código sequencialmente dentro de um begin/end.

<= representa nonblocking assignment executa o código em paralelo dentro de um begin/end.

Page 21: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

always always @ (posedge clk or negedge rst) begin

if (rst ==1’b0)

q <= 1’b0;

else

q <= d;

end

always @(posedge clk) begin

if (rst ==1’b0)

q <= 1’b0;

else

q <= d;

end

D Q

>clk

d q

rst

D Q

>clk

dq

rst

Page 22: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exemplo de contador module count4(clk, rst, q);

input clk, rst;

output [3:0] q;

reg [3:0] count;

always @(posedge clk or negedge rst) begin

if (rst == 1’b0)

count <= 4’b0000;

else if (count == 4’b1110)

count <= 4’b0000;

else

count <= count + 1;

end

assign q = count;

endmodule

contador

>clkq

rst 4

Page 23: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exercício

• Desenvolver um programa em Verilog para o circuito meio-somador.

A

B

SOMA

VAI-UM

Page 24: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exercício

• Implementar um circuito decodificador definido pela Tabela:

A Decode

00 0001

01 0010

10 0100

11 1000

Page 25: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exercício

• Escrever um programa Verilog para o circuito multiplexador

A(0)

SEL

C

A(1)

A(2)

A(3)

2

Page 26: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exercício

• Escrever um programa para o circuito da Figura ao lado, cujo funcionamento dos flip-flops é descrito pela Tabela abaixo.

D Q

CLK

D Q

D Q

D Q

SET

D(0)

D(1)

D(2)

D(3)

Q(0)

Q(1)

Q(2)

Q(3)

SET CLK D Q

L X XH ! L H ! H

HLH

Page 27: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exemplo 1 de programa Verilog completo

(Circuito lógico combinatório: EOUT = (AIN xor BIN xor CIN). DIN’ )

module combinatorio (ain, bin, cin, din, eout);

input ain, bin, cin, din ;

output eout;

assign eout = (ain ^ bin ^ cin)&~din;

endmodule

AIN

BIN

CIN

DIN

abc Eout_N EOUT

Page 28: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exemplo 2 de programa completo(cIRCUITO SEQUENCIAL: contador binário crescente de 4 bits.)

Module contador ( indata,load, clk, cnt); input [3:0] indata; input load, clk; output [3:0] cnt; reg [3:0] conta; always@(posedge clk) begin if (load ==1’b1) conta <= indata; else conta <= conta + 1; end assign cnt = conta;endmodule

INDATA

LOAD

CLK

CNT

+1D

4

4

4

0

1

Cnt_F

Page 29: Verilog AULA - 3. Introdução Verilog é uma linguagem, como VHDL, largamente usada para descrever sistemas digitais, utilizada universalmente. Histórico:

Exemplo 3 de programa completo(cIRCUITO SEQUENCIAL: registrador de deslocamento simples)

module registrador (rst, clk, shifin, shifout); input clk, rst, shifin; output shifout; reg [0:3] registra;

always@(posedge clk or negedge rst) begin if (rst == 1’b0) registra <= 4’b0000; else begin registra[0] <= shifin; registra[1] <= registra [0]; registra[2] <= registra [1]; registra[3] <= registra [2]; end assign shifout = registra[3]; endmodule

D D D DSHIFIN

CLK

RST

SHIFOUT

Sfbit_F(1) Sfbit_F(2) Sfbit_F(3) Sfbit_F(4)