如何理解HLS Block-level输入输出信号之间的时序关系

默认情况下,vitishls会对待综合的c函数使用ap_ctrl_hs接口,这其实是一种握手方式。在这个接口中,我们会看到ap_start、ap_idle、ap_ready和ap_done等信号(这些信号被称为block-level输入/输出信号)。其中ap_start是输入信号,而其余三个信号是输出信号。那么我们如何根据这些信号管理输入数据呢?这就要理解这些信号之间的时序关系。为便于说明,我们以一个简单的算法为例。
如下图所示代码片段。函数array_mult有3个形参。其中a1和a2是长度为n的一维数组,两者对应元素相减再平方即为另一形参prod。显然,prod也是长度为n的一维数组。
为了观察这些block-level信号之间的时序关系,我们在仿真时将多次调用函数array_mult。为此,在描述测试激励时,输入激励以两个二维数组形式给出,这两个二维数组对应的每一列作为array_mult的输入。假定这两个二维数组是8行4列的数组,c/rtlco-sim仿真结果波形如下图所示。
标记1为数组a2对应存储单元的读地址a2_address,共8个数据;标记2显示了读书的数据数值a2_q0,可以看到两者相差一个时钟周期。那么什么时候a2_address可以发生变化呢?我们从标记a可以看到,在标记a左边,ap_idle为高电平,表明该模块处于空闲状态,标记a之后,ap_start为高电平,同时ap_idle变为低电平。一旦ap_start为高,a2_ce0即为高,表明可以开始读取a2对应的数据。当第一帧8个数据读取完毕,即读取到第一帧最后一个数据时,ap_ready为由低电平变为高电平且持续一个时钟周期,表明第一帧输入数据已读取完毕,如图中标记b。紧接着ap_start也由高电平变为低电平。当第一帧计算完毕,输出对应的8个数据后,ap_done由低电平变为高电平并持续一个时钟周期,如图中标记c。当ap_done由高变低时,ap_idle则由低变高,表明可以再次启动该模块。因此,我们可以看到标记d处ap_start为高,之后a2_ce0由低变高开始读取第二帧输入数据。读取到第二帧输入数据的最后一个数据后,ap_ready由低电平变为高电平。
由此我们可以得出如下结论:
ap_start受ap_idle影响,只有当ap_idle为高时,才可以启动ap_start,将其由低电平变为高电平;
ap_ready为高电平时,表明已完成一帧的输入数据读取任务;
ap_done为高电平时,表明已完成一帧的输出数据写入任务;
ap_done持续一个时钟周期由高变低后,ap_idle会由低变高。


从动力电池隔膜技术的“大”与“小”来看锂离子电池应用
华盛昌三合一热像仪万用绝缘表原理分析
电子芯闻早报:2015年各领域技术开启刷新模式
粉尘分离超声波振动筛电源发生器设计
喜报 | 瑞萨电子荣获海尔智家“战略合作伙伴奖”
如何理解HLS Block-level输入输出信号之间的时序关系
雷军又来耍猴,本月发布的小米6价格上升,将供不应求,小米这次又要掉粉了
半导体行业如何轻资产投入破局转型升级
背投显示应用的形式有哪些?
5G蕴含万亿机遇:诺基亚能否能抓住机遇逆袭华为
采用IRF250场效应管制作胆味功放及电路图
HDMI KVM延长器在办公桌面系统的解决方案
中国TD系统如何实现向TD-LTE发展
环球仪器推出lexbond D6,在柔板上实现热压焊接
一文读懂数字图像处理常用方法
无线蓝牙耳机哪个品牌好,蓝牙耳机品牌排行榜
中芯国际14nm工厂获国家大基金二期百亿注资;芯海科技科创板首发过会
小米6最新消息:小米6确认搭载骁龙835!真机系统截图曝光
锐尔威视科技:RER-USB500W02M-V60主要应用
华为MateBook13和MacBookAir哪个最好