1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. SystemVerilogの基礎知識(検証編)【その3:関数past、onehot / onehot0】

TECHブログ

SystemVerilogの基礎知識(検証編)【その3:関数past、onehot / onehot0】

SystemVerilogの基礎知識(検証編)【その3:関数past、onehot / onehot0】

みなさん、こんにちは。

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

前回のブログ SystemVerilog の基礎知識(検証編)【その2:関数rose・fell・stable】では、信号の変化を判定する関数として、$rose、 $fell、$stableの記述例について紹介しました。
今回は前回の続きで$past、$onehot / $onehot0 について以下に記載していきます。

目次

$past()

$past()は、指定サイクル数前(数分さかのぼって)の値を参照します。またサイクル数を指定しなかった場合、1サイクルと見なします。

信号aの立上り検出時、信号bの値(2サイクル前)が“1”であるか判断します

記述例

左右にスクロールしてご覧ください
property p_past(clock,a,b);
 @(posedge clock) $rose(a)|->$past(b,2)==1;信号aの立上り信号bの2サイクル前が“1”
endproperty

$onehot / $onehot0

$onehot / $onehot0は、BUS信号のどれか1bitだけが“1”である判断です。

セレクタ回路で使用する関数として、$onehot / $onehot0 があります。
セレクタ回路なので、複数bitに1があるのはNG、どれか1bitの1が期待値です。

$onehot0は、ALL0の判断も行えます。

記述例

左右にスクロールしてご覧ください
property p_onehot0(clock,data_select);
 @(posedge clock) $onehot0(data_select[7:0]);
endproperty

このようなセレクタ記述に対して、判断を行います。

などがあります。他にもありますが、別の機会に紹介させていただきます。

ここからは、サンプル記述を載せていきます。
絶対この記述でなくてはいけない!ということではないので、あくまで参考程度としてください。

参考(サンプル記述)

クロックposedgeで見ているが、negedgeでも可能、必要に応じて対応しましょう。

1. 信号aと信号bが接続されている

左右にスクロールしてご覧ください
always_comb begin
 sva_connect:assert(a===b);
end

2. 信号aが8サイクルのレベルである

左右にスクロールしてご覧ください
property p_sample1(clock,a);
 @(posedge clock) $rose(a)|=>$stable(a)[*8-1]##1$fell(a);
endproperty

3. 信号aを3サイクルシフトし、信号bと一致する

左右にスクロールしてご覧ください
property p_sample2(clock,a,b);
 @(posedge clock) a|->##3b;
endproperty

4. 信号aが1の間、信号bが1にならない(0のまま)

左右にスクロールしてご覧ください
property p_sample3(clock,a,b);
 @(posedge clock) a|->~b;
endproperty

5. 信号aが1の間、信号bが変化しない

左右にスクロールしてご覧ください
property p_sample4(clock,a,b);
 @(posedge clock) a|=>$stable(b);
endproperty

6. 信号aの立ち上がりから5サイクル後に信号bが変化する

左右にスクロールしてご覧ください
property p_sample5(clock,a,b);
 @(posedge clock) $rose(a)|->##5$changed(b);
endproperty

おわりに

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

設計をするにあたって、検証は必ず行うものです。
検証には、時間をかける必要があり、使いこなせたら結構便利なので、検証時間の短縮に利用できると思います。
あとは、他の参考文献で調べるなど独自で勉強してSystemVerilogを活用していきましょう。

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

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

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

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

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

関連ブログ