OVMを使って74163-counterのテスト環境を作ってみた。

OVM2.1.1を使って74163カウンタの検証環境を作ってみた。

4bitのカウンターごときにOVMなんてと思われるかも知れないが。。
作った回路にOVMテストベンチをつけろと言うのは上司だけでなく
客先も言ってくる日はもう目の前だ、理由はそのうちにね。。

OVMテストベンチはそれなりの構成でsequencerやenvを備えた。下記に説明と行数を入れた。

1 counter_item データ 20line
2 counter_sequence ランダム生成 18line
3 counter_sequencer シーケンサ 9line
4 counter_driver ドライバ 34line
5 counter_env 環境 36line
6 counter_tb topモジュール 37line

久しぶりに作ったので調べ調べで1日ぐらいかかった。
感想は割とすぐに出来たな。。4bitカウンターのTBで1日も掛けるのかと
思うだろうが拡張性が有ってランダム検証付きのTBを久しぶりに、だから
こんなもんだろうと私は思うぜ。。

いまさらOVMの簡単なサンプルをと思われるが良いネタを思いつかないので。。
少しずつblogへ載せてゆきましょ。今回は counter_item.sv ライセンスはApache2としておくぜ。。
// 74163 counter test bench
class counter_item extends ovm_sequence_item ;

   rand int unsigned data ;
   rand int unsigned enable ;
   rand int unsigned interval ;

   constraint c_data0     {data < 4'hf ;}
   constraint c_enable0   {enable < 4'hf ;}
   constraint c_interval0 {interval < 4'h3 ;}

   `ovm_object_utils_begin(counter_item)
      `ovm_field_int(data, OVM_ALL_ON)
      `ovm_field_int(enable, OVM_ALL_ON)
      `ovm_field_int(interval, OVM_ALL_ON)
   `ovm_object_utils_end

   function new(string name="counter_item") ;
      super.new(name) ;
   endfunction : new

endclass : counter_item

dataはカウンターのロード値をenableはカウンター動作時間、intervalは動作間隔。。
TLMなので細かな制御情報は送る必要はない。
今回からはfullスペックのsystemVerilogを使えるRiviera-PRO(アルデック)なので
乱数の生成範囲を制約で書く、これが楽ちんなんだな。。プログラミングで生成範囲を
書くのはやはり面倒うだね!!

OVM systemVerilog IEEE 1800-2009

>>トピック
74163ロード付き4bitカウンターを知っている人はもう居ないか。。
うん十年前は
   FPGAのチューニング == このカウンター内部論理を理解し応用する
と言う時代が有ったのだが。。
この頃のaltera-AHDLで
 count <= count + 1 ;
を合成するとゲロが出そうなネットを出していたね。。
そこでカウンター論理の理解が必要であった。
xilinxに至っては、合成器が無くて論理式を手書きする、
この時に例のxilinx-5入力cellの制約で74163で使われているキャリーを
分離して伝搬を理解する必要があった。。
でも今では不要不要。。特別速い回路はハードマクロを使うのが正解です。。