VCS工具学习笔记(4)


目录

引言

VCD文件及生成

实际操作

makefile

 编译仿真

 打开波形文件

其他

1、$vcdpluson() 参数更改

2、 $vcdplusmemon()

3、__FILE__  , __LINE__



引言

按照视频的讲解进度,继续学习 VCS的使用。

前两篇文章:

VCS 工具学习笔记(1)

VCS工具学习笔记(2)

VCS工具学习笔记(3)

本文主要学习VCD+文件的后处理。

本系列文章建议电脑端查看~~



VCD文件及生成

VCD文件是 VCS 原来版本的波形文件格式,VCD+在此基础上做了压缩处理,降低了内存处理的压力。

VCS工具学习笔记(4)_第1张图片

VCS工具学习笔记(4)_第2张图片

 影响速度的关系:

1、设计代码的质量;2、编译选项的选项;3、运行环境性能;4、是否保存波形

·

VCS工具学习笔记(4)_第3张图片

 在设计源代码或者仿真源代码中加入系统任务 : $vcdpluson

波形文件后缀 .vpd

 系统任务使用:

 解释:

VCS工具学习笔记(4)_第4张图片

 在上面的层级关系中:

如果指定 level_number 参数为 0 ,module_instance 为 B,那么将记录 模块 B C D的波形;

如果指定 level_number 参数为 2 ,module_instance 为 A,那么将记录 模块 A B 的波形;

VCS工具学习笔记(4)_第5张图片

 例子:

 编译选项:

 例子:

 宏定义应用:





实际操作

makefile

1、在工程目录下创建新文件,命名为:Makefile

2、打开编辑:

此处先放上我的文件内容。这个折腾了好久。参考并致谢以下:

数字IC设计之仿真工具synopsys VCS -降噪版

VCS 仿真filelist文件生成

ln: failed to create symbolic link ‘/usr/bin/mysql’: File exists

.PHONY: com cov clean debug

OUTPUT = simv_FSM

VPD_SW_DEFINE = +define+VPD_TEST
INC_C_DIR   = ./RTL/my_printf.c

# code coverage command
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name $(OUTPUT)
CM_DIR = -cm_dir ./$(OUTPUT).vdb

# vpdfile name
VPD_NAME = simv_FSM.vpd


# compile command
VCS = vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed   \
	  $(INC_C_DIR)							 \
	  -sverilog +v2k -timescale=1ns/1ns      \
      -debug_access+r 	             		 \
      -Mupdate								 \
      +notimingcheck			     		 \
      +nospecify			                 \
      +vcs+flush+all			             \
      $(VPD_SW_DEFINE)						 \
      -o $(OUTPUT)							 \
      -l compile.log						 
	

      # +notimingcheck			     		 \
      # +nospecify			                 \
      # +vcs+flush+all			             \
      # $(CM)				                 \
      # $(CM_NAME)							 \
      # $(CM_DIR)							 \
      							 
      

# simulation command
SIM = ./$(OUTPUT)							 \
      -l $(OUTPUT).log
	  # $(CM) $(CM_NAME) $(CM_DIR)	         \
	  # $(VPD_NAME)							 \
	  

# start complie
com:	
	find -name "*.v" >filelist.f 
	$(VCS) -f filelist.f


# start simulation
sim:
	$(SIM)
	mv vcdplus.vpd $(VPD_NAME)

# show the coverage
cov:
	dve -covdir -vdb &
debug:
	dve -vpd $(OUTPUT).vpd &

# start clean
clean:
	rm -rf ./csrc *.daidir *.log *.vpd *.vdb simv* *.key *race.out* *.so.*

问题说明: 

问题1:

error while loading shared libraries: libelf.so.1: cannot open shared object file: No such file or directory

因为没有增加以下指令:

VCS工具学习笔记(4)_第6张图片

 当时我就纳闷了,终端直接输入 vcs 就能直接运行,为啥换到makefile就不行。

感谢上面第三个链接给了提醒,我去  .bashrc 文件里面看了一下,原来vcs的别名里面有这个:

VCS工具学习笔记(4)_第7张图片

 那么我瞬间就明白了。。。

问题2:

Error-[P1ARGS-CANTOPN-F] Cannot open file
  Unable to open 'filelist.f' due to 'No such file or directory'.

