Vitis HLS 2022.2测试平台中使用scanf致C仿真停滞问题咨询
Vitis HLS 2022.2中scanf导致C仿真卡住的问题解析
问题根源
Vitis HLS的C仿真(csim)在处理scanf这类交互式输入函数时,默认的自动仿真流程会因为等待用户输入而挂起——生成csim.exe后,仿真进程会停在需要输入的环节,但Vitis HLS图形界面无法捕获键盘输入,导致进程无法继续,看起来像是卡在生成阶段。
测试平台能否使用scanf?
可以使用,但需要调整仿真执行方式:
- 改用非交互式输入
将测试所需输入数据写入文本文件(如input.txt),在仿真配置中设置命令为:
或者直接在测试平台代码里用csim.exe < input.txtfopen+fscanf读取文件替代scanf,彻底避免依赖交互式输入。 - 手动在终端运行仿真
进入仿真输出目录(通常是csim/build),直接在终端执行生成的csim.exe,此时可以手动输入数据完成仿真。 - 关键提醒
不要在待综合的硬件逻辑代码中使用scanf,综合工具无法将这类函数转化为硬件电路;但测试平台作为纯验证用的C代码,本身允许调用scanf,只是仿真执行逻辑需要适配。
额外排查项
- 检查
scanf的格式符与输入数据类型是否匹配,格式不匹配可能导致输入解析异常,间接引发卡住问题。 - 若开启了Vitis HLS的“Run CSim automatically”选项,图形界面会自动启动仿真但无法处理交互输入,建议关闭该选项,手动在终端执行仿真。
内容的提问来源于stack exchange,提问作者Sooora
相关产品推荐
相关产品推荐

