• SystemVerilog:如何指定仿真源文件?


    目录

    1. 前言

    2. 最基本的方式

    3. 指定多个文件

    4. 使用filelist文件

    5. 指定整个目录中的所有指定后缀的文件

    7. 指定include文件的搜索路径

    8. 追加宏的定义

    9. Verdi相关的选项


    1. 前言

            各大EDA厂商提供的逻辑仿真器(比如说VCS, IRUN/Xcelium, ModelSim/QuestaSim等)以及一些设计验证辅助工具,比如说波形观测工具Verdi等,都提供了大抵相同的源文件指定方式。本文从最基本的到一定规模以上的设计所常用的各种方式进行概要性介绍。

     

    2. 最基本的方式

            最基本的方式就是直接在命令行指定单个源文件,比如说(这里以vcs为例,但是对于其它常见工具也基本都适用,下同):

    vlogan -sverilog design1.sv

            其中vlogan是vcs的编译命令。以上命令针对一个设计文件进行编译。-sverilog表示其后跟随的文件应该按照SystemVerilog语法进行编译。不指定文件类型的话缺省为verilog。不过,在细节方面处理各种工具有所不同。比如说,vcs是用-sverilog,而QuestaSim、irun等则是用"-sv"。又比如说,有些EDA工具也会根据文件名后缀来推断其类型。除非是文件名后缀为.v,但是希望按照SystemVerilog语法来解释才需要显式地指定“-sv”选项。而vcs则不看文件名后缀,要按systemverilog语法编译必须显式地指定"-sverilog"。

     

    3. 指定多个文件

            指定多个文件自然就是,作为直感,在命令行跟多个文件就好了。

    vlogan -sverilog design1.sv design2.sv design3.sv ...

            但是想一下,如果很多个文件(比如说十几个),而调试阶段需要反复执行编译命令,每次输入这么多文件名就会成为一件令人崩溃的事情(虽然一般来说用up/down键可以查到命令历史避免重复输入的情况)。当文件数再多一些,哪怕在命令行只需要输入一次(其后都用up/down键可以查到命令历史来复用)也是一件可怕的事情。这时候,就需要考虑用一个文件来将所有文件列入其中,参见下一节。

     

    4. 使用filelist文件

            将所需要加入的源文件都列在一个文本文件中,然后命令行用“-f”选项引用该文件,这样就解决了上一节所提出来的问题。比如说:

    file.lst (ASCII文件,即文本文件):

    -sverilog design1.sv 

    -sverilog design2.sv 

    -sverilog design3.sv

    ....

    -sverilog design100.sv

            然后在命令行只需要如下即可:

    vlogan -f file.lst

            当源文件有增删(注意,不是说源文件内容有修改,而是说要添加一个文件或删除一个文件)时只需要单独修改file.lst即可。注意,“file.lst”不是一个专用文件名,你可以自行选择任意合适的文件名。

            但是,当一个大型项目有许多个源文件目录,有非常多的文件(比如说不同的模块、不同的子系统由不同的队伍分别开发,现在做系统集成),像这样一个问一个文件地列出来也是一件和费劲的事情。这时候就可以考虑以指定目录,并结合文件类型(文件后缀)指定的方式来将指定目录下的所有指定后缀类型的文件全部加入了,参见下一节。

            

    5. 指定整个目录中的所有指定后缀的文件

            “-y”用于指定目录路径

            “-libext+”用于指定文件后缀名

            比如说要将目录src1底下的所有.v和.sv后缀的文件全部加入编译列表,可以在命令行,当然更常见的是在一个文件中指定如下:

    /************************************************************************
    *             RTL source file
    ************************************************************************/
    -y ../../../src/IP_LIB1
    -y ../../../src/WAFE_RX
    -y ../../../src/HIF
    +libext+.v

    +libext+.sv

     

    7. 指定include文件的搜索路径

            有些文件,通常是用于定义参数或者宏定义的头文件是以include的方式包含在其它源文件中,通常在“`include”语句不包含路径信息。编译器在看到“`include”语句时需要去搜索该文件在哪里。这个时候可以用“+incdir+”选项来告诉编译器应该到哪里去找被include的头文件,如下例所示:

    /************************************************************************
    *             RTL source file
    ************************************************************************/

    +incdir+../../../src/header/
    -y ../../../src/IP_LIB1
    -y ../../../src/WAFE_RX
    -y ../../../src/HIF
    +libext+.v

    +libext+.sv

    ../../../src/TOP/design1.sv

    ../../../src/TOP/design2.sv

            当然在以上这个file.lst文件中仍然可以另行指定单个的文件,如最后两行所示。

     

    8. 追加宏的定义

            有时候一个设计可以通过宏开关来控制其中的配置情况,比如说一个DMA的设计,4个通道还是8个通道,在编译时指定宏的值来决定按几个通道进行设计配置,也同样可以在命令行或者file.lst指定宏的定义,这里有两种情况。如下所示(最后两行):

    1. /************************************************************************
    2. *             RTL source file
    3. ************************************************************************/
    4. +incdir+../../../src/header/
    5. -y ../../../src/IP_LIB1
    6. -y ../../../src/WAFE_RX
    7. -y ../../../src/HIF
    8. +libext+.v
    9. +libext+.sv
    10. ../../../src/TOP/design1.sv
    11. ../../../src/TOP/design2.sv
    12. +define+NUM_CH=8
    13. +define+DMA_ON

            其中,

            NUM_CH对应于设计中使用到的一个参数类的宏,比如说用于指定通道数为8个。

            DMA_ON则对应于设计中使用的一个开关类的宏,比如说用于打开或关闭某一段代码。

    9. Verdi相关的选项

            上面通过-y 指定library目录, +libext+.v指定library后缀名。 有时候还用-v 来指定library文件。但是这样直接被verdi吃进去以后不能显示hierarchy和文件。比如说,用Verdi看电路的schematic图时,无法点进去看到下一层次。

            verdi提供了解决的办法是(是否专属于verdi?待确认):   -ssy  (用来取消-y指定的library为library cell)     -ssv (用来取消-v 指定的library为library cell)

    1. /************************************************************************
    2. *             RTL source file
    3. ************************************************************************/
    4. -ssy
    5. -ssv
    6. +incdir+../../../src/header/
    7. -y ../../../src/IP_LIB1
    8. -y ../../../src/WAFE_RX
    9. -y ../../../src/HIF
    10. +libext+.v
    11. +libext+.sv
    12. ../../../src/TOP/design1.sv
    13. ../../../src/TOP/design2.sv
    14. +define+NUM_CH=8
    15. +define+DMA_ON

    参考:

    vcs/verdi filist - FLYMOOD - 博客园 (cnblogs.com)

    VCS® User Guide

    Questa® SIM User's Manual

  • 相关阅读:
    MCE | 靶向 cGAS-STING 通路或可治疗渐冻症
    数据结构之八大排序及代码
    多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)
    linux 测试存储介质.emmc.nand.ufs.硬盘的读写速度方法
    上海亚商投顾:沪指震荡调整跌 减肥药、华为概念股持续活跃
    工厂因封控停工,客户问到一般怎么说?
    中国人民大学与加拿大女王大学金融硕士毕业生:心有明月昭昭,千里赴迢遥
    Java字节码增强技术(NoClassDefFoundError)问题
    一款强大的子域名收集工具(OneForAll)
    Doccano 修复 spacy.gold 的bug
  • 原文地址:https://blog.csdn.net/chenxy_bwave/article/details/125893738