原创 FPGA的基本功

2014-5-16 21:57 2097 15 16 分类: FPGA/CPLD

  写了一年的FPGA代码,项目到了中期,感觉还是有很多的东西要学要写。

  但是明白了一开始写verilog时的一些迷惑和语言。菜鸟入门的时候就听别人说,FPGA一定要知道自己写的代码的综合出来的电路是怎样的,后来写了几个东西,发现不知道综合出来的电路是怎么样的也没关系,并且verilog这种EDA工具就是给人们去掉繁琐的电路设计,变成一种简单的语言设计。

  随着项目的深入和verilog代码熟知,发现原来FPGA的最基本的两个基本功其中之一就是要明白自己的代码会综合出怎样的电路。开发FPGA要能做到基本的工程可以跑通,通过认证,最起码要掌握两种基本能力。

 一种是根据时序写出verilog代码。再设计接口信号或者算法信号的波形图时,一定要知道哪个时钟程序中设计的变量会产生怎样的变化,一个时钟也不要含糊,不然会导致边界出现问题。通过软件仿真,可以验证你的代码是否符合自己设计的时序波形图。这里,波形图写出代码基本不会出差错,因为实现波形的verilog代码段就那么几种,很好掌握。

  另外一种,就是对我写出的verilog代码有很深的电路综合理解。这个基本功主要用在设计的优化上,包括时序约束是否满足条件和电路资源是否够用。因为verilog无非就是组合逻辑和时序逻辑的代码段,组合逻辑在ALtera的FPGA中就是查找表,而时序逻辑的设计就是组合逻辑+D触发器。我声明了几位的寄存器变量,实际上我就用了几个D触发器。而当我在always模块中对这个reg变量赋值的时候,实际上我是在给这个D触发器的输入信号连线,如:cnt <= cnt + 1‘d1 ; 这个cnt是一个寄存器,这种写法实际上表明了具有反馈回路,也就是cnt寄存器的输出又通过了一个组合逻辑连到了cnt的输入,而这个组合逻辑就是 + 1’d1;同样,对时序逻辑的verilog代码想要更深刻的理解要先清楚同步计数器的设计,可以有很好的启发。

  明白了verilog代码综合出的电路后,就基本上可以理解TimeQuest的努力方式了。这个工具就是先把电路综合成以上模型(TEchnology MAP VIEW可以查看)然后对每一条路径进行分析。明白了这个就能对不满足时序的电路进行代码或者布线上的调整,以来满足内部的时序。

  这应该就是FPGA中最最基本的两个能力了。只有具有这两个基本功,才是设计出稳定可靠的电路的基础。否则即使偶尔实现了一个小项目,也只能是瞎猫碰上死耗子了

  

文章评论1条评论)

登录后参与讨论

用户377235 2014-5-23 21:33

谢工威武
相关推荐阅读
我要评论
1
15
关闭 站长推荐上一条 /2 下一条