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

Verilogプライオリティエンコーダ:4入力8ビットセレクタ実装

プライオリティエンコーダ(優先度付きエンコーダ/マルチプレクサ)

本設計は、4つの8ビット入力(a, b, c, d)から、2ビット選択信号selに基づいて1つを出力outに選択するマルチプレクサです。優先順位はselの値そのもの(00→a, 01→b, 10→c, 11→d)で固定されます。

設計

module pr_en (
  input  [7:0] a,
  input  [7:0] b,
  input  [7:0] c,
  input  [7:0] d,
  input  [1:0] sel,
  output reg [7:0] out
);
  always @(a or b or c or d or sel) begin
    if (sel == 2'b00)
      out <= a;
    else if (sel == 2'b01)
      out <= b;
    else if (sel == 2'b10)
      out <= c;
    else
      out <= d;  // sel == 2'b11
  end
endmodule

ハードウェア回路図

テストベンチ

各入力にランダム値を設定し、selを0→1→2→3と順に変化させて出力を確認します。

module tb_4to1_mux;
  reg [7:0] a, b, c, d;
  wire [7:0] out;
  reg [1:0] sel;
  integer i;

  pr_en pr_en0 (
    .a(a), .b(b), .c(c), .d(d),
    .sel(sel), .out(out)
  );

  initial begin
    sel <= 0;
    a <= $random; b <= $random; c <= $random; d <= $random;
    for (i = 1; i < 4; i = i + 1)
      #5 sel <= i;
    #5 $finish;
  end
endmodule

動作確認ポイント

改良のヒント

「プライオリティエンコーダ」の用語について

本モジュールは厳密には「4:1マルチプレクサ」です。一般に「プライオリティエンコーダ」は、複数の入力ラインのうち最も優先度の高いアサートされている入力のインデックスを出力する回路を指します(例:req[3:0]のうち最上位ビットが立っている番号をエンコード)。本記事のタイトルは慣用的に使われていますが、機能はマルチプレクサです。

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の完全ガイド:オープン、読み取り、書き込み、クローズ