FPGA零基础学习:IntelFPGA开发流程腾讯云开发者社区

本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。

IntelFPGA开发流程

作者:郝旭帅校对:陆辉

本篇目录

1.设计前准备

2.建立工程

3.输入设计

4.综合和分析

5.RTL仿真

6.锁定管脚

7.布局布线

8.时序仿真

9.生成配置文件并下载

正文

本篇将设计一个简单的二输入与门,来讲解整个设计流程。至于设计语言就不在单独列出一个章节去做特殊说明,语法、操作、实验将同时讲解,这样更具有带入性,便于读者阅读和学习。

1设计前准备

在设计之前我们需要在两个方面进行准备:硬件方面和软件方面。

开发FPGA设计,最终的产品是要落在使用FPGA芯片完成某种功能。所以我们首先需要一个带有IntelFPGA芯片的开发板。

本文中设计将采用CYCLONE系列FPGA进行讲解,如果读者有其他系列(必须是IntelFPGA,否则无法在Quartus上开发),也可以进行学习,不同系列的开发流程基本相同。

我们需要综合工具-quartus软件和仿真工具-modelsim软件。正确安装这两个软件是开发IntelFPGA的必要条件。

图1:Quartus软件图标

当准备好软件后,笔者向大家推荐一个工程管理的方式,也是本文中做工程管理的方式,这样会比较清楚。

做设计的话,会编写很多设计文件、仿真文件以及综合器会给我输出很多的过程文件等等,那么这些文件最好都能有自己的一个“归宿”,不要乱放。

路径和命名中不允许出现非法字符(合法字符包括:数字、字母、下划线。特别说明:空格是非法的),笔者建议以字母开头。

我们是做FPGA开发设计的,首先我们将建立一个文件夹,专门用来放FPGA开发设计。例如:E:/fpga_design。

在后续的开发设计中,我们会做各种各样的设计。每个设计都有自己的名字,在上述文件内,用实验的名字命名一个文件夹。名字的话一定要带有某种含义,不建议随便给个字母序列当做名字。例如:第一个要做的二输入与门的设计,命名为and_gate2_1。

在建立完某项设计的文件后,依次在其里面新建四个文件夹,分别为:rtl、qprj、msim、doc。

图2:工程管理文件脉络示意图

rtl文件夹用于存放设计的源文件。

doc文件夹用于存放设计的一些文档性的资料。

qprj文件夹用于存放quaruts工程以及quartus生成的一些过程性文件。

msim文件夹用于存放仿真文件。

2建立工程

做好设计前准备后,就可以开始建立quartus工程了。

在做设计时,都是以工程为主体的设计。在没有工程的情况下,利用quartus软件打开设计源文件等,也是不支持编译和综合的。

双击quartus软件的图标(图4-1),打开quartus软件。在有的电脑上,软件启动的速度不是很快(在确保自己已经双击打开的前提下,可以等待1分钟),不要多次去双击图标,容易造成PC卡死或者启动了很多个quartus软件。

图3:quartus18.0界面

笔者这里不对每个界面进行单独介绍,后续用到那个功能或者界面时,会单独介绍说明。

点击左上角File,选择NewProjectWizard…。

图4:打开新工程创建向导

打开新工程向导,首先出现一个工程向导介绍说明。

图5:工程向导的介绍界面

在工程向导中,我们会指定工程名称和位置,顶层实体的名称,工程文件和库文件,目标器件,EDA工具。

在复杂设计时,会将电路分成各个小模块去做设计,最终还需要一个大模块将这些小模块包括进来,对外呈现都是大模块的接口。此时,这个大模块就是顶层实体(TOPlevelentity)。如果设计中只有一个模块,那么这个模块就是顶层实体。

点击Next。

图6:指定工程位置、工程名称和顶层实体的界面

将工程的位置指定到之前我们准备好的文件夹(qprj)中。点击编辑框后面的三个小点,进行文件搜索指定。

工程的名称就是采用之前我们做的设计文件夹的名字,这个名字可以是任意的,笔者建议和文件夹保持一致,因为当初建立文件夹时,就是选择用工程的名字。直接输入工程名称and_gate2_1即可。

顶层实体的名字会自动出现,与工程的名字保持一致。我们也可以重新指定一个新名字,笔者建议与工程名字保持一致。

图7:选择建立的工程的类型

选择空白工程(默认空白工程),点击Next。

图8:添加文件

