逻辑仿真工具VCS的使用-Makefile

105 篇文章 13 订阅

        Gvim写RTL code,VCS仿真,Verdi看波形,DC做综合下约束,Primetime做STA,Spyglass做异步时序分析。 
         VCS全称Verilog Computer Simulation ,VCS是逻辑仿真EDA工具的编译源代码的命令。要用VCS做编译仿真,首先得有一个RTL代码,比如我们写了一个全加器和全加器的testbench,总共两个.v文件 。

有了RTL文件后,如何调用VCS进行编译呢? 在.v文件所在的目录下打开terminal,键入:

        vcs -sverilog -debug_all full_adder.v full_adder_tb.v -l com.log
上面有很多细节,一个一个讲:

        -sverilog:编译命令选项,识别SystemVerilog语法,如果代码中有SV语法,则编译的时候必须加这个选项。

        -debug_all:编译命令选项,可以将debug的信息全部保存下来,比如波形文件。

        -l com.log:编译命令选项,将编译过程生成的日志写入com.log文件。

        执行完上面这条代码后,如果编译没有报错,一切正确,那么在当前文件夹就会生成一个simv文件,这个文件就是仿真文件,我们跑仿真就用这个文件,注意是simv不是sim。

        当然除了写命令调用VCS,也可以用命令:dve & ,启动逻辑仿真工具VCS自带的一个图形化界面dve。命令中的& 表示后台运行dve命令,不占用当前的 terminal。 

        图形化界面如果想要跑仿真,点击simulate的setup选项,然后选中编译过后的仿真文件simv文件,就可以进行跑仿真了。

把需要看波形的信号点击,Add to wave,然后就会打开一个波形窗口。

生成的波形窗口如下,在底层的输入命名行输入:run,就会开始跑仿真了。

 输入run之后,开始仿真就可以看波形了。 

按f键,显示所有波形,下面的log窗口就是显示仿真的日志。

        上面讲的操作是用界面化的DVE窗口去操作的,实际上我们都使用脚本命令的方法去操作,写命令行编译、写命令行仿真、写命令行看波形。

        看波形命令为:dve -vpd vcdplus.vpd & ,想要看波形,我们需要在tb文件里面输出波形文件才行,在tb中展示为:

                                        initial begin

                                            $vcdpluson;

                                        end 

输出波形文件后就可以用脚本命令调用dve看波形了。

综上,我们用VCS进行编译、仿真、看波形的脚本命令分别为:

        编译源代码:vcs -sverilog -debug_all full_adder.v full_adder_tb.v -l com.log

        跑仿真:./simv -l sim.log

        看波形:dve -vpd vcdplus.vpd &

        但事实上,如果每次编译仿真看波形,都要用手去打这些字符的话,会很累,能不能用什么脚本命令,让我们能够键入很少的字符,就可以进行编译仿真看波形,甚至一条龙服务呢?有,Makefile。

        我们用Gvim新建一个文本文件,命名为Makefile,然后如图所示写命令,写命令的方式就是,写一个随便什么关键字,然后+冒号+回车,再键入你设置关键字绑定的脚本命令。比如我们上面写的com,是用来编译的用户自定义关键字,下一行就紧跟着我们定义关键字所代表的代码。注意一个细节,怎么判断我们写的脚本是否被自定义挂件字链接了呢?看颜色,如果没有连接上的话,颜色是普通的黑色,如下图:

这就代表没链接上,通常是由于缩进问题导致的,这点需要注意。

        还有一个细节,细心的人会发现,我们编译的时候,没有把文件的名字写到com脚本连接的命令里,而是写 -f rtl.list。这是什么意思呢,这里的rtl.list用来存放我们rtl 代码的名字,用这种方式更方便,后续修改rtl代码名称也好,增减也好都好修改,我们只需要把所有rtl代码的名字都存放到rtl.list中,生成rtl.list的命令也很简单,只要检索当前目录下所有以.v结尾的文件的文件名,然后存入rtl.list就行了,linux命令:find -name "*.v" > rtl.list

        对于某个信号,还有一些好用的快捷键可以实用比如圈出来的三个按键 

         它们分别是:Trace Drivers (Ctrl + D)追踪它的驱动、Trace Value Change ( Ctrl + Shift + D) 追踪代码中数值改变的位置、Trace Loads (Ctrl + Loads)追踪它的负载。 

 

 选择要追踪的边沿或者数值,可以直接追踪。 

        在上面已经提到过Makefile 脚本的书写格式,就是写一个关键字加冒号,然后回车输入一行命令,输入完后,以后要运行这行命令就不用全部打全了,只需要在terminal界面,输入make 关键字就行了。

        比如,我们已经在当前文件夹下写好了上面所示的Makefile脚本文件,然后我们也写好了rtl代码,并在terminal 中输入:find -name "*.v" >rtl.list,把.v文件的相对路径都放到了rtl.list中。这时候如果要编译,我们只需要在terminal界面输入:make com 回车

        系统会自动帮我们打出com关键字所链接的命令行,如图所示: 

