描述
此答复记录列出了2012.2 Vivado HLS的已知问题和限制。
解
编码风格
– 不支持多重继承虚拟功能。
– 对于64位操作系统,“长”数据类型可能会导致仿真不匹配。建议64位整数使用“long long”数据类型。
指令/语用用法
– 如果每个周期都有有效输出,则不会添加设计级握手信号。如果选择了接口模式ap_ctrl_hs(也是默认接口模式),则预计会将设计级别的握手(例如ap_start或ap_done)添加到设计中。但是,如果设计采用II = 1流水线操作,以便在每个时钟周期都有有效输出,则设计级别的握手将在最终RTL中进行优化。此问题将在以后的版本中得到解决。
– 对多个变量进行完整的数组分区索引数组访问可能会导致运行时间过长和内存使用过多。
例:
数组[x] = y;
数组[x + 1] = y + 1;
…
数组[x + N] = y + N;
#pragma AP数组分区变量=数组
– 对于C__类对象(如ap_int,ap_fixed变量)的Pragma,需要额外的&符号&。对tcl指令没有这样的要求。
例:
ap_int <N> x = y * z;
#pragma AP资源核心= PipeMul2S变量=&x
– 数组流指令无法为数据流中的标量变量配置FIFO深度。
例:
Void DUT(Type_M in_data [N],Type_M out_data [N})
{
Type_M mem [N]; //可以使用数组流配置深度
//此数组转换为FIFO。
布尔旗; //无法为此标量变量配置深度。
// bool flag [1]; //使用单元件数组的解决方法。
read_data(in_data,mem,&flag);
write_data(out_data,memo,flag);
}
RTL协同仿真
– 在综合前测试台和被测设计(DUT)或在0综合后协同仿真中的测试台的C仿真中的分段故障。如果代码包含大的数组,则会发生这种情况,因为这些数组需要大的堆栈空间。有两种可能的解决方法:
– 使用静态限定符会将数组移出堆栈。
– shell命令ulimit -s也可用于增加堆栈大小。
– 使用C编译标志-O2来优化C仿真期间的运行时性能可能会导致RTL仿真(C测试平台和RTL的协同仿真)失败。
– 要优化C仿真的运行时间,尤其是在使用浮点类型时,请删除与add_files -cflag选项一起使用的任何-O2。
没有回复内容