Menu
Coddy logo textTech

入力および出力ポート

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

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

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

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

入力ポート

入力ポートは外部からデータを受け取ります。モジュール内部で変更することはできず、read のみ可能です。

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

inputs のルール:

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

出力ポート

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

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

output の規則:

  • wire(assign を使用)または reg(always を使用)にできます
  • module 内の何かによって駆動される必要があります

ポート宣言の構文

ポート宣言の構文とは、モジュール内でinput ポートと output ポートを記述する具体的な方法です。各ポートについて、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. Add 8ビットの input(data_in)
  2. Add 単一ビットの input(clk)
  3. Add 4ビットの output(result)(reg を使用: always ブロック内で代入されます)
  4. Add 単一ビットの output(valid)(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オンラインコンパイラ