VCS:两步法的仿真流程 相关阅读VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html?spm1001.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?sharetypeblogdetailsharerId142132358sharereferPCsharesourceweixin_45791458spm1011.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.vVCS将先后编译top.v和hello.v此时编译单元中含有模块top和hellohello1模块是未解析的。随后从左至右依次编译-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 ./libextextension指定仅在库目录中搜索具有指定文件名扩展名的文件默认没有后缀可以使用加号()分隔多个扩展名需要注意的是添加文件扩展名的顺序并不表示搜索的顺序。incdirdirectory指定编译指令include中文件搜索的额外目录优先级最低可以指定多个目录每个路径名称之间用加号()分隔多个目录或多个incdir选项会从左到右进行搜索在编译指令中使用绝对路径时该选项是没有意义的。liborderlibrescan使用一个例子可以说明这两个选项的作用。// 例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时出现了一个未解析的模块nihaovcs继续编译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。-pvalueparameter_hierarchical_namevalue将指定的参数更改为指定的值。-parameters filename将文件中指定的参数更改为文件中指定的值文件中一行的语法如下assign value path_to_parameter参数的路径类似于层次标识符只是使用斜杠(/)而不是句点作为分隔符。有关层次标识符的相关内容见下面的博客。Verilog基础层次化标识符的使用https://chenzhang.blog.csdn.net/article/details/143133320?spm1001.2014.3001.5502-notice启用详细的诊断消息。-q静默模式不显示所有信息例如关于VCS使用的C编译器、VCS正在解析的源文件、顶层模块或指定的时间尺度的消息。-V详细输出模式VCS在运行C编译器、汇编器和链接器时会打印它执行的命令。-l filename指定一个文件VCS将在其中记录编译过程中的消息。如果还使用了-R选项VCS将在同一个文件中记录来自编译和仿真的消息。definemacro定义任意个文本宏可以覆盖源代码中的宏定义可以使用加号()连接多个宏定义。-top top_module指定一个顶层模块默认情况下VCS会将所有没有被例化过的模块作为顶层模块并执行编译如果使用VCS三步法则需要显式指定顶层模块。Verilog_files不属于任何选项的参数指定了源文件的名字从左至右进行处理。仿真阶段(Simulation)在编译阶段VCS使用生成的中间文件创建一个二进制可执行文件simv使用simv来运行仿真。根据设计的编译方式可以使用以下两种模式运行仿真调试模式也称为交互模式优化模式也称为批处理模式调试模式在设计周期的初始阶段可以在调试模式包括交互调试模式和后处理调试模式下编译设计。在此阶段用户需要使用图形用户界面(GUI)或命令行来调试设计问题。要使用GUI进行调试可以使用Verdi要使用命令行接口进行调试可以使用统一命令行接口。注意要在调试模式下仿真设计包括使用fsdbDumpfile()系统函数导出波形请使用-debug_accessr、-debug_accessall选项编译设计。优化模式当大多数设计问题已解决时可以在优化模式也称为批处理模式下编译设计。在此阶段可以实现更好的性能以最小的调试能力运行回归测试。常用的运行时选项使用以下命令行来仿真设计% simv_executable [runtime_options]-gui[verdi|dve]指定一个GUI进行调试如果不指定参数默认表示启动Verdi进行调试前提是设置了VERDI_HOME环境变量。-verdi指定启动Verdi进行调试前提是设置了VERDI_HOME环境变量。-ucli指定以UCLI模式启动进行调试。

本月热点