作者:Chaowen Yin,AMD工程师;来源:AMD开发者社区
1. 确定与Vivado 2024.2 匹配的OneSpin 360版本。
1.1 选择匹配的版本VCS和OS:
根据UG973选择Vivado2024.2版本选择匹配的VCS版本和One Spin,这里Vivado 2024.2 匹配的 OneSpin 360版本是OneSpin 360 (2023.2)和Red Hat 64/ SUSE Linux/ Windows 10 64-bit。
https://docs.amd.com/r/en-US/ug973-vivado-release-notes-install-license/Compatible-Third-Party-Tools
2. Vivado Demo
2.1: 这里使用的Demo是在Vivado 2024.2内一个特殊的testcase,由于-resource_sharing 设置成auto/on的时候会影响综合的结果。
2.2:这里创建在Vivado 内创建了两个synth runs(synth_1和synth_2) 。synth_1的-resource_sharing是默认的auto,synth_2的-resource_sharing配置成了off,注意这里synth_1和synth_2都采用了OOC的方式进行综合,即在More Options处添加-mode out_of_context。
2.3:综合完成之后分别打开Synth_1和Synth_2, 使用如下的命令导出网表。
Synth_1: write_verilog top_resoource_auto.v
Synth_2: write_verilog top_resoource_off.v
3. 使用OneSpin 360比较Synth_1和Synth_2的结果
3.1:这里新建了个test_dir文件夹,并将两个top_resoource_auto.v和top_resoource_off.v拷贝进了这个目录内。
3.2:这里新建了个test_dir文件夹,并将两个top_resoource_auto.v和top_resoource_off.v拷贝进了这个目录内。
在test_dir目录内启动One Spin 360,并打开One Spin360,在Shell依次输入如下的命令:
start_message_log -force resource_share_off_on.log
load_settings ec_fpga_xilinx_rtf_gate
read_verilog -golden { ./top_resource_off.v}
read_verilog -revised { ./top_resource_auto.v }
elaborate -both -top ldpc_dec
set_mode ec
map
compare
save_result_file -force resource_share_off_on.txt
save_database
从Shell的输出可以看出,两个designs是不相等的。这是符合预期的,因为这是由-resource_sharing设置成auto/on引入的差异。
4. 使用OneSpin 360比较原始的和Synth_2的结果。
4.1:这里比较了原始的RTL代码和Synth_2导出的网表,因为Synth_2的-resource_sharing 设置成了off,所以这里的结果应该是相等的。 这里将综合前的RTL代码设置成Golden Unit,将Synth_2导出的top_resource_off.v设置成Revised Unit.其他的配置可以参考第三步。
5. 小结
这里直接比较第三步直接Synth_1和Synth_2的结果是因为已经初步了解到了,这个bug与resource_sharing的设置有关,所以相对准确些。第四步可以作为一个验证,当resource_sharing设置成off时,与RTL的功能是一致的。
另外,这类综合问题也可以尝试比较综合之后Behavior simulation 和 Post-synthesis Functional simulation的结果。