Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Entendendo Portas Verilog: Entradas, Saídas e Comunicação de Módulos

Portas são um conjunto de sinais que atuam como entradas e saídas para um módulo particular e são a maneira primária de se comunicar com ele. Pense em um módulo como um chip fabricado colocado em uma PCB e fica óbvio que a única maneira de se comunicar com o chip é através de seus pinos. Portas são como pinos e são usadas pelo projeto para enviar e receber sinais do mundo exterior.

Tipos de Portas

PortaDescrição
InputO módulo de projeto pode apenas receber valores de fora usando suas portas input
OutputO módulo de projeto pode apenas enviar valores para fora usando suas portas output
InoutO módulo de projeto pode tanto enviar quanto receber valores usando suas portas inout
Portas são por padrão consideradas como nets do tipo wire.

Sintaxe

Portas declaradas como inout podem atuar como entrada e saída.

input [net_type] [range] list_of_names; // Input port
inout [net_type] [range] list_of_names; // Input & Output port
output [net_type] [range] list_of_names; // Output port driven by a wire
output [var_type] [range] list_of_names; // Output port driven by a variable

Exemplo

No código mostrado abaixo, existem três portas input, uma porta output e uma porta inout.

module my_design (
    input wire clk, input en, input rw,
    inout [15:0] data, output int
);
// Design behavior as Verilog code
endmodule

É ilegal usar o mesmo nome para múltiplas portas.

input aport; // First declaration - valid
input aport; // Error - already declared
output aport; // Error - already declared

Portas Signed

O atributo signed pode ser anexado a uma declaração de porta ou uma declaração net/reg ou ambas. Nets implícitas são por padrão unsigned.

module (input a, b, output c); // ports a, b, and c are by default unsigned
endmodule

Se a declaração net/reg tem um atributo signed, então a outra também será considerada signed.

module (input signed a, b, output c);
wire a, b; // a, b are signed from port declaration
reg signed c; // c is signed from reg declaration
endmodule

Variações de Portas

Verilog 1995

Verilog passou por algumas revisões e a versão original IEEE em 1995 tinha a seguinte forma para declaração de porta. Aqui, a declaração do módulo tinha que primeiro listar os nomes das portas dentro dos parênteses e depois a direção daquelas portas definida depois dentro do corpo do módulo.

module test (a, b, c);
input [7:0] a; // inputs "a" and "b" are wires
input [7:0] b;
output [7:0] c; // output "c" by default is a wire
// Still, you can declare them again as wires to avoid confusion
wire [7:0] a; wire [7:0] b; wire [7:0] c;
endmodule

Verilog 2001 em diante

Estilo de nomeação de portas ANSI-C foi introduzido em 2001 e permitiu que o tipo fosse especificado dentro da lista de portas.

module test (
    input [7:0] a, b, // "b" is considered an 8-bit input
    output [7:0] c
);
// Design content
endmodule

module test (
    input wire [7:0] a, input wire [7:0] b, output reg [7:0] c
);
// Design content
endmodule

Se uma declaração de porta inclui um tipo net ou variável, então aquela porta é considerada completamente declarada. É ilegal redeclarar a mesma porta em uma declaração de tipo net ou variável.

Verilog

  1. Domine o Verilog: Tutorial Completo para Projeto de Circuitos Digitais
  2. Dominando Concatenação Verilog: Guia Prático
  3. Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
  4. Verilog Blocking vs Non-Blocking: Diferenças Essenciais Explicadas
  5. Dominando Funções em Verilog para Design RTL Eficiente
  6. Entendendo Tasks em Verilog: Funções vs Tasks, Sintaxe e Uso
  7. Gerador de Clock Verilog: Guia de Design e Implementação
  8. Dominando Funções Matemáticas do Verilog para Design de Hardware Eficiente
  9. Dominando $timeformat do Verilog: Precisão e Controle de Exibição
  10. Entendendo e Imprimindo Timescales do Verilog em Qualquer Escopo