有将C++算法转化为Verllog代码经验的高手请进
C++代码里有很多的函数嵌套,for循环,一个函数被调用很多次。Verlog来实现的话会占用较多的资源。之前没有经验,想请教高手们,如果一个for循环调用同一个函数多次的话,用FPGA怎么实现比较简单?
什么奖励?
状态机,几乎可以搞定一切软件算法。
if i<100 then
sr_state <= 函数调用;
i <= i+1;
else
sr_state <= 函数调用结束;
end if;
---------------------
C转FPGA都很累了,C++要转FPGA岂不是很悲剧?
当软件都觉得慢的时候,想用FPGA提速,就必须花很大的时间来改,有大量的东西要改成并行、复用,砍存储数据,拆结构体。
几乎跟重写软件是一样的了。
更悲剧的是写完以后,算法升级了。
没有代码转换,只有软件实现转成硬件实现,小编的工作量可以说是一个工程项目了。
兄弟,你不要从语言上去移植,而是应该彻底搞清楚C++代码中算法的逻辑关系,然后将这个逻辑关系用verilog描述。
最后请理解:
C++的算法实现是CPU运行自己特定的指令对数据进行转变;
而用FPGA实现算法,那是用逻辑电路来表示数据,也用逻辑电路对数据进行操作。
谢谢楼上3位兄弟。
本来一开始接这个活的时候觉得工作量还行,可是看完代码和兄弟们的意见后,觉得3个星期要搞定,很难啊。我预期是2到3个星期做完的,可是看代码和相关资料就花了偶整整1个星期,现在准备构思代码了,脑袋比较混乱啊。
顺便说一声,我不是兄弟是姐妹。
这个不是学几天verilog就能做成的事情。
rtl设计(尤其是算法实现)多数是从data path入手的,设计思路和软件完全不一样,如果从状态机入手几乎100%悲剧。另外,并不是所有的c程序都适合转成硬件实现,很多情况下纯硬件实现甚至比一个SOC系统成本还要高。
把代码发出来,我帮你设计硬件架构。
前面有同志说:状态机,几乎可以搞定一切软件算法。
这会又有同志说:如果从状态机入手几乎100%悲剧。
我本打算从状态机入手的。
我之前做过视频处理的软件算法,到rtl建模的设计及验证工作,不介意的话发给我,我可以帮你构思构思,呵。sun_scs@163.com
状态机是个好东西
状态机的悲剧在于你很难控制规模和延迟,
但这个应该不是你现在要考虑的 (- -;)
状态机是敏捷开发必备。
对于asic设计(尤其是数据处理算法)来讲,数据通路才是根本,状态机是为了控制数据通路的。从状态机入手是典型的软件思维方式,不但不容易做到资源优化,而且很可能把问题复杂化。
c代码转成rtl,首先要针对硬件的特性对c算法进行优化,比如除法能否改成乘法,甚至有可能对算法进行取舍以牺牲性能来换取硬件易于实现。然后,需要浮点定点化,仅这个过程就要反复调整c代码。这些都做完之后,才谈得上rtl实现。
姐妹啊,我想说,我以前做过一个东西,是用FPGA做的,然后有另一个厂家是用软件做的,这其中两者的原理固然一样,但是做法差距甚大,我做的是(500M的系统频率)。所以你想直接转化过来,不具有实现行,建议你找个人合作,一起来,例如你讲原理,她写代码
