工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilogポートを理解する:入力、出力、モジュール間通信

ポートは、特定のモジュールへの入力および出力として機能する一連の信号であり、モジュールと通信する主要な手段です。モジュールをPCB上に実装された製造済みチップと見なせば、チップと通信する唯一の手段がそのピンであることは明らかです。ポートはピンのようなもので、設計が外部と信号を送受信するために使われます。

ポートの種類

ポート説明
Input設計モジュールは input ポートを通じてのみ外部から値を受信可能
Output設計モジュールは output ポートを通じてのみ外部へ値を送信可能
Inout設計モジュールは inout ポートで値を送受信両方可能
ポートはデフォルトで wire タイプのネットと見なされます。

構文

inout 宣言されたポートは入力と出力の両方として機能します。

input [net_type] [range] list_of_names;   // 入力ポート
inout [net_type] [range] list_of_names;   // 入出力ポート
output [net_type] [range] list_of_names;  // ワイヤで駆動される出力ポート
output [var_type] [range] list_of_names;  // 変数で駆動される出力ポート

例

以下のコードでは、3つの input ポート、1つの output ポート、1つの inout ポートがあります。

module my_design (
    input wire clk,
    input en,
    input rw,
    inout [15:0] data,
    output int
);
// 設計振る舞いをVerilogコードで記述
endmodule

複数のポートに同じ 名前 を使うことは違法です。

input aport;   // 最初の宣言 - 合法
input aport;   // Error - 既に宣言済み
output aport;  // Error - 既に宣言済み

符号付きポート

signed 属性はポート宣言、またはネット/reg宣言、または両方に付加できます。暗黙的なネットはデフォルトで 符号なし です。

module (input a, b, output c);  // a, b, cはデフォルトで符号なし
endmodule

ネット/reg宣言のいずれかに signed 属性があれば、もう一方も符号付きと見なされます。

module (input signed a, b, output c);
wire a, b;      // ポート宣言からa, bは符号付き
reg signed c;   // reg宣言からcは符号付き
endmodule

ポート宣言のバリエーション

Verilog 1995

オリジナルのIEEE 1995版では、ポート宣言を以下のように行いました。モジュール宣言でまずポート名を括弧内にリストし、その方向をモジュール本体内で後から定義します。

module test (a, b, c);
input [7:0] a;  // 入力"a"と"b"はワイヤ
input [7:0] b;
output [7:0] c; // 出力"c"はデフォルトでワイヤ
// それでもワイヤとして再宣言可能(混乱防止)
wire [7:0] a;
wire [7:0] b;
wire [7:0] c;
endmodule

module test (a, b, c);
input [7:0] a, b;
output [7:0] c;  // デフォルトでcはワイヤタイプ
// ポート"c"をregタイプに変更
reg [7:0] c;
endmodule

Verilog 2001以降

2001年にANSI-Cスタイルのポート命名が導入され、ポートリスト内で型を指定できるようになりました。

module test (
    input [7:0] a, b,  // "b"は8ビット入力と見なされる
    output [7:0] c
);
// 設計内容
endmodule

module test (
    input wire [7:0] a,
    input wire [7:0] b,
    output reg [7:0] c
);
// 設計内容
endmodule

ポート宣言にネットまたは変数型が含まれる場合、そのポートは完全に宣言されたと見なされます。同じポートをネットまたは変数型宣言で再宣言することは違法です。

module test (
    input [7:0] a,        // a, eは暗黙的にワイヤタイプで宣言完了
    output reg [7:0] e
);
wire signed [7:0] a;  // 違法 - aの宣言は完了済み → シミュレータ依存
wire [7:0] e;         // 違法 - eの宣言は完了済み
// 設計コードの残り
endmodule

ポート宣言にネットまたは変数型が含まれない場合、そのポートをネットまたは変数型宣言で再宣言できます。

module test (
    input [7:0] a,
    output [7:0] e
);
reg [7:0] e;  // OK - net_typeが以前に宣言されていない
// 設計コードの残り
endmodule

Verilog

  1. Verilogマスター:デジタル回路設計のための完全チュートリアル
  2. Verilog連結マスター:実践ガイド
  3. Verilog代入文の理解:種類、構文、ベストプラクティス
  4. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  5. Verilog関数のマスター:効率的なRTL設計のために
  6. Verilogタスクの理解:関数との違い、構文、使用法
  7. Verilogクロックジェネレータ:設計と実装ガイド
  8. Verilog数学関数のマスター:効率的なハードウェア設計のために
  9. Verilog $timeformatのマスター:精度と表示制御
  10. 任意のスコープでのVerilog timescale理解と表示
  11. VerilogファイルI/Oの完全ガイド:オープン、読み取り、書き込み、クローズ