1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. SystemVerilogの基礎知識(検証編)【その5:typedef】

TECHブログ

SystemVerilogの基礎知識(検証編)【その5:typedef】

SystemVerilogの基礎知識(検証編)【その5:typedef】

みなさん、こんにちは。

SystemVerilogは、「記述の簡略化」、「その簡略化によって防げる記述ミス」、「解析にかかる時間削減」などのメリットがありますので、お使いいただくことで設計品質を上げることが可能になります。
今回は、Packageの続きで、typedefについて記載します。

目次

1. typedefとは

typedefは、ユーザー定義型です。ユーザーが任意のデータタイプを定義でき、パッケージ内で宣言できるので、複数のファイルで参照することができます。
記述の工夫で、見やすさ、記述の修正のしやすさが出てきます。

【記述例:typedef】

example3_pkg.sv

左右にスクロールしてご覧ください
package example3_pkg;
    typedef logic ex_type;
endpackage

2. パッケージの利用

パッケージファイル名は、example3_pkg
typedef定義を使用し、ユーザータイプ “ex_type” としています。

単純ですが、カウンタ記述でPackageを使用していきます。
今回は、TOPファイルを2種類用意し、それぞれのパターンについて述べていきます。

3. 実装例:カウンタ設計

3.1  パターン1:4ビット出力

  • 出力を4bit
  • 任意のクロック使用
  • リセット解除後、インクリメント開始

3.2  パターン2:8ビット出力

  • 出力を8bit
  • 任意のクロック使用
  • リセット解除後、インクリメント開始

4. テストベンチの作成

前項で紹介した2種類の動作確認を行います。

example3_top1.sv

左右にスクロールしてご覧ください
module example3_top1 (
    output example3_pkg::ex_type [3:0] count,
    input  example3_pkg::ex_type clock, reset );
    always @(posedge clock, posedge reset)
        if (reset) begin
            count <= 0;
        end else begin
            count <= count + 1;
        end
endmodule

本RTLでは、output example3_pkg::ex_type [3:0] count, としているので出力は4bitになります。

example3_top2.sv

左右にスクロールしてご覧ください
import example3_pkg::ex_type;
module example3_top2 (
    output ex_type [7:0] count,
    input  ex_type clock, reset );
    always @(posedge clock, posedge reset)
        if (reset) begin
            count <= 0;
        end else begin
            count <= count + 1;
        end
endmodule

本RTLでは、output ex_type [7:0] count, としているので出力は8bitになります。

enample3_top1との違いは、出力bitもそうですが、importする方法で記述しています。

【動作確認用のテストベンチ】

example3_tb.sv

左右にスクロールしてご覧ください
`timescale 1ns/1ps
`default_nettype none // Do not to infer wiring.
module example3_tb ();
//---------------------------------//
reg reset; // Active-H
initial begin reset = 1'b1; end
always #(800)begin reset = 1'b0;end
reg clock;
initial begin clock = 1'b0;end
always #(12.5)begin clock = ~clock;end
//---------------------------------//
example3_top1 u_example3_top1 (
    .reset    ( reset   ),
    .clock    ( clock   ),
    .count    (         ));
example3_top2 u_example3_top2 (
    .reset    ( reset   ),
    .clock    ( clock   ),
    .count    (         ));
//---------------------------------//
endmodule
`default_nettype wire
リセット時間、クロック周期は任意

先ほど記載したTOPファイル2種類を同時に確認したいので、本テストベンチには、example3_top1、example3_top2を見ています。

5. シミュレーション結果

シミュレーション結果は、以下になります。

ここで、example3_top1では、4bit出力のため、0x0~0xFのカウンタ値が繰り返されています。
example3_top2では、8bit出力のため、0x00~0xFFのカウンタ値が繰り返されます。(波形には見えていません。)

Vivadoに読み込ませたファイルは、以下の4種になります。

  • example3_pkg.sv
  • example3_top1.sv
  • example3_top2.sv
  • example3_tb.sv

シミュレーションを実行すると、期待動作していることが確認できます。
Package化することで、ファイルの行数の削減、見やすさの工夫ができますので、参考にしていただけますと幸いです。

6. おわりに

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

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

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

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

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

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

関連ブログ