【Synopsys工具使用】1.VCS使用与Makefile脚本调用

本文介绍了如何通过文件导入、VCS仿真(包括可视化界面和Maefile文件的使用)以及Makefile的编写,简化设计文件的编译、仿真和波形分析过程。特别强调了Makefile在自动化工作流程中的作用和仿真文件编写规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、文件导入

  新建一个文件夹新建一个文件夹(图中IC_work)
在这里插入图片描述  创建一个目录,用来存放文件(图中test)
在这里插入图片描述  将要操作的文件复制到文件夹下:在这里插入图片描述  此时打开终端,输入命令ls可以查看文件是否存在。在这里插入图片描述

二、VCS仿真(使用可视化界面)

  输入下面指令,对设计文件进行编译:

vcs -full64 -sverilog -debug_all -timescale=1ns/ns uart_dtx.v uart_tb.v -l com.log

  输入后终端显示如下:
在这里插入图片描述  目标文件夹下会多出一些文件
在这里插入图片描述  输入以下指令,打开VCS可视化界面:

dve &

在这里插入图片描述  点击simulate -> set up
在这里插入图片描述
  选择simv文件,点击ok
在这里插入图片描述  右击文件,选择Add to Waves->creat new group
在这里插入图片描述  在dve终端输入run 1s表示总共跑1s
在这里插入图片描述  即可看到仿真波形;
在这里插入图片描述

三、VCS仿真(使用Maefile文件)

3.1 Makefile文件编写

c编写Makefile文件可以让上述过程变得更简单。
  输入gvim Makefile编辑Makefile文件,在其中写入以下内容。
  Makefile文件内容:

all:find com sim run_dve  

find:
    find -name "*.v" > file.list
com:                                                                        
    vcs -full64 +vcs+vcdpluson -sverilog -debug_all -f file.list -l vcs.log
sim:
    ./simv -l vcs.log  

run_dve:                            
    dve -full64 -vpd vcdplus.vpd &  

clean:                              
    rm -rf *.vpd csrc *.log *.key *.vpd simv* DVE*

find:
  执行 find -name “*.v” > file.list 指令,将目录下的所有.v文件名写入file.list文件中。
com:
  执行 vcs -full64 +vcs+vcdpluson -sverilog -debug_all -f file.list -l vcs.log 指令,对file.list列出的设计文件进行编译。其中+vcs+vcdpluson必须,可生成接下来的vcdplus.vpd文件。
sim:
  执行./simv -l vcs.log 命令,对设计文件进行仿真。
run_dve:
  执行dve -full64 -vpd vcdplus.vpd & 命令,启动可视化界面,并读入波形文件。


3.2 仿真文件编写规范

  使用Makefile进行仿真时,测试文件的编写需要满足一定的规范。
  示例的测试文件如下:

`timescale 1ns/10ps
module uart_tb (
);

        reg                 uart_ref_clk;//system clock reference
        reg                 uart_tx_nrst;//system reset signal
        reg  [31:0]    uart_baunds_div;//baunds rate division
        reg  [7:0]        uart_tx_data;//uart tx 8bits data input   
        reg          uart_tx_data_qvld;//send data valid signal
        wire            uart_tx_finish;//uart send data finish flag
        wire              uart_tx_busy;//uart tx module busy flag
        wire              uart_tx_dout;//serial data output

        initial begin
            uart_ref_clk = 0;
            forever begin
                #1 uart_ref_clk = ~uart_ref_clk;
            end
        end

        initial begin
               uart_tx_nrst = 0;
               uart_baunds_div = 4;
            #2 uart_tx_nrst = 1;

            uart_tx_data = 8'h33;
            uart_tx_data_qvld = 1'b1;
            #2 uart_tx_data_qvld = 1'b0;
        end

        initial begin
            #1000;
            $finish;
        end

         initial  begin
                $vcdpluson;
          end 

     uart_dtx uart_dtx_inist0(
        .       uart_ref_clk(       uart_ref_clk),//system clock reference
        .       uart_tx_nrst(       uart_tx_nrst),//system reset signal
        .   uart_baunds_div(  uart_baunds_div),//baunds rate division
        .      uart_tx_data(     uart_tx_data),//uart tx 8bits data input   
        . uart_tx_data_qvld(uart_tx_data_qvld),//send data valid signal
        .    uart_tx_finish(   uart_tx_finish),//uart send data finish flag
        .      uart_tx_busy(     uart_tx_busy),//uart tx module busy flag
        .      uart_tx_dout(     uart_tx_dout) //serial data output
);
endmodule 

  其中需注意,在第1行要添加`timescale 1ns/10ps仿真时间;
  第31-34行添加整个仿真结束命令&finish,当仿真文件执行到此处,则退出仿真。若缺少该语句,则Makefile会卡死在sim过程(vcs仿真过程)。也可以不使用KaTeX parse error: Expected 'EOF', got '&' at position 25: …须在命令中指出仿真结束时间。 &̲emsp; 第36-…vcdpluson来产生vpd文件。

