本次带来
FPGA系统性学习系列,今天开始正式更新,之前更新过类似的郝旭帅FPGA零基础学习系列,由于时间久远,之前的系列所用开发操作软件、硬件设备及所涉及知识维度都有待更新及完善。
本系列将带来FPGA的系统性学习,从最基本的数字
威廉希尔官方网站
基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让
电子、信息、
通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习FPGA设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小BUG卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用,这种快乐试试你就会懂的。话不多说,上货。
Intel FPGA开发流程
作者:郝旭帅 校对:陆辉
本篇目录
1. 设计前准备
2. 建立工程
3. 输入设计
4. 综合和分析
5. RTL
仿真
6. 锁定管脚
7. 布局布线
8. 时序仿真
9. 生成配置文件并下载
正文
本篇将设计一个简单的二输入与门,来讲解整个设计流程。至于设计语言就不在单独列出一个章节去做特殊说明,语法、操作、实验将同时讲解,这样更具有带入性,便于读者阅读和学习。
5 RTL仿真
在综合分析完成后,对于简单的设计,通过查看RTL视图中综合出来的威廉希尔官方网站
模型,就能够知道所做设计是否正确。但是对于复杂的设计,威廉希尔官方网站
模型比较复杂,无法直接判断是否设计正确。
如果直接将不知道正确与否的设计加载到板卡中,很多时候无法通过结果直接看出来是否设计比较严谨。所以要求设计者在软件环境下对所做设计进行一定的测试。
仿真是利用模型复现实际系统中发生的本质过程,并通过对系统模型的实验来研究存在的或设计中的系统。
当所研究的系统造价昂贵、实验的危害性大或需要很长的时间才能了解系统参数变化所引起的后果时,仿真是一种特别有效的研究手段。
仿真其实就是模拟实际情况。对于威廉希尔官方网站
来说,就是给予合适的输入,观测输出是否和设计时所预想的相同。
图58 :仿真的示意图
威廉希尔官方网站
的输入、中间过程和输出,都是数字信号,用波形来表示比较直观。
在真正的威廉希尔官方网站
中,是存在威廉希尔官方网站
延迟的。在仿真时,如果加载的综合出来的威廉希尔官方网站
模型,那么此时验证的内容主要是测试模型的逻辑功能是否正确,不考虑延时信息。这种仿真被称为功能仿真、RTL仿真、前仿真、前仿。
仿真的途径有两个,一个是quaruts 自带的仿真环境,一个是modelsim的仿真环境。
点击File,New,选择Uiversity Program VWF。
图59 :新建VWF文件
点击OK。
图60 :VWF初始化界面
在“空白位置”双击。
图61 :插入节点或者总线
点击“节点查找”。
图62 :节点查找
点击“list”。在“filter”中,默认选择的是“Pins:all”,当点击“List”后,“Nodes Found”的界面中会出现所有的端口。
图63 :查找需要激励和观测的信号
选中所有的端口,点击“>>”,全部添加到“Selected Nodes”中。
图64 :选择观测和激励信号
点击“OK”。
图65 :确定选择的信号
点击“OK”。
图66 :选择信号完成
A端口和B端口是二输入与门的两个输入,只要给A、B两个端口加载上合适的信号,观测Y端口的输出是否正确即可。
A端口和B端口一共只有四种情况“00”、“01”、“10”和“11”,只要将四种情况全部加载一遍即可。
利用鼠标左键,选中A端口信号一段或者B端口信号一段,利用上方的置1或者置0按钮,将输入信号做成下图所示:
图67 :设置输入信号
设置好输入信号后,点击保存,将其保存到qprj文件中。虽然其为仿真文件,但是此文件依然只是quartus软件能识别,可移植性太差。
点击Simula
tion -> Run Functional Simulation(运行功能仿真)。
图68 :选择运行功能仿真
经过一段时间的运行。
图69 :运行功能仿真的过程
在运行中,如果有报错,请认真回顾上述步骤。
图70 :功能仿真结果图
通过分析上述结果图,容易得出结论:AB“00” – > Y“0”, AB“01” – > Y“0”, AB“10” – > Y“0”, AB“11” – > Y“1”。通过波形的图的分析,二输入与门的功能仿真是没有任何问题的。
利用quartus 自带的仿真器,可以支持原理图输入和HDL代码输入;可移植性不强;对于一些复杂的输入信号,利用这种驱动方式较为复杂;在企业设计研发中,很少有人会用这个工具。
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。
利用quaruts 自带的仿真器仿真时,是利用绘制波形的方式进行输入信号的驱动。但是这种方法移植性不好,无法在modelsim中充当激励。
在开发中用的比较多的方式是利用HDL的方式进行充当激励,modelsim软件会自动抓取HDL代码中的信号进行绘制波形,用于设计者的观测。
Modelsim的软件无法为原理图的输入方式进行仿真,所以要将HDL代码输入的方式添加到工程,将原理图输入的方式移除工程。在企业工程开发时,不建议使用原理图的方式输入,移植性太低。所以在后续的章节中,将全部采用代码的输入方式进行设计。
新建一个verilog文件,命名为and_gate2_1_tb,保存到msim中。这个verilog文件是当做测试文件的,命名时,建议名字设置成为被测试模块的名字,然后后面加上“_tb”。tb为testbench的简写。
图71 :and_gate2_1_tb代码
`timescale是verilog中定义时间标度的关键字。1ns/1ps中的1ns表示时间的单位,在veirlog中不支持直接写出单位,例:5 ns,ns等时间单位是不被识别的。当定义了1ns为时间单位后,表示时间时,可以直接写出,例:表示10ns时,可以直接写10即可。1ns/1ps中的1ps表示时间的精度,由于精度的存在我们可以写小数。例:表示5.5ns时,可以直接写5.5。但是也正是由于精度的存在,小数不能无限制向下描述。例:表示5.523ns时,可以成5.523,如果表示5.258963ns,那目前的精度是到不了这么精确的。精度是1ps,因此小数的位数最多能有三位。在设计中,很少用到比ps还要精确的单位,所以一般的时间标度都是1ns/1ps。
Testbench文件也是verilog文件,所以也必须遵从verilog的标准。
在tb文件中,是没有端口的。在测试时,输入的信号都由内部产生,输出信号只要引出到内部即可,仿真器会自动捕获。所以tb的模块是没有端口的。
在测试文件中,需要将被测试
元件例化进来。例化的方式如下:
图72 :例化方式
在例化时,首先是模块名称(and_gate2_1),后面是例化名称,这个名字可以任意名字,笔者建议例化名称要和模块名称有一定的关系,笔者采用模块名称后加上_inst,表示例化的意思。后面的括号是端口列表,每一个端口的前面加上一个“.”,后面加上一个“()”,此时表示这个端口可以连接线了,连接线放到“()”里面就是连接上了。
对于连接线来说,命名也是任意的,笔者建议连接线的名字和要连接的端口的名字要有一定的关系,笔者采用端口名字前面加tb_,表示tb中的连接线。
所有的连接线都需要提前定义。在定义时,都可以采用“wire”类型(后续会有更改)。
当例化完成,连接线定义和连接完成后,就需要开始测试了。而测试就是给模块的输入赋值,观测输出是否正确。
在测试时,我们需要顺序性的给出激励,verilog提供了一种比较简单的方式“initial”语句。在这个语句中,我们只需要顺序性的给出激励就可以了。“#”表示延时,延时在verilog中是不可综合的,但是在仿真中,是存在的。
“1’b0”中的1表示位宽为1,’b表示后面的数码为2进制,0表示数码为0。
在赋值时,建议采用位宽+进制+数码的方式进行赋值。
Verilog中,begin end表示中间的语句是一个整体,verilog和C类似,每一个函数或者语句下只能包含一个语句块。C语言中采用大括号,verilog中采用begin end。
上述的initial语句块中,描述了tb_A和tb_B被先赋值00,延迟20ns,被赋值为01,延迟20ns,被赋值为10,延迟20ns,被赋值为11。
Verilog语法规定,在initial语句中被赋值的变量,应该定义为reg类型。
图73 :定义变量(连接线)
在写完testbench后,可以综合分析一下。保证没有任何的语法错误。
在仿真之前,需要指定仿真文件。
选择assignments -> settings。
图74 :选择settings
选择simulation。
图75 :选择simulation
选择compile test bench 后,选择后面的test benches…。
图76 :选择test benches
选择New,新建一个test bench。
图77 :新建test bench
在test bench name的对话框中输入:and_gate2_1_tb。默认模块中的顶层实体也是相同的。
图78 :输入testbench名字
点击file name后面的三个点,寻找and_gate2_1_tb文件。
图79 :查找testbench文件
找到msim文件夹中的and_gate2_1_tb,选中后,点击open。
图80 :确定testbench文件
点击ADD。
图81 :添加testbench
添加成功后,点击ok。
图82 :添加成功
点击ok。
图83 :新建成功一个testbench
点击OK。
图84 :设置完成
在设置完成后,进行综合和分析。
综合和分析完成后,点击tools -> Run Simulation -> RTL Simulation。
图85 :进行RTL 仿真
稍微等一段时间,modelsim软件会自动启动。如果没有启动的话,并且报错的话,请查看modelsim的关联位置。
图86 :无法连接到modelsim软件
点击tools 中的options。选择EDA Toos options。
图87 :配置关联路径
在modelsim-Altera中,看看路径是否正确(这是笔者的安装路径,请自行查看自己的安装路径),注意最后那个“”,很多的系统中,没有它也是不对的。
配置完成后,点击ok。
重新点击RTL 仿真。
图88 :modelsim的基本界面
在wave界面中,点击一下鼠标左键,就会出现一个黄色的光标。
点击“全局缩放”。
图89 :放大缩小的图标
在全局缩放前面一个为缩小,后面一个为放大。两头的两个图标,暂时不考虑。
全局缩放后,所有的波形都显示到wave窗口中,经过分析,设计正确。
此时就可以关闭modelsim软件。
图90 :是否确定关闭modelsim
点击“是”即可关闭。
6锁定管脚
输入设计后,经过综合和分析以及RTL仿真后,证明设计的逻辑功能是没有任何错误的。但是设计是在芯片内部进行实现的,如果想要发挥功能,势必要与外部的逻辑威廉希尔官方网站
进行相连接。
在上述例子中,设计了二输入与门。我们可以将两个输入绑定到任意的两个管脚上,将输出绑定到任意一个管脚上。经过下载后,可以在输入的管脚上加载电平,测量输出管脚的电平,验证设计是否正确。
在FPGA学习
开发板上,大部分都会有一些按键和LED,这些按键就可以为输入提供高低电平,LED就可以检测输出的电平值。
所以最好的验证方法是,将输入的管脚分配到连接有按键的管脚上,将输出分配到带有LED的管脚上。
自己制作或者购买的开发板,都会有原理图。
图91 :四位按键的威廉希尔官方网站
原理图
经过分析,key1的网络是直接连接到FPGA芯片上的;按键释放时,key1网络为高电平,按下时,key1网络为低电平。其他按键原理相同。
图92 :LED威廉希尔官方网站
经过分析,LED1的网络是直接连接到FPGA芯片上的;当FPGA将LED1网络置成高电平时,LED是熄灭的;当FPGA将LED1网络置成低电平时,LED是点亮的。其他的LED原理类似。
不同的威廉希尔官方网站
原理,后续会得出不同的结果。请认真分析原理。
通过查看各个网络与FPGA的芯片连接关系,就可以得出按键、LED威廉希尔官方网站
与FPGA的线连接的IO。
图93 :外部网络与FPGA连接示意图
经过查看,两个按键分别选择M15和M16。LED选择G15。
点击assignments -> pin planner。打开管脚规划器。
图94 :打开管脚规划器
在对应端口的Location标签下的空白窗位置双击。
图95 :准备输入管脚号
输入对应的管脚号。
图96 :输入对应的管脚号
输入完成后,点击关闭即可。
点击综合和分析,等待综合分析完成。
7布局布线
综合分析只是将外部的输入转换成为对应的威廉希尔官方网站
模型或者对应FPGA的威廉希尔官方网站
模型,我们可以对威廉希尔官方网站
模型进行RTL仿真,来排除逻辑功能的错误。
在FPGA片内实现的话,就需要对模型进行“实地”布置,利用FPGA片内的资源来实现模型,并且要固定好位置和连接线。这部分操作称为适配,也被称为布局布线。
图97 :布局布线选项
双击Fitter即可进行布局布线。
布局布线后形成的报告有可能和之前综合分析形成的报告中的资源利用有所出入,最终我们以布局布线后的资源为准。
8时序仿真
在真正的威廉希尔官方网站
中,是存在威廉希尔官方网站
延迟的。在仿真时,如果加载的综合出来的威廉希尔官方网站
模型,那么此时验证的内容主要是测试模型的逻辑功能是否正确,不考虑延时信息。这种仿真被称为功能仿真、RTL仿真、前仿真、前仿。
在仿真时,也可以加载布局布线后的威廉希尔官方网站
模型,那么此时验证的内容主要是测试模型的延时是否能够达到我们的要求。这种仿真被称为时序仿真、后仿真、后仿、门级仿真。
双击EDA Netlist writer,产生后仿真所需要的模型。
图98 :EDA Netlist Writer选项
启动后仿真。
图4-89 :启动后仿真
直接默认选择,点击RUN。
图99 :选择时序模型
综合器给出了外部不同条件下的时序模型,这里先不叙述他们各自的作用,后续时序分析中,会专门提到各个模型的作用。
图100 :二输入与门后仿真波形图
在输入信号都变为高后,输出信号没有立刻变化为高,而是延迟了一段时间后,才变为高电平。
在二输入与门中,威廉希尔官方网站
的延迟对于我们来说是可以接受的,没有任何的要求。在后续的一些复杂的威廉希尔官方网站
中,就要求威廉希尔官方网站
的延迟不能太大,否则就会影响威廉希尔官方网站
的功能。
时序仿真在企业设计中用的不太多,对于时序的很多问题,采用静态时序分析来查看。所以在后续的设计中,时序仿真将不在重点叙述。
9生成配置文件并下载
在布局布线后,需要将对应的结果下载到FPGA片内。对于模型来说是无法下载的,只有通过编译,形成某种文件才可以下载。
双击Assembler(Generate programming files),产生配置文件。
图101 :产生配置文件选项
利用下载电缆连接FPGA开发板和PC。Intel FPGA的下载器为u*** blaster ,当连接到PC后,需要安装驱动。
将FPGA开发板通电。
打开设备管理器。在通用串行总线控制器的下面,观看有没有Altera USB blaster。如果有的话,证明已经有了驱动,不需要再次安装。如果没有Altera USB blaster,在其他设备中,观测有没有“其他设备”。如果没有“其他设备”的话,就需要认真的检查开发板的各个连接线的连接情况。
图102 :Altera USB blaster驱动
图103 :其他设备
选中USB-Blaster,右击,选择更新驱动程序。
图104 :如何搜索驱动程序软件
选择“浏览计算机以查找驱动程序软件”。
图105 :浏览计算机上的驱动程序文件
点击“浏览”,按照图4-96中所示路径(quartus 的安装路径,读者请寻找自己的路径,后面的路径是相同的)选择文件夹,然后点击确定。
点击下一步,开始安装驱动。安装过程中,PC会询问是否安装,点击安装即可。
安装完成后,可以将下载线从PC上重新插拔一下。在通用串行总线控制器中就有Altera USB Blaster的驱动。
安装好驱动后,点击quartus 界面中tools的programmer。点击Hardware setup。
图106 :下载界面
选择USB Blaster后,点击close。
图107 :选择USB Blaster
选择USB Blaster后,下载界面中显示出,USB Blaster。此时直接Start即可开始下载。右上角会有下载进度条。
图108:下载界面
如果下载界面没有可下载的文件,可以点击add files,在qprj中的output files文件夹中,有一个后缀为.sof文件。选择后,下载即可。
下载完成后,此界面就可以关闭。询问是否保存时,选择否即可。
当配置完成后,我们就可以进行验证。按下按键,分析LED的灯的状态。我们做的是二输入与门,它的真值表如下:
图109 :二输入与门真值表
通过记录按键和LED的状态,也会得到一组真值表。
图110 :二输入与门的按键和LED功能真值表
通过分析按键和LED的工作原理,可以化简真值表。
图111 :二输入与门的按键和LED化简真值表
通过分析两个真值表,确认功能正确。
不同的按键和LED原理,可以对应去分析。
大多数FPGA的内部实现是用SRAM等效出来的威廉希尔官方网站
,SRAM是一种掉电丢失的器件。所以FPGA下载成功后可以正常运行,但是掉电后,FPGA会丢失之前配置的所有信息。
这种情况非常不利于产品的研发,设备断电时常有的事情,而断电后再上电,还是希望FPGA能够正常工作的。
正是由于FPGA掉电丢失所有信息,所以在FPGA的周边会配置一块掉电不丢失的存储器(flash),可以将配置信息存储到存储器中,FPGA每次上电后读取存储器的内容即可。
向flash中存储信息,需要将上述.sof文件转换为.jic文件。
在quartus 界面中,点击file -> Convert Programming file。
图112 :转换配置文件
在programming file type中选择jic文件,在configuration device中选择EPCS16。EPCS16是altera 公司推出的一款flash的型号,国内大多数开发板上不是altera公司推出的芯片,但是能够兼容。EPCS16是一个16Mbit的flash。读者需要观察自己手中开发板的flash型号,找到与之对应的altera公司的兼容产品,选择即可。
图113 :添加flash loader
选择flash loader,点击add device,选择ep4ce10,单击OK。
图114 :选择FPGA系列
选择SOF data,点击add file,找到之前的配置文件.sof,点击open。
图115 :选择配置文件
点击generate,开始生成.jic文件。
图116 :生成文件成功
点击OK后,关闭界面即可。
重新打开下载界面。选择下载文件,点击delete。
图117:移除默认下载文件
点击add files,将生成的.jic文件(在qprj中的outputfiles文件中)添加进来,勾选program/configure,然后点击start。
图118:下载.jic文件
下载此文件速度比较慢,请耐心等待。
下载后,FPGA不能够正常工作,需要断电后上电,FPGA就可以正常工作了。
以后每次断电再上电,都可以正常工作。
本文的1到9小节就是正常的开发流程。在此过程之外,还有可能会加入一些其他的流程,例:功耗分析、时序约束等等。