Menu
Coddy logo textTech

Input And Output Ports

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 31/90。

Input ポートと output ポートは、モジュールが外部と通信できるようにする接続です。チップ上のピンのようなものです。ポートは、モジュールと設計の他の部分とのインターフェースです。

すべてのmoduleには次があります:

  • Input ports:moduleに入ってくる信号
  • Output ports:moduleから出ていく信号

Input ポート

Input ポートは外部から data を受け取ります。module 内では変更できません。only read です。

input clk;        // 単一ビット入力
input [7:0] data; // 8ビット入力ベクトル
input a, b;       // 1行に複数の入力

inputs のルール:

  • module 内で値を割り当てることはできない
  • reg として宣言することはできない
  • 常にデフォルトで wire

出力ポート

出力ポートは外部にデータを送信します。assignまたはalwaysブロックによって駆動できます。

output out;           // シングルビット出力
output [3:0] result;  // 4ビット出力
output reg busy;      // 出力は reg にできる
output wire ready;    // 出力は wire にできる

出力のルール:

  • wireassignを使用)またはregalwaysを使用)にできます
  • モジュール内の何らかの要素によって駆動される必要があります

ポート宣言の構文

ポート宣言の構文とは、モジュール内で入力ポートと出力ポートを記述する具体的な方法です。各ポートについて、Verilog に3つのことを伝えます。

  1. 方向:input、output、それともinoutですか?
  2. サイズ:何ビット幅ですか?
  3. 名前:何と呼ばれていますか?
module example (
  input [7:0] data_in,    // 入力ベクトル
  input clk,              // 単一入力
  input enable,           // 単一入力
  output reg [7:0] out,   // 出力 reg
  output busy             // 出力 wire
);

ポート方向が重要な理由

方向は Verilog に次のことを伝えます:

  • モジュールが can read できる信号(inputs)
  • モジュールが can write できる信号(outputs)
  • 許可される接続の種類

間違った方向を使用すると、コンパイルエラーが発生します。

コード例

module port_demo (
  input [3:0] a,        // 読み取りのみ可能
  input [3:0] b,        // 読み取りのみ可能
  output reg [3:0] sum, // 書き込み可能 (reg)
  output [3:0] diff     // 書き込み可能 (wire)
);
  always @(*) begin
    sum = a + b;        // 出力 reg への書き込み
  end
  
  assign diff = a - b;   // 出力 wire への書き込み
endmodule
challenge icon

チャレンジ

ポート宣言を完成させる

実行すること:

  1. 8ビットの input called data_in を Add
  2. 1ビットの input called clk を Add
  3. 4ビットの output called result を Add(reg を使用: always ブロック内で割り当てられます)
  4. 1ビットの output called valid を Add(wire を使用: assign で割り当てられます)

自分で試してみよう

module port_challenge (
  // タスク1: data_in という8ビット入力を追加する
  
  
  // タスク2: clk という1ビット入力を追加する
  
  
  // タスク3: result という4ビット出力を追加する(reg を使用)
  
  
  // タスク4: valid という1ビット出力を追加する(wire を使用)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