3.3 Makefile文件使用

  使用Makefile文件来进行仿真,只需要打开终端,写入make all指令即可,输入命令后,终端显示如下说明仿真成功:
在这里插入图片描述  等待片刻后,会打开VCS可视化界面。
在这里插入图片描述  选中需要查看的信号,右击选择Add To Waves -> New Wave View即可观察波形。
在这里插入图片描述
在这里插入图片描述

### 使用Makefile进行VCSVerdi联合仿真配置 #### 编写适用于VCS和Verdi的Makefile 为了使VCS能够自动生成用于调试的`.fsdb`文件并配合Verdi工具进行波形查看,可以在Makefile中定义特定的目标来处理编译、运行以及清理操作。以下是基于已有资料构建的一个简化版Makefile实例[^2]: ```makefile comp: vcs +v2k top_tb.v -debug_all -l comp.log sim: ./simv -l run.log -gui & clean: rm -r *.log *.vpd *.vcd *.fsdb ``` 此段代码展示了基本的编译(`comp`)、模拟执行(`sim`)及清除临时文件(`clean`)的操作。 对于更复杂的场景——即希望集成Verdi作为波形观察器的情况,则需进一步调整上述脚本以支持生成适合Verdi读取的数据格式,并提供启动Verdi的具体指令[^4]。 #### 配置环境变量以便于调用Verdi 为了让系统能够在命令行环境中顺利找到并加载Verdi及其依赖项,在用户的shell初始化文件(如`.bashrc`)里添加必要的路径设置是非常重要的一步[^5]: ```bash export SNPSYS_HOME=/opt/synopsys export VERDI_HOME=${SNPSYS_HOME}/verdi export PATH="${PATH}:${VERDI_HOME}/bin:${VERDI_HOME}/platform/LINUX64/bin" export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${VERDI_HOME}/lib" export LM_LICENSE_FILE="${LM_LICENSE_FILE}:${SNPSYS_HOME}/Synopsys.dat" ``` 这些设定确保了当用户尝试通过终端或其他方式访问Verdi时,操作系统知道去哪里寻找对应的二进制文件及相关资源库。 #### 修改后的Makefile以适应VCS+Verdi工作流 考虑到要利用Verdi来进行详细的信号追踪分析,建议对原始Makefile做如下改动,加入专门针对Verdi的支持[^3]: ```makefile .PHONY: all compile simulate view_waveforms clean all: compile simulate view_waveforms compile: vcs -R -f filelist.f +define+FSDB_DUMPFILE=dump.fsdb \ +define+FSDB_DUMP_VCD top_tb.sv -debug_pp -full64 -sverilog \ -timescale=1ns/1ps -o simv -l vcs_compile.log simulate: ./simv | tee vcs_run.log view_waveforms: verdi -ssf dump.fsdb & clean: rm -rf csrc DA* lint.* *.key *.dat *.dir *.log ucli.key *.svf *.trc *.h *.cpp *.dll *.so *.exe *.out *.elf *.pdb *.map *.xml *.json *.gz *.bz2 *.xz *.zip *.tar *.tgz *.tbz *.txz *.7z work .work *~ .*~ core.* ``` 这里增加了几个新的目标:`all`, `view_waveforms` 和一些辅助性的清理规则。特别是`compile`部分加入了创建`.fsdb`文件所需的选项,而`view_waveforms`则负责打开Verdi并将之前产生的波形数据传递给它显示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPRAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值