VERILOG HDL (HARDWARE DESCRIPTION LANGUAGE) Verilog é uma linguagem de descrição de hardware usada para modelar sistemas eletrônicos. Suporta o design, verificação e implementação de projetos digitais e circuitos híbridos em vários níveis de abstração. VERILOG Aspectos básicos da linguagem A unidade básica – o modulo (module) Modulo (module) • Descreve a funcionalidade do circuito • Define terminais (pinos, portas) de entrada e saída VERILOG Aspectos básicos da linguagem Definição geral module module_name ( port_list ); declaração das portas; … declaração de variáveis; … descrição do comportamento do módulo endmodule VERILOG Aspectos básicos da linguagem Definição geral module module_name (declaração das portas ); … declaração de variáveis; … descrição do comportamento do módulo endmodule Exemplo 1 module meu_and (output reg C, Construção procedural input A, B); always @ (A, B) begin C = A & B; // & operador AND end endmodule VERILOG Aspectos básicos da linguagem Definição geral module module_name (declaração das portas ); … declaração de variáveis; … descrição do comportamento do módulo endmodule Exemplo 1 module meu_and (output reg C, Construção procedural input A, B); always @ (A, B) begin C = A & B; // & operador AND end endmodule VERILOG Aspectos básicos da linguagem Exemplo 2 module meu_and_or_not_nand_nor_xor_xnor (output reg C, D, E, F, G, H, I, input A, B); always @ (A, B) begin C = A & B; // & operador AND D = ! A; // ! operador NOT E = ~(A&B); // NAND F = A | B; // | operador OR G = ~(A | B); // NOR H = A ^ B; // ^ operador XOR I = ~(A ^ B); // XNOR end endmodule VERILOG Aspectos básicos da linguagem Exemplo 2 module meu_and_or_not_nand_nor_xor_xnor (output reg C, D, E, F, G, H, I, input A, B); always @ (A, B) begin C = A & B; // & operador AND D = ! A; // ! operador NOT E = ~(A&B); // NAND F = A | B; // | operador OR G = ~(A | B); // NOR H = A ^ B; // ^ operador XOR I = ~(A ^ B); // XNOR end endmodule VERILOG Aspectos básicos da linguagem Exemplo 2 module meu_and_or_not_nand_nor_xor_xnor (output reg C, D, E, F, G, H, I, Substitui a lista de input A, B); sensibilidade always @ (*) begin C = A & B; // & operador AND D = ! A; // ! operador NOT E = ~(A&B); // NAND F = A | B; // | operador OR G = ~(A | B); // NOR H = A ^ B; // ^ operador XOR I = ~(A ^ B); // XNOR end endmodule Projetar um circuito somador de dois números de 4 bits Somador A[4..1] S[4..1] B[4..1] Cout Somador Completo Exemplo: Tabela Verdade do Somador Completo A B Cin S Cout 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 S = A xor B xor Cin; // Soma Cout = (A.B) or (A .Cin) or (B.Cin); // Cout Somador Completo – Circuito Final Descrição do somador completo em VERILOG module soma1 (output reg S, Cout, input A, B, Cin); always @ (*) begin S = A ^ B ^ Cin; // Soma Cout = (A & B) | (A & Cin) | (B & Cin); // Cout end endmodule Descrição do somador completo em VERILOG module soma1 (output reg S, Cout, input A, B, Cin); always @ (*) begin S = A ^ B ^ Cin; // Soma Cout = (A & B) | (A & Cin) | (B & Cin); // Cout end endmodule Somador Completo – Resultado da Simulação Somador 4 bits - Esquemático Descrição do somador 4 bits em VERILOG module somador_4bits (output reg [4:0] S, input [3:0] A,B ); always @ (*) begin S = A + B ; // Soma end endmodule Simulação do Somador de 4 bits Somador 4 bits – Símbolo Descrição Verilog Somador 4 bits – Símbolo module somador_3bits (output reg [2:0] S, input [2:0] A,B ); always @ (*) begin S = A + B ; // Soma end endmodule