学完基础的verilog语言后如何进一步学习fpga

2022-06-19   大方老师单片机

原标题:学完基础的verilog语言后如何进一步学习fpga

学完基础verilog语言后如何进一步学fpga

fpga,先学写状态机,仿真和基础i2c之类的协议,这是第一步,基础打好后fpga必须会高速接口ddr,pcie之类,算法方面至fft之类ip核试着用用,这算是进阶,然后还有异步时钟,布局布线,时序优化等等,技术路线基本就这样,等这些都掌握了,工作应该妥妥的

verilog是目前数字电路的通用(主流)描述语言,必学的。

但是数IC/FPGA设计,绝不止是verilog。就像软件开发,绝不止C++

还有很多基础知识,专业知识技能是需要学习掌握的。自己可以对照下。

A:电子工程师Electronics Engineer)基础知识

1:电路分析,数字电路基础;

2微机原理,汇编语言;

3C/C++语言,数据结构;

4Verilog语言(比Michael, D.Cilette的《Verilog HDL高级数字设计》或夏宇闻老师的Verilog数字系统设计教程》);

5:晶体管原理;(做数IC/FPGA设计,只需大致了解)

B:数IC设计专业知识

1:进数IC/FPGA设计的专业知识学习sky推荐这本书:CMOS VLSI Design A Circuits and Systems Perspective》。自认为是数IC设计入。基本电路结构,加减法器结构,组合逻辑,时序逻辑,跨时钟设计都有涉及。

2:在此还需要理On-Chip-Bus的基本知识与一个数字系统的基本结构,建议学习理解AMBA总线,含APB/AHB/AXI。由ARM在数IP领域的领导低位AMBA总线事实上已经成为数IC的通用总线结构,必学。

3:现在可以开始做数IP的设计了,涉及到使用相EDA tool

a):功能验证:对于初学者(在校生),modelsim/questasim上做仿真测试,熟悉波形窗口debug RTL code。再使用windowsnLint/Debussy就能完成数IP功能设计验证了。

b):综合与实现:这部分首先(重点)要掌STA原理,比如cell delaycell library里面是怎么标定的tool是怎么计delaysetup/hold timing check的计算公式是什么clk skew, clk uncertainty, create_clock, create_generateclock, set_ideal_network, set_input_delay, set_false_path, set_multi_cycle_pathOCV , ....是什么意思,STA有何作用。懂STA原理,就可以TCL语言SDCDC综合/XDCvivado综合实现timing constraint了。目XDC/SDC的语法已经基本统一了。

C:进阶知识、技能

1:算法方向:信号与系统,数字信号处理DSP);

2:接口方向UART/IIC/SPI/DDR等常用接口协议;如有余力,可以看USB/PCIE/SATA/MIPI

3:日常工作OS平台linux操作系统使用vim(emac)使用bash(csh)makefile

4:脚本语言Perl(Python)/TCL

5:版本管理工具SVN/Git

D:项目锻炼

1:小数IP的设计、验证UART/SPI/Timer/AHB-SRAM);

2:小数IPFPGA上的实际运行;

3HW/SW的协同运作(试zynq FPGAPS-PL的协同);

4:中大数IP的设计、验证AXI-DMA,图ISP处理CNN加速器等);

5:中大FPGA项目开发(导师项目);

6:参与一个数IC项目的设计、验证FPGA emulation、流片(这个目前在校参与的机会很小);

建议补充数IC设计基本知识,比如rtl代码与电路结构的关系(了解基本组合逻辑,比如加减法,乘法器的结构),跨时钟域电路原理域设计STA原理timing约束BUSAHB/APB/AXI)的知识。

如果fpga,还得熟悉下厂商提供IP的实用,比如:内CPU,网络接口等。

然后就是实际写代码fpga板子试试。