21 12
发新话题
打印

[原创] NC中如何DUMP出fsdb格式的波形文件

[原创] NC中如何DUMP出fsdb格式的波形文件

作者:5life
& ~# S/ p* ?$ y+ Q5 K6 M   工作状态: 建立仿真环境 & ^& @, J0 }  F% N* Y3 G
; \0 j  ?* _; ?$ e: H' z
   我们为什么要输出fsdb格式的波形文件的, 原因之一是fsdb文件比较小, 其二是该格式可以由Debussy读取,以便使用Debussy进行代码分析.
( o5 k# U; W6 v' Q   我们要输出fsdb的话, 要通过PLI 来调用Debussy的系统函数.; v4 T3 Y  b. a) [- D2 I
   关于PLI, 在此不再赘述: 请看帖子 ; K8 J3 l6 n- g
   PLI文档  :  http://bbs.dicder.com/viewthread.php?tid=60   . [) W2 F" s" {
   首先, 我们建立一个工作目录; e; s# m6 I6 W% z- Y8 V
   $> mkdir work* o0 k- W3 v4 `# k
   $> cd work
, u; Y0 Z' ]% u! |/ v0 z! R5 |" V   然后新开一个teminal窗口, 找到Debussy的安装目录. 进入/share/PLI/, 在该目录下有很多版本的目录,选择一个属于你的NC版本的目录, 比如nc51, 然后选择你的操作系统, 如LINUX,(换而言之, 现在处于/share/PLI/nc51/LINUX) 之后你会发现:  
2 U+ Q& D& |6 F3 a' S: C% o" }& K   nc_loadpli1/  nc_shared/  pli.a  veriuser.c2 T3 t! W$ o0 I3 \" f
   把这些目录及文件拷贝到 work目录下.   
" N3 w; |! _! m, I   4 ^3 G2 ?3 B" s* c/ t

    ) `/ _. L" ?; k$ c, p
  • 免编译. X, W6 Z& G* A! [8 u$ w

; x1 ~, {% s9 W2 Z( H) e    如果你不需要添加其他的系统函数, 那么直接可以用nc_loadpli1 下debpli.so 文件. 使用方法:
8 m) O: h4 R( G* k' W, E6 e) \& ]" O; ~# q+ w% q
    $> ncverilog +access+wrc +loadpli1= ./nc_loadpli1/debpli.so : debpli_boot rtl.files
8 \! Y" K3 A8 {5 c1 S    当然在testbench文件中要写上你所希望调用的debussy 提供的函数, 基本的如: 6 N% o: j- x* m' c3 [& j
       $fsdbDumpfile("wave.fsdb");8 [2 W- w7 l1 d- s. ^
       $fsdbDumpvars(6, tb);
* U+ |- ?) ^2 M6 d+ w6 i! L9 S* ~# m; R4 N4 [, Q* W- c3 j
  
) {( j+ P9 G; g: R! ~5 W
    + ]* }6 ^& S# z0 t
  • 需编译8 b( K" N+ z1 V$ G3 Z1 P) Z! C) K& ?

* k$ \( B9 w  J& z- K. }    如果你已经对veriuser.c进行了修改, 那么首先把veriuser.c 编译为veriuser.o文件.
, [. ~5 e: q9 P/ @5 v7 [
- L2 n% z( N: b* C  |( Q    cc  -KPIC -c veriuser.c -I${CDS_INST_DIR}/tools/verilog/include: ]3 \$ q5 z. c) ]4 {7 F
7 O1 r+ g" p9 [) X1 f
    之后连接
! v5 @* i  a; `    ld -G  veriuser.o  pli.a -o debussypli.so3 m. i# `5 j6 X& q( g# ~
    使用方法:8 j. h' y( C. A  ]
" `( l7 L/ N+ o' X: a
    $> ncverilog +access+wrc +loadpli1= ./debussypli.so : debussy_bootstrap rtl.files   p) d0 _; l. m5 f: ~* \+ r
    当然在testbench文件中要写上你所希望调用的debussy 提供的函数, 基本的如: , J' j; t) R2 s* i7 w, Q
       $fsdbDumpfile("wave.fsdb");* T) r2 @' }/ @9 O1 p4 E3 i
       $fsdbDumpvars(6, tb);
With your idea, Carry out together.

TOP

提示: 作者被禁止或删除 内容自动屏蔽

TOP

modelsim可以产生fsdb文件吗? vpd文件和fsdb文件哪个更好啊?

TOP

Modelsim产生FSDB波形文件:* a2 v% R5 Y. v, }/ Q3 L7 A
# W; u. y3 k4 T
1. 编译PLI接口$ g+ ~! C) x5 X
=> 在DEBUSSY目录中有PLI接口代码2 S4 c7 F% \$ B! _( ]9 ~) o6 t5 x1 e1 B
...\Novas\Debussy\share\PLI\modelsim_pli54\WINNT
+ {; e& }8 @, X$ B=>  此目录下有源码, 还有一个批处理文件make.bat,打开作一些路径上的改动
; [8 \/ V! e% {  t3 ?7 e" fset       MODELSIM_PATH=c:\simulators\modeltech_5.3a  
# c, u* m7 x& z6 Tcl          -c -I%MODELSIM_PATH%\include veriuser.c- L+ u7 k. j5 o; ?, X& I
link       -dll -out:novas.dll -nodefaultlib:libcmt.lib -export:init_usertfs veriuser.obj pli.lib
- a" i" A) e; q6 X  G3 ?            %MODELSIM_PATH%\win32\mtipli.lib shell32.lib
* X  A. ?9 r! V7 x% p9 G=> 其中命令cl与link c/c++编译连接命令, 安装了VC++可以找到
7 u4 s. D! d. \6 c=> 编译连接后生成novas.dll,其为modelsim与debussy的PLI接口库3 E$ ^* ]/ v* E7 r# T
   或者用其目录下存在的novas.dll文件,modelsim5.4或更高版本采用7 \6 n2 k4 z. |5 f. H# k
   modelsim_pli54\WINNT下的文件
, o$ r- `( H2 `1 U0 a. Z! L% X+ I7 V5 [9 }
2. 设置Modelsim,使其加载接口库novas.dll,从而在代码中调用接口函数
! J; u' F, j: V0 ]7 z6 v2 ]=> 打开modelsim.ini
. F1 B! Q7 X. e& v1 w[vsim] 2 E" B) Y2 V8 h* _
Veriuser=novas.dll
' |1 m' H6 z/ H' f其中Veriuser这个变量是在文件中用";"屏蔽了的,找到后去掉分号设置值为库novas.dll
1 Y) j$ D& u( M% v- `% R2 X0 O=> 设置windows系统环境变量
+ Q  P% V/ w* |" d& O& J这在Modelsim的user's guide中有说明* N$ c+ n2 ], j0 N# R! q
LD_LIBRARY_PATH  path\novas.dll$ n/ n( [! v, S. x" {+ ]
PLIOBJS                  path\novas.dll, H+ l$ k3 V- i( a4 c3 u7 ?
SHLIB_PATH            path\novas.dll
% Y! i) Q* ?0 t0 ]: S4 z' W  J( R5 F, f
3. 在代码中调用系统函数生成.fsdb文件6 Z( V- |* v8 b( t( K
debussy user's guide docs 中有说明7 l; S1 B$ d( v3 {3 X
[VHDL]" o4 {/ m. l) \# h' `3 _
process
7 a# m; s& R* p2 a1 Ibegin
. l6 Q4 w) G1 Y. F& y9 pfsdbDumpfile("test.fsdb");
, `, c8 k) R1 f9 N* A" H. gfsdbDumpvars;
; f) ?, y6 R7 i( _/ V9 \# ~- |wait ;
, @$ N( j; O/ b0 T( Aend process;
9 x/ a* w2 O- @7 K% P. ?: Z, d# A# p
[Verilog]- V* l9 V1 {" m- }+ |2 W# P
initial
3 G% Y! ]% v8 \0 A# tbegin
5 `* C: B: }6 Z5 V5 H9 z9 b( S   $fsdbDumpfile( "FILE_NAME.fsdb" );    // Debussy系统任务! L5 M; r( C. h, V6 N3 Z
   $fsdbDumpvars;            // Debussy系统将变量映射到.fsdb文件0 }1 z) ~; l& n, H% r+ j8 k6 z
end

TOP

Hi hamandu 你可是试试对同一个仿真结果DUMP成FSDB和VPD,然后比较一下大小.
Discussing is welcome!

Best Regards

TOP

請問51file :- N. ?7 W4 j  K# ~) k
  在你的 "NC中如何DUMP出fsdb格式的波形文件"的文件中,使用"需编译"的方法
2 A0 \/ \" d( @9 V) j3 c) i) v0 h但是確發生如下的錯誤訊息3 q! b! M$ ~% Y% p" `  J# t

1 a' H7 }, Z2 {* G! E9 L0 BSYSTEM ERROR : VPI LOADFB: ?. C1 J9 y! p$ u
    fail to find requested bootstrap routine debussu_bootstrap in library ./debusspli.so
+ I8 _3 `; C* S
5 l8 c' s4 b2 |: M* B' O
  ?. l( v: o$ I; v( W  {) t0 j可否告知到底那個環節出錯 ???5 b" k5 `& q, {9 x6 X# g& C! h

5 F$ Q# W3 [) L+ ^
% r. y  ^5 W: @4 N, g1 b* v1 U謝謝

TOP

是debussy_boostrap名字不对.
& K6 v9 g, q& s5 c3 o% @/ S4 h5 E" x$ v, Z4 G9 V- ?; q
请注意以下:9 ~; o2 i& _4 N5 [6 `

4 i3 L3 _% F- e4 y文中 debussypli.so 是替代用语.
/ J- u- V6 j& m6 d* A' g
6 h/ {  E' V% I; T* X您可以不使用这名字的, 可自行定义.7 ?* X8 d2 _" E. r- }

" X0 C4 u5 m" q$ ]; Q而debussy_bootstrap 是veriuser.c里定义的bootstrap的函数名称, * [. c& s: h' z' t3 M% @
- x: R9 r: o: P8 y: [
该函数名字可以由你自己定义的, 若您没进行过修改可以查看veriuser.c文件
With your idea, Carry out together.

TOP

請問51file :     我不了解"veriuser.c里定义的bootstrap的函数名称",你可以post 一段範例嗎 真的很感謝你

TOP

請問51file :     我不了解"veriuser.c里定义的bootstrap的函数名称",你可以post 一段範例嗎 真的很感謝你

TOP

类似于以下
复制内容到剪贴板
代码:
p_tfcell alu_bootstrap()
{
  io_printf("*** Registering ALU user system tasks...\n");
  return (alu_veriusertfs);
}
With your idea, Carry out together.

TOP

謝謝51file的詳細說明 [s:1]

TOP

謝謝51file的詳細說明

TOP

请问搂主有for linux的pli文件吗?

TOP

感谢楼主,辛苦咯!!!!!!

TOP

 21 12
发新话题