首先感谢澎峰科技提供的Perf-V开发板。这是一块与常规的FPGA开发板不大一样的板子,它不像许多开发板为了提供实验便利配置许多花哨的外围器件,也不是精简板那样直接把I/O口做成一列列的排针孔,而是居然在安排了一组Arduino接口——含义是:我是可以像MCU开发板那样来用的。
实际它是比Arduino风格的板子要大一圈的。因为FPGA最小系统的外围器件比一个MCU要多许多,两个标准尺寸JTAG座就比较大,顺势又在外圈放了一些LED和按钮、开关(毕竟是个FPGA开发板,做基本实验的支持最好还是有),就是这个大小了。我也觉得不是不能做到更紧凑更小,那样成本会增加,没有必要罢了。
板子的配置,依我看来,只是在Xilinx Artix-7最小系统的基础上加了一点外围器件(DDR3 SDRAM和 flash)和接口。上面的照片中我用红框标示的是电源部分,有四路DC-DC给FPGA及SDRAM供电,分别是 3.3V/1.8V/1.5V/1.0V. DDR3还用了一个0.75V的电压,由LDO产生。两片串行flash (N25Q64)一片用于FPGA上电配置,一片自由使用。其它都是简单的开关和LED连接了。
FPGA是BGA256脚封装,I/O口有很多。除了Arduino口、PMOD口引出的少数通用I/O口,在板子背面还有一个60针的小型连接器,用来连接扩展卡。比如可以扩展出 SD 卡座、HDMI 接口、VGA接口等。这种扩展卡设计方式可以让核心板保持小体积,需要什么应用再连接;一方面也节约了开发板的成本。
Perf-V资料中提供了完整的电路图,可以供学习设计 Xilinx Artix-7 系列FPGA系统板参考。
这块FPGA除了I/O电压选用了 3.3V和1.5V 外,核心电压是 1.0V, 还用了 1.8V 作为 VCCAUX. 另外,1.0V也给VCCBRAM和VCCADC (这个FPGA带有片内ADC).
I/O电压有 3.3V和1.5V两种,是因为DDR3 SDRAM要用1.5V,一般的I/O用3.3V通用。 FPGA的板子DIY难度比MCU高,主要就是电源脚很多而且要多组不同的电压。封装大部分都是BGA, 做PCB成本高,所以直接购买最小系统板来做原型开发常常是最方便的。
Xilinx FPGA的软件开发工具有 ISE 和 Vivado. 我这次尝试的是 Vivado 2017.4 Linux 版本,从Xilinx网站下载的。软件包体积已经很大了,没有必要就不要追求最新版啦。
做一个最简单的逻辑来测试一下流程。
创建一个工程,指定路径,选择FPGA器件为Perf-V对应的XC7A100TFTG256. 不添加任何代码,然后到达主界面:
我要编写一个计数器用来点灯,代码很简单(可以用任何文本编辑器写,然后加进工程即可):
module demo(clk, led);
input clk;
output [3:0] led;
reg [25:0] cnt;
always @(posedge clk)
cnt <= cnt + 1'b1;
assign led = cnt[25:22];
endmodule
然后在 Vivado 里面把这个Verilog源文件加进工程。当然也可以由Vivado直接创建文件并编辑。
Vivado 会自动识别文件中定义的模块(也许有语法错误也能马上报告,我没有试), 它自动将工程的顶层模块设置为我编写好的"demo". 下面就可以进行综合了。
点主窗口左边一栏当中的“Run Synthesis", 启动综合工具。然后,就等待吧……尽管代码很简单,这一步的时间么……
终于综合结束了,可以点"Open Synthesized Design" 看下结果:
下一步就是"Run Implementation"了,就是用FPGA实现以上的逻辑。操作方式是类似的。
原因是我没有对管脚进行处理,现在还是默认设置。因为软件并不知道芯片管脚是怎么接的,电压标准是什么等等,需要用户先指定。我也还没有分配LED接到哪些管脚,现在即使完成了也是没法正确工作的。现在需要在Window菜单中选择”I/O Ports"打开设置界面:
Perf-V板子上有4个红色LED和三个RGB LED可以用,我就用那4个红色的。查阅电路图,找到 LED 连接的管脚
LED对应与 M16, N16, P15, P16 四个脚,另外, 50MHz 晶振的时钟信号 SYS_CLK 接在 N14, 也是需要的。在 Vivado 中指定这些管脚,电压标准选择3.3V LVCMOS.
再重新做一遍 Implementation, 就可以到下一步,生成FPGA需要的二进制码流文件了。
最后将码流下载到板子上,让FPGA工作起来。 FPGA的配置通过JTAG进行,澎峰科技提供了一个下载器,一端插入开发板的JTAG座,一端USB连接电脑。虽然 Linux 能够检测到下载器的芯片,但 Vivado 还不能识别,需要"安装驱动"——对于 Linux, 实际上并不是装驱动程序,而是在系统配置中小改一下。Vivado 安装目录中有一个脚本文件,用 root 身份执行一下就可以了。
在 Vivado 中打开“Hardware Manager",当下载器被识别出来以后,就可以看到连接的 FPGA 器件信息。此时点”Program Device", 出现对话框。
这是用来确认码流文件(也就是前面的过程从Verilog源代码处理最后得到的.bit文件),点"Program"就马上下载到FPGA中,可以看到LED变化了。
虽然这个工程描述的逻辑很简单,Vivado 软件给我的感受是——真的很慢。十年前我就用的 Altera Quartus 9.0 的编译速度跟它相比,不是同一个数量级的。各厂家的 FPGA 综合软件界面和操作风格有所不同,基本流程是类似的。慢的问题,也别无选择了。
本帖最后由 cruelfox 于 2021-6-4 22:46 编辑