编程语言
硬件描述语言HDL(Hardware Description Language)/寄存器传输级语言RTL(Register Transfer Language)。这是一种描述数字电路功能和行为的语言,可以在寄存器的传输级、行为级、逻辑门级等描述电路。
主流的硬件描述语言又VHDL(语法更加严谨)、Verilog(语法更加灵活)、System Verilog,先掌握一个语言即可,推荐verilog
语法
- 教材:《Verilog数字系统设计》、《Verilog HDL高级数字设计》
- Verilog语法可以分为可综合(Synthesizable,这部分语句可以生成对应的硬件电路)和不可综合的部分(Non-Synthesizable,主要用于验证和仿真)
- 刷题网站:HDLBits
RTL设计
RTL设计主要有组合电路和时序电路两个部分,还有一个状态机,这些在刷题网站HDLBits里都有对应的题目。
RTL验证
如何写一个测试平台,写一些简单的测试用例
学习方法
- 不要用软件编程的思想去思考硬件,软件编程大多是顺序执行的,硬件编程大多是并行执行的。
- 在学习Verilog的时候一定要多思考它对应的硬件电路是什么样的。比如在Verilog中写一个for循环,它会综合出一个什么样的硬件电路。或者写一个if else语句,会综合出一个什么样的电路。写一个case语句,会综合出一个什么样的电路等等。
- 对于一个给定的逻辑功能,要想象出它的电路结构,然后使用Verilog语言来实现,同时可以写一些简单的测试用例和测试环境。
仿真工具
基础知识
(1)专业基础课
电路、数电、计算机体系结构、接口、数字信号处理(数电必须)
(2)FPGA相关专业知识
FPGA芯片的结构以及一些基本组成单元的结构(如查找表、逻辑单元、逻辑块、DSP、存储器等等),这部分可以看FPGA的官方文档
(3)FPGA开发流程
开发工具
主流的开发工具主要是AMD的VIVADO和英特尔FPGA的Quartus。
- 熟悉开发流程
- 熟悉IP的配置使用(一些常见的IP:OLL、FIFO、存储器,一些复杂的IP:软核处理器NIOS、通信用的PCle、DDR控制器)
- 学习硬件调试和时序分析的方法,比如如何看一个设计的最大频率、时序不收敛的时候如何修改你的设计、如何使用一些硬件调试的工具比如Quartus里的SignalTap。
关于FPGA开发工具的学习可以参考教材、并配合开发板进行学习
动手实验
数码管、流水灯、按键、红绿灯、常见的总线通信、数据处理和信号处理
《深入浅出玩转FPGA》、《勇敢的芯 伴你玩转Altera FPGA》
开发板:Xilinx A7