このノートについて

(1)ここで学ぶ内容

概要

  • HDL設計の手順や基本用語を学ぶ
  • 設計で用いるツールの画面を見て,動作内容を理解する

目標 ─ 以下の項目を理解し説明できる

  • HDL設計の手順
  • 設計で用いるツールの動作
  • HDL設計で用いる基本用語

修了判定

HDL設計に関する説明文に対し,真偽を判定する

いよいよ学習の始まりです。まず初めにHDL設計の基本的なことを学びます。

(2)HDL設計の手順

flowchart TD A[仕様設計] --> B[RTL設計] B --> C[RTL検証] C --> D{OK?} D -- NO --> B D -- YES --> E[論理合成] E --> F[ゲートレベル検証] F --> G{OK?} G -- NO --> E G -- YES --> H[レイアウトツール / FPGAツールへ] style A fill:#4a9eff,color:#fff style B fill:#4a9eff,color:#fff style C fill:#4a9eff,color:#fff style E fill:#4a9eff,color:#fff style F fill:#4a9eff,color:#fff style H fill:#22c55e,color:#fff

RTLとは?

  • Register Transfer Level — レジスタ間の転送関係を表現したレベル
  • 慣例的には以下のことをいう:
    • 機能を,代入,ifcase などで表現したもの
    • 論理合成できる記述
    • クロックを意識した記述

ゲートレベルとは?

  • ゲート回路やフリップフロップなどの接続関係を示したもの
  • ネットリストとも言う

HDL設計ではいろいろなツールをつかって回路を構築します。したがって手順が少々複雑です。仕様設計に続いてRTL設計を行います。これはHDLで回路を記述することです。記述が終わればシミュレーターをつかってRTL検証を行います。これはHDLのまま動作を確認することです。動作が仕様どおりになっていなければ記述を見直し再度検証します。

RTLでの回路検証が終了したら論理合成をします。これはHDLから回路へ変換することです。次に生成された回路をもとにゲートレベル検証を行います。RTL検証はHDLのままでの確認でしたが,ゲートレベル検証は最終的な回路の動作確認です。動作に不具合があれば再度論理合成します。場合によっては回路の記述から見直す場合もあります。

このようにHDL設計では2度の検証を行います。RTL検証では機能の確認を,ゲートレベル検証ではタイミングの確認を行います。

(3)RTL設計

設計仕様に基づいて回路をHDLで記述します。記述は英数字と記号で表現されたテキストファイルです。したがってテキストを編集できればどんなツールでもかまいません。OS付属のテキストエディタやフリーソフトのエディタなどを利用できます。

テキストエディタで記述するファイル
  • 回路記述*.v):設計する回路本体のHDL記述
  • 検証用の記述*.v):テストベンチ(シミュレーション記述)

回路の記述はコツをしってしまえばとても簡単です。たとえばcase文を使えば真理値表をそのまま表現することが出来ます。回路記述の他に検証用の記述も記述します。検証用の記述のことをテストベンチまたはシミュレーション記述といいます。設計した回路の動作を確認するためには適切な入力を与え出力を観測する仕組みが必要です。

以下はRTL設計の記述例(多数決回路 MAJORITY)です:

module MAJORITY( A, B, C, Q );
input  A, B, C;
output Q;
reg    Q;
always @( A or B or C ) begin
    case ( {A, B, C} )
        3'b000: Q <= 1'b0;
        3'b001: Q <= 1'b0;
        3'b010: Q <= 1'b0;
        3'b011: Q <= 1'b1;
        3'b100: Q <= 1'b0;
        3'b101: Q <= 1'b1;
        3'b110: Q <= 1'b1;
        3'b111: Q <= 1'b1;
        default: Q <= 1'bx;
    endcase
end
endmodule

(4)RTL検証

記述した回路をHDLシミュレーターを用いて動作確認します。HDLシミュレーターはVerilog-HDLで記述されたファイルを読み込み,文法チェック,シミュレーション実行,結果の表示などを行います。シミュレーション結果はウィンドウ内に文字で表示したり,波形表示ツールで確認することができます。

RTL検証の入力と出力
種別ファイル内容
入力回路記述 (*.v)設計した回路のHDL記述
入力検証用の記述 (*.v)テストベンチ(シミュレーション記述)
出力シミュレーション結果(文字)時刻・信号値のログ出力
出力波形表示波形表示ツールによるグラフィカル確認

シミュレーション出力ログの例:

11500 ck=1 res=0 q=a
12000 ck=0 res=0 q=a
12500 ck=1 res=0 q=b
13000 ck=0 res=0 q=b
13500 ck=1 res=0 q=c
14000 ck=0 res=0 q=c
14500 ck=1 res=0 q=d
15000 ck=0 res=0 q=d
15500 ck=1 res=0 q=e
16000 ck=0 res=0 q=e
16500 ck=1 res=0 q=f
17000 ck=0 res=0 q=f
...
End of simulation
D:/test>

波形表示ツールで確認できる信号の例:resetmrdnmwrnsrdnswrnromcsnramcsnsasdresoutscsn

しかし,HDLシミュレーターは回路の不具合までみつけてくれません。回路の動作が正しいか誤っているかは最終的に設計者自身で判断します。また誤っている部分をみつけだすのも設計者自身です。

