SystemVerilogの基礎知識【その2】

みなさん、こんにちは。
SystemVerilogは検証用に使用されている場面が多いですが、筆者はデザイン開発への浸透はまだまだだなと感じています。
Verilogを使用されていた方にとっては、SystemVerilogは上位互換なので、入りやすいかと思います。
「記述の簡略化」、「その簡略化によって防げる記述ミス」など多くのメリットがあるため、本ブログでは前回に引き続きSystemVerilogで便利になった内容を記載していきます。
このブログは「FPGA設計ブログ一覧」の
1. コーディング・IP設定・プリミティブ設定 のひとつです。
目次
moduleの信号接続について
SystemVerilogではmoduleの信号接続の記述をできる限り簡略化することが可能になりました。
Verilogと比較してみましょう。
Verilogの場合
module_name instance_name (
.port_name_A ( net_name_A ),
.port_name_B ( net_name_B ),
.port_name_C ( net_name_C ),
);
SystemVerilogでは、ポート名とネット名が同一の場合、ネット名の省略ができるようになっています。
以下に例を記載します。
SystemVerilogの場合
module_name instance_name (
.por_tname_A,
.por_tname_B,
.por_tname_C,
);
さらに、ここまで省略できます。
module_name instance_name (
.*
);
注意として、省略した場合、宣言しているポート名と同一のネット名を自動で接続してしまいます。
意図したデザインであるかの確認が必要になるため、実際の記述ではあまりおすすめできません。あくまで簡略化という内容になります。
従来(Verilog)の記述方法は、問題なく使用できますので安心してください。
また、ポート名と不一致のネット名の接続を行う場合は、従来の記述を使用しましょう。
過去のRTLの流用だったり、設計者のこだわりだったり、複数人での設計した場合などがあるため、
moduleの信号接続に関しては、従来(Verilog)のままで使用した方がよさそうですね。
bit幅の簡略化
次に、bit幅の簡略化について紹介します。
Verilogの場合
wire [3:0] data_a;
wire [7:0] data_b;
assign data_a = 4'b0101;
assign data_b = 8'hAA;
SystemVerilogの場合
logic [3:0] data_a;
logic [7:0] data_b;
assign data_a = 'b0101;
assign data_b = 'hAA;
これは、便利な面もあるかと思いますが、代入先のbit幅の違う場合も接続できてしまいます。接続ミスをなくすために従来の記述の方が無難だと思います。
packageについて
他には、packageでしょうか。
packageは、各モジュール内で使用する定数、定義などを共有で使用するための記述になります。
packageについては、VHDLでは使用できましたが、Verilogではありませんでした。
SystemVerilogでは、使用ができるようになっています。
VHDLを使用してきた人は勝手がわかると思いますが、Verilogのみ使用してきた人は、慣れる必要があるかと思います。
どんな記述するの?になるので、詳細については、別の機会に記載していこうと思います。
おわりに
いかがでしたでしょうか。SystemVerilogの基礎知識についてご理解いただければ幸いです。
次回は、検証時(SystemVerilog)に便利になった話をよく聞きますので、その辺の内容をお伝えできればと思います。
弊社ではFPGA設計や回路図設計、レイアウト設計、ソフトウェア設計、筐体設計などを受託開発しています。
サービス内容をWEBサイトに掲載していますので、ぜひご覧ください。
FPGAの活用に際して設計検討などありましたら、お気軽にお問い合わせください。
最後までお付き合いいただきありがとうございました。
このブログは「FPGA設計ブログ一覧」の
1. コーディング・IP設定・プリミティブ設定 のひとつです。