建立工程时,我们可以直接向工程中添加已有的文件。一般我们选择什么都不添加,后续设计中,如果有提前做好的文件,也是选择什么都不添加。建立完工程后,依然可以向工程添加文件。

图9:选择目标器件

FPGA设计最终是要落实到芯片内部,在这里要选择对应的芯片(自己手里开发板的FPGA芯片)。芯片的型号在FPAG的芯片上有描述,如果芯片上看不清楚,或者芯片在被其他东西挡住,可以查看开发板的资料,一般都有介绍。笔者手中开发板的FPGA的型号为EP4CE10F17C8N。后续所有的选择将按照笔者手中的型号进行设计和选择,读者不相同的,请自行改动。如果暂时还没有开发板的读者,可以跟着笔者选择继续下面的步骤(没有开发板的话,后面有一些步骤是做不了的)。

选择时,首先选择对应的系列。

图10:选择芯片所对应的系列

选择对应的系列后,可以看到下面的器件列表(此列表的窗口是可以拉大的,可以直接扩大整个界面)中,就出现很多的器件。呈现的器件都是按照一定的规律进行排列的,可以很快的找到自己的芯片,然后单击选择芯片(先不考虑为什么没有EP4CE10F17C8N,而选择EP4CE10F17C8)。

图11:器件列表

如果每次新建工程都是这样去寻找芯片的话,是有一定的累人。好在这个软件给我们提供了筛选面板,我们可以把筛选条件输入进去。

图12:器件筛选

设置好筛选条件后,器件列表中就只有四个器件了,很容易就可以找到我们这款芯片。

筛选条件中有封装类型、管脚数目和速度等级。那么我们怎么知道自己手中的芯片的这些信息呢?

答案都隐藏在芯片的名字中。笔者手中的是CYCLONEIV系列的片子,下面就介绍一下这个系列的命名方式。

图13:CYCLONEIVE系列命名规则

如果是其他系列,请自行参考所对应的芯片手册。

通过观察图4-13,EP4CE10F17C8N中末位N,只是表示无铅封装,和具体内部机构没有任何关系。故而选择不带N的,也是可以的。

注意无论是哪种方法,最后找到自己想要的芯片后,一定要点击它,选中它。

图14:选择EDA工具

Quartus软件是一个综合工具,他可以关联一些其他的工具协助设计FPGA。在这里我们在simulation一栏,工具选择modelsim-altera,格式选择verilogHDL。其他保持默认。

图15:工程向导配置总结

这个总结显示出在新工程向导中,我们所做的所有的设置。大家可以检查一下,如果发现那一项和自己的要求不一致,就需要点击back,修改后,在回到此步骤。

点击Finsh,完成工程创建。

图16:工程建立完成后,工程向导界面

工程建立完成后,工程向导界面显示出选择的器件和指定的顶层实体。

打开qprj文件夹。

图17:建立完工程后的qprj文件夹

db文件夹为基础数据文件夹。

.qpf为quartusprojectfile,quartus工程文件。如果此时将quatus关闭了,双击此文件就可以打开工程。

.qsf为quartussettingsfile,quartus设置文件。在quaruts里面做的大部分操作都会记录到此文件中。

Quarus的版本很多,如果用一个版本建立的工程,用另外一个版本打开可能会出一些bug,所以建议采用使用已建好工程的版本打开。可以使用记事本的方式打开.qsf。

图18:qsf文件的一部分

通过查看.qsf文件,可以了解到工程的最初用什么版本建立,最后用什么版本打开(打开时,建议采用最后的版本打开)。

建议打开工程的方式,首先查看应该选择的版本,启动对应的版本quartus软件,点击File,选择Openproject(不要点击Open),找到工程,启动。

图19:打开工程的途径

3输入设计

当建立完工程后,就可以输入设计。输入设计的方法有三种:原理图输入、HDL代码输入、原理图和HDL代码混入输入。

原理图输入就是以现有模块级联的方式实现功能。

点击File,选择New。

图20:新建模块

选择designfile中的BlockDiagram/SchematicFile。点击ok。

图21:新建文件列表

对于新建的bdf文件立刻进行另存为。

图22:另存为

另存为到qprj文件夹。Bdf文件是只有quartus软件才能认可,不具有移植性,把它放到工程文件夹中。

图23:保存路径和名称

点击保存。特别注意保存路径和保存名称。不要盲目直接点击保存,一定要再三确认。

在BDF文件的空白位置,双击,打开添加原件的窗口。

图24:打开添加原件的窗口

在libraries中,选择and2,点击ok。

图25:添加二输入与门

