news 2026/7/27 18:14:44

VCS:两步法的仿真流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VCS:两步法的仿真流程

相关阅读

VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html?spm=1001.2014.3001.5482


两步法仅支持Verilog和SystemVerilog的设计。使用两步法仿真设计涉及两个基本步骤

  • 编译(Compilation)
  • 仿真(Simulation)

编译阶段(Compilation)

编译是仿真设计的第一步。在此阶段,VCS将构建实例层次结构,并生成一个二进制可执行文件simv,该文件稍后用于仿真。在这个阶段可以选择以优化模式或调试模式来展开设计。仿真的运行时性能取决于你选择的模式和仿真过程中所需的灵活性级别,建议在确保设计正确性之前使用完整调试模式或部分调试模式,然后切换到优化模式。

优化模式(也称为批处理模式)能获得最佳的编译时间和运行时性能,通常在进行回归测试或不需要广泛的调试功能时使用。

调试模式下(也称为交互模式)通常是在开发周期的初期阶段,或者在你需要更多调试功能或工具来调试设计问题时使用。在此模式下获得的不是总体最佳性能,但通过使用某些编译时选项,可以将设计编译为完整调试模式或部分调试模式,从而在调试模式下获得局部最佳性能。

事实上,VCS两步法中的编译,就好像是三步法中的分析+展开的结合,与此不同的是,三步法中不会将中间文件保存在逻辑库中。

使用VCS

使用VCS的语法如下:

% vcs [compile options] Verilog_files

常用的命令行选项和参数

-h或-help

列出了最常用的编译时和运行时选项的描述。

-ID

返回了一些有用的信息,例如VCS版本和构建日期、VCS编译器版本(与VCS版本相同)、以及你的工作站名称、平台和主机ID(用于授权)。

-v filename

指定一个库文件,在所有源文件的编译结束后,如果编译单元内存在未解析的设计元素,将继续在库文件中进行查找,多个-v选项指定的库文件是从左至右进行查找的(如有必要)。

有关编译单元的相关知识,见下面这篇博客。

Verilog基础:八种命名空间https://blog.csdn.net/weixin_45791458/article/details/142132358?sharetype=blogdetail&sharerId=142132358&sharerefer=PC&sharesource=weixin_45791458&spm=1011.2480.3001.8118下面将以一个例子,说明该选项的作用。

// 例1 // 文件:top.v module top(); hello1 i_hello1(); hello i_hello(); endmodule // 文件:hello.v module hello(); initial $display("This is hello.v"); endmodule // 文件:hello1.v module hello1(); hello2 i_hello2(); endmodule module nihao(); initial $display("This is nihao"); endmodule // 文件:hello2.v module hello2(); initial $display("This is hello2.v"); endmodule
% vcs -full64 top.v hello.v -v hello1.v -v hello2.v

VCS将先后编译top.v和hello.v,此时编译单元中含有模块top和hello,hello1模块是未解析的。随后从左至右依次编译-v选项指定的库文件,首先编译hello1.v,在文件中找到了hello1模块的定义,将该模块加入编译单元中,此时编译单元中含有模块top、hello和hello1,但hello1模块内例化了hello2模块,而此时编译单元内不含该模块,hello2模块被认为是未解析的(注意,nihao模块不会加入编译单元中,因为它此时没有被编译单元中的任何模块例化,或者说它并不需要解析,这点与源文件不同,源文件会无条件将所有设计元素都加入编译单元)。由于存在未解析的模块,继续编译hello2.v,在文件hello2.v中找到了hello2模块的定义,将该模块加入编译单元中。

-y directory

指定一个库目录,在所有源文件的编译结束后,如果编译单元内存在未解析的设计元素,在库目录中查找与实例中的设计元素同名的文件,多个-y选项指定的库目录是从左至右进行查找的(如有必要)。

-y选项和-v选项的地位是相同的,例如对于下面的命令,查找顺序是:首先在hello1.v中查找模块hello1的定义,然后在当前目录下查找文件hello2.v,在其中查找模块hello2的定义。

% vcs -full64 top.v hello.v -v hello1.v -y ./

+libext+extension+

指定仅在库目录中搜索具有指定文件名扩展名的文件(默认没有后缀),可以使用加号(+)分隔多个扩展名(需要注意的是,添加文件扩展名的顺序并不表示搜索的顺序)。

+incdir+directory+

