这篇文章是总结亦是复盘,FPGA的学习分为软件、硬件,首先是硬件,市面上大多数开发板都是核心板+底板或者一体式设计,对于自己而言,感觉怎么设计都不重要,重点是解决老板的问题,帮助老板实现他想要的功能,去年的2月份设计了一款基于XC7K325T核心板+底板设计,遇到的问题是比较多的;
一、迷茫和不知所措
在选择FPGA的芯片的时候,对于FPGA的一概不知,由于接触的比较少,在网上一搜基本是都是各种开发板,但那时候自己又不想学开发板的原理图,只想找一个核心板的设计,在苦苦搜寻了两天半后,我找了一个EP4CE6E22C8N这个FPGA的板子,进行学习,板上的资源比较少,EP4CE6E22C8N芯片,FLASH,LDO电源分别为3V3,2V5,1V2,还有烧录的JTAG以及晶振,USB接口等,然后自己花了两天半的时间,使用Cadence软件,从原理图到PCB进行复刻一遍,在做的过程中发现并不是很难,因为没有高速的处理,使用双面板就搞完了,做完了之后,总结时发现,FPGA的硬件设计结构,有点和之前学习的51单片机的最小系统差不多,包括电源,复位、晶振电路(51单片机的最小系统),不同的是,他不仅有电源,复位,晶振,还有JTAG,FLASH,DDR,就当我以为FPGA不过如此的时候,XC7K325T给了我当头一棒,在设计这款核心板的时候,发现不光是电源多,还有电源时序,模式配置,以及电流与过孔的问题,在经过下载资料,逛论坛,买资料的过程后,对于高速的FPGA,有了大概的了解,比如电源时序,在DCDC芯片的使能pin脚加RC延时设计,使其具备先后上电的功能,然后就是抄原理图,把相关外设去掉后,就是核心板的电路了,这是第一次发现原理图如何去进行裁剪功能。
二、layout的快乐
在设计完硬件电路设计之后,接下来就是PCB设计了,XC7K325T卖开发板的使用的8层板设计,我使用的10层板,因为我走不出来所以就加层了,可能是在布局的考虑不到的缘故,在layout的时候,就各种添堵,在个人能力提升的时候,严格一点是没有错,但是此时此刻的老板是自己,不是别人,由于每一个人的经历都是不一样的,拉出来的板子自然也是不一样,所以为了考虑的更加周全,我在b站大学学了2月半的拉线规范,通过两月半的提升,对于BGA的FAOUT考虑,退耦电容的布局,轻松拿捏,DDR的布局layout就是小菜一碟。从中感受到当做事的思路清晰的时候,拉线就会感觉到很清爽,当思路不清晰的时候,就会很痛苦。比如拉DDR的时候,在布局完成后,
第一步,需要对DDR进行Faout,
第二步,在规则管理中设置DDR相关的信号进行分组一片DDR3为例,DDR3包含有16位DATA数据,低8位D0~D7,高8位D8~D15,在规则中,需要将各自的8位数据分为一组;DDR_D0-DDR_D7、DDR_DQS0/DDR_DQSN0、DDR_DQM0为一组,DDR_D8-DDR_D15、DDR_DQS1/DDR_DQSN1、DDR_DQM1为一组,地址线、时钟、命令线为一组。
第三步就是拉线了,先拉数据线,然后是地址线,在拉数据的时候,优先拉数据线的时钟线,然后就是其他的线,地址线也是如此操作的。
第四步就是绕等长了,如果不想绕等长是可以从原demo上直接复制,虽然可以节约时间,但是并不清楚别人具体是怎么设计的,这样达不到学习的目的。
第五步就是优化走线了。就是对铜皮到线、线到线、Via到线距离进行调整和优化。比如铜皮到线的距离应大于18mil,Via到线的距离为3倍线宽等。
三、总结
在设计的过程没有把布局考虑好,在设计流程上面有严重的缺陷,比如布局完成之后,应该把GND孔打上,在后面layout的完成之后,发现没有空间打GND孔。在后续设计的过程中,会增加这一步操作,这样可以避免返工的操作。铺铜皮也可以看情况再铺。