Makefile 脚本命令解释:


        vcs表示调用vcs软件,-sverilog 表示编译所用的规范,如果我们写的代码里有systemverilog就一定要有这个选项,-debug_all 完全调试模式, -timescale = 1ns/1ps 这个在编译的时候就写,那么在tb里面就不用写了,表示最小仿真时间是1ns,最小仿真精度是1ps。-f rtl.list意思是吧rtl.list里的所有文件都编译进去, -l com.log 意思是把编译产生的编译文件保存在com.log文件中。

        ./simv 表示运行当前文件夹下的simv文件,这个文件在com命令过后会生成,也就是编译结束后会生成。-l sim.log,意思是把仿真产生的仿真信息都存储在sim.log文本文件中。 

        把以后缀“.vpd”、“.log”、“.key”、“.vdb”的文件删掉,把csrc文件删掉,把sim开头的文件删掉,把DVEfiles文件删掉。删掉运行verdi软件产生的一些附属文件。

        这里写的是设计的一些VCS操作,实际上如果是做验证的话,还会有更多的一些操作,比如收覆盖率,仿真给随机种子等。

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: vcs仿真 -deraceclockdata race命令是vcs仿真器中的一个用法,在进行时钟域(clock domain)处理时非常有用。该命令的作用是删除仿真器中的数据并修复由于时钟域交叉引起的问题。 时钟域交叉是指在系统设计中,不同的时钟信号以不同的速率运行,可能会导致数据在时钟域之间的相互交叉。这种交叉可能会导致在仿真过程中出现时序(timing)和同步(synchronization)问题。通过使用-vcs仿真器的deraceclockdata选项,我们可以解决这些问题。 具体来说,-deraceclockdata race选项用于检测和纠正由于时钟域交叉引起的竞争条件(race condition)的问题。它在仿真期间监测数据流经过不同时钟域的情况,并根据时钟域之间的关系来解决并发读写问题。 使用-vcs仿真器的-dereaceclockdata race选项时,仿真器将根据给定的配置文件对模拟的数据进行纠正。这个配置文件告诉仿真器哪些数据流被视为交叉的,并根据时钟域之间的关系来修复它们。 总而言之,vcs仿真器中的-deraceclockdata race选项是一种解决时钟域交叉问题的方案。它通过识别并修复可能导致时序和同步问题的交叉数据流,提高了设计的准确性和稳定性。 ### 回答2: vcs仿真 -deraceclockdata race 是VCS仿真工具的一个选项。它可以用于race条件检测。 在多线程程序中,如果两个或多个线程同时访问和修改共享数据,可能会出现race条件。race条件指的是对共享数据的竞争访问,结果取决于这些线程的执行顺序,从而导致不确定的行为。 -vcs仿真 -deraceclockdata race选项能够帮助开发人员检测和排除race条件。当使用该选项时,VCS仿真工具会在运行时追踪和记录每个线程对共享数据的访问和修改操作。然后,它会分析这些操作的执行顺序以检测是否存在race条件。 如果存在race条件,VCS仿真工具会生成相应的报告,指示在哪些地方可能会出现race条件以及可能的执行顺序。开发人员可以根据这些报告来识别和修复race条件,从而提高程序的稳定性和可靠性。 总而言之,vcs仿真 -deraceclockdata race选项是VCS仿真工具中用于race条件检测的一个功能。它通过跟踪和分析多个线程对共享数据的访问和修改操作来帮助开发人员发现潜在的race条件,并提供相应的报告以指导修复。这有助于提高程序的稳定性和可靠性。 ### 回答3: vcs仿真是一种常用的电路设计验证工具,可以帮助工程师在设计阶段评估电路的性能和功能。在vcs仿真中,-deraceclockdata race是一个选项,用于识别和解决时序问题。 时序问题主要指的是在电路中存在的由于时钟信号引发的数据冲突或竞争。当数据在时钟上升沿或下降沿发生改变时,可能会导致信号传输延迟,从而出现数据冲突。这种情况下,电路的行为将变得不可预测,导致设计错误或功能失败。 -deraceclockdata race选项在vcs仿真中非常有用,它可以帮助工程师及早发现和解决时序问题。具体而言,该选项可以检查不同时钟域中数据的传输时间,以确定是否存在潜在的冲突或竞争条件。如果存在时序问题,vcs仿真工具会生成警告或错误信息,以指示设计中的问题。 通过使用-deraceclockdata race选项,工程师可以及时发现潜在的电路时序问题,并通过调整设计、提高时序容量或使用适当的同步电路来解决这些问题。这样可以确保设计的性能和稳定性,并降低开发过程中出现不良结果的风险。 总之,vcs仿真中的-deraceclockdata race选项对于识别和解决时序问题非常重要。通过使用该选项,工程师可以确保设计的准确性和可靠性,提高电路的性能和功能效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值