鼠标会拖动一个二输入与门的符号,此时点击鼠标左键,一个二输入的与门就放置在文件中了。

图26:放置的二输入与门

当添加完二输入与门后,也就意味着芯片内部的设计完成。现在需要将内部设计与外部相连接。芯片与外界相连接靠的是IO。

双击空白处,选择input(输入),点击ok。添加输入IO。

图27:添加input管脚

二输入与门,要有两个输入。同样的方法,再次添加一个。同时也要有一个输出,选择output(输出)(在input下面),添加一个输出。

图28:添加两个输入和一个输出

将管脚和二输入与门进行相连接。

把鼠标移至需要连接线的地方时,鼠标会自动变为十字状(不是十字状箭头),并且右下带有一个“7”形的导管。然后按住鼠标左键进行导线的引出。当连接到另外一个接口时,

就会出现一个小方框,证明已经连接上,此时释放鼠标左键即可。

图29:连接完成图样

此时默认两个输入的管脚的名字为pin_name1和pin_name2。在设计时,二输入与门我们将其输入命名为一个为A,一个为B,输出为Y。

右击pin_name1,选择properties。

图30:选择属性

将pinname改为A。点击ok。

图31:修改管脚名称

将其他两个管脚也做对应修改。

图32:修改完管脚名称的图样

此时点击保存(ctrl+s),使用原理图的输入方式就完成了。

用计算机语言设计一个数字电路系统,其实质就是用一种语言描述一个硬件模型,因此这样的语言又称为硬件描述语言(HardwareDescriptionLanguage),或使用缩写HDL。虽然现在HDL已经有多种语言版本,而且还在发展中。但是在本书讨论的HDL仅包括现在最常使用的VerilogHDL和VHDL两种语言系统。

目前在国内做FPGA设计的公司中,使用VerilogHDL占据大多数,故而本书以VerilogHDL为主,在后续的章节中,专门设置一章来讲解VHDL。

选择File,New,选择designfile中的verilogHDLfile。点击ok。

图33:新建verilogHDLfile

新建完成后,立刻另存为,保存到rtl中。hdl文件的移植性比较高,无论在哪个平台都是通用的。

图34:保存verilogHDL文件

保存时,注意名字和保存路径。Verilog文件的后缀为.v。

建立完,verilogHDL文件后,就需要输入二输入与门所对应的verilog代码了。

Verilog语法和C很相似,学习起来比较容易。下面我们按照做电路的方式讲解verilog语言。

做电路的话,首先需要拿出一块打的面包板,剪出合适大小的一块。相当于圈了一个地方,做设计只能在这块区域内。

对于verilog语言来说,需要用module和endmodule圈出一个区域,设计代码只能在这块区域中。Verilog语言区分大小写,我们一律采用小写。module和endmodule是verilog的关键字,在综合器中会变蓝。如果endmodule没有变蓝,请多打一个回车或者空格。

图35:verilog第一步

当剪出合适大小的面包板后,需要其上面写一个名字。后面应用也好,说起来也好,好歹有个名字。

在verilog中,也需要有一个modulename。

在verilog中命名的话,需要遵从一定的规则。由字母、数字、下划线构成;建议字母开头;不能够与verilog的关键字相同;命名是要有一定的意义。

对于modulename来说,一般还有一个要求,与文件名称保持一致。那么此时我们要做二输入与门,文件名称是and_gate2_1。要求modulename也写成and_gate2_1。

图36:verilog第二步

当对面包板命名后,需要给它添加输入和输出的端口(合理的布局接口)。

二输入与门有两个输入,一个为A,另外一个为B;一个输出为Y。在verilog中,布置接口的方式有两种。

图37:布置接口的第一种方式

图38:布置接口的第二种方式

在verilog中,modulename(and_gate2_1)之后的那个括号中的内容成为端口列表。

Verilog布置接口的第一种方式为1995标准,第二种方式为2003标准。目前大多数平台都可以支持这两种方式。笔者建议用2003标准。

端口列表中,描述端口时,用逗号隔开,最后一个端口后面不加逗号。在端口列表的括号后面有一个分号。

对于描述端口来说,有最基本的四项:方向、类型、位宽、名称。

input表示输入,output表示输出,inout表示输入输出。

类型中比较常用的有两种:一种是wire,另外一种reg。wire类型时,wire可以省略不写。另外input必须是wire类型。笔者建议wire不省略,都写上。