感谢上面第二个链接给的思路

我在makefile里面增加这个就可以了,建立 filelist.f 文件

VCS工具学习笔记(4)_第8张图片

 当然也可以手写路径

编译没问题:

VCS工具学习笔记(4)_第9张图片

VCS工具学习笔记(4)_第10张图片

 编译仿真

在本系列的第一篇博文的有限状态机模块的模块基础上,增加宏定义,控制VPD文件的生成。为例方便,此处将仿真文件再次贴出来:

// |--------------------------------- VCS test testbench file -------------------------------
// |Description : a simple fsm testbench.
// |Author      : Xu Y. B.
// |Date		: 2022-11-06
// |
// |----------------------------------------------------------------------------------------


`timescale 1ns/1ns

module TB();
// --------------module parameters specify ---------------- 
parameter 			P_DATA_WIDTH  	=	10;

// --------------input / output ports specify--------------
// input ports
reg 									I_CLK_100M;
reg										I_RSTN;
reg 									I_FSM_START;
// output ports
wire									O_DATA_VAL;
wire  		[P_DATA_WIDTH-1:0]			O_DATA;

// --------------clock setting-----------------------------
`define CLK_PRD 10
initial I_CLK_100M = 1'b0;
always #(`CLK_PRD/2) I_CLK_100M = ~I_CLK_100M;

// --------------control signals setting-------------------
initial 
begin
	I_RSTN = 1'b0;
	I_FSM_START = 1'b0;
	#(`CLK_PRD*10);
	I_RSTN = 1'b1;
	#(`CLK_PRD*5);
	I_FSM_START = 1'b1;
	@(negedge O_DATA_VAL);
	#(`CLK_PRD*10);
	$finish;
end

// DPI test
import "DPI" function void my_printf(string str); 
initial
begin
	my_printf("DPI test successfully!");
end

// VPD test
initial
begin
`ifdef VPD_TEST
	$vcdpluson();
`endif
end

// --------------initiate module---------------------------
FSM #(
		.P_DATA_WIDTH(P_DATA_WIDTH)
	) FSM_INST (
		.I_CLK_100M  (I_CLK_100M),
		.I_RSTN      (I_RSTN),
		.I_FSM_START (I_FSM_START),
		.O_DATA_VAL  (O_DATA_VAL),
		.O_DATA      (O_DATA)
	);     

endmodule

主要的变化(增加):

VCS工具学习笔记(4)_第11张图片

重新演示一遍:

清理、编译:

VCS工具学习笔记(4)_第12张图片

VCS工具学习笔记(4)_第13张图片

 打开波形文件

方式1:通过 dve

1、终端输入:

dve &

2、打开图形界面后:

VCS工具学习笔记(4)_第14张图片

VCS工具学习笔记(4)_第15张图片

3、而后的操作和第一篇说的过程相同,此处不再赘述。

4、debug

如果通过波形定位到出错的波形位置,那可以通过鼠标左键双击有问题的波形将对应的源代码调出来查看

 方式2:直接在终端打开

dve -vpd vcdplus.vpd  &

其他

1、$vcdpluson() 参数更改

关于 vcdplus 相关的其他操作,比如只保存某一层或者某基层模块的信号波形,可以通过源代码修改参数即可 ,如:

VCS工具学习笔记(4)_第16张图片

这样仅记录了 TB 模块的信号:

VCS工具学习笔记(4)_第17张图片

2、 $vcdplusmemon()

如果不打开此任务,波形文件无法记录 memory 类型信号的波形。

3、__FILE__  , __LINE__

这两个宏可以帮助定位代码执行所在的文件和行

例:

在源代码中加入:

VCS工具学习笔记(4)_第18张图片

仿真时:

VCS工具学习笔记(4)_第19张图片


  

问题遗留:

vpd文件名更改:

在makfile文件中已经使用了如下命令,但是还是生成了默认名为 vcdplus.vpd 的vpd文件,尝试从终端直接输入命令还是改不了名字。不知为何还在解决中。

VCS工具学习笔记(4)_第20张图片

但是呢,我这里有一个下策,那就是执行完仿真后,强行改名字:

VCS工具学习笔记(4)_第21张图片



欢迎交流~~~~

你可能感兴趣的:(Synosys,Tool,VCS,VCD+)