相关阅读VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html使用三步流程仿真设计涉及三个基本步骤分析(Analysis)展开(Elaboration)仿真(Simulation)VCS使用这三个步骤编译任何设计无论所使用源代码的是HDL、HVL或其他支持的技术。分析阶段(Analysis)分析是仿真设计的第一步。在这个阶段设计者使用vhdlan或vlogan命令分析VHDL、Verilog、SystemVerilog和OpenVera文件以下部分包含了一些示例命令行来分析设计文件分析VHDL文件% vhdlan [vhdlan_options] file1.vhd file2.vhd分析Verilog文件% vlogan [vlogan_options] file1.v file2.v分析SystemVerilog文件% vlogan -sverilog [vlogan_options] file1.sv file2.sv file3.v分析OpenVera文件% vlogan -ntb [vlogan_options] file1.vr file2.vr file3.v同时分析分析SystemVerilog和OpenVera文件% vlogan -sverilog -ntb [vlogan_options] file1.sv file2.vr file3.v可以在同一个vlogan命令行中同时分析SystemVerilog文件或OpenVera文件以及其他Verilog文件如上例所示。在分析阶段VCS会检查设计中的语法错误生成展开阶段所需的中间文件命令行中的所有源文件属于同一个编译单元VCS使用多文件单编译单元源文件中每个设计元素如moduleprogrampackage等都有相应的中间文件所有的中间文件在完成编译后会被保存在默认逻辑库中或使用-work选项来指示VCS将这些中间文件保存到指定的逻辑库中可以使用llib命令查看逻辑库的内容。synopsys_sim.setup文件中定义了从逻辑库到物理目录的库映射如果使用-work选项需要确保指定的逻辑库存在否则VCS将提示错误消息并退出。下面是一个synopsys_sim.setup文件的示例。// 文件synopsys_sim.setup WORK DEFAULT DEFAULT : ./work lib1 : ./lib1 lib2 : ./lib2需要注意编译单元和逻辑库的区别每条vlogan命令都会创建一个编译单元而将编译结果保存在逻辑库中。使用vhdlanvhdlan可执行文件用于分析VHDL设计文件并将生成的中间文件存储在逻辑库中语法如下所示% vhdlan [vhdlan_options] VHDL_filename_list常用的命令行选项和参数-help显示vhdlan命令的用法信息。-nc不显示Synopsys版权信息。-q不显示vhdlan命令的所有信息。-version显示vhdlan的版本号并直接退出不进行分析。-full64为64位仿真分析设计。-work library指定一个保存中间文件的逻辑库或物理目录该逻辑库或物理目录必须在设置文件中进行了映射。-vhdl87允许分析包含VHDL-93保留字的非可移植VHDL代码。-vhdl02允许分析VHDL 2002受保护类型。-vhdl08允许分析VHDL 2008结构。-output outfile将标准输出通常显示在屏幕上重定向到指定的文件。-xlrm启用超出LRM(Language Reference Manual)描述的VHDL特性。-f filename指定一个包含VHDL源文件和vhdlan命令选项列表的文件应首先指定最底层的VHDL实体然后向上移动该文件内的源文件和选项按照其在文件中出现的顺序处理多个-f选项指定的文件是从左至右进行处理的。-functional_vital指定生成功能性VITAL仿真模式的代码。-l filename指定一个日志文件在其中记录分析过程中的信息。-no_functional_vital指定生成全时序性VITAL仿真模式的代码。VHDL_filename_list指定要分析的VHDL源文件名如果未提供扩展名则默认其为.vhd从左至右进行处理。-init_std_logic value用给定的九种值中的一种初始化所有未初始化的VHDL信号、端口和变量数据类型为STD_LOGIC或STD_ULOGIC无论矢量还是标量。这两种类型的VHDL信号或变量可以取以下值‘U’‘X’01ZWLH-。也可以在synopsys_sim.setup文件中初始化值在该文件中可以将九种值中的一种设置给变量INIT_STD_LOGIC例如INIT_STD_LOGIC0。使用vloganvlogan可执行文件用于分析Verilog等设计文件并将生成的中间文件存储在逻辑库中语法如下所示% vlogan [vlogan_options] Verilog_filename_list常用的命令行选项和参数-help显示vlogan命令的用法信息。-nc不显示Synopsys版权信息。-q不显示vlogan命令的所有信息。-f filename指定一个包含Verilog源文件和vlogan命令选项列表的文件该文件内的源文件和选项按照其在文件中出现的顺序处理多个-f选项指定的文件是从左至右进行处理的。-full64为64位仿真分析设计。-ignore keyword_argument不显示指定参数的警告消息keyword_argument可以是unique_checks关于unique if和unique case语句的警告消息。priority_checks关于priority if和priority case语句的警告消息。all包括以上两者。该选项只能在分析时使用如果在展开时使用则会出现错误。-l filename指定一个日志文件在其中记录分析过程中的信息。-liblist logical_lib1logical_lib2...logical_libn在SystemVerilog中包(package)导入需要在分析阶段就进行1、如果编译单元内包导入前有编译到相应的包则使用编译单元内的包进行解析。2、如果编译单元内包导入前没有编译到相应的包则在逻辑库中进行查找。该选项指定了查找包时的逻辑库搜索顺序如果未包含-liblist选项vlogan将首先搜索指定的逻辑库如果未指定-work选项这指的是默认逻辑库如果在其中没有找到再依次搜索synopsys_sim.setup文件中的所有其他逻辑库并在找到包时停止。-ntb启用OpenVera测试基准语言结果。-ntb_define macro定义任意个OpenVera宏可以使用加号()连接多个宏定义。该选项只能在分析时使用如果在展开时使用则会出现错误。-ntb_filext .ext指定OpenVera文件扩展名可以使用加号()连接多个文件扩展名。该选项只能在分析时使用如果在展开时使用则会出现错误。-ntb_incdir directory_path指定OpenVera文件的包含目录路径可以使用加号()指定多个包含目录。-ova_file filename将filename识别为断言文件如果文件名以.ova结尾则不需要此选项对于多个断言文件请对每个文件重复此选项。-sverilog启用对SystemVerilog源代码的分析。该选项只能在分析时使用如果在展开时使用则会出现错误。-sv_pragma指示编译在单行或多行注释中紧随sv_pragma关键字后的SystemVerilog断言代码。该选项只能在分析时使用如果在展开时使用则会出现错误。-timescaletime_unit/time_precision为未包含timescale编译指令的源文件指定时间单位和时间精度覆盖那些包含timescale编译指令的源文件的时间单位和时间精度。指定此选项的参数时请勿包含空格。-v library_file指定一个库文件在所有源文件的分析结束后如果编译单元内存在未解析的设计元素将继续分析库文件如果与未解析的设计元素匹配则会将该设计元素以库格式加入逻辑库中之前所有设计元素加入逻辑库指的都是以设计格式多个-v选项指定的库文件是从左至右进行分析的如有必要。该选项只能在分析时使用如果在展开时使用则会出现错误。有关编译单元的相关知识见下面这篇博客。Verilog基础八种命名空间-CSDN博客文章浏览阅读1.0k次点赞46次收藏27次。Verilog有八个标识符命名空间其中两个是全局的定义命名空间和文本宏命名空间六个是局部的模块命名空间块命名空间、生成块命名空间、端口命名空间、specify块命名空间、属性命名空间。_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% vlogan -full64 top.v hello.v -v hello1.v -v hello2.vvlogan将先后分析top.v和hello.v此时编译单元中含有模块top和hellohello1模块是未解析的。随后从左至右依次分析-v选项指定的库文件首先分析hello1.v在文件中找到了hello1模块的定义将该模块加入编译单元中此时编译单元中含有模块top、hello和hello1但hello1模块内例化了hello2模块而此时编译单元内不含该模块hello2模块被认为是未解析的注意nihao模块不会加入编译单元中因为它此时没有被编译单元中的任何模块例化或者说它并不需要解析这点与源文件不同源文件会无条件将所有设计元素都加入编译单元。由于存在未解析的模块继续分析hello2.v在文件hello2.v中找到了hello2模块的定义将该模块加入编译单元中最后编译单元中的所有中间文件保存到指定的逻辑库中注意假设分析的最后存在未解析模块也不会有任何问题只要在展开阶段使用逻辑库中的模块对顶层模块进行解析时不要出现未解析模块就行。-y library_directory指定一个库目录在所有源文件的分析结束后如果编译单元内存在未解析的设计元素在库目录中查找与实例中的设计元素同名的文件并分析它如果与未解析的设计元素匹配则会将该设计元素以库格式加入逻辑库中之前所有设计元素加入逻辑库指的都是以设计格式多个-y选项指定的库目录是从左至右进行查找的如有必要。该选项只能在分析时使用如果在展开时使用则会出现错误。-y选项和-v选项的地位是相同的例如对于下面的命令查找顺序是首先在hello.v中查找模块hello1的定义然后在当前目录下查找文件hello2在其中查找模块hello2的定义。% vlogan -full64 top.v -v hello1.v -y ./libextextension指定仅在库目录中搜索具有指定文件名扩展名的文件默认没有后缀可以使用加号()分隔多个扩展名需要注意的是添加文件扩展名的顺序并不表示搜索的顺序。该选项只能在分析时使用如果在展开时使用则会出现错误。-work library指定一个保存中间文件的逻辑库该逻辑库必须在设置文件中进行了映射。definemacro定义任意个文本宏可以覆盖源代码中的宏定义可以使用加号()连接多个宏定义。该选项只能在分析时使用如果在展开时使用则会出现错误。lint[no]ID|none|all提供关于Verilog代码包含不良风格的提示lintID启用指定的特定风格检查。lintnoID禁用指定的风格检查。lintnone禁用所有风格检查。lintall启用所有风格检查。该选项只能在分析时使用如果在展开时使用则会出现错误。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% vlogan -full64 top.v -v hello1.v -v hello2.v -v nihao.v和例1一样在hello1.v被分析后模块nihao不会加入编译单元中 但在分析hello2.v时出现了一个未解析的模块nihaovlogan继续分析nihao.v并在其中找到了模块nihao的定义这是默认的行为也是liborder选项的作用即保证搜索的顺序如果nihao.v中还是找不到模块nihao的定义会重新回到hello1.v并开始新的一轮搜索。如果使用librescan选项一旦发现有未解析的模块就会重新回到hello1.v并开始新的一轮搜索此时会在hello1.v中找到模块nihao的定义而不是在nihao.v中。这个选项同时会影响-v和-y选项指定的库文件和库目录。incdirdirectory指定编译指令include中文件搜索的额外目录优先级最低可以指定多个目录每个路径名称之间用加号()分隔多个目录或多个incdir选项会从左到右进行搜索在编译指令中使用绝对路径时该选项是没有意义的。该选项只能在分析时使用如果在展开时使用则会出现错误。nowarnTFMPC不显示Too few module port connections警告消息这出现在模块端口未完全连接时。该选项只能在分析时使用如果在展开时使用则会出现错误。systemverilogextext指定SystemVerilog源文件的文件扩展名可以使用加号()分隔多个扩展名使用该选项就无需使用-sverilog选项了。该选项只能在分析时使用如果在展开时使用则会出现错误。verilog2001extext指定使用2001标准编译的Verilog源文件的文件扩展名可以使用加号()分隔多个扩展名。该选项只能在分析时使用如果在展开时使用则会出现错误。verilog1995extext指定使用1995标准编译的Verilog源文件的文件扩展名可以使用加号()分隔多个扩展名。该选项只能在分析时使用如果在展开时使用则会出现错误。warn[no]ID|none|all提供关于Verilog代码警告信息的提示lintID启用指定的警告。lintnoID禁用指定的警告。lintnone禁用所有警告。lintall启用所有警告。该选项只能在分析时使用如果在展开时使用则会出现错误。Verilog_source_filename不属于任何选项的参数指定了源文件的名字从左至右进行处理。-incr_vlogan使用此选项后当以下内容没有变化时vlogan命令不进行分析1、该命令在前一次解析过程中已经分析过的源文件。2、该命令所分析的源文件中引用的已导入SystemVerilog包。3、命令行用户选项如define或vlogan命令选项4、某些shell环境变量。注意下面的情况会导致重新进行分析% vlogan -full64 test1.v % vlogan -full64 test2.v % vlogan -full64 -incr_vlogan test1.v test2.v # 重新分析 % vlogan -full64 -incr_vlogan test2.v test1.v # 重新分析该选项只能在分析时使用如果在展开时使用则会出现错误。展开阶段(Elaboration)展开是仿真设计的第二步。在这个阶段VCS将使用分析过程中生成的中间文件来构建实例层次结构并生成一个二进制可执行文件simv该文件稍后用于仿真。在这个阶段可以选择以优化模式或调试模式来展开设计。仿真的运行时性能取决于你选择的模式和仿真过程中所需的灵活性级别建议在确保设计正确性之前使用完整调试模式或部分调试模式然后切换到优化模式。优化模式也称为批处理模式能获得最佳的编译时间和运行时性能通常在进行回归测试或不需要广泛的调试功能时使用。调试模式下也称为交互模式通常是在开发周期的初期阶段或者在你需要更多调试功能或工具来调试设计问题时使用。在此模式下获得的不是总体最佳性能但通过使用某些编译时选项可以将设计编译为完整调试模式或部分调试模式从而在调试模式下获得局部最佳性能。使用VCS使用VCS的语法如下% vcs [elab_options] [libname.]design_unit其中libname指的是需要展开的顶层模块、实体或配置所在的库名。如果未指定libnameVCS会根据synopsys_sim.setup文件中指定的顺序在库列表中查找指定的design_unit。VCS将所有指定的design_unit作为顶层模块进行展开并将它们在一个假象的$root层次中进行例化实例名与这些design_unit的模块名相同。其中design_unit可以是以下类型之一moduleVerilog顶层模块名。entityVHDL顶层实体名。entity__archname要仿真的顶层实体和架构名称。默认情况下archname是最近分析的架构。cfgname顶层配置名称。展开一个design_unit% vcs top # top模块被例化在$root中实例名为top展开多个design_unit% vcs top top1 # top和top1模块被例化在$root中实例名为top和top1常用的命令行选项和参数-h或-help列出了最常用的编译时和运行时选项的描述。-ID返回了一些有用的信息例如VCS版本和构建日期、VCS编译器版本与VCS版本相同、以及你的工作站名称、平台和主机ID用于授权。-full64启用 64 位模式下的展开和仿真也可以使用VCS_TARGET_ARCH环境变量来启用64位模式架构下的展开和仿真。-file filename指定一个包含elaborate命令选项列表的文件该文件内的选项按照其在文件中出现的顺序处理多个-file选项指定的文件是从左至右进行处理的。-R在可执行文件生成后立即运行该文件。-o name指定生成的可执行文件的名字默认为simv。-gfile cmdfile使用来自cmdfile文件的值覆盖设计通用参数或参数的默认值cmdfile文件是一个包含指向设计通用参数的赋值命令的包含文件。-notice启用详细的诊断消息。-q静默模式不显示所有信息例如关于VCS使用的C编译器、VCS正在分析的源文件、顶层模块或指定的时间尺度的消息。-V详细输出模式VCS在运行C编译器、汇编器和链接器时会打印它执行的命令。-l filename指定一个文件VCS将在其中记录展开过程中的消息。如果还使用了-R选项VCS将在同一个文件中记录来自展开和仿真的消息。-liblist logical_lib1logical_lib2...logical_libn-liblist选项指定了在展开时解析模块的库搜索顺序VCS会按照-liblist中指定的顺序开始搜索库。它不会遵循synopsys_sim.setup文件中指定的库顺序默认也不会查看synopsys_sim.setup文件中存在的其他库。下面以一个例子说明该选项的用法。// 例3 // 文件top.v module top(); hello1 i_hello1(); endmodule module hello1(); initial $display(This is top.v); endmodule // 文件hello1.v module hello1(); initial $display(This is hello1.v); endmodule// 文件synopsys_sim.setup WORK DEFAULT DEFAULT : ./work lib1 : ./lib1 lib2 : ./lib2% vlogan -full64 top.v -work lib1 % vlogan -full64 hello1.v % vcs -full64 lib1.top在上例中逻辑库work中存在模块hello1来自于top.v而逻辑库lib1中存在模块top和模块hello1来自于hello1.v在对顶层模块top进行展开时默认会选择来自top.v的模块hello1进行解析按照synopsys_sim.setup文件。如果使用-liblist选项可以改变解析搜索的范围和顺序如下所示。% vcs -full64 lib1.top -liblist lib1这里还需要谈谈设计单元和库单元之前我们说到在分析时如果使用-v或-y选项可能导致一个模块以库格式加入逻辑库中。在逻辑库进行搜索时库格式的模块优先级低于设计格式的模块也即会先尝试以设计格式进行解析随后再以库格式进行解析使用-liblist_nocelldiff选项可以消除库格式和设计格式的优先级差异。一个模块只能以设计格式或库格式之一存在于一个逻辑库因此可能会出现覆盖情况如下所示。// 例4 // 文件top.v module top(); hello1 i_hello1(); endmodule // 文件hello1.v module hello1(); initial $display(This is hello1.v); endmodule% vlogan -full64 top.v -v hello1.v -work lib1 # 模块hello1以库格式加入lib1 % vlogan -full64 hello1.v -work lib1 # 模块hello1以设计格式加入lib1覆盖仿真阶段(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模式启动进行调试。
郑州网站建设
网页设计
企业官网