在做电路时,位宽表示有几根线。有时候为了方便,会将同一种类的线进行同时命名,此时就需要用到位宽。例如:5位的地址线。可以单独命名5次,但是比较麻烦。位宽用中括号括起来,例:[3:0],[3:1],[2:5]。如果位宽为1的话,省略不写。笔者建议位宽的右侧为0,左侧为位宽减一。

名称就是为这个输入命名了一个名字。命名时要遵从verilog命名规则。

在做完端口后,需要在面包板上做出符合功能的设计,然后用连接线将设计和输入输出管脚相连接。

二输入与门的设计是需要在中间放一个组合逻辑电路二输入与门。

Verilog中,描述组合逻辑的第一种方式是利用assign语句进行描述。

图39:assign语句描述二输入与门

assign语句要求被赋值变量(Y)为wire类型,中间采用阻塞赋值(=)的方式,最后面是赋值表达式,在verilog中,算术与用&来表示(后续介绍算术运算和逻辑运算的区别)。

至此,二输入与门的HDL输入就完成了。

在复杂设计时,我们可以用HDL代码生成底层模块,用原理图的方式,将底层模块进行连接。此方式在后续的章节中介绍。

4综合和分析

当设计输入完成后,需要对设计进行综合分析,同时也检查一下其中是否存在错误。可以单击综合分析按钮,可以双击综合分析选项,也可以利用快捷键(Ctrl+K)。

图40:综合分析按钮

图41:综合分析选项

进行综合分析时,有时会提出一个提示:

图42:某文件被改变,是否要保存

出现上述提示,就证明我们在设计时,修改了某些文件后,没有点击保存。此时点击Yes即可。但是这是一个非常不好的习惯,建议大家修改完任何设计都要及时保存。

图44:出现错误

出现错误后,可以观察quartus的下部massage窗口。

图45:massages窗口报错信息

在设计时,为了演示原理图输入和HDL代码输入,工程中存在原理图输入的and_gate2_1和HDL代码输入的and_gate2_1。

在工程向导界面,选择Hierarchy,选择Files。Hierarchy为结构,显示工程的电路模块的结构;Files为文件,显示工程中存放的所有文件。可以利用此方式查看,工程中是否存在多个and_gate2_1。

图46:选择Files界面

在Files界面中,可以发现工程中确实存在两个and_gate2_1。

图47:Files界面

此时右键选择第and_gate2_1.v,选择Removefilefromproject。

图48:选择移除

随后在确定界面点击Yes。

图49:确认移除

将其移除工程后,就会只剩下一个原理图输入的and_gate2_1。然后进行综合分析,等待结果完成。

图50:综合分析成功

如果中间有错误的话,请参考输入设计中的原理图输入,查看自己的步骤是否正确。

再一次选择到Files界面,将and_gate2_1.bdf移除。将HDL代码输入的and_gate2_1.v

重新添加回来。在Files上右键,选择Add/RemoveFilesinproject(添加或移除文件)。

图51:从工程中添加或移除文件

选择编辑框后面三个点。

图52:寻找添加文件

找到and_gate2_1.v,选中,点击打开。

图53:添加选中文件

注意添加文件的路径,and_gate2_1.v是存放在rtl文件夹中。

然后点击apply,OK。就添加成功。

图54:确认添加文件

点击综合分析,确认综合分析成功。如果综合分析失败,请参考输入设计中的HDL输入,查找错误的地方。

无论是哪一种输入方式,综合分析成功。双击RTL视图选项,打开RTL视图,查看quartus综合出的电路模型。

图55:RTL视图的选项

在RTL视图中,综合出来的电路图,只是电路模型而已。在FPGA中是没有与门的,有的只是LUT等效的二输入与门电路。

图56:RTL视图的二输入与门

综合分析成功后,会产生一个报告。

图57:综合分析报告

在报告中,可以看出综合状态、软件信息、工程版本信息、顶层实体、器件系列、目标器件、时序模型、逻辑单元数量、寄存器数量、管脚数量、虚拟管脚数量、存储器大小、嵌入式乘法器的使用个数、锁相环使用个数。

只是设计了一个二输入的与门,所以使用一个逻辑单元,3个管脚,其他都没有涉及到。

5RTL仿真

在综合分析完成后,对于简单的设计,通过查看RTL视图中综合出来的电路模型,就能够知道所做设计是否正确。但是对于复杂的设计,电路模型比较复杂,无法直接判断是否设计正确。

如果直接将不知道正确与否的设计加载到板卡中,很多时候无法通过结果直接看出来是否设计比较严谨。所以要求设计者在软件环境下对所做设计进行一定的测试。

