1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. SystemVerilogの基礎知識【その1】

TECHブログ

SystemVerilogの基礎知識【その1】

SystemVerilogの基礎知識【その1】

2023年10月16日 更新

みなさん、こんにちは。
SystemVerilogは検証用に使用されている場面が多いですが、筆者はデザイン開発への浸透はまだまだだなと感じています。

Verilogを使用されていた方にとっては、SystemVerilogは上位互換なので、入りやすいかと思います。

「記述の簡略化」、「その簡略化によって防げる記述ミス」、「解析にかかる時間削減」など多くのメリットがあるため、本ブログではSystemVerilogについて書いていこうと思います。

また、今回はSystemVerilogの概要やVerilogから見て便利になった内容を記載したいと思います。

目次

SystemVerilogとは?

SystemVerilog はハードウェア言語の1つで、Verilog-HDLを拡張(改良)した言語です。Verilog-HDLから検証に関する機能が強化、改善されています。

SystemVerilogの特長をまとめると以下の通りです。

  • Verilogの上位互換のため、VerilogからSystemVerilogへの移行が簡単
  • RTLの記述量が減る
  • 記述ミスの減少
  • シミュレーション時間の短縮

ハードウェア設計で主に使用される言語は、VHDLやVerilogになります。

Verilog記述からSystemVerilog記述に移行する場合、これまでの設計資産をそのまま使用することが可能です。そして、SystemVerilogの新たな機能を使うことができるようになります。

拡張子について

SystemVerilogのファイル拡張子は、".sv" です。ちなみに、Verilogのファイル拡張子は、".v"になります。

これまでの言語の歴史としては

SystemVerilog3.0 2002年リリース
SystemVerilog3.1 改訂版
SystemVerilog3.1a 改訂版
IEEE Std 1800-2005 2005年リリース
IEEE Std 1800-2012 2012年リリース
IEEE Std 1800-2017 2018年リリース(現在のSystemVerilog)

上記の「IEEE Std 1800-2017」が現在リリースされているSystemVerilogの最新になります。

SystemVerilogの利便性

SystemVerilogはどのように便利になっているのでしょうか。

VerilogとSystemVerilogの差分について以下に記載します。
はじめに、必ず使用するalways文について説明します。

always文

主に使用するalways_comb / always_latch / always_ff があります。
用途によって、使い分けます。

・always_comb

組み合わせ回路で使用します。
always文では、センシティビティ・リストに必要な信号をすべて記述しないと、意図した動作にならない場合があります。
always_combの場合には、センシティビティ・リストの記述が不要になるため記述量も減り、ミスが減ることになります。

<記述例>

左右にスクロールしてご覧ください
always_comb begin
    if (select) begin
        data_out = data_in_a;
    end else begin
        data_out = data_in_b;
    end
end

・always_latch

ラッチ部で使用します。
always文では、if文やcase文で条件漏れによって、意図しないラッチが生成される場合があります。
always_latchの場合、明示的にラッチ記述になるため、ミスが減ります。

<記述例>

左右にスクロールしてご覧ください
always_latch begin
    if (enable) begin
        data_out <= data_in;
    end
end

・always_ff

フリップフロップで使用します。
always文と同様な記述をします。
マルチドライブできません。

<記述例>

左右にスクロールしてご覧ください
always_ff@(posedge clock, posedge reset) begin
    if(reset) begin
        data_out <= '0';
    end else begin
        data_out <= data_in;
    end
end

上記の、always_comb / always_latch / always_ff がサポートされたことで、設計者の意図通りの動作が生成できるようになりました。

宣言文(logic宣言)

宣言文では、いろいろと増えている内容がありますが、一番使用できる「logic宣言」について以下に記載します。

SystemVerilogでは、宣言文で「logic宣言」が追加されています。
これは、Verilogの「wire宣言」「reg宣言」の位置づけとなります。
そのため、wire/reg宣言の使い分けをせず、assign文やalways文で使用できます。(VHDLの"signal"と同等です。)

<記述例>

左右にスクロールしてご覧ください
Verilogの場合
 wire  [3:0]      data_a;
 wire  [7:0]      data_b;
 reg   [7:0]      counter;
SystemVerilogの場合
 logic  [3:0]      data_a;
 logic  [7:0]      data_b;
 logic  [7:0]      counter;

注意として、logic宣言の後ろに直接の代入はできません。
その場合は、logic宣言ではなくwire宣言を使用ください。

次に、多次元配列と列挙データ型について述べていきます。

多次元配列

Verilogでは、一次元配列のサポートのみでしたが、SystemVerilogでは多次元配列がサポートされています。
これは、大きな改良だと思います。
いままで一次元のみだったので、展開した記述を行っていたかと思います。
多次元ができることで、開発の幅が広がります。(記述の削減)

<記述例>

左右にスクロールしてご覧ください
 logic [1:0] mem [127 : 0 ] ;

列挙データ型

SystemVerilogでは、列挙データ型をサポートします。
数値に直接、名前をわりあてることが可能です。
そのため、ステートマシン記述の各状態が解かりやすく、可読性が良くなるため、記述ミス削減になります。

<記述例>

左右にスクロールしてご覧ください
parameter UP = 0 , DOWN  = 1 , RIGHT = 2 , LEFT = 3;

シミュレーションでは、波形で表示される"0" or "1"の数値ではなく、上記で設定したように“UP/DOWN”のようなステートマシンで記述した名称で表示されるので便利な部分があります。

このように可読性が上がることで、設計時の記述ミス、シミュレーション時の動作の確認を進めやすくなるので、SystemVerilogは品質の向上につながります。

おわりに

いかがでしたでしょうか。SystemVerilogの基礎知識についてご理解いただければ幸いです。

次回は、検証時(SystemVerilog)に便利になった話をよく聞きますので、その辺の内容をお伝えできればと思います。


弊社ではFPGA設計や回路図設計、レイアウト設計、ソフトウェア設計、筐体設計などを受託開発しています。
サービス内容をWEBサイトに掲載していますので、ぜひご覧ください。

設計受託・ODMの概要については
こちら

FPGAの活用に際して設計検討などありましたら、お気軽にお問い合わせください。

FPGAの活用・設計検討の
お問い合わせはこちら

最後までお付き合いいただきありがとうございました。

関連ブログ