转自:https://www.cnblogs.com/alifpga/p/8853610.html
熟悉硬件描述语言语法,不需要什么都会,但是要记住几个经典的时序,逻辑电路的描述方式。
熟悉三个经典电路描述并仿真。学会用逻辑分析仪抓取数据。
三个经典电路分别是,分频器,计数器(可做一个时钟),序列检测器。
上板卡跑一个灯,熟悉一个板卡上时钟资源使用,硬件的使用原理。
FPGA学习主要不在于编程。压根没有编程这回事。
Verilog是硬件描述语言!写逻辑时脑子里必须有电路图,知道FPGA主要学的是硬件和算法。
以上是对于一个FPGA初学者而言的。要想成为一个FPGA高手,仍然需要不断学习。
下面介绍一下FPGA两方面的优势:
通信高速接口设计。一般速率太高了,需要用FPGA把高速数字信号分开,然后使信号容易处理,传输,存储。
数字信号处理。包括图像处理,雷达信号处理,医学信号处理等。优势是实时性好,用面积换速度,比CPU快的多。
学习FPGA,踏上一步台阶
学习FPGA的过程中,要想踏上一步台阶,需要注意一下几点:
-
时序约束的原因和使用方法,能熟练正确的应用最基本的时钟周期约束,时序例外约束,异步时钟域约束,同步复位的约束,高扇出约束。
-
清楚FPGA芯片内部时钟资源分布,能够知道自己的逻辑和约束能否让编译器用比较优化的走线布局布线。
-
清楚内部嵌入式硬核的分布和合理使用。
-
懂得常见的异步时钟域正确传输的常见方法:握手信号,异步FIFO,同步器。
-
能看懂时序报告里面基本的一些参数。
欲穷千里目,更上一层楼!
FPGA学习是无止境的。对于更高端的学习,可以归纳如下:
-
对FPGA所有常用时序约束和时序例外约束,包括逻辑锁定的方法都能正确使用。
-
能够跟据时序报告做出合理的改进时序的方案。
-
清楚各种时序优化方案的大概极限。
-
能够在FPGA平台上实现一些复杂算法:比如PID调节,FFT变化,FIR滤波器,神经网络等等。
-
对大规模,大吞吐量的逻辑设计能够在需求输入的时候有一个大概的总体方案,大致要能够一下想到时钟方案,复位方案,高速接口方案这些该怎么做,或者能不能做到。
总之,高阶教程会让人离FPGA更远,把FPGA最为一个底层平台去实现一些抽象高深的理论。其实不管是CPU还是FPGA都是工具,工具里面的算法实现才是最重要的。
学习FPGA有必要写SDRAM控制器吗?
在学习FPGA的过程中,注意是在学习过程中,联系FPGA的使用技巧,强烈建议尝试设计一个SDRAM控制器,不要使用IP核。
学习SDRAM控制器设计,能让你掌握很多知识。
-
更好的使用状态机去精准控制时序。
-
学会高速设计中必要的技能,也就是时序约束方法,timing report的阅读方法,查找时序问题的基本技巧,复位方案和时钟方案的合理设计,如何优化代码提升系统最高工作时钟,以及testbench的写法。
写sdram控制器还是能锻炼不少典型技能的,值得去花时间思考尝试,性价比是可取的。
设计流程:
看文档。
实现sdram控制器的逻辑。很多公开的教程都有指导怎样实现基本功能的,方式不一,可以参考;之后再自行思考如何改进性能。
写测试模块,配合仿真模型,验证所写逻辑是否正确,写进去能读出如预期,此阶段不追求速度。
频率觉得不够,加流水,切组合链,并行化等等,改进逻辑提高速度。
研究时序约束,并做进一步优化,让它能在板子上跑起来。
sdram控制器这时应该能用了。
FPGA学习的一点总结
做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该要对数字电路的知识熟悉。
FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在逻辑代码里面能够看到的就是与非门以及触发器。
不要把verilog和c语言等同起来,根本就是不同的东西,没有什么可比性,在写一句程序的时候应该想到出来的是一个什么样的电路。
计数器选择器 三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的时候可以画画时序图,这样思路会更加的清晰。
还有就是仿真很重要,不要写完程序就去往FPGA中去加载,首先要仿真,尤其是对比较大型一点的程序。
因为对于asic,是没有二次机会的,所以一定要把仿真做好。
还有很多新手对于语言的学习不知道选vhdl好还是verilog好,两者都是硬件描述语言,没有优劣之分,写出来的都是电路,所有就不要在语言的语法上面花太多的功夫了。
由于verilog 言简意赅assign always case if else 掌握这些几乎可以写出90%的电路了,所以初学者可以先学习verilog HDL。
小小的学习FPGA建议
学习FPGA,一点小小的 建议或者总结分享。
语法层面搞懂阻塞和非阻塞语句,以及Verilog语言的时序描述方法,把自己想象成编译器,尝试去编译自己写的Module,不断总结自己设计的逻辑会综合出怎么样的电路。
搞明白同步和异步,最后,一定要熟练地掌握状态机的设计。这是最初级也是最基本的要求。
有人说语法太简单了,这是非常片面的说法,或者非常浅显的说法,虽然verilog类似C语言,但本质上区别很大。Verilog语言并不简单,尤其Module之间时序不能同步,本该同相的信号输出有相位差的时候,简直是非常糟糕麻烦的事情。
掌握自顶向下设计,复杂时序,同步和异步时序都有的应用。
掌握IP核的应用,会配置IP核之后会发现新世界的大门正在被打开,这个时候FPGA真正的优势才体现出来了。
能够了解掌握SOC,以上四个阶段都是在硬件底层,SOC是应用层的东西。
总之,FPGA是不该被低估的东西,它可以干市面上所有MCU和大部分CPU干的事,有些甚至比专用芯片还干的好。当然了,唯一缺点就是功耗稍高