文章目录
- 一、友晶SoC文档与工程文件获取
- 二、实验环境
- 1、Quartus
- 1.1、Quartus 18.1标准版、CycloneV器件包、SoC安装包获取
- 1.2、Quartus 18.1标准版、CycloneV器件包、SoC安装包的安装
- 2、串口驱动安装
- 2.1、接口与连线
- 2.2、设备管理器检查
- 2.3、更新驱动
- 3、黄金工程文件配置。
- 三、DE10_SoC 亮灯实验基础
- 1、顶层文件
- 2、platform designer
- 3、fpga_2_hps
- 3.1、external_connnection
- 3.2、s0、master、s1、m0
- 4、Base与End
- 5、添加PIO
- 6、顶层文件更新
- 7、工程文件编译、头文件获取、系统文件更新、sd卡系统重设
- 7.1、工程文件编译
- 7.2、头文件获取
- 7.3、系统文件更新
- 7.4、sd卡系统重设。
- 8、HPS_FPGA_LED二进制文件生成、sd卡文件更新
- 8.1、HPS_FPGA_LED二进制文件生成
- 8.2、sd卡文件更新
- 9、片上系统嵌入式工具获取与使用
- 9.1、MobaXterm获取与安装
- 9.2、MobaXterm使用
- 四、小结
一、友晶SoC文档与工程文件获取
若想获取友晶开发板以及相应文档,建议登录友晶中文官网。
本次实验所使用的是DE10_standard开发板,大家可通过官网注册账号获取文档资料。
DE10-Standard CD-ROM文档链接
或者通过网盘链接获取。
二、实验环境
本次实验所需设备主要包括:DE10_standard开发板一个、UART_TO_USB线一根、SD卡一个、SD卡读卡器一只、开发板电源线一根。
1、Quartus
DE10_standard开发板的型号是5CSXFC6D6F31C6N,此处我以windows版本的Quartus 18.1标准版为例(其实13.1版本也行,18.1的lite版本也可以),不过前提条件是Quartus必须配备有SoC套件。若你使用的是linux或者苹果系统,可以自行参考其他安装教程安装好软件,再进行DE10的SoC开发后续工作。
以下是Quartus 18.1标准版安装、破解、SoC安装的详细过程。
1.1、Quartus 18.1标准版、CycloneV器件包、SoC安装包获取
可以根据自身需求在Intel官网FPGA一栏找到相应的版本。
注意:以下所需下载的文件,建议放在同一个路径下,这里路径名中英文不做强制要求。
Quartus18.1标准版:
CycloneV器件包:
SoC文件:
1.2、Quartus 18.1标准版、CycloneV器件包、SoC安装包的安装
在安装Quartus软件之前,要先确保各自电脑的环境变量中,注册表是否在英文路径下。(因为,如果你的电脑用户名是中文,那么你的注册表就可能出现在中文路径下,这种情况会影响后续Quartus编译的)
环境变量修改:
(1)windows系统用户通过设置或者搜索框搜索“环境变量”:
(2)点击进入环境变量设置窗口:
(3)如上图,若你发现用户变量中的TEMP和TMP这两栏的地址(变量值)里有中文或是乱码,那么你就需要在磁盘的另一个位置创建一个英文文件夹(文件夹名字自拟,如temp即可,注意,文件路径不能出现中文,包括文件夹的根目录也不能出现中文,后续提到的不能出现中文路径的都是包括根目录在内的)
(4)最后把你新建的英文路径作为变量值修改进去,再依次点击确认,最后重启电脑。
注意:重设环境变量后一定要重启电脑!
Quartus安装:
(1)在安装该软件之前,要自行先在磁盘的某一位置新建文件夹,用以存放软件,这个和大家平时在电脑上安装其他软件一样。特别要注意的是,文件夹的路径(包括根目录不能出现任何中文,而且建议不要以数字作为开头,最好英文开头) 建议大家不要把软件迷人安装在C盘,因为这样会占用大家系统盘的空间,养成良好的磁盘使用习惯,对你日后维护个人电脑、查找文件是很大有裨益的!
(2)点击QuartusSetup-18.1.0.625-windows.exe文件进入安装界面。
(3)这里你会发现窗口里面有devices,如果你并没有把器件包放在安装包的同一路径下,那么此窗口将不显示devices。
然后一直next即可。
完成后会弹出quartus启动界面。若你在启动软件的时候,弹出了选项窗口,那就选择30天使用期限的那个选项然后继续,若没有可以忽略。
Quartus破解:
(1)下载Quartus18.1破解器
(2)接下来需要做的是设置破解器里的license文件。首先在quartus软件的tools选项中选择license Setup。
(3)利用记事本打开license.bat文件。若只看见lincense,看不见后缀名,那就再文件资源管理器内选择查看,勾选上文件扩展名。
全部替换后。license.bat文件内容如上图所示。
(4)此时我们需要把修改后的license文件添加到quartus软件的license环境配置中,这里是需要全英文路径的。因此,我们需要把lincense单独地复制到一个英文路径下。比如直接放在安装quartus软件的英文路劲下。
(5)在license设置的三个小点处选择你的文件存放路径,然后就会出现如图3号显示的2037.12字样的有效期限。若未显示,先不急!
(6)紧接着,点击Download License,然后选择第三个“用已有license文件启动quartus软件”,再点击ok。
最后直接ok,并退出Quartus软件。
破解的步骤才完成了一半哦!
(7)接下来,为了确保你的quartus软件已经完全关闭,在任务管理器中以名称排序,看看字母“q”开头当中有没有quartus.exe这一栏。若有,就需要选中结束quartus.exe的任务。
(8)我们下载的破解器文件夹内还有一个名为“Quartus_18.1破解器_Windows.exe”的文件,我们需要将该文件复制到Quartus安装路径内部。复制红框内文件。
具体位置如下:
(9)在确保文件复制完毕后,在bin64文件夹内双击打开破解器exe文件。
在最后一步,可以直接点击否。如果你点击是,那么会进入某公司网站。至此,全部破解步骤结束了。
SoC安装步骤:
(1)老地方,双击打开SoC的安装文件。
(2)注意:选择SoC安装路径的时候一定要选择Quartus安装的路径。
(3)紧接着,next,等待安装到后续步骤。
(4)SoC安装界面结束后会进入驱动安装步骤。
(5)稍等片刻后,下图会闪一下,next选项即可选择。
一直next,直到结束。至此,所有安装步骤均已完成!
2、串口驱动安装
2.1、接口与连线
串口驱动安装是需要大家把开发板与电脑相连的。接线方式如图所示:
2.2、设备管理器检查
windows系统用户可在开始标志处鼠标右键选择“设备管理器”。
若在端口一栏发现有USB Serial Port(COM+数字)的字样,则表示已识别当前串口线(UART线,即前面的灰色线)。你可以在电脑上拔掉刚刚接上的串口线,看看设备管理器是否闪烁并且端口一栏内容消失,若消失了并且在你重新接上线的时候又出现了,那就说明识别无误。
2.3、更新驱动
接下来就要更新驱动了。需要先下载驱动
再回到设备管理器界面。
在Power Management(即电源管理)一栏中,把勾选取消!
如果你在通用串行总线控制器一栏中并未发现新增的USB Serial······那么你就鼠标右键上面的端口USB Serial Port,选择属性,看看里面有没有电源管理这一项,若有,就把电源管理中的勾选全部取消!
这样,驱动就更新完成了!
3、黄金工程文件配置。
由于Quartus软件读取文件的特殊性,工程文件的路径也要有特殊要求:工程文件的路径必须是英文。
我们将第一章节的渠道中下载得到的DE10-Standard_v.1.3.0_SystemCD.zip解压到英文路径下
比如此处,我直接放在D盘根目录下。
三、DE10_SoC 亮灯实验基础
1、顶层文件
官方提供的工程文件其实已经配置好了LED、KEY、SW。
我们会发现,在顶层verilog文件里,模块定义了LED、开关、按键还有数码管,但在后面实例化的过程中并未对数码管进行实例化。这是因为官网提供的工程文件只提供了三个PIO(programmable I/O)外部设备的配置,并未对数码管进行配置。
2、platform designer
我们可以先看看配置PIO外设的具体情况是什么样的。
我们需要在工程上部选中“platform designer”工具,进入外设配置界面。
如上图,红框内三个pio分别是led、sw开关、button按键。我们可以仔细查看每一个pio对应的bridge连线、name、export、Base、End这几列。
这里我以led_pio为例。
外设的clk与reset,即时钟与复位需要与clk_0的clk、clk_reset相连。外设的s0要与mm_bridge_0的m0和fpga_only_master的master相连。
这里需要了解一下bridge连线的意义了。
3、fpga_2_hps
如上图所示,我们会发现FPGA端有外设:数码管、开关、按键、led以及其他的一些接口。而HPS端有连接的外设包括sd卡、UART to USB、Ethernet等接口。
在本次实验中,所涉及到的外设主要是led、按键、开关、sd卡、UART to USB。
HPS实验本质上是在HPS端的linux系统内运行c工程文件,而这里的c工程会根据实验要求分别对fpga端的外设等进行定义。
FPGA端对应的是软核,而HPS对应的是硬核,这是两个完全不同的架构。如何把FPGA端的外设映射到HPS端呢?
这里就需要用到FPGA到HPS的内存映射,也就是memory master bridge。
作为FPGA端的外设,势必要有两个关键信号:时钟和复位,led_pio已经从clk_0中获取到了。可以双击CLK_0查看始终设置,我们会发现时钟频率是50MHz,这和DE10_standard开发板的始终晶振是一致的。
另外,led_pio还有s0和external_connnection,其中s1表示的是slave1,external_connnection表示的是外部连接。
3.1、external_connnection
先讲一下external_connnection(外部连接)。如果你有一定的veilog或FPGA基础,应该知道同一个工程项目之下含有多个verilog文件时,势必出现实例化其他模块的情况,这就类似于C语言中的函数调用需要头文件,python、JAVA里的函数或类的调用需要import库。使用当前文件之外的文件所拥有的内容时,就必须建立一定的外部连接。
我们这里需要的内容是信号,也就是led_pio。既然如此,我们需要对led_pio定义一个external_connnection的Export名,也就是信号实例化名称。比如led_pio的Export名是“led_pio_external_connection”。
与之相对应的实例化语句是:
该实例化语句最终在顶层verilog文件中运用到了:
3.2、s0、master、s1、m0
TerAsic官方提供的手册对AXI bridge略做一些介绍,我们的实验只需关注AXI桥接图的右边部分,即FPGA_to_HPS。如果后续你想通过FPGA端控制HPS端的外设,那么你会涉及到GPIO等相关的技术点,此处不做赘述。
我们在前面连线过程中出现的s0、master、s1、m0都和FPGA_to_HPS有关。
首先是master,master出现在fpga_only_master中,即此时FPGA为主,HPS为从,此次实验本质上是在FPGA端定义内存地址,在利用HPS映射到这些地址最终实现SoC(片上系统)的功能,就是以两个不同架构间的主从关系建立的。
AXI是ARM公司开发的一种总线协议,关于具体的AXI协议传输信息方式,此处不做赘述。
在了解到FPGA端为主设备之后,我们需要对内存映射桥接赋予连线的功能。
mm_bridge_0相对于fpga来说是从,而FPGA端的外设相对于mm_bridge_0来说也是从,类似于一个树分支的结构。因此mm_bridge_0的s0与fpga_only_master的master相连,而m0则作为其他外设s1
的主了。
当然,pio的s1还与fpga_only_master的master相连了。
4、Base与End
在每一个信号之后,还存在十六进制的地址信息,这里的Base指的是随机分配后的基地址,End指的是随机分配后的结束地址。
随机分配的地址空间最小是4位,换算成十六进制也就是0xf。比如led_pio一共是10位(FPGA端一共就是10个led)。
双击led_pio,可知led_pio设置的是输出类型的10位数据。其他的pio,比如开关和按键的设置,大家可以自行点击查看。
基地址分配也是需要操作的,只不过官方提供的实验已经为我们完成了三个外设的设置。接下来,我演示一下如何在“platform designer”工具内添加pio。
5、添加PIO
PIO,即可编程的输入输出,也就是FPGA的输入输出(FPGA的I/O、电路、逻辑块都是可编程的)
(1)首先我们需要在“platform designer”的左上部搜索框内输入“pio”。然后,会有几个选项,我们选择最下面的“PIO (Parallel I/O) Intel FPGA IP”
(2)双击“PIO (Parallel I/O) Intel FPGA IP”,会弹出如下窗口,我们在其中设置位宽、输入输出方向,最后点击finish。
此处,我以数码管当中的某一位为例,七段数码管位宽应设置为7,方向位输出output。finish之后,在界面中会出现一个叫做“pio_0”的PIO。
(3)此处红色报错意为clk和reset未参与连接,咱先不急。先把name修改一下。
在“pio_0”处,鼠标右键,选择rename。
如上图,我改成了HEX0,代指第一个七段数码管。
(4)接下来,我们连一下线。
连线的方式其实有两种,我这里只演示简单粗暴的方法,直接对应号信号,在所在列点击空白点,即可选中。
在连线之后,红色报错没了,但是警告信息里面有两处需要注意。提示意思为:s1尚未参与连接,外部连接也没设置。
(5)先把s1与m0、master相连,再在external connection的Export一列中输入当前PIO(HEX0)的实例化名称。
默认的外部连接名称如下
(6)别忘了,分配基地址这一步骤,即使未出现报错,也没有新增的警告信息。
在System当中选择Assign Base Address分配基地址。就ok啦
(7)接着,点击Generate HDL。
(8)完成后弹出如图窗口,直接点击ok。此处可能会稍微卡顿一下,稍等几秒即可。(如果你的电脑很慢,那······)
6、顶层文件更新
由于前一小节我们把数码管添加到PIO里了,但是顶层文件里只有module模块定义中定义了6个HEX信号(HEX0、HEX1、HEX2、HEX3、HEX4、HEX5),而后面的soc system实例化语句里并未出现和HEX相关的语句。
我们回顾一下,soc system实例化语句中出现的一行行语句在platform designer中出现过。我们需要在platform designer工具中找到需要添加的某一个信号的实例化语句。因此,大家在后续实验中,完成PIO的增删改查、platform designer生成HDL文件的步骤后,先不着急finish,而是先点击platform designer工具窗口的左上栏“Generrate”的“show instatiation template”。
我们这里需要重新打开一下”platform designer”工具,去寻找一位七段数码管的信号实例化语句。这个步骤我在前面已经提过了,一定要不断熟悉才能做到不遗漏、不出错,熟能生巧嘛!
选中红框内的一串,注意是从这一行最前面的小点号开始选,一直到注释符号之前的小逗号结束。选中再CTRL+C复制这一串代码,复制到如下图所示位置(反正要放在soc_system u0 ()实例化语句内。
注意:复制进来的语句,后半部分的小括号里的内容是要替换的,替换对象是我们在模块定义中定义的HEX0,因为这里HEX0对应的就是第一位的数码管,引脚信息也对得上(引脚不需要咱们手动配置,官方提供的工程文件早已把芯片型号和引脚全设置好了)。
修改之后如下图所示:
最后把刚刚没有finish的“platform designer”工具关掉,直接点击finish(前条件是你之前增删改查完成PIO后已经点击了generate HDL了)。
7、工程文件编译、头文件获取、系统文件更新、sd卡系统重设
7.1、工程文件编译
一定要记得,我们的实验,你每修改一次,养成随手保存的习惯(CTRL+S)。
首先把前面修改的顶层文件保存了,然后点击全编译,如下图所示:
如果上图当中有那一部分小窗口在你的quartus软件中未显示,可在view工具栏中添加。
直到编译完成。
7.2、头文件获取
点击开始栏,往下划动界面,直到如下图红框所示字样。
展开并选择“SoC EDS Command Shell”
打开SoC 的shell指令窗口后,先输入cd + 你的黄金工程所在磁盘,比如我的在d盘,那就cd d:
随后enter回车。
接着,输入cd + 黄金工程在当前磁盘根目录下的相对路径,比如我这里是cd DE10-Standard_v.1.3.0_SystemCD/Demonstration/SoC_FPGA/DE10_Standard_GHRD/
注意,由于路径名过长,你可以每输入一个文件夹时只输入开头几个英文字母,然后按TAB键即可自动补全文件夹名或文件名。
随后输入“./gen”按下TAB键自动补全为“./generate_hps_qsys_header.sh”。
至此,头文件hps_0.h已生成完毕,等后续使用。
注意,SoC EDS Command Shell指令框暂时不要关闭,方便后续实验继续使用。
7.3、系统文件更新
(1)在SoC EDS Command Shell指令框内输入“make dtb”字样。如图:
这一步也许会花很长时间,所以此处需要大家耐心等待指令执行完成,每个人执行情况不一样,但只要最后一行是“”就行了。
当然,如果你报错提示“Nothing to be done for dtb”,那么你就需要把工程文件夹内原先已存在的“soc_system.dtb”文件删了再重新执行make dtb指令。
最终工程文件夹内出现一个最新生成的“soc_system.dtb”文件。
(2)进入工程文件夹内部的“output_files文件夹。
进入该文件夹内部后,双击打开“soc_to_rbf.bat”文件,等后续使用。。
等待片刻后,按任意键,退出bat文件的小黑窗口,并生成soc_system.rbf文件,等后续使用。。
7.4、sd卡系统重设。
前面让大家下载的文档中还有一个压缩包,内部包括我们此次DE10 SoC实验中sd卡所必须的系统镜像文件。
(1)我们需要将这个压缩包解压到一个英文路径下,比如直接放在“D:/DE10-Standard_v.1.3.0_SystemCD”文件夹下。
(2)将sd卡通过读卡器连接在电脑上,若弹出三四个需要格式化的小窗口,我们先不管,全都关闭。
把sd卡唯一能看见有占用空间的盘格式化。
然后,在开始栏右键选择磁盘管理。
(3)磁盘管理过程中需要我们对sd卡进行删除卷、新建卷操作。而磁盘管理界面还包括我们自己电脑上的其他磁盘,所以,一定要慎重,确定sd卡是哪一个磁盘。比如我个人使用的sd卡是8G或16G存储,那么我就确认了磁盘管理的磁盘。
如上图所示,16G存储的SD卡在磁盘管理处显示为一个未分配,两个状态良好的主分区(其实三个状态良好的主分区,但是最左边的太窄了,也就看不见字样了)
(4)从左往右,从最窄的到第三个状态良好主分区,依次右键删除卷。
(5)在仅剩未分配处右键卷则新建简单卷,然后一直下一步,直到新建简单卷完毕。
(6)获取镜像烧录工具。
下载完毕之后,直接在“Win32DiskImager”文件夹内双击打开Win32DiskImager.exe应用程序。
(7)烧录镜像。
点击Win32DiskImager.exe应用程序中的蓝色文件夹图标,选择镜像文件,我们这里直接去选刚刚下载的DE10_Standard_LXDE.img镜像文件。
注意,这个环节中,读卡器和sd卡都不能与电脑断开。
接下来点击write,烧写镜像,需要等待一段时间。
这里,要特殊说明一点,在做SoC的实验过程中,我们对sd卡进行格式化、删除卷、新建简单卷、烧写镜像的次数会比较多。但是,如果第一次做的是亮灯实验,第二次做的是按键控制实验,而前后两次实验所使用的soc_system.dtb与soc_system.rbf文件是同样的,那就没必要对sd卡做这些多余的操作。也就是头文件和系统文件不变,sd卡就不需要重新烧写镜像!
烧写镜像完成之后,弹出成功窗口,点击ok,然后就会弹出一些格式化之类的窗口,还是样的操作,全都关闭(x掉)。
不过可以保留唯一一个有文件的盘是展开的,如下图。
8、HPS_FPGA_LED二进制文件生成、sd卡文件更新
8.1、HPS_FPGA_LED二进制文件生成
在官方提供的文档里,其实已经包含了HPS_FPGA_LED的C工程文档,其内部文件分别是具有soc_system信息和FPGA端外设地址空间的头文件——hps_0.h、由Makefile指令生成的二进制文件HPS_FPGA_LED(与文件夹名字同名,同名是因为Makefile文件内部设置好了的)、HPS的C工程源文件——main.c、具备读取HPS的C环境以及生成二进制文件的make文件。
Makefile文件用记事本打开后如下所示:
(1)我们这里需要把第7节提到的头文件hps_0.h复制到当前文件夹里,替换已存在的头文件。顺便把二进制文件删掉。
hps_0.h内部如下:
关于main.c内部代码的详细介绍,本次博客暂不作详细讲解,我们先把步骤缕清晰!
(2)接下来需要回到SoC EDS Command Shell的指令窗口。先cd +磁盘+冒号。
再输入cd + HPS的C工程文件夹路径。
再输入make:
HPS的C工程文件夹内会生成最新的两个文件。
8.2、sd卡文件更新
首先我们需要把sd卡磁盘内的“soc_system.dtb和soc_system.rbf”文件替换成我们再第6节更新得到的文件“soc_system.dtb和soc_system.rbf”。
还有一步,就是把二进制文件复制到sd卡里。
至此,sd卡即可弹出电脑,杀入开发板内,开发板准备通电使用咯!
9、片上系统嵌入式工具获取与使用
9.1、MobaXterm获取与安装
MobaXterm是一款嵌入式开发软件,点击可进入软件获取渠道。
下载完毕后,点击msi文件安装,一直选下一步即可,记住在桌面上创建快捷方式,找不到的话可以搜索框搜索。
9.2、MobaXterm使用
注意,前提条件是sd卡以及接入开发板了,开发板通电并与电脑相连了。另外,开发板的模式MSEL也设置为010100,如下图所示:
如果你发现开发板模式切换开关并不是这样,可以用笔尖之类的调一下。
然后,正式进入片上系统使用环节:
(1)选择左上角的Session。
(2)选择中间的Serial。
(3)serial port选择USB Serial Port(此处,COM几都无所谓,只要确定了是哪个串口即可,每个人COM号可能有所不同),Speed选择115200,这是串口传输速率。最后ok。
(1)、(2)、(3)三个步骤执行完毕后,后续使用可不再执行者三步,后续使用只要保证sd卡、开发板的连接没问题,都可以通过HPS复位键或者开发板的开关键就重新进入系统。
(4)按下HPS复位键,即可重启系统。
进入登陆login,用户名是root,密码是空的,所以输入完root再enter,显示输入密码时直接enter就可以了。
(5)由于我们是利用串口线与开发板连接,没有使用网线连接,因此和官方手册不同的是,本次实验需要将sd卡内容挂载到linux系统里,而非通过在linux系统里创建以太网,再通过局域网传输文件。(若有需要,后续也会更新网线连接传输SoC文件相关的博客)
在当前路径下输入mount /dev/mmcblk0p1 /mnt,然后回车。
我们现在可以将当前路径移动到mnt文件夹下看看有没有挂载成功了。
看来挂载成功了。
如果你在mnt文件夹ls发现没有上图这些文件,那就说明挂载失败了,这个时候,你需要先移到根目录下(cd /),在取消挂载(umount /mnt),然后重新挂载,换别的指令挂载(如mount /dev/mmcblk0p2 /mnt,或mount /dev/mmcblk0p3 /mnt),总有一款成功的,总有一款适合你!
(6)最后一步:在mnt文件夹下,输入“./HPS_FPGA_LED”,代表运行之前通过Makefile对main.c生成的二进制文件。我们看看,开饭版会有什么奇特的效果!
TerAsic SoC 流水灯
这色调,这质感!
四、小结
FPGA学习之路,从理解手册开始,你可以做得更多!