以 Xilinx XC7K325T 为例详述 FPGA 硬件电路设计
由于 FPGA 兼具设计灵活以及可重构的优点,因此在电子产品设计领域得到了广泛的应用。
笔者在最近的工作中,首次接触到了 FPGA 硬件电路设计相关的工作。在这之前,用过一些开发板,也有一些基于已有硬件的软件开发工作经验。熟悉基于硬件的软件开发工作者一定非常清楚,软件的开发离不开原理图。在整个开发过程中,需要随时放一份原理图在手边,结合硬件具体开发。
很多时候,大家都认为硬件与软件应该分离,各司其职,提高工作效率。
针对此,笔者并不赞同。个人认为,硬件设计的过程中即使不会相关的软件也需要至少熟悉相关的协议。笔者曾经在某公司听一个工作经验“丰富”的老师傅指导 UART 协议,老师傅按照教科书 PPT 机械式讲解,通过听其讲解发现其甚至连协议层和应用层都无法区分开。当然,彼时为体现对其尊敬,还是选择硬着头皮听下去。后来,通过相处发现其确实非电相关专业毕业,遂能理解其中原因。不过本人对该师傅还是特别敬佩的,其懂得领域特别广。
除此之外,软件开发过程中也离不开对硬件原理图的理解,如果照葫芦画瓢,可能在基础领域还能生存。在后面介绍 DDR 外围电路设计的过程中,笔者也会详细介绍软硬件协同的重要性。
本文将从原理图模型的建立出发,详细阐述 FPGA 硬件电路设计的过程。
同时,文章末尾会附上 Xilinx 官方所有的手册资料以及对应的内容简介,帮助开发者快速定位需要阅读的资料。
1 FPGA 的选型
结合项目实际需求,根据 Xilinx 官方手册 《ds180_7_Series_Overview》,选择合适的器件。
从项目实际实用角度出发,器件的逻辑资源以及硬件资源最好有一定的富裕,这样针对项目中的突发情况,有更多的解决措施。同样,也需要从控制成本的角度出发,尽量选择略高于实际需求的器件。
Xilinx FPGA 主要分为 S 系列、A 系列、K 系列以及 V 系列,简单理解性能由低到高。本文不涉及 ZYNQ 系列的设计,由于 ZYNQ 由 FPGA + ARM 这样的异构组合而成,硬件电路设计可能会有较大却别,笔者在写本章内容时,未详细了解,后面如果有需要会补上。
用户选型的角度主要分为以下几种方法,根据外设评估需要的 IO 资源,特别是高速串行收发器 GT 资源,合理地选择 FPGA。FPGA 的 IO 资源比较丰富,IO 支持的电平接口也比较多。
写到这里,需要说明一下,IO 支持的电平接口会根据电路的设计以及 IO 所处的 BANK 有所调整。
所谓 BANK, 笔者个人认为就是为了 FPGA 支持各种各样电平标准专门设计的。不过笔者也搜索了下更专业的解释,如下。
BANK 是指芯片内部按照功能区域划分的独立供电单元,主要用于管理不同的 I/O 标准,增强 I/O 设计的灵活性。
FPGA 主要有三种 BANK 类型,包括 HR BANK、 HP BANK 以及 GT BANK。其中, GT BANK 是高速串行收发器的区域。
在实际应用过程中,如果用户需要使用 LVDS 电平接口,HR BANK 和 HP BANK 需要电路设计时 BANK 供电电压不一样。HR BANK 支持 LVDS 该 BANK 电压需要设置未 2.5V,而 HP BANK 支持 LVDS 该 BANK 电压需要设计为 1.8V。这部分可以参考官方手册 《ug471_7Series_SelectIO》。
此外,用户选型还需要考虑需要使用的逻辑资源,包括 LUT 和 BRAM 等。
2 FPGA 原理图模型的建立
根据手册 《ug475_7Series_Pkg_Pinout》 第二章 《7 Series FPGAs Package Files》 定位到选型的 FPGA 点击对应封装即可跳转到对应的网站。
1 | https://www.xilinx.com/support/packagefiles/k7packages/xc7k325tffg900pkg.txt |
下载该文件,并用 Excel 打开,根据 Cadence OrCAD 重新梳理文件。
3 FPGA 最小系统电路的设计(电源电路)
FPGA 供电系统,主要分为内核电源 VCCINT,内部 BLock Ram 供电电源 VCCBRAM,辅助电源 VCCAUX, IO 辅助电源 VCCAUX_IO,各 BANK 供电电源 VCCO 以及高速 BANK 的供电电源 MGTAVCC 和 MGTAVTT。
供电是有顺序要求的,具体如图所示,具体电压如表所示。

Power | Net | Name |
---|---|---|
VCCINT | VCC_1V0_FPGA | VCC_1V0_FPGA |
VCCBRAM | VCC_1V0_FPGA | VCC_1V0_FPGA |
VCCAUX | VCC_1V8_FPGA | VCC_1V8_FPGA |
VCCAUX_IO | VCC_1V8_FPGA | VCC_1V8_FPGA |
MGTAVCC | VCC_1V0_FPGA_MGT | VCC_1V0_FPGA_MGT |
MGTVCCAUX | VCC_1V8_FPGA_MGT | VCC_1V8_FPGA_MGT |
MGTAVTT | VCC_1V2_FPGA_MGT | VCC_1V2_FPGA_MGT |
BANK0 | VCC_BANK0 | VCC_2V5_FPGA |
BANK12 | VCC_BANK12 | VCC_3V3_FPGA |
BANK13 | VCC_BANK13 | VCC_2V5_FPGA |
BANK14 | VCC_BANK14 | VCC_2V5_FPGA |
BANK15 | VCC_BANK15 | VCC_2V5_FPGA |
BANK16 | VCC_BANK16 | VCC_2V5_FPGA |
BANK17 | VCC_BANK17 | VCC_2V5_FPGA |
BANK18 | VCC_BANK18 | VCC_2V5_FPGA |
BANK32 | VCC_BANK32 | VCC_1V5_FPGA |
BANK33 | VCC_BANK33 | VCC_1V5_FPGA |
BANK34 | VCC_BANK34 | VCC_1V8_FPGA |
4 FPGA 最小系统电路的设计(时钟电路)
一般情况下,FPGA 时钟电路可以采用晶振电路。如果用户需要后期灵活性更大,可以选用可编程的时钟芯片搭建时钟电路。
需要注意的是,如果高速 BANK 挂载的外设需要时钟,高速 BANK 同样需要设计时钟电路。
FPGA 每个 HR/HP BANK 上,有多对 MRCC|SRCC 引脚,这些引脚复用 IO 以及时钟引脚。同样,高速 BANK 上也有独立的参考时钟引脚。
SRCC 可用于本时钟区域,MRCC 用于本时钟区域和相邻时钟区域。两者都可作用于全局时钟,需要根据用户的设计合理地选择。
5 FPGA 最小系统电路地设计(配置电路)
FPGA 的 BANK0 BANK14 上会有一些用于配置 FPGA 的引脚,主要集中在 FPGA BANK0 上。
(未完待续)