中级会员
- 积分
- 391
- 金钱
- 391
- 注册时间
- 2019-7-5
- 在线时间
- 97 小时
|
50金钱
在使用Vivado或者使用Modelsim仿真的时候,有时候需要把数据导出来到MATLAB中,和MATLAB的仿真结果对比。
之前一直使用的是$fdisplay对数据进行输出,如下所示。
(需要输出的信号都配对了同步信号用来确保不会有无效的数据导出去)
- /* synthesis translate_off */
- integer handle;
- initial begin
- handle = $fopen("../../../../sim_out_data/sim3/wave0_data0_real.txt");
- end
- always@(posedge clk_200MHz)begin
- if(wave0_valid)
- $fdisplay(handle,"%d",wave0_data0_real);
- end
- /* synthesis translate_on */
复制代码
但是当同时用这种方法同时导出很多信号的时候,就会发现有的数据对应的txt文件会丢失,不会建立相应的文件
或者建立了但是文件一直是0KB(查看文件的时候已经退出了仿真)
在网上看到另外一种使用tcl语言的方法:
- proc write_sim_data {env name radix cycle file} {
- set fid [open $file w]
- for {set i 0} {$i <= $::now} {incr i [expr $cycle * 1000]} {
- set str [exa -env $env -radix $radix -time ${i}ps {*}$name]
- puts $fid $str
- }
- close $fid
- }
复制代码 但是这种也存在问题:没办法关联数据有效信号以及数据时钟,只能取决于Modelsim的绝对时钟
所有想请问一下有没有其他更好的导出的方式?(现在主要用的是Modelsim仿真)
|
|