原创 ImpulseC的几点说明

2010-2-4 16:33 2514 9 11 分类: FPGA/CPLD

                         

ImpulseC的几点说明 (by Wind330)

   

最近学习了ImpulseC,最后也在开发板上实践了一把,确实比较好用,效率也可以接受。向大伙说一声wind330的学习感受。

关于报告分析

用Stage Master Explorer打开一份分析报告,内容如下:   

f6074bca-dd19-4be0-b9cb-5b8636b29d22.jpg
Bayer2RGB工程报告
Total Stages: 14 ImpuseC最终生成的RTL代码,整个运行都是在状态机的控制下,而Total Stages说明了该控制状态机的状态数。

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综合后性能,越小越好。

关于Coding Style

由于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。

 
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2013-2-2 13:28

我的也是我原给1389560****,结果是1399560****收到。接连三四个短信都是这样子。

用户377235 2012-11-3 22:05

我的也是、而且非常過分的是,對方發過來的時候也是顯示我朋友的號碼!

用户1122702 2010-2-5 11:05

riple兄的关注,及大家的关注就是对我的博文最好的奖励。ImpulseC还是有比较多的可改进的地方,需要我们自己去完善,比如,将外部数据流转换成Stream接口,AvalonDMA不支持Burst读写等。

ash_riple_768180695 2010-2-5 09:31

我感觉,ImpulseC做的工作,就是“RTL专家编程”,也就是自动化的最佳RTL代码生成。它把从算法到FPGA实现的过程,用一种可控制的、可调整的映射方法连接了起来。而以往,这样的工作都是需要数字工程师凭个人经验和感觉来手工完成的。博主在编码风格和架构上总结的感受非常好。这些“专家经验”如果能够被我们这些数字工程师学会,融会贯通,应用到我们的工作中来,一定可以使我们的设计水平上一个台阶。希望看到博主更多、更深入、更系统的总结。

用户900892 2007-3-15 17:17

哈哈!

用户515658 2007-3-14 13:02

别提了,昨天我和女友晚上发肉麻信息也串号了,被别人骂了一顿,莫明其妙..................
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /3 下一条