入出力ポート
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 31/90。
Input および output ポートは、module が外部の世界と通信できるようにする接続です。これらはチップ上のピンのようなものです。ポートは、module と設計の残りの部分との間のインターフェースです。
すべての module には以下が存在します:
- 入力ポート —
moduleの内側へ入ってくる信号 - 出力ポート —
moduleの外へ出ていく信号
Input Ports
入力ポート(Input ports)は外部からデータを受け取ります。モジュール内部で変更することはできず、読み込み(read)のみ可能です。
input clk; // 単一ビット入力
input [7:0] data; // 8ビット入力ベクトル
input a, b; // 1行に複数の入力入力のルール:
- モジュール内で値を代入することはできません
regとして宣言することはできません- 常に
wireになります (デフォルト)
Output Ports
Output portsは外部にデータを送信します。これらは assign または always ブロックによって駆動できます。
output out; // シングルビット出力
output [3:0] result; // 4ビット出力
output reg busy; // 出力は reg にできる
output wire ready; // 出力は wire にできるOutput のルール:
wire(assignを使用) またはreg(alwaysを使用) にできますmodule内部の何かによってドライブされる必要があります
Port Declaration Syntax
Port declaration syntax(ポート宣言の構文)は、モジュール内で入力および出力ポートを記述する特定の記述方法です。 Verilogに対して各ポートに関する3つの情報を伝えます:
- 方向 —
input、output、それとも inout ですか? - サイズ — 何
bit幅ですか? - 名前 — 何と
called(命名)されていますか?
module example (
input [7:0] data_in, // 入力ベクトル
input clk, // 単一入力
input enable, // 単一入力
output reg [7:0] out, // 出力 reg
output busy // 出力 wire
);ポートの方向(Port Direction)が重要な理由
方向はVerilogに以下を伝えます:
- モジュールが読み取ることができるシグナル(入力)
- モジュールが書き込むことができるシグナル(出力)
- 許可される接続のタイプ
間違った方向を使用すると、コンパイルエラーが発生します。
コード例
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チャレンジ
ポート宣言を完成させる
作業内容:
data_inという名前の 8-bit のinputを追加するclkという名前のsingle-bitのinputを追加するresultという名前の 4-bit のoutputを追加する (regを使用 —alwaysブロック内で代入されます)validという名前のsingle-bitのoutputを追加する (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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。