仿真是利用模型复现实际系统中发生的本质过程,并通过对系统模型的实验来研究存在的或设计中的系统。

仿真其实就是模拟实际情况。对于电路来说,就是给予合适的输入,观测输出是否和设计时所预想的相同。

图58:仿真的示意图

电路的输入、中间过程和输出,都是数字信号,用波形来表示比较直观。

在真正的电路中,是存在电路延迟的。在仿真时,如果加载的综合出来的电路模型,那么此时验证的内容主要是测试模型的逻辑功能是否正确,不考虑延时信息。这种仿真被称为功能仿真、RTL仿真、前仿真、前仿。

仿真的途径有两个,一个是quaruts自带的仿真环境,一个是modelsim的仿真环境。

点击File,New,选择UiversityProgramVWF。

图59:新建VWF文件

点击OK。

图60:VWF初始化界面

在“空白位置”双击。

图61:插入节点或者总线

点击“节点查找”。

图62:节点查找

点击“list”。在“filter”中,默认选择的是“Pins:all”,当点击“List”后,“NodesFound”的界面中会出现所有的端口。

图63:查找需要激励和观测的信号

选中所有的端口,点击“>>”,全部添加到“SelectedNodes”中。

图64:选择观测和激励信号

点击“OK”。

图65:确定选择的信号

图66:选择信号完成

A端口和B端口是二输入与门的两个输入,只要给A、B两个端口加载上合适的信号,观测Y端口的输出是否正确即可。

A端口和B端口一共只有四种情况“00”、“01”、“10”和“11”,只要将四种情况全部加载一遍即可。

利用鼠标左键,选中A端口信号一段或者B端口信号一段,利用上方的置1或者置0按钮,将输入信号做成下图所示:

图67:设置输入信号

设置好输入信号后,点击保存,将其保存到qprj文件中。虽然其为仿真文件,但是此文件依然只是quartus软件能识别,可移植性太差。

点击Simulation->RunFunctionalSimulation(运行功能仿真)。

图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代码

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中,beginend表示中间的语句是一个整体,verilog和C类似,每一个函数或者语句下只能包含一个语句块。C语言中采用大括号,verilog中采用beginend。

上述的initial语句块中,描述了tb_A和tb_B被先赋值00,延迟20ns,被赋值为01,延迟20ns,被赋值为10,延迟20ns,被赋值为11。

Verilog语法规定,在initial语句中被赋值的变量,应该定义为reg类型。

图73:定义变量(连接线)

在写完testbench后,可以综合分析一下。保证没有任何的语法错误。

在仿真之前,需要指定仿真文件。

选择assignments->settings。

图74:选择settings

选择simulation。

图75:选择simulation

选择compiletestbench后,选择后面的testbenches…。

图76:选择testbenches

选择New,新建一个testbench。

图77:新建testbench

在testbenchname的对话框中输入:and_gate2_1_tb。默认模块中的顶层实体也是相同的。

图78:输入testbench名字

点击filename后面的三个点,寻找and_gate2_1_tb文件。

图79:查找testbench文件

找到msim文件夹中的and_gate2_1_tb,选中后,点击open。

图80:确定testbench文件

点击ADD。

图81:添加testbench

添加成功后,点击ok。

图82:添加成功

点击ok。

图83:新建成功一个testbench

图84:设置完成

在设置完成后,进行综合和分析。

综合和分析完成后,点击tools->RunSimulation->RTLSimulation。

图85:进行RTL仿真

图86:无法连接到modelsim软件

点击tools中的options。选择EDAToosoptions。

图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->pinplanner。打开管脚规划器。

图94:打开管脚规划器

在对应端口的Location标签下的空白窗位置双击。

图95:准备输入管脚号

输入对应的管脚号。

图96:输入对应的管脚号

输入完成后,点击关闭即可。

点击综合和分析,等待综合分析完成。

7布局布线

综合分析只是将外部的输入转换成为对应的电路模型或者对应FPGA的电路模型,我们可以对电路模型进行RTL仿真,来排除逻辑功能的错误。

在FPGA片内实现的话,就需要对模型进行“实地”布置,利用FPGA片内的资源来实现模型,并且要固定好位置和连接线。这部分操作称为适配,也被称为布局布线。

图97:布局布线选项

双击Fitter即可进行布局布线。

布局布线后形成的报告有可能和之前综合分析形成的报告中的资源利用有所出入,最终我们以布局布线后的资源为准。

8时序仿真

