博客首页 | 排行榜 |

jevei01的博客

个人档案
博文分类
FPGA/HDL开发学习总结--by jevei01  2009-12-16 23:52

    这篇日志写于半年前了,记录了一些当时的想法。

    最近半年和FPGA设计结下了不解之缘,首先接到一年期的毕设,是使用Verilog语言在FPGA上实现LDPC码的译码器;之后又接到一个任务,需要深入学习和总结VHDL语言基础以及VHDL程序设计的方法。

    目前,LDPC码译码器的设计已接近尾声,本人参考多篇资料,并在指导老师的帮助下,顺利完成了串行结构译码器的设计和验证,并完成了基于WiMax 标准的部分并行结构LDPC码译码器的设计,目前正在测试验证阶段。从测试结果上看前者(串行结构)的性能已十分接近软件译码的结果(硬件实现过程中的定 点量化以及一系列简化运算会降低译码器的纠错性能,硬件设计的目的是要保证纠错性能的前提下降低实现复杂度,提高数据吞吐量)。

    下面是一些粗浅的理解。

    1、 FPGA设计的关键是理解硬件设计的思想

 

    目前,FPGA设计均采用HDL语言(Verilog HDL或者VHDL)作为设计的输入方式,初学者通常容易将计算机上的高级程序语言(如C语言)的编程思路应用在硬件编程(即使用HDL语言进行硬件电路 设计)中,因为通常在学习HDL语言之前他们都学过C语言等。这是初学者学习HDL语言需要注意的首要问题。

    想要学好和用好HDL语言你需要记住:HDL语言的目的是描述和设计电路结构和功能(C语言描述的是CPU能够识别和执行的指令,而CPU的电路结构在程序执行时是不会改变的,当然在这之前需要经过编译和连接等步骤)。例 如,分别使用VHDL语言和C语言描述了一个简单的两比特数据“与”运算,VHDL描述的c<=a and b将被综合成一个“与门”(数电大家都学过吧),a和b作为“与门”的两个输入端,运算结果从c输出;而C语言描述的c=a & b将被编译成指令,然后交给CPU去执行,a和b是存在存储器中的两个数,CPU执行完“与”运算后将结果存到c的存储位置中。希望能从这个简单例子体会 出两者的区别。

    对于硬件电路设计思想的理解需要设计者在实践中不断加以总结,建议初学者先打好数字电路课程的基础,然后在具有一定HDL基础和EDA软件使用技能后将数字电路中最基本的组合逻辑和时序逻辑都设计一遍。常 用的简单组合逻辑有:“门”电路、优先编码器、3-8译码器、数据选择器、串行进位加法器、三态门电路等;常用的简单时序电路:各类触发器、计数器、移位 寄存器、分频器等。这些电路相对都很简单,所以可以联系FPGA的内部底层结构思考它们在硬件上是如何实现的,这一点对于后期的复杂系统设计是很重要的 (滴水穿石,积累很重要)。

    将上述这些基本模块都设计一遍以后,相信对数字电路的底层就有了一定的理解。在之后的每个设计中,设计者都可以思考正在设计的电路都可以由上述哪些简单的模块来组成,做到:你十分清楚你书写的每个语句最终在电路上是如何实现的。

 

 

 

    2、基于模块化和层次化的设计思想

 

    真要将CPU和硬件设计扯上关系的话,那就是:CPU也是一种硬件电路,原则上也可以通过HDL语言进行设计。

    FPGA设计是基于模块化和层次化的设计思想,模块可以由子模块连接而成,子模块可以由更底层的子模块构成。因此,模块的大小和复杂程度都是不确定的,可以是上述的简单“与门”电路,也可以是复杂到CPU的这种电路模块。

 

     3、HDL语言只是硬件设计的工具,硬件电路设计的功底不在于对语言语法知识的把握程度上,而在于设计者对数字电路的理解上

 

    目前,比较常用的HDL语言有VHDL和Verilog HDL两种。其中,VHDL语言是第一个IEEE认可的HDL语言标准,语法很规范,对数据类型的定义很严格,同时对各种数据类型的操作也有严格的规定, 因此也有文章称VHDL为一种“强类型的语言”。VHDL这种“强类型”特性一方面限制了VHDL语言的灵活性,另一方面又有助于EDA软件对VHDL程 序进行严格的语法检查,确保了设计初期的语法正确性。

    Verilog语言是一种类C语言,语法和数据类型上和C语言很相像。这大大增加了Verilog语言在应用上的灵活性,但需要注意的是,Verilog是硬件描述语言,特别是在可综合程序设计时需要注意语句的可综合特性。

    虽然VHDL和Verilog在语法上有较大差别,但需要注意,两者都是硬件描述语言,在进行可综合程序设计时,两者在使用上的差别仅仅在于语法格式上, 而真正指导你完成硬件设计的是设计者对数字电路的理解和综合能力,这种能力的取得可以通过第1点中叙述的方法来练习。

    一个好的工程师不管使用何种语言,都应该能够漂亮地完成规定的任务。硬件电路设计的功底不在于对语言语法知识的把握程度上,而在于设计者对数字电路的理解上。因此,我们也完全没必要苦恼于到底选用哪种语言作为学习的工具,起始你会了其中的一种,另外一种只要稍加练习就可以完全掌握了。(本人先学的是VHDL,后来由于毕设的需要,看了一点Verilog的语法知识,并通过一些练习就掌握了如何用Verilog来设计电路。)

 

    4、对电路的优化

 

     上述3个方面大都针对初学者入门解惑。在有了一定的基础后,碰到实际应用的项目,往往在完成设计电路的功能的同时,需要追求模块的工作速度尽量高以及消 耗的资源要尽量少。例如:速度和面积互换原则(利用逻辑复制来实现面积换速度,利用逻辑复用来实现速度换面积)、为提高设计的时序性能采用“流水线”技 术、为提高处理速度采用“乒乓操作”思想等。 本人刚涉足该区域,具体的心得和体会以后再来分享,大家也可以参考相关书籍。

 

    5、一个好的指导者很重要

 

 

    初学者最需要的往往是有人为他指明前进的方向。在知识大爆炸的今天,一个人需要学习的东西很多,即使是在FPGA设计这个很小的领域,你需要学习的东西还 是很多,因为知识的更新太快了。一个好的指导者会告诉你,你应该在哪些方面努力,使你在有限的精力中得到更多的知识和技能。

 

    6、一个好的交流圈子很重要

 

    交流对于学习的促进作用想必大家都认可,交流不仅可以增长知识,提高技能,更重要的是你找到了志同道合的人,这会大大激发你的热情。热情很重要。

 

    总结性的发言:如 果你是初学者,想涉足FPGA设计,那么按照第1点叙述的方法,从基础学起,注意总结和思考;如果你已经具有了一定的硬件设计基础,那么找到一个好的指导 者或者一个好的交流圈子,在正确的指导下,在与别人的分享下共同进步;如果你是一个FPGA设计的高手,那么请对我的上述观点有不对的地方多多指教吧,或 者一笑而过。对于所有对FPGA设计有兴趣的人,欢迎交流。

类别:FPGA |
上一篇:<转载><科普>FPGA的速度等级 | 下一篇:Xilinx VHDL模型IP核在Modelsim中的功能仿真问题及解决方法
以下网友评论只代表其个人观点,不代表本网站的观点或立场