aldecでcovergroupを使ってみる。

systemVerilogではcovergroupのcoverpointと言う物が使える。
これはある条件の時に指定したデータになったことをカウントしてくれる。
たとえば、カウンターが止まったときのfullに成った回数を数える事をしてくれる。
下記にサンプルを載せておくよ。
   count4 count4(.clk(counter_if.clk),
                 .rst(counter_if.rst),
                 .p(counter_if.p),
                 .t(counter_if.t),
                 .load(counter_if.load),
                 .data(counter_if.data),
                 .q(counter_if.q),
                 .co(counter_if.co) ) ;

   covergroup counter_cov @(posedge counter_if.clk) ;
      cp_qout : coverpoint counter_if.q iff (counter_if.load == 1'b0) {
         bins reset      = {4'b0000} ;
         bins mid        = {[1:14]} ;
         bins count_end  = {4'b1111} ;
      }
   endgroup : counter_cov

	counter_cov counter_cov0 = new() ;

上記はカウンター停止時の値が、reset,full,midで分けて数えてくれる。

Riviera-PROで数えた結果を見る方法はというと。。下記参照
 シミュレーションが終了した時にコンソールより下記を打ち込む。。
fcover report -html -file xxxxx.html
でxxxxx.htmlと出てきます。
こんな感じ

イメージ 1


ランダム検証にはこれが必須なんだな。。ランダムだから境界値(count fullなど)
をテストしたかどうかは確率的。。そこで確かにテストできていることを
これで知ることができるのだ~~

aldec Riviera-PRO systemVerilog ランダム検証