dongzhiqing 发表于 2022-2-18 21:21:41

我自己总结的XILINX FPGA知识,欢迎大家交流

这是B站视频网址

https://www.bilibili.com/video/BV1rP4y1F75y/

附件是自己做的PPT.

wye11083 发表于 2022-2-18 21:36:59

我提一句吧。同步复位,但是放到代码最后。这样就充分避免了ce的产生和额外的fanout,又保证了复位的正确性。

dongzhiqing 发表于 2022-2-18 21:38:15

wye11083 发表于 2022-2-18 21:36
我提一句吧。同步复位,但是放到代码最后。这样就充分避免了ce的产生和额外的fanout,又保证了复位的正确性 ...
(引用自2楼)

嗯嗯,我觉着在理。

akey3000 发表于 2022-2-18 21:57:47

电工要学得多

xxdd 发表于 2022-2-18 22:30:30

wye11083 发表于 2022-2-18 21:36
我提一句吧。同步复位,但是放到代码最后。这样就充分避免了ce的产生和额外的fanout,又保证了复位的正确性 ...
(引用自2楼)

我感觉大多数情况根本不用复位,只有对初始值敏感的寄存器才需要复位

wye11083 发表于 2022-2-18 22:59:06

本帖最后由 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设计中还是应当尽量避免。

qinxg 发表于 2022-2-19 09:01:48

我开始编写CPLD时, 有个分频输出没有复位, 结果总是没有输出信号. 郁闷了好几天.
后来全部用异步有效, 两级D缓冲后的时钟同步复位.

我是一个大白菜 发表于 2022-2-19 09:53:41

wye11083 发表于 2022-2-18 22:59
是啊。但是只要你用if(reset){}else{}写法,则你的所有else里面的东西都会被加个ce——这个bug我查了一星 ...
(引用自6楼)

学习到了,谢谢分享

我是一个大白菜 发表于 2022-2-19 09:54:07

谢谢楼主分享

snowy 发表于 2022-2-19 12:22:00

很大的收获!
页: [1]
查看完整版本: 我自己总结的XILINX FPGA知识,欢迎大家交流