A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Verilog AULA - 3.

Apresentações semelhantes


Apresentação em tema: "Verilog AULA - 3."— Transcrição da apresentação:

1 Verilog AULA - 3

2 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.

3 Características Exemplo 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

4 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/.

5 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

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

7 Declaração de registradores e wires (fiações ou nós)
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)

8 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

9 assign assign or_out = a|b|c; // or de 3 entradas
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.

10 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.

11 Operacoes de comparação
Igual  == a == b Desigual  != a != b Menor  < a < b Menor/igual  <= a <= b Maior  > a > b Maior/igual  >= a >= b Exemplos: reg [3:0] a,b; wire comp; // quando a igual a b comp = 1 assign comp = (a == b);

12 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)

13 concatenação Transforma duas variáveis em uma única variável:
assign c = {a, b}; c assign { a, b} = c assign {cout, out} = a + b;

14 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

15 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 case (sel) 1: sel2to1 = a; 0: sel2to1 = b; endcase

16 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

17 Comando case case ( ) Possível usar internamente a function e always:
B: --- ; . default: --- ; endcase

18 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

19 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. (a or b or sel) begin y = 0; if (sel ==0) begin y = a; end else begin y = b; end lista de sensibilidade – diz quando o bloco de código é executado.

20 always always @ (posedge clk) begin dff_c <= dff_n; end Lista
Lista de sensibilidade posedge – borda de subida negedge – borda de descida 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.

21 always always @ (posedge clk or negedge rst) begin if (rst ==1’b0)
q <= 1’b0; else q <= d; end clk) begin

22 Exemplo de contador module count4(clk, rst, q); input clk, rst;
output [3:0] q; reg [3:0] count; clk or negedge rst) begin if (rst == 1’b0) count <= 4’b0000; else if (count == 4’b1110) else count <= count + 1; end assign q = count; endmodule

23 Exercício Desenvolver um programa em Verilog para o circuito meio-somador.

24 Exercício Implementar um circuito decodificador definido pela Tabela:
Decode 00 0001 01 0010 10 0100 11 1000

25 Exercício Escrever um programa Verilog para o circuito multiplexador

26 Exercício SET CLK D Q L X X H ! L H ! H H L
Escrever um programa para o circuito da Figura ao lado, cujo funcionamento dos flip-flops é descrito pela Tabela abaixo. SET CLK D Q L X X H ! L H ! H H L

27 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

28 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; clk) begin if (load ==1’b1) conta <= indata; else conta <= conta + 1; end assign cnt = conta; endmodule

29 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; 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


Carregar ppt "Verilog AULA - 3."

Apresentações semelhantes


Anúncios Google