1 / 29

Verilog

Verilog. AULA - 3. 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.

lala
Download Presentation

Verilog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 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 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 Possível usar internamente a function e always: case ( ) A: --- ; 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. 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.

  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 always @(posedge clk) begin if (rst ==1’b0) q <= 1’b0; else q <= d; end

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

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

  24. Exercício • Implementar um circuito decodificador definido pela Tabela:

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

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

  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; always@(posedge 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; 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

More Related