指定编译指令`include中文件搜索的额外目录(优先级最低),可以指定多个目录,每个路径名称之间用加号(+)分隔,多个目录或多个+incdir+选项会从左到右进行搜索(在编译指令中使用绝对路径时,该选项是没有意义的)。

+liborder

+librescan

使用一个例子可以说明这两个选项的作用。

// 例2 // 文件:top.v module top(); hello1 i_hello1(); endmodule // 文件:hello1.v module hello1(); hello2 i_hello2(); endmodule module nihao(); initial $display("This is nihao in hello1.v "); endmodule // 文件:hello2.v module hello2(); initial $display("This is hello2.v"); nihao i_nihao(); endmodule // 文件:nihao.v module nihao(); initial $display("This is nihao.v"); endmodule
% vcs -full64 top.v -v hello1.v -v hello2.v -v nihao.v

和例1一样,在hello1.v被编译后,模块nihao不会加入编译单元中, 但在编译hello2.v时,出现了一个未解析的模块nihao,vcs继续编译nihao.v并在其中找到了模块nihao的定义,这是默认的行为,也是+liborder选项的作用,即保证搜索的顺序(如果nihao.v中还是找不到模块nihao的定义,会重新回到hello1.v并开始新的一轮搜索)。

如果使用+librescan选项,一旦发现有未解析的模块,就会重新回到hello1.v并开始新的一轮搜索,此时会在hello1.v中找到模块nihao的定义,而不是在nihao.v中。

这个选项同时会影响-v和-y选项指定的库文件和库目录。

-full64

启用 64 位模式下的编译和仿真。

-file filename

指定一个包含Verilog源文件和vcs命令选项列表的文件,比-f选项更加强大。该文件内的源文件和选项按照其在文件中出现的顺序处理,多个-file选项指定的文件是从左至右进行处理的。

-R

在生成可执行文件后立刻执行它。

-o name

指定生成的可执行文件的名字,默认为simv。

-pvalue+parameter_hierarchical_name=value

将指定的参数更改为指定的值。

-parameters filename

将文件中指定的参数更改为文件中指定的值,文件中一行的语法如下:

assign value path_to_parameter

参数的路径类似于层次标识符,只是使用斜杠(/)而不是句点作为分隔符。

有关层次标识符的相关内容,见下面的博客。

Verilog基础:层次化标识符的使用https://chenzhang.blog.csdn.net/article/details/143133320?spm=1001.2014.3001.5502

-notice

启用详细的诊断消息。

-q

静默模式:不显示所有信息,例如关于VCS使用的C编译器、VCS正在解析的源文件、顶层模块或指定的时间尺度的消息。

-V

详细输出模式:VCS在运行C编译器、汇编器和链接器时,会打印它执行的命令。

-l filename

指定一个文件,VCS将在其中记录编译过程中的消息。如果还使用了-R选项,VCS将在同一个文件中记录来自编译和仿真的消息。

+define+macro

定义任意个文本宏,可以覆盖源代码中的宏定义,可以使用加号(+)连接多个宏定义。

-top top_module

指定一个顶层模块,默认情况下VCS会将所有没有被例化过的模块作为顶层模块,并执行编译(如果使用VCS三步法,则需要显式指定顶层模块)。

Verilog_files

不属于任何选项的参数,指定了源文件的名字,从左至右进行处理。

仿真阶段(Simulation)

在编译阶段,VCS使用生成的中间文件创建一个二进制可执行文件simv,使用simv来运行仿真。根据设计的编译方式,可以使用以下两种模式运行仿真:

  • 调试模式(也称为交互模式)
  • 优化模式(也称为批处理模式)

调试模式

在设计周期的初始阶段,可以在调试模式(包括交互调试模式和后处理调试模式)下编译设计。在此阶段,用户需要使用图形用户界面(GUI)或命令行来调试设计问题。要使用GUI进行调试可以使用Verdi;要使用命令行接口进行调试可以使用统一命令行接口。

注意:要在调试模式下仿真设计(包括使用fsdbDumpfile()系统函数导出波形),请使用-debug_access+r、-debug_access+all选项编译设计。

优化模式

当大多数设计问题已解决时,可以在优化模式(也称为批处理模式)下编译设计。在此阶段,可以实现更好的性能,以最小的调试能力运行回归测试。

常用的运行时选项

使用以下命令行来仿真设计:

% simv_executable [runtime_options]

-gui=[verdi|dve]

指定一个GUI进行调试,如果不指定参数,默认表示启动Verdi进行调试(前提是设置了VERDI_HOME环境变量)。

-verdi

指定启动Verdi进行调试(前提是设置了VERDI_HOME环境变量)。

-ucli
指定以UCLI模式启动进行调试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 18:14:32

从 curl 到工程封装:构建全网热搜数据聚合层

适用场景 全媒体舆情监测、热点事件追踪、内容运营选题挖掘等场景,都需要跨平台获取实时热搜数据。传统做法是逐一调用各平台自有接口,面临鉴权不同、限流分散、数据结构不统一等问题。全网热搜聚合 API 通过一次 POST 请求,同时返回微博、知…

作者头像 李华
网站建设 2026/7/27 18:14:14

怎么挖漏洞?

一、众测平台(国内) 名称网址漏洞盒子https://www.vulbox.com/火线安全平台https://www.huoxian.cn/漏洞银行https://www.bugbank.cn/360漏洞众包响应平台https://src.360.net/补天平台(奇安信)https://www.butian.net/春秋云测https://zhongce.ichunqi…

作者头像 李华
网站建设 2026/7/27 18:10:10

palera1n:为A8-A11设备解锁iOS 15-26越狱的完整指南

palera1n:为A8-A11设备解锁iOS 15-26越狱的完整指南 【免费下载链接】palera1n Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0 and higher. 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n 你是否还在为旧…

作者头像 李华
网站建设 2026/7/27 18:09:24

struct2json高级技巧:处理嵌套结构体与数组的完美方案

struct2json高级技巧:处理嵌套结构体与数组的完美方案 【免费下载链接】struct2json A fast convert library between the JSON and C structure. Implement structure serialization and deserialization for C. | C 结构体与 JSON 快速互转库,快速实现…

作者头像 李华