在仿真时,也可以加载布局布线后的电路模型,那么此时验证的内容主要是测试模型的延时是否能够达到我们的要求。这种仿真被称为时序仿真、后仿真、后仿、门级仿真。

双击EDANetlistwriter,产生后仿真所需要的模型。

图98:EDANetlistWriter选项

启动后仿真。

图4-89:启动后仿真

直接默认选择,点击RUN。

图99:选择时序模型

综合器给出了外部不同条件下的时序模型,这里先不叙述他们各自的作用,后续时序分析中,会专门提到各个模型的作用。

图100:二输入与门后仿真波形图

在二输入与门中,电路的延迟对于我们来说是可以接受的,没有任何的要求。在后续的一些复杂的电路中,就要求电路的延迟不能太大,否则就会影响电路的功能。

时序仿真在企业设计中用的不太多,对于时序的很多问题,采用静态时序分析来查看。所以在后续的设计中,时序仿真将不在重点叙述。

9生成配置文件并下载

在布局布线后,需要将对应的结果下载到FPGA片内。对于模型来说是无法下载的,只有通过编译,形成某种文件才可以下载。

双击Assembler(Generateprogrammingfiles),产生配置文件。

图101:产生配置文件选项

利用下载电缆连接FPGA开发板和PC。IntelFPGA的下载器为usbblaster,当连接到PC后,需要安装驱动。

将FPGA开发板通电。

打开设备管理器。在通用串行总线控制器的下面,观看有没有AlteraUSBblaster。如果有的话,证明已经有了驱动,不需要再次安装。如果没有AlteraUSBblaster,在其他设备中,观测有没有“其他设备”。如果没有“其他设备”的话,就需要认真的检查开发板的各个连接线的连接情况。

图102:AlteraUSBblaster驱动

图103:其他设备

选中USB-Blaster,右击,选择更新驱动程序。

图104:如何搜索驱动程序软件

选择“浏览计算机以查找驱动程序软件”。

图105:浏览计算机上的驱动程序文件

点击“浏览”,按照图4-96中所示路径(quartus的安装路径,读者请寻找自己的路径,后面的路径是相同的)选择文件夹,然后点击确定。

点击下一步,开始安装驱动。安装过程中,PC会询问是否安装,点击安装即可。

安装完成后,可以将下载线从PC上重新插拔一下。在通用串行总线控制器中就有AlteraUSBBlaster的驱动。

安装好驱动后,点击quartus界面中tools的programmer。点击Hardwaresetup。

图106:下载界面

选择USBBlaster后,点击close。

图107:选择USBBlaster

选择USBBlaster后,下载界面中显示出,USBBlaster。此时直接Start即可开始下载。右上角会有下载进度条。

图108:下载界面

如果下载界面没有可下载的文件,可以点击addfiles,在qprj中的outputfiles文件夹中,有一个后缀为.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->ConvertProgrammingfile。

图112:转换配置文件

在programmingfiletype中选择jic文件,在configurationdevice中选择EPCS16。EPCS16是altera公司推出的一款flash的型号,国内大多数开发板上不是altera公司推出的芯片,但是能够兼容。EPCS16是一个16Mbit的flash。读者需要观察自己手中开发板的flash型号,找到与之对应的altera公司的兼容产品,选择即可。

图113:添加flashloader

选择flashloader,点击adddevice,选择ep4ce10,单击OK。

图114:选择FPGA系列

选择SOFdata,点击addfile,找到之前的配置文件.sof,点击open。

图115:选择配置文件

点击generate,开始生成.jic文件。

图116:生成文件成功

点击OK后,关闭界面即可。

重新打开下载界面。选择下载文件,点击delete。

图117:移除默认下载文件

点击addfiles,将生成的.jic文件(在qprj中的outputfiles文件中)添加进来,勾选program/configure,然后点击start。

图118:下载.jic文件

下载此文件速度比较慢,请耐心等待。

下载后,FPGA不能够正常工作,需要断电后上电,FPGA就可以正常工作了。

以后每次断电再上电,都可以正常工作。

本文的1到9小节就是正常的开发流程。在此过程之外,还有可能会加入一些其他的流程,例:功耗分析、时序约束等等。

