VCS和Verdi的协同仿真技术
最编程
2024-08-07 09:04:35
...
部分转自(https://blog.****.net/qq_40829605/article/details/85384233)
VCS+Verdi 联合仿真
1. 开发文件夹结构
- 二分频模块
half.v
- tb
testbench.v
- 计数器
counter.v
- 生成filelist
find -name "*.v" > file.list
half.v
testbench.v
counter.v
find -name "*.v" > file.list
–file.list
3. 仿真方式
vcs+verdi
vcs -full64 -f file.list -fsdb -debug_all -l test.log
./simv
verdi -f file.list -ssf test.fsdb
其他常用VCS命令:
-cm line|cond|fsm|tgl|obc|path 设定coverage的方式
+define+macro=value+ 预编译宏定义
-f filename RTL文件列表
+incdir+directory+ 添加include 文件夹
-I 进入交互界面
-l logfile文件名
-P pli.tab 定义PLI的列表(Tab)文件
+v2k 使用推荐的标准
-y [path] +libext+.v 定义verilog的库
-notice 显示详尽的诊断信息
-o 指定输出的可执行文件的名字,缺省是simv
+ nospecify 不对SPECIFY 模块进行时序检查和路径延时计算
+ notimingcheck 不进行时序检查;但是还是把path延时加入仿真中
-R 跑完仿真直接运行 ./simv
2. 文件内容
- 二分频模块
half.v
module clk_half(
clk_in
,rst
,clk_out
);
input clk_in;
input rst;
output reg clk_out;
always @(posedge clk_in or posedge rst) begin
if (rst) begin
// reset
clk_out <= 0;
end
else begin
clk_out <= !clk_out;
end
end
endmodule
- tb
testbench.v
module counter_testbench () ;
wire [3:0] out;
reg clk;
reg reset;
counter u0 (
.out (out[3:0]),
.reset (reset),
.clk (clk)
);
initial begin
clk = 1'b0;
forever #10 clk = ~clk;
end
initial begin
reset = 1'b0;
#4 reset = 1'b1;
#4 reset = 1'b0;
end
//initial begin
// $dumpfile("counter.vad");
// $dumpvars(0,u0);
//end
//`ifdef DUMP_FSDB
initial begin
$fsdbDumpfile("test.fsdb");
$fsdbDumpvars;
end
//`endif
initial #1000 $finish;
endmodule
- 计数器
counter.v
module counter ( out, clk, reset ) ;
input clk, reset;
output [3:0] out;
reg [3:0] out;
always @(posedge clk or posedge reset) begin
if (reset) begin
// reset
out <= 4'b0;
end
else begin
out <= out + 1'b1;
end
end
wire clk_out;
clk_half u0(
.clk_in(clk),
.rst(reset),
.clk_out(clk_out)
);
endmodule
- Makefile 文件用于编写vcs、verdi、clean等命令
–Makefile
下面内容仅供测试。
我的Makefile内容,可根据需要*更改。
vcs:
vcs \
-full64 \ #vcs以64位运行
-f filelist.f \ #如不使用-f参数,可以替换成每个文件的路径。filelist.f也就是将所有的需要仿真文件集合。但仿真文件一定要放在第一个位置
-debug_all \ #不加此参数, 在生成fsdb波形文件时可能会出错。
+define+DUMP_FSDB \ #定义宏,也可在仿真文件中添加,用于生成fsdb波形文件
-P /home/chenqw/synopsys/verdi_2016.06-1/share/PLI/VCS/LINUXAMD64/novas.tab \ #用于生成fsdb波形文件,修改成自己的路径
/home/chenqw/synopsys/verdi_2016.06-1/share/PLI/VCS/LINUXAMD64/pli.a \ #用于生成fsdb波形文件,修改成自己的路径
| tee vcs.log #输出仿真信息,并保存到vcs.log文件
./simv #最终生成fsdb 文件。
verdi:
verdi \
+v2k \
-sverilog \
-f filist.f \
-ssf test.fsdb & #仿真文件产生的波形文件
clean:
rm -rf `ls | grep -v "Makefile"|grep -v "filelist.f" | grep -v "\.v"` #清除仿真过程文件
clean_all:
rm -rf `ls | grep -v "Makefile"|grep -v "filelist.f"` #清除仿真过程文件和设计文件.v
其他的功能
1 ucli debug
用于debug 使用,感觉并不常用
2 $monitor
用于打印仿真相关信息,非常实用。
initial
if (!$test$plusargs("monitoroff"))
$monitor ($time, " clk: %h, reset : %h, out : %d", clk,reset,out);
3 $test$plusargs
1 `ifdef 也能实现类似的功能, 但是一旦设置了,会在整个仿真过程中一直生效,想取消只能重新编译,比较耗费时间。
`ifdef DUMP_FSDB
initial begin
$fsdbDumpfile("test.fsdb");
$fsdbDumpvars;
end
`endif
2 $test$plusargs则可可以随时改变:
initial
if (!$test$plusargs("monitoroff"))
$monitor ($time, " clk: %h, reset : %h, out : %d", clk,reset,out);
./simv +monitoroff ###关掉monitor
./simv ###monitor生效
3 $value$plusargs(这个我还没有用过,用来传递参数数值)
参考[https://blog.****.net/limanjihe/article/details/52325930]
$value$plusargs可以讲运行命令(run-options)中的参数值传递给指定的信号或者字符,其语法格式如下:
Integer=$value$plusargs(“string”,signalname);
推荐阅读
-
VCS和Verdi的合作仿真
-
VCS和Verdi的协同仿真技术
-
理解VCS中的DPI和PLI
-
如何在Verilog中通过VCS使用VPI和PLI/DPI调用C程序来实现Cover Property驱动的仿真控制?
-
使用Verdi与vcs、irun和questasim进行联合仿真的步骤记录
-
Python和Django打造美食管理与推荐系统:协同过滤算法的实战应用——计算机课程设计项目的优秀选择
-
使用Java、Selenium2和AutoIt协同实现文件右键点击保存为新副本的功能
-
在同一页面上如何让HTML和JS支持单击和双击事件的协同触发
-
深入学习 Java:探索 JavaScript 和 HTML 的协同配合方式
-
openEuler郑州用户组成立!openEuler与hyperfusion携手共建河南地区用户生态 - 开幕致辞 超融合操作系统业务总经理、openEuler委员会成员蒋振华先生为本次活动致辞。 在本次活动的致辞中,他提到,作为openEuler社区早期的成员,超融合见证了openEuler从成立到在各行业商业落地,再到跨越生态拐点的过程,感谢openEuler提供了一个全产业链共同创新的平台,共同推动创新技术的商业落地。 同时,本次活动得到了郑州市郑东新区大数据管理局、郑州中原科技城投资服务局的大力支持。 郑东新区大数据管理局曹光远 在活动致辞中表示,openEuler的应用和*应用设施的深度优化,为郑东新区数字化转型提供了安全、可靠、高性能的技术基础;郑州中原科技城招商服务局王林表示,郑东新区欢迎所有openEuler生态相关企业扎根当地,围绕openEuler社区共同发展,形成合力。 openEuler社区及运维功能介绍 openEuler技术委员会委员胡峰 openEuler技术委员会委员胡峰先生在本次活动中介绍了openEuler社区目前发展的整体情况,并重点从技术层面介绍了openEuler的运维功能。 openEuler 晚会 胡峰先生介绍智能运维工具 A-Ops 和 openEuler gala、 阿波罗 Apollo、智能漏洞管理解决方案等新功能,以及涵盖各种运维场景的精品运维组件。在*交流环节,许多用户就目前使用的 openEuler 在*交流环节,许多用户就自己在使用openEuler过程中遇到的一些问题与胡峰先生进行了进一步的交流。 软硬结合,构建多样化算力操作系统 Hyperfusion 基于 openEuler 的基础上,结合自身软硬件技术积累,推出了富讯服务器操作系统 FusionOS FusionOS. FusionOS 首席架构师张海亮 分享了 FusionOS FusionOS首席架构师张海亮分享了FusionOS的软硬件协同优势、卓越的性能和可靠性,以及FusionOS在金融、运营商、*、互联网等行业的实践案例,引起了众多用户的兴趣,分享结束后,不少参会者就FusionOS的特点向讲师提问并进行了交流。