FPGA流程设计
做fpga也有四年时间了,该有个总结。刚开始那会,学习东西都是死记硬背,去面试也是直接带着答案去了。
时间久了,才懂得设计一些基本思路。
1. 设计输入:
verilog代码和原理图。画原理图都是懒得做visio架构图的。一般来说设计fpga开始都要有个系统设计架构图。设计原理图也有缺陷,每个软件不能通用,关键每次版本升级以后,原理图容易出问题。
写verilog的代码,比较累,写连接线,最烦就是怕重复定义,怕位数不对。关键设计初期,要学会总体规划,模块分配。
2.功能仿真
功能仿真用modelsim,写个测试文件。
初学者,写测试文件是很苦逼的事情。几千行代码,慢屏幕的 #时间 驱动.自己还得看仿真后的波形,手动调节时间参数。每次RTL代码一改动,时间需要相当累。
功底到了一定阶段,你就会放弃这种垃圾的测试方法。在测试代码开始写RTL 代码,或者跟跟随多次时钟。写的很多,直接使用存储表的文件直接测试,查看结果。
不过技术如何,波形仿真一定要做,要看清初始化状态。没有初始化的信号。
3.约束
约束包括时钟约束。IO引脚约束,内部布线资源约束。时钟约束,大部分人都知道。为了内部的RAM,移位寄存器,加法器,乘法器规定速度工作,你必须要约束这些时钟线。
IO引脚约束是包括引脚锁定,IO寄存器约束。引脚锁定,这些大家都知道,没引脚锁定,你下载到fpga是没有工作的。IO寄存器约束知道的人甚少了。当你使用GMII和RGMII,SDRAM,DDR2,你知道多苦逼的事情。因为你不约束他们,他们总线跟时钟是无法在规定时间变化的,fpga也不知道采集数据是否正确,在时钟沿前多少,后应该多少,总线才能完全翻转过来。
4.后仿真
我开始搞fpga,也学我以前主管,写好代码,做完功能仿真,就用signaltaP了。后来搞cpld之后,功能仿真正确,下进去之后,出问题不知道怎么调试。后来使用软件编译生成后仿真,才会用CPLD。
后仿真,基本没什么文章说这个问题。有人看了红色信号,不输出信号总不知道什么问题。那就是时序违规,仿真软件判断违规时序的。问题在于。第一个,时钟约束达不到,第二个,IO约束达不到。
5.硬件调试。
很多用了xilinx和altera都觉得自己懂fpga很深了,就是有了内部探测工具。但估计没有多少人去了解上电触发,表达式控制方法。有的信号,上电就挂了,有人用一个十几秒的延时等待。你让编译器累死,时序也会导致不满足。还有不会多个表达式的,看个信号,只要前后,搞缓存特大也看不到,苦逼吧。
6. 下载编程。加密。
下载编程,线一连,点下program就行了。