[原创] 用HDLScore做覆盖率分析
作者: 5life
. y' V$ E6 q5 ^. b5 V' Q" W工作状态: 建立仿真环境9 `- O$ b; j" r2 e- j
@5 |0 @7 N' o5 O$ ~! [
我们进行验证时, 除了做功能性仿真外, 还需要做覆盖率分析, 这样可以提高验证的全面性. 通常我们可以采用仿真工具自带的覆盖率分析工具. 这方面在这里就不再详加叙述, 可以参看相关的资料. 在论坛中也有VCS的覆盖率工具使用说明.! Y1 W1 ~" t3 I9 P$ N& r) C' v& H
HDLScore是SUMMIT公司的分析代码覆盖率的工具. 理解和使用该工具对自身能力的提高以及工作的效率有很大帮助.5 I6 g3 h& b$ P0 d! @
6 @; t, J4 R |' K: O5 y( l HDLScore的工作步骤分为3个: instrument, 仿真(simulation)和报告(reporting):
7 X3 R" N1 J( D; k; n1 w v 具体产生文件与过程如下图所示:1 Y5 G4 S$ z1 P& M( T
9 k/ S& j. a0 [/ p+ e
1. instrument
$ A1 |6 ?6 y A& @8 b( O# O. |# y 该步骤将编译整个设计, 选择覆盖率的类型, 提取FSM和产生在仿真时使用的instrumented 的代码. 该步骤的目的是为了产生嵌入HDLSCORE系统任务和函数的代码./ |+ S [0 ]# D7 R3 c6 L
shell下命令为:
- i/ h( M7 i2 v. r1 H $> hdli -verilog hdli.cf
+ O( C4 b4 r- V$ @ 其中, -verilog代表是verilog文件. 3 Y* y+ f! L# [, j0 Y4 j8 }* X. u
hdli.cf 是命令文件, 其中有很多对hdli的设置1 v3 M# i6 ^/ {7 m
典型为:
1 w. L+ l& P% R$ k3 _ compile -f design/run.f
( g5 ?$ P- o. J2 O" a$ } set_coverable_operators -all' {* }( o1 V! P: Y' K( B
set_coverable_statements -all
, j$ r4 |" H0 r# Z8 S5 J select_coverage -instance -block -path -expr -nlevel *...
' r! U+ _* i" J# Q1 ^: O/ ] extract_fsm -auto
, i% z c! W. j5 D- n select_fsm_coverage *. v; }5 G% @2 S6 `
list_fsms
" O- f5 x: M# e: G- I q! u' f! a gen_instrumented_code
' c" L8 F/ _, Z) ?; _5 t& ]* c5 X 执行完命令后, 在当前目录下产生hdls_work目录. 0 G1 {! Y# H, {( Y6 e+ t
其中有最重要的hdls.vin文件, 该文件是产生用于覆盖率分析的中间文件.
# S# b) d( S2 O Log文件: hdli.log
/ A6 j. V: Q# s3 o( C
' S {5 q% e1 |$ m9 s! k 2. 仿真(simulation) (遇到license问题)
: c' s6 b) U( Q4 ^0 ] $> ncverilog design/test_bench1.v hdls_work/hdls.vin +loadpli1=hdlspli:hdlscore_bootstrap +hdls+configfile+./scripts/sim.cf +access+wrc
" n. u. k# W1 E3 v. d) E4 N2 X2 f$ e) l. T* X sim.cf 是命令文件, 其中有很多对hdls的设置
$ V8 ]7 V6 b1 c' I( i9 y' H 典型为:. r" ]& v1 ^9 T: L o
load_design hdls_work/hdls.dgn
R2 {- ]' k( i1 {; {, ` load_coverage hdls_work/hdls.cov- C7 P6 K! R' z0 k/ P9 ?
save_coverage -code hdls_work/hdls.sim.cov% p v3 z" `$ s M
save_coverage -fsm hdls_work/hdls.fsm
( |* p; @% j5 p; H 注: license问题: 如果用hdlc那么可以仿真, 但是用命令行确不可以(why?) hdlc中命令为:
# U. p' @ g/ w% n" A# ^% W ncverilog design/test_bench1.v ./hdls_work/hdls.vin +togl+logfile=vertoggle.log +togl+master=vertoggle.mst +togl+workdir=toggle_work +togl+limit=1 +loadpli1=/_TOOLS_/dist/summit-hdlscore-/5.3.3/i686-pc-linux2.4/Linux/pli/ncv1_21/hdlspli.so:hdlscore_bootstrap +hdls+config+./hdls_work/tclconfigfile +ncsimexe+ncsim +access+rwc +ncelabexe+ncelab$ u( J' v. B( ?7 n7 }+ o& ?
. I+ k, U% I) r2 f; m% f& G7 j 3. 报告(reporting)- m# C* k+ h- ^ f& b5 x
该步骤分析仿真后的结果, 得出文本的报告. 命令为:- V6 q4 ?! s9 h2 k& j, M
$> hdlr hdlr.cf4 s. w) c8 K3 G6 s7 ~$ n* ~
hdlr.cf 是命令文件, 其中有很多对hdlr的设置 V p p. j/ A1 B
典型为:' L/ D q% H9 {& d
load_design hdls.dgn% L$ y7 h- m% i# i4 z, Q! d
load_coverage hdls.sim.cov2 P f; d8 J- r, w8 X
load_coverage -fsm hdls.fsm {' o6 E. H5 k; v, I+ i+ L
list_coverage -module *
0 V% l$ y N- C+ L" \! L list_coverage -instance *...+ g* o+ ]8 s- s
list_coverage -fsm -module ** L0 J4 i+ ^) J+ M: z1 b' Z8 @( u4 z
list_coverage -fsm -instance *...
2 `) ?7 k8 q9 ?+ k5 h report_detail -module -bpesaq -both *
附件: 您所在的用户组无法下载或查看附件
With your idea, Carry out together.