学习FPGA,多多少少应该要懂得硬件电路的设计,这样不单单增加了自己的技能,而且还能够对FPGA的硬件实现有更好的了解。
1 模块划分
对于一个基本的FPGA硬件平台,常用的几个电路部分:(1)电源电路;(2)复位电路;(3)时钟电路;(4)外设电路;(5)配置电路。如图2.1所示。
图2.1 常用电路模块
1.1电源电路
电源电路是FPGA的核心,是“心脏”,若是电源电路设计的不合理,很可能导致整个系统的溃败,不能正常运行或者失败。对于FPGA来说,基本上包括三类电压:(1)核心电压;(2)I/O电压;(3)辅助电压;
(1) 核心电压是保证FPGA正常工作的基本电压,属于FPGA内部系统电压。
(2) I/O电压是FPGA的I/O引脚工作所需的参考电压。不同bank的I/O所需要的电压不尽相同,对于一些LVDS的I/O电压,可能会需要1.5V,这就不同于LVTTL电平的I/O口。
(3) 除了上述之外的部分的电压,称为辅助电压,例如一些PLL电路的设计等。
需注意以下情况:
(1)器件需要几档电压,电压值分别为多少;
(2)不同档最大电流是多少;
(3)不同档是否有上电要求;
(4)电源的去耦电容如何分配和排布;
(5)电源电压是否需要设计特殊的去耦电路;
(6)个别芯片需要注意接地问题,FPGA的地信号通常是和电压配对的,一般应用中,统一共地是没有问题的。但个别芯片底部中央有个接地焊盘,这个地信号是连接FPGA内部的很多中间信号的地端,它并不和FPGA的其他地信号直接导通,要注意中间接地焊盘。
1.2 时钟电路
FPGA的时钟信号源一般来自外部,在大规模的FPGA内部会带有PLL或DLL等可以对时钟信号进行倍频或分频。由于FPGA内部有大量的寄存器资源,而往往在做逻辑使用时,大量的寄存器会有同一个时钟源,由于时钟到达每一个寄存器所需要的时间不一样,这就导致延迟,若到达寄存器的延迟过大的话,会导致系统混乱,不能正常工作,所以FPGA内部设计了“全局时钟网络”的走线池,通过这种专用走线,可以将同一时钟到达寄存器的时间差控制到最小的范围之内。只需将外部晶振的引脚接到FPGA专用引脚上面即可,EDA软件会自动识别此类信号,并将此信号分配到全局时钟网络上。
需注意以下情况:
(1)系统运行的最高时钟频率是多大;
(2)时钟走线尽可能短,有条件可以做包地处理;
(3)尽可能选择专用的时钟输入引脚;
(4)是否有可用的内部时钟管理模块,(PLL或者DLL,通常是有的)其输入频率是多少(查器件手册,有一个范围);
1.3 配置电路
FPGA芯片的配置是通过JTAG实现在线可编程,当断电时SRAM数据丢失,不能恢复,因此FPGA通常需要外挂一个用于保存当前配置数据流的PROM或Flash芯片,通常称为“配置芯片”。CPLD大多都是基于PROM或Flash来实现可编程特性,对它们进行编程时就已经配置好数据流固化好了,重新上电还能够运行固有的配置数据,CPLD不需要配置芯片。
需注意以下情况:
(1)配置芯片尽量离FPGA近些;
(2)尽量使用官方指定的电路和引脚;
(3)必要时增加阻抗匹配电阻;
1.4复位电路
复位电路的设计,尽量采用专用引脚。FPGA内部大量的寄存器在上电工作之前需要有一个确定的初始状态以确保正常运行。而上电时间对于FPGA的复位来说也至关重要,FPGA是基于SRAM结构,若上电复位时间较短,那么FPGA器件内部很可能没有复位完成,若上电复位时间较长,对于用户交互使用会有一定的影响,所以上电复位时间要确定好。
需注意以下情况:
(1)使用FPGA专用引脚;
(2)上电复位时间要确定;
(3)尽可能选择专用的时钟输入引脚;