如何优化FPGA资源例子——我是如何两行代码搞成800行的
2018-03-31 22:02
525 查看
15年底的一天,我的组员老lau来找我,说,老大,你让我分析的为什么那个模块资源过高的问题找到了,但是无解。
老L在华为干了4年,在我司也干了快4年,算是我的半个主力,之所以不是全主力,是因为没有自我成就驱动力。
我坐下来和他一起分析,他给我指了指,就是这两行话,这个模块的大部分资源都在这两行RTL代码上。 generate
genvar j ;
for ( j=0; j<N; j=j+1 ) begin : INFO_PROC_GEN
always@(posedge clk)
begin
dxc_tx_clk[j] = dxc_tx_clk_in[chn_map[j][6:0]];
dxc_tx_data[j] = dxc_tx_data_in[chn_map[j][6:0]];
end
end
endgenerate 很直白,也很简单的功能,将128路数据和时钟做交叉。
这个项目是将多个已有的IP整合,同时添加一部分新的功能,做一个低成本的单FPGA解决方案,是将我们原先一个机框的不同板卡的交叉等功能整合在一起变成一个单板解决方案。IP出来的是N路数据和时钟,需要将它交叉后送给另外一个IP。多路选择,mux。老L选择了最简单的语法武器,怼上去,资源飞过了天空。
老L说“没法解决,这个就是一个简单功能,你看直白写出来就是这样”。
“不能复用吗?” “不能,异步的时钟,搞不定,即使复用了资源也省不了吧”
“好吧,一定有解决方案的。”,安慰过自己,开始干活。
省资源大法第一物理定律,带宽换资源。
第一步,复用是最直接有效的,数据可以串并转换,降低单路的带宽需求;
第二步,但是时钟怎么,不交叉时钟,在出口根据水位恢复时钟吗?完整的恢复时钟的逻辑足以将你复用的成果灰飞湮灭。
显然完整的恢复时钟是不现实的,因为涉及到NCO的采样率以及抖动/漂移要求,复用的资源直接就超了。
那么只有简化了,我想起了时戳,1588的时戳,咱也做的很6。
计算业务时钟和参考时钟的时钟word时间标尺的偏差(这儿的关键是位宽不能太宽,否则资源就超了),用4bit携带时钟的相对时戳信息(1bit正负,3bit相位差),累积时钟偏差(复用RAM资源,可以更宽)
最后的方案如下,整体资源降低到原先的45%(单纯替换,是原先的55%,加上了集成一部分其他功能节省的资源)
老L在华为干了4年,在我司也干了快4年,算是我的半个主力,之所以不是全主力,是因为没有自我成就驱动力。
我坐下来和他一起分析,他给我指了指,就是这两行话,这个模块的大部分资源都在这两行RTL代码上。 generate
genvar j ;
for ( j=0; j<N; j=j+1 ) begin : INFO_PROC_GEN
always@(posedge clk)
begin
dxc_tx_clk[j] = dxc_tx_clk_in[chn_map[j][6:0]];
dxc_tx_data[j] = dxc_tx_data_in[chn_map[j][6:0]];
end
end
endgenerate 很直白,也很简单的功能,将128路数据和时钟做交叉。
这个项目是将多个已有的IP整合,同时添加一部分新的功能,做一个低成本的单FPGA解决方案,是将我们原先一个机框的不同板卡的交叉等功能整合在一起变成一个单板解决方案。IP出来的是N路数据和时钟,需要将它交叉后送给另外一个IP。多路选择,mux。老L选择了最简单的语法武器,怼上去,资源飞过了天空。
老L说“没法解决,这个就是一个简单功能,你看直白写出来就是这样”。
“不能复用吗?” “不能,异步的时钟,搞不定,即使复用了资源也省不了吧”
“好吧,一定有解决方案的。”,安慰过自己,开始干活。
省资源大法第一物理定律,带宽换资源。
第一步,复用是最直接有效的,数据可以串并转换,降低单路的带宽需求;
第二步,但是时钟怎么,不交叉时钟,在出口根据水位恢复时钟吗?完整的恢复时钟的逻辑足以将你复用的成果灰飞湮灭。
显然完整的恢复时钟是不现实的,因为涉及到NCO的采样率以及抖动/漂移要求,复用的资源直接就超了。
那么只有简化了,我想起了时戳,1588的时戳,咱也做的很6。
计算业务时钟和参考时钟的时钟word时间标尺的偏差(这儿的关键是位宽不能太宽,否则资源就超了),用4bit携带时钟的相对时戳信息(1bit正负,3bit相位差),累积时钟偏差(复用RAM资源,可以更宽)
最后的方案如下,整体资源降低到原先的45%(单纯替换,是原先的55%,加上了集成一部分其他功能节省的资源)
相关文章推荐
- FPGA 设计如何进行面积优化(逻辑资源占用量优化)
- 【FPGA】【代码】资源优化,结构优化
- 如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
- 如何优化C/C++语言代码(程序员必读)
- JAVA网站开发与优化如何提高代码运行效率
- 请问exe资源内嵌的mp3或wma,如何并且“流”的方式直接播放呢?盼赐例子(送100分):)
- 构建高性能ASP.NET站点 第七章 如何解决内存的问题(后篇)—托管资源优化—监常用优化措施
- CSS优化,如何写出高效整洁的CSS代码
- 如何优化JAVA代码
- C/C++代码被 VS 2010 优化掉了,如何关闭优化?
- 我和我的同伴是如何用具体的代码例子说明源代码管理的基本操作
- unity3D 如何提取游戏资源 (反编译)+代码反编译
- FPGA的冷思考:如何摆脱只会看代码而不会写代码的宿命?
- 从寻找资源的习惯上谈如何获得好的代码及控件(使用Koders查找)
- Linkedin工程师是如何优化他们的Java代码的
- 如何使用NArrange进行代码优化
- 前端优化:如何将多张图标合并成一张,做好资源链接优化?
- FPGA 设计怎样进行面积优化(逻辑资源占用量优化)
- 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析
- javascript高级教程:如何优化javascript代码性能