运行 C 语言仿真 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

HLS 组件的验证可分为不同的进程,分别发生在高层次综合之前和之后。这些进程包括:C 仿真和代码分析,用于在高层次综合之前确认 C/C++ 源代码;C/RTL 协同仿真,用于确认生成的 RTL 设计。

对 HLS 组件运行 C 语言仿真需要测试激励文件,如 撰写测试激励文件 中所述。测试激励文件可以自查,并确认要综合的函数的结果是否正确。如果结果正确,测试激励文件将向 main() 返回 0 值。否则,测试激励文件应返回任何非零值。但在运行仿真前,必须配置 HLS 组件以支持仿真。C 语言仿真可自行独立运行,或者搭配启用的代码分析器来运行。自行运行时,C 语言仿真会使用测试激励文件和提供的数据来确认源代码逻辑。搭配代码分析器时,仍会完成仿真以确认算法,此外还会对设计的源代码和预期性能进行更深入的分析。代码分析器可让您直观查看任务级并行度的可能性、估算设计的潜在性能,并了解改善设计性能所需的架构更改。

加载测试激励文件

正如 C 语言综合一样,可在创建 HLS 组件时加载仿真所需的源文件。但您可在创建时跳过此步骤,并在运行仿真前添加测试激励文件。也可以更改或添加用于仿真的文件。此操作是在Config Editor(配置编辑器)的Testbench sources(测试激励文件源文件)部分中完成的。

图 1. HLS 组件测试激励文件源文件

Testbench sources显示了当前已添加的测试激励文件,并允许您编辑或删除当前文件、添加新文件以及添加或修改测试激励文件的 CFLAGS。

  • Add item(添加项):选择此命令即可向 HLS 组件添加新的测试激励文件。这样会打开File Browser(文件浏览器)并允许您导航到并选中要添加的文件。
  • Add CFLAGS(添加 CFLAGS):您可添加编译标志 (CFLAGS),以供应用于所有源文件或者添加到特定源文件。如上图所示,只需将这些标志添加到Flags common to all files(所有文件的通用标志)的相应文本输入框中即可。要为特定源文件添加标志,请选中该源文件,然后选中Edit item(编辑项)以添加标志或者修改文件名和路径。
这些选项会生成如下配置文件条目:
[HLS]
tb.file=../../src/in.dat
tb.file=../../src/out.golden.dat
tb.file=../../src/dct_test.cpp
tb.cflags=<cflag>
tb.file_cflags=../../src/dct_test.cpp,<cflag>

配置仿真器

您可在运行仿真前使用Config EditorC Simulation(C 语言仿真)部分来配置 C 语言仿真器,如下所示。

图 2. HLS 组件仿真设置

这些配置命令允许您指定仿真的运行方式。配置选项包括:

O
默认情况下,使用调试信息编译设计,以便对编译进行分析和调试。编译设计时,“Optimizing Compile”(最优化编译)选项使用更高级别的最优化,但不会添加调试器所需的任何信息。这会增加编译时间,但会减少仿真运行时间。
argv
指定测试激励文件 main() 函数所需的任意输入。
clean
该选项用于在编译代码之前,从工程中移除所有现有的可执行文件和对象文件。
code_analyzer
启用 Code Analyzer 工具,如 使用代码分析器 中所述。
ldflags
指定传递给连接器以进行语言仿真的选项。该选项通常用于为 C/C++ 语言测试激励文件传递 include 路径信息或库信息。
mflags
提供要传递给编译器以进行 C 语言仿真的选项。通常用于加快编译速度。
setup
指定该选项时,将在当前 HLS 组件的 csim 目录中创建仿真二进制文件,但不执行仿真。稍后,可从已编译的可执行文件启动仿真。默认为 false,完成设置后运行仿真。
这些选项会生成如下示例所示配置文件条目:
[HLS]
csim.clean=true
csim.O=true
csim.code_analyzer=0
csim.argv=arg1 arg2

运行仿真

要运行仿真,请在Flow Navigator中,确保 HLS 组件处于活动状态,或者在Component(组件)菜单中将其选中,在该工具中将其设为活动组件。当 HLS 组件为活动组件时,Flow Navigator支持运行 C 语言综合、C 语言仿真、C/RTL 协同仿真、封装与实现来构建和分析该 HLS 组件。要仿真 HLS 组件,请选中Flow NavigatorC SIMULATION(C 语言仿真)标题下的Run(运行)。

提示: 您还可从Flow Navigator选中Debug(调试)命令以启动调试进程,如 调试 HLS 组件 中所述。

您可在Output(输出)窗口中跟踪仿真进度。综合运行的转录文本所含顶层函数名为 <component-name>::c_simulation,如下所示。

图 3. 运行仿真的 HLS 组件
提示: Vitis IDE 中的仿真运行使用的是 vitis-run --mode hls --csim 命令,如 vitis、v++ 和 vitis-run 命令 中所述。

C 语言仿真结果

在此对话框中单击OK后,就会编译 C/C++ 语言代码并运行 C 语言仿真。运行仿真时,该控制台会显示来自测试激励文件的任何 printf 语句或者来自内核或 IP 的 hls::print 语句。仿真成功完成后,还会向控制台返回以下消息:
INFO: [SIM 211-1] CSim done with 0 errors.
INFO: [SIM 211-3] *************** CSIM finish ***************
Finished C simulation.
仿真失败时,则返回错误:
@E Simulation failed: Function 'main' returns nonzero value '1'.
ERROR: [SIM 211-100] 'csim_design' failed: nonzero return value.
INFO: [SIM 211-3] *************** CSIM finish ***************

仿真完成后,会生成Summary(汇总)报告,以显示仿真命令和运行的时间戳。您可从“Report”(报告)标题中选中“Summary”(汇总)报告和仿真 log 日志文件来查看此报告和日志,也可在“Analysis”(分析)视图中查看。如果先前已运行 Code Analyzer,那么也将显示其报告。