最近学习了ImpulseC,最后也在开发板上实践了一把,确实比较好用,效率也可以接受。向大伙说一声wind330的学习感受。
用Stage Master Explorer打开一份分析报告,内容如下:
Bayer2RGB工程报告 |
Max.Unit Delay: 64 该参数表示Math运算参与的最大位数,主要影响FPGA的运行速度,数字越大,FPGA运行速度越小。
我们再看 Block #3 pipeline,由于这里使用了"#pragma CO PIPELINE"(多在循环结构中使用),所以该部分代码使用了高效的流水线技术。
Latency: 8 表示Block #3从数据输入到结果输出会有8个时钟延迟。
Rate: 6 说明Block #3每6个时钟产生一个结果。
Effetctive Rate: 384 等于Rate*Max. Unit Delay,用于评估RTL综合后性能,越小越好。
由于wind330使用该工具也不久,对这方面经验还比较少。在ImpulseC下,不同的编写方式会极大地影响FPGA执行性能,不仅是FPGA运行频率,还有执行效率(Rate)。
if...else...语句会对应生成一级Stage,即状态;所以可以在同一个时钟内完成的运算代码不要被if...else...隔开,要么全部在该语句中,要么在该语句外;
数组的定义会生成一个RAM,如做暂存器,在某一时间段只需要读或者写,则保证地址和数据的生成以及写入动作可以并发进行,确保Rate=1;如果需要同时进行读写,则把RAM配置成双口RAM 。
co_array_config(array1, co_kind, "dualsync");
for循环语句会生成一个Block,即相当于一个子状态机;如为重要运算模块的话,添加"#pragma CO PIPELINE"约束;
ImpulseC的不同处理模块用Stream隔开,这样做减弱了每个模块中的时序相关性,对数据流处理非常有效,如对输入视频流的视频预处理。
***_hw.c内的数据处理都属于同一个相同的时钟域,如处理时钟与数据输入流时钟不同,则把输入的Stream接口配置为Dual Clock。
用户377235 2013-2-2 13:28
我的也是我原给1389560****,结果是1399560****收到。接连三四个短信都是这样子。
用户377235 2012-11-3 22:05
我的也是、而且非常過分的是,對方發過來的時候也是顯示我朋友的號碼!
用户1122702 2010-2-5 11:05
ash_riple_768180695 2010-2-5 09:31
用户900892 2007-3-15 17:17
用户515658 2007-3-14 13:02