1 / 42

Hardware Description Language (HDL)

Hardware Description Language (HDL). Para que precisamos de uma Linguagem de Descrição de Hardware ? Modelar, Representar e simular hardware digital Concorrência Paralelismo Valores de sinais no tempo Construções especiais Transições (bordas) de valores de sinais

cleta
Download Presentation

Hardware Description Language (HDL)

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. Hardware Description Language (HDL) • Para que precisamos de uma Linguagem de Descrição de Hardware ? • Modelar, Representar e simular hardware digital • Concorrência • Paralelismo • Valores de sinais no tempo • Construções especiais • Transições (bordas) de valores de sinais • Atrasos de propagação de sinais • Verificação de condições temporais

  2. Hardware Description Language (HDL) • A linguagem Verilog foi introduzida em 1985 pela Gateway Design Automation. • A Gateway foi comprada pela empresa Cadence Design Systems, em 1989, que tornou a linguagem de domínio público em maio de 1990 com a formação da Open Verilog International (OVI). • Hoje o Verilog é um padrão IEEE, já tendo duas extensões ou modificações: Verilog-95 (padrão IEEE 1364-1995), Verilog 2001 (IEEE 1364-2001) e Verilog 2005 (IEEE 1364-2005). • O Verilog tem uma grande semelhança com a linguagem de programação C.

  3. VERILOG HDL • unidade básica – o módulo • Módulo (module) • Define terminais (pinos, portas) de entrada e saída • Descreve a funcionalidade do circuito

  4. VERILOG HDL • Módulo – Definição Geral • module <nome do módulo> • (declaração das portas); • … • declaração de variáveis; • … • descrição do comportamento • endmodule

  5. VERILOG HDL Exemplo: module meu_and (output reg C, input A, B); always @ (A, B) begin C = A & B; // & operador AND end endmodule • Módulo – Definição Geral • module <nome do módulo> • ( declaração das portas ); • … • declaração de variáveis; • … • descrição do comportamento • endmodule

  6. VERILOG HDL • Identificadores • A ... Z • a ... z • 0 ... 9 • Underscore • O primeiro caractere do identificador não pode ser um dígito • Verilog diferencia letras maiúsculas de minúsculas

  7. VERILOG HDL • Comentários em Verilog • // 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úmeros • decimal, hexadecimal, octal, binario • Decimal sem sinal • Decimal com sinal • Cadeias de caracteres • "Delimite usando aspas numa mesma linha" • limitados a 1024 caracteres

  8. VERILOG HDL • Modelos de Descrição • Estrutural: descreve um circuito lógico através da interligação dos componentes que os compõe. • Fluxo de dados: descreve um circuito através das funções booleanas que os compõe. • Comportamental: descreve o circuito através do comportamento do mesmo, na forma de um algoritmo. • RTL (Register Transfer Level): descreve o circuito através do que acontece a cada transição ativa do sinal de relogio

  9. VERILOG HDL • Modelo estrutural • Execução: Concorrente • Formato: portas lógicas primitivas • Exemplo:

  10. f1 f2 f3 A B Cin VERILOG HDL Exemplo somador completo: module somador_completo_estrutural (output Cout, S, input A, B, Cin); and g1(f1, A, Cin), // saída sempre o primeiro parâmetro da instância (f1)) g2(f2, A, B), g3(f3, B, Cin); or g4(Cout, f1, f2, f3); xor g5(S, A, B, Cin); endmodule

  11. VERILOG HDL • Modelo fluxo de dados • Execução: Concorrente. • Formato: assignnet = expressão; • A ordem das atribuições dentro do arquivo Verilog não tem efeito sobre a • execução. • Exemplo:

  12. VERILOG HDL Exemplo somador completo (fluxo de dados): module soma_fluxo_de_dados (output S, Cout, input A, B, Cin); assign S = A ^ B ^ Cin; // Soma assign Cout = (A & B) | (A & Cin) | (B & Cin); // Cout endmodule

  13. VERILOG HDL • Modelo comportamental: • Uso de instruções alto nível da linguagem(if, case, while, for) • Uso do comando always • Comandos dentro do procedimento always são executados sequencialmente • O comando always é executadoquando há uma mudança no valor lógico de um sinal da lista de sensibilidade • Formato do comando always: • always @ (a, b, c...) • begin • <comandos> • end • Os comandos always são concorrentes lista de sensibilidade (todas as entradas do circuito)

  14. a Multiplexador 2X1 out b sel VERILOG HDL Exemplo: Modelo Comportamental do Multiplexador Tabela Verdade do Multiplexador Algoritmo dp Comportamento do MUX Se sel = 0 então out = a Senão out = b

  15. VERILOG HDL Exemplo: Modelo Comportamental do Multiplexador Tabela Verdade do Multiplexador Descrição Verilog: Símbolo do Mux: module comportamental_mux (outputreg out, input a, b, sel); always @(a,b, sel) begin if (sel == 0) out = a; else out = b; end endmodule

  16. a Multiplexador 2X1 out b sel VERILOG HDL Exemplo: Modelo Comportamental do Multiplexador Tabela Verdade do Multiplexador Equação booleana do Mux (2x1): out = (~ sel & a) | (sel & b)

  17. VERILOG HDL Exemplo: Modelo Comportamental do Multiplexador Tabela Verdade do Multiplexador Síntese Descrição Verilog: module comportamental2_mux (output reg out, input a, b, sel); always @(*) begin out = (~ sel & a) | (sel & b); end endmodule Substitui a lista de sensibilidade

  18. VERILOG HDL Exemplo: Tabela Verdade do Somador Completo

  19. VERILOG HDL • Instruções Condicionais (Instrução IF) • Formato: • if (condição) // obs: usar BEGIN e END quando existir mais de um comando • comando; • else if (condição) • comando; • else • comando; • Exemplo: • if (reset) • Q = 0; • else • Q = D;

  20. VERILOG HDL • Instruções Condicionais (Instrução CASE) • Formato: • case (sinal) // obs: usar BEGIN e END quando existir mais de um comando • <número de bits>’<sistema de numeração><alvo1>: comando; • ... • <número de bits>’<sistema de numeração><valor2>: comando; • end case • <sistema de numeração>  d – decimal; h – hexadecimal, b - binário • <alvo1>, <alvo2>...  será executado o comando cujo alvo for igual ao sinal

  21. VERILOG HDL Instruções Condicionais (Instrução CASE) Exemplo: module exemplo_case (output reg[1:0] Y, input [1:0] A, B, X); always @ (*) begin case (X) 2'b00: Y = A+B; 2'b01: Y = A-B; 2'b10: Y = A/B; default: Y = 00; endcase end endmodule

  22. VERILOG HDL Instruções Condicionais (Instrução CASE) Exemplo: module exemplo_case (output reg[1:0] Y, input [1:0] A, B, X); always @ (*) begin case (X) 2'b00: Y = A+B; 2'b01: Y = A-B; 2'b10: Y = A/B; default: Y = 00; endcase end endmodule • Formato: • case (sinal) • <número de bits>’<sistema de numeração><alvo1>: comando; • ... • <número de bits>’<sistema de numeração><valor2>: comando; • end case • <sistema de numeração>  d – decimal; h – hexadecimal, b - binário • <alvo1>, <alvo2>...  será executado o comando cujo alvo for igual ao sinal

  23. VERILOG HDL Instruções Condicionais (Instrução CASE) Exemplo: module exemplo_case (outputreg[1:0] Y, input [1:0] A, B, X); always @ (*) begin case (X) 2'b00: Y = A+B; 2'b01: Y = A-B; 2'b10: Y = A/B; default: Y = 00; endcase end endmodule

  24. VERILOG HDL • Tipos de Dados: • Net (wire) – usado para modelar uma conexão elétrica • wire [msb:lsb] msb: most significant bit; lsb: least significant bit • Exemplo: • wire Reset; // 1-bit wire • wire [6:0] Clear; // 7-bit wire

  25. f1 f2 f3 A B Cin VERILOG HDL Exempo de NET do tipo wire: module somador_completo_estrutural (output Cout, S, input A, B, Cin); wire f1, f2, f3; and g1(f1, A, Cin), g2(f2, A, B), g3(f3, B, Cin); or g4(Cout, f1, f2, f3); xor g5(S, A, B, Cin); endmodule wire wire

  26. VERILOG HDL • Tipos de Dados: • Register (reg) tipo de dado que armazena o valor de um sinal, até o mesmo ser • alterado (não representa um registrador de fato). • reg [msb:lsb] msb: most significant bit; lsb: least significant bit • Exemplo: • reg [ 3: 0 ] cla; // 4-bit register • reg cla; // A 1-bit register

  27. VERILOG HDL Exempo de Register do tipo reg: module comportamental2_mux (output reg out, input a, b, sel); always @(*) begin out = (~ sel & a) | (sel & b); end endmodule

  28. VERILOG HDL • Uso dos tipos de dados: • Nos modelos de descrição Estrutural e Fluxo de dados são usados o tipo wire,não se usa o tipo reg • Nos modelos de descrição Comportamental e RTL são usados o tipo reg, não se usa o tipo wire

  29. VERILOG HDL • Mais exemplos: • Fazer o modelo Verilog Fluxo de Dados de um circuito comparador com as características: • O circuito possui duas entradas de 8 bits (a, b) • O circuito possui três saídas de 1bit, denominadas (maior, menor e igual) • O circuito possui a seguinte função: se a >b; maior = 1; • se a< b ; menor = 1; • se a = b; igual = 1

  30. VERILOG HDL Descrição Verilog Simulação module comparador (output igual,maior,menor, input [7:0] a, b); assign igual = (a==b); assign maior = (a>b); assign menor = (a<b); endmodule

  31. VERILOG HDL • Mais exemplos: • 2) Fazer o modelo Verilog Comportamental de um circuito comparador com as características: • O circuito possui duas entradas de 8 bits (a, b) • O circuito possui três saídas de 1bit, denominadas (maior, menor e igual) • O circuito possui a seguinte função: se a >b; maior = 1; • se a< b ; menor = 1; • se a = b; igual = 1

  32. VERILOG HDL Descrição Verilog Simulação module comparador_comportamental (output reg igual,maior,menor, input [7:0] a, b); always @(*) begin if (a==b) begin igual=1; maior=0; menor=0; end else if (a>b) begin menor=0; maior=1; igual=0; end else begin menor=1; maior=0; igual=0; end end endmodule

  33. VERILOG HDL Descrição Verilog Descrição RTL module comparador_comportamental (output reg igual,maior,menor, input [7:0] a, b); always @(*) begin maior=0; menor = 0; igual = 0; if (a==b) begin igual=1; end else if (a>b) begin maior=1;; end else begin menor=1; end end endmodule

  34. VERILOG HDL Descrição Verilog Descrição RTL module comparador (output igual,maior,menor, input [7:0] a, b); assign igual = (a==b); assign maior = (a>b); assign menor = (a<b); endmodule

  35. VERILOG HDL • Operadores Lógicos: • and & • or  | • xor  ^ • not  ~ • nand  ~& • nor  ~| • right shift  >> • left shift  << • concatenacao  { } • condicional  ?

  36. VERILOG HDL Exemplo Concatenação: Tabela Verdade do Somador Completo Concatena as entradas: {A, B, Cin }

  37. VERILOG HDL module exemplo_concatena (output reg S, Cout, input A, B, Cin); always@ (*) begin // procedimento resolve a soma case({A, B, Cin}) // concatena A, B, Cin, numa única variável 3'b001: S = 1; 3'b010: S = 1; 3'b100: S = 1; 3'b111: S = 1; default: S = 0; endcase end always @ (*) begin // procedimento resolve o Cary (Cout) case ({A, B, Cin}) // concatena A, B, Cin, numa única variável 3'b011: Cout = 1; 3'b101: Cout = 1; 3'b110: Cout = 1; 3'b111: Cout = 1; default: Cout = 0; endcase end endmodule Exemplo Concatenação: Tabela Verdade do Somador Completo Concatena as entradas: {A, B, Cin }

  38. VERILOG HDL Simulação

  39. VERILOG HDL Síntese module buffer_terceiro_estado (output out, input enable, dado); assign out = (enable) ? dado : 1'bz; endmodule

  40. VERILOG HDL Síntese Descrição Verilog module buffer_terceiro_estado (output out, input enable, dado); assign out = (enable) ? dado : 1'bz; endmodule Simulação terceiro estado (tri-state) terceiro estado (tri-state)

  41. VERILOG HDL • Operações Aritméticas : • adicao  + • subtracao  - • multiplicacao  * • divisao  / • modulo  %

  42. VERILOG HDL • Instruções de Laço • Repeat • While • For • O laço Repeat não éusado para síntese de circuitos • O laço While é usado para síntese de circuitos sequenciais • O laço For é usado para síntese de circuitos combinacionais

More Related