【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
之前我们虽然说过怎么编写verilog代码,怎么用iverilog软件和gtkwave软件进行仿真验证,但是一直没有说明如何在真实的板子上进行开发。今天正好来试一下。因为两年前买了ax301开发板,使用的是altera fpga,所以这些测试都是以altera为基础进行的。
1、准备quartus软件
每个品牌的fpga都有自己的eda软件。比如altera,就需要自己安装quartus软件。这里使用的是quartus prime 17.1.0 lite edition版,不收费。厂家对这个版本进行了阉割,但是基本的测试和练习不受影响。
2、购买fpga开发板
目前某宝上面的fpga开发板很多,大家可以根据自己的需求进行购买。我个人买的的是ax301。另外某火、某原子也都有对应的fpga板子,大家可以自己灵活购买。
3、安装usb2uart驱动
现在出售的很多电脑、笔记本都没有串口,所以厂家提供的开发板都提供了usb2uart这个接口。既可以供电,也可以当串口使用,一举两得。对于ax301这个开发板,使用的驱动可以从这里下载,
https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads
4、安装quartus和jtag驱动
除了quartus这个平台软件之外,还需要安装cyclone器件库。器件库都是以qdz文件结尾的。不需要单独安装。在安装quartus的时候,会自动把这些器件库一起安装的。
另外,安装完quartus之后,还需要安装jtag驱动,一般在这个目录寻找即可,
C:\intelFPGA_lite\17.1\quartus\drivers\usb-blaster
5、搭建好fpga环境
fpga环境和笔记本电脑之间进行调试,只需要两条usb线即可。一条是usb负责供电和串口;一条usb负责jtag调试。
6、创建第一个工程led_test
创建第一个工程,依次填写工作目录,模块名,
选择空项目,
跳过文件添加,
根据开发板选择正确的fpga类型,直接finish。
7、添加led_test.v文件,
其中代码的内容如下所示,
module led_test(clk ,rst, led);
`define MAX_NUM 32'd4999_9999
// input signal
input clk;
input rst;
// output signal
output led;
// signal type
wire clk;
wire rst;
reg[3:0] led;
// inner signal
reg[31:0] count;
// count register
always@(posedge clk or negedge rst)
if(!rst)
count <= 32'b0;
else if(count == `MAX_NUM)
count <= 32'b0;
else
count <= count + 1'b1;
// led data
always@(posedge clk or negedge rst)
if(!rst)
led <= 4'b0001;
else if(count == `MAX_NUM)
led <= {led[2:0], led[3]};
endmodule
将文件保存为led_test.v,
在Project Navigator里面按Files显示视图,
将led_test.v修改成top层,
直接综合文件,
8、配置fpga属性,单击“Assignments”-》“Device”,选择“Device and Pin Options”
不使用的pin修改为输入三态,
“Dual-Purpose Pins”中的所有value都修改为“Use as regular I/O”,
电压修改为3.3v,保存。
9、绑定pin脚,选择“Assignments”-》“Pin Planner”,按如下图配置,保存。
每一个板子的pin脚绑定,最好参考对应的电路图,或者是excel文件。比如ax301,可以参考官方给出的qsf文件,
https://github.com/alinxalinx/AX301
10、再次编译,
11、选择“Tools”-》“Programmer”,准备烧入,一般是sof文件
直接单击start,即可完成烧入。
如果没有其他问题的话,就会看到一个流水灯的效果。
其他:
将verilog代码port到fpga开发板子上面是一个很重要的学习过程。在这个过程中,会遇到很多的问题,比如软件的下载、设备的连接、驱动的安装、jtag无法识别、下载后没有效果等等。但这又是一个不得不经历的阶段。只有通过不断犯错,才能让自己有所收益。毕竟所有的ip编写、仿真不是根本目的,最重要的还是要让板子动起来。