我自己总结的XILINX FPGA知识,欢迎大家交流
这是B站视频网址https://www.bilibili.com/video/BV1rP4y1F75y/
附件是自己做的PPT. 我提一句吧。同步复位,但是放到代码最后。这样就充分避免了ce的产生和额外的fanout,又保证了复位的正确性。 wye11083 发表于 2022-2-18 21:36
我提一句吧。同步复位,但是放到代码最后。这样就充分避免了ce的产生和额外的fanout,又保证了复位的正确性 ...
(引用自2楼)
嗯嗯,我觉着在理。 电工要学得多 wye11083 发表于 2022-2-18 21:36
我提一句吧。同步复位,但是放到代码最后。这样就充分避免了ce的产生和额外的fanout,又保证了复位的正确性 ...
(引用自2楼)
我感觉大多数情况根本不用复位,只有对初始值敏感的寄存器才需要复位 本帖最后由 wye11083 于 2022-2-18 23:02 编辑
xxdd 发表于 2022-2-18 22:30
我感觉大多数情况根本不用复位,只有对初始值敏感的寄存器才需要复位
(引用自5楼)
是啊。但是只要你用if(reset){}else{}写法,则你的所有else里面的东西都会被加个ce——这个bug我查了一星期才确定ce来源。所以我现在是全部{}if(reset){}这种写法,确保只有关键信号会被复位,且不产生任何多余的ce。
实际上在一100KLUT+200KDFF工程里面,使用后置复位写法,省掉了至少10K LUT+DFF用于走线。这也是fpga开发的一个天坑:(1)模块不可能没有复位,所有鼓吹FPGA不需要复位的都是大忽悠,(2)不管同步复位还是异步复位,只要在代码里复位时dff不做任何操作,就默认是DFFCE,全部按复位信号使能ce管脚。后置复位可以解决ce无穷多的问题,但是会带来额外的功耗——dff哪怕在复位时仍然无限翻转。这在asic设计中还是应当尽量避免。 我开始编写CPLD时, 有个分频输出没有复位, 结果总是没有输出信号. 郁闷了好几天.
后来全部用异步有效, 两级D缓冲后的时钟同步复位. wye11083 发表于 2022-2-18 22:59
是啊。但是只要你用if(reset){}else{}写法,则你的所有else里面的东西都会被加个ce——这个bug我查了一星 ...
(引用自6楼)
学习到了,谢谢分享 谢谢楼主分享 很大的收获!
页:
[1]