THE END
1.福彩15选5开奖结果乐彩网福彩15选5频道为您提供今天福彩15选5开奖结果、历史开奖记录查询,每日同步官方开奖号码信息,帮助彩民第一时间了解彩票开奖公告。https://www.17500.cn/kj/list-sh15x5.html
2.东方财富网旗下彩票资讯网站华东15选5开奖页面奖项中奖注数单注奖金(元)中奖条件 特等奖 0 0 5码全中 且至少包含4个连续自然数号码 一等奖 108 1,742 5码全中 顺序不限 二等奖 3,850 10 中4码 本期总奖金额 226,636元更多 华东15选5开奖一览 期号开奖号 2024325 01 02 06 11 12 2024324 01 04 06 07 14 2024323 06 07 08 12 14 https://caipiao.eastmoney.com/Result/Category/hd15x5?id=2024322
3.浙江福彩15 选 5开奖公告 日期 期号 开奖号码 投注额 2024年12月04日 2024325 01,02,06,11,12 607704 元 2024年12月03日 2024324 01,04,06,07,14 594836 元 2024年12月02日 2024323 06,07,08,12,14 587492 元 2024年12月01日 2024322 03,07,08,13,14 541180 元 2024年11月30日 2024321 02,12http://zjflcp.zjol.com.cn/fcweb/swxw.html?pageNum=0
4.全国开奖浙江15选5[首页][资讯] 聚焦赛事视频政策专题[开奖] 快乐8双色球3D七乐彩[分析] 图表分析论坛[体验] 投注大赛试刮 收起第2024330期2024/12/09 04 05 09 11 14 -1 第2024329期2024/12/08 01 04 06 12 14 -1 第2024328期2024/12/07 01 03 04 05 09 -1 第2024327期2024/12/06 02 03 http://m.zhcw.com/kaijiang/place_info.jsp?id=256
5.双色球2024139期小易今日15+5复式推荐双色球预测双色球2024139期小易今日15+5复式推荐 双色球第24138期奖号为02、07、11、21、27、28+02。红球三区比为3:1:2,奇偶比为4:2。 第2024139期双色球红球推荐: 红球奇偶比推荐:最近5期红球奇偶比分别开出1:5→4:2→5:1→3:3→4:2红球奇偶总比例为17:13,奇偶红球走势基本持平,本期偶数红球预计热出,https://www.ssqzj.com/2024/1202/7659019.html
6.江苏十五选五游戏开奖预测,期待与影响,2024年12月6日展望随着时光的推移,我们迎来了崭新的未来,游戏行业也在不断发展变化,本文将围绕江苏十五选五游戏,对即将到来的2024年12月6日的开奖进行猜测,同时回顾其背景、重要事件、影响以及在特定领域或时代中的地位,让我们一同走进这个充满悬念与期待的游戏世界。 背景回顾 http://www.xuelai.net/post/38441.html
7.24年体彩大乐透143期宋浩大复式15+5推荐前区奇偶比:上期前区奖号奇偶比为2:3,最近10期前区奖号奇偶比为22:28,偶数号码开出比例较高,本期看好奇数号码回补,关注奇偶比3:2。 前区012路分析:上期前区012路奖号比开出3:1:1,最近10期前区012路奖号比为15:16:19,其中2路奖号走势偏热。本期看好2路号码大热,关注012路比0:1:4。 https://www.800820.net/p/9545450.html
8.现场直播,十五选五的赛事魅力兴趣小组4、十五选五现场直播的亮点 5、现场直播的影响与前景 随着科技的进步,体育赛事直播逐渐成为了人们生活中不可或缺的一部分,在众多直播赛事中,“十五选五”这一环节更是引起了广大观众的高度关注,本文将围绕这一环节,探讨现场直播的魅力所在。 赛事直播的兴起 http://m.58tb.com/post/14362.html
9.今日大数据分析精准预测推荐15选5号四、结论本文提出了一种基于大数据分析的精准预测推荐方法,用于帮助彩民科学选号。通过对历史彩票数据的采集和分析,建立了预测模型。根据该模型,生成了15个推荐号码。通过模拟彩票开奖过程验证了这些推荐号码的科学性和准确性。最后总结了这种方法的核心优势和将其与传统选号方法进行了比较。https://aiqicha.baidu.com/qifuknowledge/detail?id=10100826383
10.15选5中奖号码表2024319 06 08 11 13 15 53 3:2 254330.5 2024320 03 10 11 12 13 49 3:2 0 2024321 02 12 13 14 15 56 2:3 0 2024322 03 07 08 13 14 45 3:2 38535.29 2024323 06 07 08 12 14 47 1:4 79937.27 模拟选号点击显示 当前遗漏 6 2 1 12 7 0 0 0 5 3 3 0 1 0 2 总出现次数https://l.fjcp.cn/zst_fjfc/ql515/jb/100
11.模拟信号采集显示器+GPS同步信号发生器制作全过程(焊接问题代码问题2:使用的是XPT2046作为模拟信号转换芯片,一个是这个芯片当时只找到了贴片封装,没找到插件封装,但又需要在洞洞板上实现,在老师的建议下我知道了封装转换板,就是把芯片贴上去,他引出的可以接排针的引脚,可以买到。再一个是在焊接好之后,发现一上电就会出现引脚1-8有好几个引脚都在冒火花,冒烟,但是仔细看也无https://blog.csdn.net/qq_52600949/article/details/143209130
12.新车上牌选号禁忌有什么选车牌有什么技巧和规律?1)提交11-15; 2)【快速】输入完16-20自编的号,切回【随机】看下“换一批”按钮还有多久,再回【自编】检查下(无需提交,也不用等80s的时间) 3)【快速】进入步骤7; 步骤7:(2分钟) 【随机】 1)选第5个备选号; 步骤8:(5分钟) 1)【重要】比较5个随机备选号,和16-20自编号,【先决定】是否https://www.yoojia.com/ask/17-11768533730536663307.html
13.华东福彩15选5第2024328期开奖结果一等奖 5码全中顺序不限 2038 87 二等奖 任意中4码 10 6675 特等奖 5码全中且包含4个连续码 0 0往期回顾 开奖日期期号开奖号码 2024-12-06 2024327 0203040910 2024-12-05 2024326 0106070910 2024-12-04 2024325 0102061112 2024-12-03 2024324 0104060714 2024-12-02 2024323 0607081214 查看更多实http://m.46644.com/caipiao/detail-23-2024328/
14.亮考网通过微信公众号或微信小程序也可以很好地完成所有功能。 4、为什么要注册成为会员? 答:非会员用户只能浏览网页,注册成为会员后,才可以进行免费体验、每周一题、充值、参加模拟考试等操作。 5、网站提供的是什么形式的考试练习? 答:亮考网提供的是网上模拟考试练习,直接在网上做题。不提供试卷下载、邮寄,售卖光盘、https://www.ky96.com/article/127.html
15.商事契约的解释(二)模拟推理的三种分析路径 本文以下将扼要介绍三种对于模拟推理持相异见解之学说,借以进一步厘清模拟推理之本质。 1.传统路径——卡尔?拉伦茨[15] 卡尔?拉伦茨乃德国法学方法论的开山鼻祖之一,他认为模拟推理是用于填补制定法漏洞的基本手段之一,即是法之续造。模拟的运用须以制定法显露出明显的漏洞为前提;所谓明显http://www.iolaw.org.cn/global/en/new.aspx?id=44373
16.2018级老年服务与管理专业人才培养方案老年行政事务管理:行政事务管理员(2)→助理级(4年)→中级(5年)→高级 六、培养目标 培养思想政治坚定、德技并修、全面发展,适应人口老龄化的社会需要,掌握养老及涉老岗位必备的基础理论和专业知识,具备较强的现代养老机构管理能力、良好的人际沟通能力和对老年人实施整体照护的能力,具有良好职业道德,面向老年照护https://jwc.wfhlxy.com/info/1023/1358.htm
17.电子元件常识,这个可以看snifer电子技术应用AET“二点五下乘以九,往上减一顺号走”说的是2.5mm’及以下的各种截面铝芯绝缘线,其载流量约为截面数的9倍。如2.5mm’导线,载流量为2.5×9=22.5(A)。从4mm’及以上导线的载流量和截面数的倍数关系是顺着线号往上排,倍数逐次减l,即4×8、6×7、10×6、16×5、25×4。 http://blog.chinaaet.com/snifer/p/17367
18.二级建造师建筑工程模拟试题(二)参考答案及解析复习资料为了帮助大家高效备考2019年二级建造师考试,建设工程教育网为大家整理了二级建造师建筑工程模拟试题(二)为5年;(3)供热与供冷系统,为2个采暖期、供冷期;(4)电气管线、给排水管道、设备安装为2年;(5)15.【答案】C 【解析】本题考查的是饰面砖工程的定义。饰面砖工程是指内墙饰面砖和高度不大于100m、https://www.jianshe99.com/jianzao2/ziliao/ca1904013110.shtml
19.华东15选5投注技巧二:利用7码复式请问小编15选5我全包号的话有没有可能中一等奖,是不是有几百万啊。全包了才几千块钱嘛,花几千块http://bbs.360.cn/thread-470689-1-1.html