一、高层次综合中变量或者结构赋初始值
template<int D,int U,int TI,int TD>
struct ap_axiu{
ap_uint<D> data;
ap_uint<(D+7)/8> keep;
ap_uint<(D+7)/8> strb;
ap_uint<U> user;
ap_uint<1> last;
ap_uint<TI> id;
ap_uint<TD> dest;
};
ap_axiu<PIX_W*N_PIX, 1, 1, 1> axis_data={0};
上述设计对结构体合成的axis总线进行赋初始化值
二、为何要对变量或者总线赋值
1.如果不对上述进行赋初始值,会存在综合的rtl代码的初始值为X态
2.rtl协同仿真中叶可以看到X标红的状态,不利于设计查看和分析。
三、状态机跳转条件设计
方式一:判定帧头设计,检测帧头
while(sof==0){
#pragma HLS pipeline II=1
src >> axis_data;
sof = axis_data.user.to_int();
}
方式二:判定帧头设计,检测帧头
while(1){
#pragma HLS pipeline II=1
src >> axis_data;
sof = axis_data.user.to_int();
if(sof==1)
break;
}
四、streaming串流模型
1.串流模型中,函数中有两块逻辑,这两块逻辑是串行执行的,第一块逻辑没有执行完成,就会一直阻塞着,类似rtl中
状态机的触发条件,如果条件没有触发,那么就一直阻塞着,直到条件满足,进入下一个状态流程。
2.可以将串流的两个逻辑部分合并为一个逻辑
这样的好处是是,减少两个逻辑块的进入和退出开销;当然也要视情况而定!