Menu
Coddy logo textTech

Input And Output Ports

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 31 de 90.

As portas de entrada e saída são as conexões que permitem que um módulo se comunique com o mundo externo. Elas são como os pinos de um chip. As portas são a interface entre um módulo e o restante do projeto.

Todo módulo tem:

  • Portas de Input: sinais que entram no módulo
  • Portas de Output: sinais que saem do módulo

Portas de entrada

As portas de entrada recebem dados de fora. Elas não podem ser alteradas dentro do módulo: apenas read.

input clk;        // Entrada de bit único
input [7:0] data; // Vetor de entrada de 8 bits
input a, b;       // Múltiplas entradas em uma linha

Regras para inputs:

  • Não podem receber um valor dentro do módulo
  • Não podem ser declarados como reg
  • Sempre wire (por padrão)

Portas de saída

As portas de saída enviam dados para o exterior. Elas podem ser acionadas por blocos assign ou always.

output out;           // Saída de bit único
output [3:0] result;  // Saída de 4 bits
output reg busy;      // A saída pode ser reg
output wire ready;    // A saída pode ser wire

Regras para outputs:

  • Pode ser wire (com assign) ou reg (com always)
  • Deve ser controlado por algo dentro do módulo

Sintaxe de declaração de portas

A sintaxe de declaração de portas é a maneira específica como você escreve as portas de entrada e saída em um módulo. Ela informa ao Verilog três coisas sobre cada porta:

  1. Direção: é input, output ou inout?
  2. Tamanho: quantos bits de largura ele tem?
  3. Nome: como ele é chamado?
module example (
  input [7:0] data_in,    // Vetor de entrada
  input clk,              // Entrada única
  input enable,           // Entrada única
  output reg [7:0] out,   // Saída reg
  output busy             // Saída wire
);

Por que a Direção das Portas é Importante

A direção informa ao Verilog:

  • Quais sinais o módulo can read (entradas)
  • Quais sinais o módulo can write (saídas)
  • Quais tipos de conexões são permitidos

Usar a direção errada causa erros de compilação.

Exemplo de código

module port_demo (
  input [3:0] a,        // Pode apenas ler
  input [3:0] b,        // Pode apenas ler
  output reg [3:0] sum, // Pode escrever (reg)
  output [3:0] diff     // Pode escrever (wire)
);
  always @(*) begin
    sum = a + b;        // Escrevendo no output reg
  end
  
  assign diff = a - b;   // Escrevendo no output wire
endmodule
challenge icon

Desafio

Concluir as declarações de portas

O que fazer:

  1. Add uma entrada de 8 bits chamada data_in
  2. Add uma entrada de bit único chamada clk
  3. Add uma saída de 4 bits chamada result (use reg: será atribuída no bloco always)
  4. Add uma saída de bit único chamada valid (use wire: será atribuída com assign)

Experimente você mesmo

module port_challenge (
  // Tarefa 1: Adicione uma entrada de 8 bits chamada data_in
  
  
  // Tarefa 2: Adicione uma entrada de um único bit chamada clk
  
  
  // Tarefa 3: Adicione uma saída de 4 bits chamada result (use reg)
  
  
  // Tarefa 4: Adicione uma saída de um único bit chamada valid (use wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online