在当初读书的时候就一直想学学fpga,可能是没有什么不得不学的原因,最后总是没有付诸行动。正好年前有点经费打算买个板子学一下。
在一开始根本不知道该买什么(现在也还不知道),各种系列,各种型号的太多了。然后问了一下以前一搞过的好基友,然后推荐买了块DE0-Nano-SoC说性价比挺高。
买来之后,看起来还不错。
但是。。。。。。
买板子不是要送很多资料么。。。。。。
就几篇英文的说明文档是什么鬼。。。。。
于是再次封入盒子,放入柜子。。。。。
2个月后,寒假,看着手上一堆事情,突然觉得应该换换思维,不能老搞机械设计,然后硬下头皮把fpga的封印重新开启,最终竟然看完了50页的英文手册,点亮了LED。
虽然,这个过程中,对Verilog HDL语言,还有fpga的很多基础都不知道,但是以前学习单片机的经验告诉我,第一个程序很重要!语言不会,可以找到专门的书和视频,基础不会可以慢慢查,唯有把第一个程序跑起来,才能算是把整个流程搞清楚了,才能循序渐进边动手边学习。
但是。。。。。。。
fpga就点个led而已。。。。
为毛这么复杂。。。。
为毛这么多流程要走。。。。。
趁着还没忘,把过程大致记录下来,留作笔记。不然明天万一又搞其他玩意了呢。。。。。。
1、搭建开发环境
学习板一块、quartus II 17.1,cyclone V对应的器件包(.qdz)能有对应软件的离线帮助包就更好了(虽然目前还没能力去用)
一开始,想去官网上下载,然后根据提示一步一步去注册,最后下载的是会后“404”,qq邮箱倒是又多了好多订阅邮件。。。
后来还是加了个相关的qq群,在群文件中找到别人归纳的下载地址(拜谢好人,这里我就不粘贴了)然后把软件安装好,按照提示该干嘛干嘛(你懂的)。安装的过程会自动把usb下载fpga的那个驱动安好。
软件装好后,打开,在 Tools-->Install Devices可以把下载好的器件库(也就是.qdz文件)添加进来。具体要什么器件库取决于自己的板子。
2、新建项目
这个和大多数相关软件都一样,不管式三维设计软件还是单片机的开发环境都是要有这一步的。项目能把所有文件管理起来,还记得当初才学这些东西的时候,做了很多东西,依然只有一个项目,所有文件东一个西一个,然后到编译的时候就各种灵异。。。
File-->New Project Wizard 然后一路next,需要输个工作目录和项目文件名什么的,然后选择自己板子对应的芯片型号。
3、设计
软件界面,现在我还是二懂二懂的,就不说了。
3.1 lock Diagram/Schematic File文件的创建
一开始是一个空的项目,然后就是File-->New-->Block Diagram/Schematic File,用来新建一个文件,这个文件长得很像一个电路原理图,作用也很像。后缀名是.bdf。所有程序什么的最后都变成一个一个逻辑功能块(我目前这么认为)在这个文件中添加,然后连接就像一个硬件一样。
3.2 Verilog HDL File文件的创建和使用
之前那个.bdf文件创建并保存了之后,要在其中添加东西,这些东西对应着不同的功能,于是就可以新建Verilog HDL文件来表达这些逻辑(虽然不签还不懂),File-->New-->Verilog HDL 创建并保存一个.v的文件,其中代码先照着抄进去。
目前即使保存,他也只是一个.v的源文件,需要通过File-->Create/Update-->Create Symbol.Files for Current File来将它转换为一个可以在.bdf文件中可以用的文件。后缀名还不知道是什么,反正在.bdf的绘图区域中双击就可以放置进来。
当然,在放置的时候,可以看到除了在项目文件目录中自己创建的这些功能块(将就着这么叫吧)外,还有软件安装目录的库的其他常用功能块。
3.3 IP Catalog的使用
用这个之前,需要先点一下Tools-->IP Catalog,打开对应的工具栏。
IP Catalog目前给我的感觉就是可以根据自己配置文件的形式生成之前要做的Verilog HDL文件,然后转换成symbol文件后和自己创建的文件一样,在项目文件目录下添加。和软件自带库的区别是(仅仅目前自我理解):
软件自带的块直接就是symbol文件可以直接调用,但是不能改;
IP Catalog只是通过软件的配置,自动生成源代码文件,需要先转换为symbol才能用,但是可以根据需要配置,比如多两个引脚少两个什么的。
这里根据需要配置并转换好。
3.4 连线
根据需要把各个功能块连接好,并且在输入输出和bus线上要右键-->属性重新给个名字。这个名字比较重要,和硬件有一定的关系。具体写法以后研究。
3.5 Assign the Pins 指定引脚
刚刚只是给输入输出引脚起了名字,但是这个名字具体对应物理上哪个输入输出引脚就在这个地方配置。
首先Processing --> Start --> Start Analysis & Elaboration,看一下之前的有没有错误。如果没有报错就Assignments --> Pin Planner,并在哪个引脚对应表格中填写具体的编号。
3.6 创建一个SDC文件
这个目前还不知道有啥用,只是猜测和之前.bdf中如数引脚是CLOCK_50应该有关。SDC文件中好像是定义了这个引脚的某种行为?
先Tools --> TimeQuest Timing Analyzer,然后出现新界面,在新界面中File --> New SDC file,然后把代码输进去,保存。
4、编译
Processing-->Start Compilation,如果没出错的话应该会生成一个.SOF文件,相当于以前单片机的hex文件。用来下载的二进制文件。
5、下载
连好硬件,然后Tools --> Programmer,出现新的界面,下载程序在这个界面中进行。
点击Hardware Setup,当前选择硬件中要选择好。
关掉对话框后,在Programmer界面中Auto Detect,自动查找硬件,然后选择自己的芯片。在图上出现了两个芯片的样子一个是HPS一个是SCSEMA4。为什么是两个目前我还不知道。
点击SCSEMA4,然后点击Change File,找到开始生产的sof文件。(比较逗逼的是英文文档中写的是a .sof,我就到处去找这个文件,还觉得很奇怪怎么默认默认名字是a,后来仔细一看,有一个空格,表示“一个.sof文件”。。。。。)
吧SCSEMA4的Program/Configure复选框选上,然后Start就好了。
6、总结
其实设计主要是为了做好bdf文件,其他Verilog HDL、自带库、IP什么的都是bdf文件的一个小元件。
bdf文件要通过Assign the Pins和硬件关联起来。
编译一个sof目标二进制文件,然后下载。
写了个笔记,对别人有没有用不知道,反正自己是重新理了一到思路,要明晰很多了(虽然可能有理解错误的地方)。