C/RTL协同仿真
一、C/RTL协同仿真说明1.当C/RTL协同仿真完成一般是会显示仿真成功并且和C仿真的功能匹配2.C/RTL仿真如果失败会爆出仿真失败的警告二、C/RTL协同仿真失败的主要原因1.环境设置存在错误2.使用了错误的优化指令3.使用了不支持优化指令4.优化指令写错了5.TB测试激励写的有问题6.C语言源代码有问题7.测试激励的激励文件文件读写操作出现了问题。三、环境错误问题1.仿真工具是否正常2.使用linux还是windows还是mac系统四、指令优化问题1.是否使用了dependence依赖如果使用了依赖指令可以先将dependence依赖指令移除然后查看c/rtl协同仿真是否成功如果成功说明依赖的使用设置不正确。2.看看顶层接口上是否使用了volatile指令修饰指针需要确保depth设置正确。在接口上使用volatile指令必须指定每个传输事务或者每次执行c语言函数中在端口执行的读写次数3.是否对FIFO使用dataflow优化确定使用乒乓缓存c/rtl协同仿真。然后检测当不指定FIFO通道大小的情况下C/RTL协同仿真是否成功。这样确保通道默认的数组大小。设置FIFO的detph先设置比较大的FIFO通道大小然后不断的减少FIFO的通道大小直到C/RTL协同仿真停止。从而来判断FIFO的大小。4.确认接口是否支持使用的接口模式是否支持可综合。5.判断是否对同一个数组使用了多条优化指令需要判断多条优化指令对同一个数组进行优化是否可行。6.当前是否正在映射到流传输的接口上使用数组要使用接口级流传输DUT 的顶层函数请使用hls::stream。五、仿真说明1.c代码是否包含没有定义的值或者执行出界数组访问确认所有的array的数组大小都说设置正确的以便匹配所有的样本或者参数访问。如果访问超出数组大小的循环边界通常会出现各种问题。如果你设置的数组大小是N-1,但是你执行了N次访问这个就会出现问题。2.即使某些变量未定义或者出界C 语言函数仍可执行并完成。在C 语言仿真中将为未定义的值赋予随机数字。在 RTL 仿真中将为未定义的值赋予未知值或 X 值3.多次调用顶层函数进行多个视频帧进行仿真C/RTL 协同仿真功能可同时验证所有传输事务。如果多次调用顶层函数例如用于对多个视频帧进行仿真那么所有仿真输入和输出数据都存储在磁盘上。六、RTL导出的三种形式1.RTL IP CORE2.DSP IP CORE3.DCP文件