systemVerilogではcovergroupのcoverpointと言う物が使える。
これはある条件の時に指定したデータになったことをカウントしてくれる。
たとえば、カウンターが止まったときのfullに成った回数を数える事をしてくれる。
下記にサンプルを載せておくよ。
これはある条件の時に指定したデータになったことをカウントしてくれる。
たとえば、カウンターが止まったときの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と出てきます。
こんな感じ
ランダム検証にはこれが必須なんだな。。ランダムだから境界値(count fullなど)
をテストしたかどうかは確率的。。そこで確かにテストできていることを
これで知ることができるのだ~~
をテストしたかどうかは確率的。。そこで確かにテストできていることを
これで知ることができるのだ~~
aldec Riviera-PRO systemVerilog ランダム検証