(5)論理合成

RTL検証で動作を確認した回路記述を実際の回路に変換します。論理合成ツールに入力するのは回路記述と論理合成用のライブラリです。論理合成ではA社のゲートアレイ用,B社のFPGA用など専用のライブラリを必要とします。また,論理合成時に制約条件を与えることで論理合成結果を調整することができます。回路の遅延を優先したり,規模を優先したりできます。論理合成ツールの出力はネットリストです。ネットリストとは回路の接続を表現したものです。ゲートレベル検証で使用しますのでHDLフォーマットで出力しておきます。論理合成では回路図は生成した回路の確認用に使用します。したがって最終的に必要なのはネットリストです。

論理合成の入力と出力
種別ファイル内容
入力回路記述 (*.v)RTL検証済みのHDL記述
入力論理合成用ライブラリ (*.db)ターゲットデバイス専用ライブラリ
出力ネットリスト (*.v)ゲートレベルの接続情報(HDL形式)
出力回路図生成回路の確認用(最終成果物ではない)

論理合成によって生成されたネットリスト(majority.v)の例:

module majority( A, B, C, Q );
input  A, B, C;
output Q;
IV   U1 ( .X(n02), .A(B) );
IV   U4 ( .X(n03), .A(C) );
RND3 U2 ( .X(n01), .R1(B),
          .R2(C), .N1(A) );
RND3 U3 ( .X(Q), .R1(n02),
          .R2(n03), .N1(n01) );
endmodule

(6)ゲートレベル検証

論理合成で得られたネットリストを用いてゲートレベル検証を行います。HDLシミュレータにネットリストと検証用の記述,シミュレーション用のライブラリを入力します。このライブラリもA社のゲートアレイ用,B社のFPGA用など専用のライブラリが必要です。ただし論理合成用とは内容が異なります。シミュレーション結果はRTL検証と同様に文字や波形で確認にします。やはり,設計者自身で結果の判断をします。タイミング違反をおこした場合ライブラリの記述によりエラーメッセージを出力する場合もあります。

ゲートレベル検証の入力と出力
種別ファイル内容
入力ネットリスト (*.v)論理合成で生成されたゲートレベル記述
入力検証用の記述 (*.v)RTL検証と同じテストベンチを流用可能
入力シミュレーション用ライブラリ (*.v)ターゲットデバイス専用(論理合成用とは別)
出力シミュレーション結果(文字・波形)タイミング含む最終動作確認

(7)Verilog-HDLの文法体系

Verilog-HDL文法はとても広範囲です。この中には回路記述にむいた文法,テストベンチにむいた文法,ライブラリの記述にむいた文法があります。HDLをつかって回路を設計するために文法のすべてを知る必要はありません。ここでは回路記述とテストベンチの文法を解説します。Verilog-HDLの文法にあっていれば,HDLシミュレーターでのシミュレーションが可能です。しかし,論理合成できるのは回路記述むきの文法だけです。それ以外の文法項目は論理合成ツールによみとったときエラーになります。

Verilog-HDL 文法体系と本コースのユニット対応
文法の用途対応ユニット論理合成
回路記述
・論理合成に適した記述をする
・回路の種類ごとに適した記述スタイルがある
EユニットCユニット ✅ 可能
テストベンチ
・文法を満たしていれば,どんな記述でもよい
・記述のテクニックを駆使できる
Tユニット ❌ 不可
ライブラリ記述
・シミュレーション用セルの動作記述
(参考) ❌ 不可

その他のユニット:Sユニット ─ 論理合成 / Lユニット ─ 論理回路 / Oユニット ─ 記述上のヒント

(8)修了判定

設問:次の説明で正しいものはどれか。

  • ☐ ゲートレベルは回路図のことなので,HDLでは記述できない。
  • 論理合成したあと,特性が仕様を満たさない場合は,もう一度回路記述を見直すこともある。
  • ☐ 論理合成には,シミュレーション用のライブラリを流用できる。
  • ゲートレベルのHDLのことをネットリストとも言う。
  • ☐ 回路をHDLで設計したら,すぐに論理合成する。シミュレーションは必要なときやればよい。
  • ☐ RTLとは,TTLやCMOSなどのデバイスの一種。
  • 回路をHDLで記述するだけなら,専用のツールはいらない。
  • 論理合成可能なHDL記述をRTLと呼ぶこともある。
  • ☐ HDLのシミュレータは,ゲートレベルのシミュレーションができない。
  • ☐ 文法通りに記述すれば,どんな記述でも論理合成できる。

まとめ

  • HDL設計の流れ:仕様設計 → RTL設計 → RTL検証 → 論理合成 → ゲートレベル検証
  • RTL検証では機能(動作)を確認し,ゲートレベル検証ではタイミングを確認する
  • RTL記述・テストベンチともにテキストファイル(.v)で記述する
  • 論理合成の出力はネットリスト(ゲートレベルのHDL)であり,ゲートレベル検証に使う
  • 論理合成できるのは回路記述向きの文法のみ。テストベンチ記述は論理合成不可
  • Verilog-HDLの文法は「回路記述」「テストベンチ」「ライブラリ記述」の3用途に大別される