如何新建Quartus工程—FPGA入门教程

2023-11-16

这一章我们来实现第一个FPGA工程—LED流水灯。我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建工程,代码设计,综合实现,管脚约束,下载FPGA程序。掌握本章内容,大家就算正式的开始入门FPGA开发了。

1.1.2.新建工程

第一步:从开始菜单启动Quartus II 13.1(64 bit) ,如下图。

第二步:菜单栏选择File—>New Project Wizard,新建工程。

第三步:弹出新建工程对话框,点击Next,下一步。

第三步:如下图,依次设置工程的存放路径,工程名称,顶层文件名称,如图依次设置好,这里我们将所有工程相关的文件放在prj文件夹内,便于工程文件与源码文件的管理,同时要保持工程名称与顶层实体名称一致,继续Next。

第四步:添加设计文件,这一步我们不需要添加,后续我们会新建相应的代码文件。这里继续Next。

第五步:选择FPGA器件,如图所示,这里我们选择器件家族是CycloneIV系列的,封装是FBGA,管脚数为256,速度等级为8。这里速度等级越小,速度越快。这里我们FPGA的具体型号为EP4CE6F17C8。大家通过这个对话框了解这个器件的基本资源。这里我简单介绍一下这些资源的名称,在后面的章节里我们还会详细讲解FPGA内部资源与结构。

1、CoreVoltage是内核电压,Cyclone IV的内核电压是1.2V。

2、LE是Altera最基本的逻辑单元,LEs表示FPGA的所有的逻辑资源,   我们这款芯片的逻辑资源数为6272。

3、User I/Os表示用户IO数,这里共有180个IO可以供用户使用。

4、Memory Bits与embedded multiplier 9-bit elements实际是一回事,后者简称M9K,M9K就是指位宽为9bit,深度为1K的RAM。这里一共有30个M9K,大家计算一下9*1024*30=276480就是Memory Bits。

5、PLL锁相环,内部一共有两个锁相环。

6、Global clocks全局时钟网络数,这里一共有10个。

第六步:设置EDA工具,这里我们就设置一下仿真工具,使用默认Modelsim

-Altera,语言选择Verilog。实际后面我们不建议大家使用Modelsim-Altera。我们会推荐大家在直接使用Modelsim-SE,后者的通用性更强。继续Next。

       第七步:总结新建工程的基本信息。到这里就完成工程的建立。

1.1.3.代码设计

大家阅读本节前,首先应该对Verilog语法有一定了解,其次阅读我们提供的编码规范文件,了解基本的命名规则和工程架构,从一开始就培养良好的编码习惯。

第一步:新建verilog源文件,如下图,点击新建文件图标,或者通过菜单栏File—>New打开新建文件向导。

第二步:在新建文件向导中,选择Verilog HDL File,点击OK。

第三步:因为我们已经配置过UltraEdit为默认编辑器,此时会打开UltraEdit(注意:UltraEdit编辑Verilog代码前,要添加语法高亮文件,详见3.3.3节内容),弹出新建源文件,将源文件另存至src文件夹下,命名为led_test.v与顶层实体名称一致。我们将源码文件和工程文件放在不同文件夹下,方便日后的工程维护。

第四步:编写代码逻辑,这里我们实现了一个流水灯。这里我们用了一个27位的计数器,时钟频率为50MHz,周期为20ns,当计数到第25位置位时,计数器值为25’d16777216,此时时间为16777216*20ns=335ms。这样每大约经过335ms,计数器的[26:24]位就会加1。我们第一个always实现计数器,第二个always实现控制不同时间时LED的输出,即每隔335ms改变一次LED的输出状态。

1.  module led_test

2.      (

3.          input                  i_clk,      //input clk ,50mhz

4.          input                  i_rst_n,    //reset, active low

5.          outputreg  [3:0]o_led      //led out

6.      );

7.      reg    [26:0]         led_count;   

8.      always @ (posedge i_clk or negedge i_rst_n)

9.      begin

10.        if(!i_rst_n)

11.            led_count  <=27'd0;  

12.        else

13.            led_count  <=led_count   +   27'd1;                  

14.    end

15.    always @ (posedge clk or negedge i_rst_n)

16.    begin

17.        if(!i_rst_n)

18.            o_led   <=4'b1111;    

19.        else begin

20.            case(led_count[26:24]) //when 25th bit set= 335ms

21.                3'b000:     o_led<=  4'b1110;       

22.                3'b001:     o_led<=  4'b1101;   

23.                3'b010:     o_led<=  4'b1011;  

24.                3'b011:     o_led<=  4'b0111;  

25.                3'b100:     o_led<=  4'b1100;      

26.                3'b101:     o_led<=  4'b1001;  

27.                3'b110:     o_led<=  4'b0011;

28.                3'b111:     o_led<=  4'b0000;       

29.            endcase

30.        end

31.    end   

32.endmodule    

1.1.4.综合实现

对于刚接触FPGA的同学可能不太了解综合实现的意思,其实简单里说,综合实现就相当于单片机的编译过程。而FPGA的编译过程不像其他高级语言的编译过程,FPGA编译过程实际是相应硬件电路的实现过程。

第三小节,我们完成了代码设计,我们就可以综合实现了。步骤就是双击task窗口下的“Compile Design”,就会开始综合实现了。

Altera的FPGA编译过程大致分为以下几个过程:分析综合,布局布线,生成烧写文件,时序分析,EDA网表生成。如下图所示。

分析综合:这个过程首先是完成对源码文件的语法编译,其次是将我们设计的语言综合成相应的网表文件,而这个网表文件实际是与FPGA上资源是相互映射的。首先什么是网表文件?网表文件描述了相应工程的FPGA设计中包含了FPGA资源,同样描述了这些资源又是如何连接的。其次,FPGA有哪些资源?我们会在后续章节详细介绍,这里就说一个最简单的资源——触发器,这个是我们数电里面学习过的,在FPGA里一般叫做寄存器。例如我们这个工程中,最终led_count和o_led都会映射到相应的寄存器。

布局布线:这个过程是根据分析综合中得到的网表文件进行的,如果大家有PCB设计经验可能会更好理解。所谓布局,就像PCB布局,将设计中用到的资源布局到FPGA器件内部不同的位置。所谓布线,同样类似PCB布线,将FPGA内部用到的资源根据网表文件中描述的链接关系连在一起。

生成烧写文件:这个过程比较好理解,基于上述过程产生的文件,再生成用烧写FPGA的文件。

EDA网表生成:这个过程则是用来生成仿真所需网表文件。仿真时会用到。

1.1.5.管脚分配

这一节我们将介绍管脚分配,管脚分配过程中我们会同时讲解关于Altera FPGA管脚主要特点及分类。

第一步:管脚分配前应该先将源码文件进行综合,让Quartus获取相应的IO信息。这一步第四小节已经讲了,我就不做详细介绍了。

第二步:打开管脚分配工具Pin Planner,如下图。或者可以通过菜单栏Assignments—>Pin Planner打开,也可以下图所示快捷图标打开。

     

第三步:分配管脚之前,我们先介绍一下FPGA的IO分布情况、管脚的特点及种类,以及Pin Planner工具的使用。如下图为Pin Planner界面。

Pin Planner工具界面大致可分为以下几个部分:

总体管脚布局区域:如图所示,中间器件图描述了每个管脚的位置。

Report区域:通过这个区域,将相应信息打上√,就可以高亮我们所关心的IO信息。这里我们高亮IO的bank信息。FPGA的管脚是分bank的,而且每个bank的IO的电平都可以独立配置的。

Tasks区域:这个区域包含了很多IO信息,我们可以双击需要的IO信息,相应的信息就会添加到Repoat区域中。

Pin Legend区域:这里具体说明IO的所有种类,并用不同的颜色和形状表示出来。而FPGA的IO管脚大致分为 用户IO,配置管脚,电源管脚这几类。

管脚分配区域:我们在这个区域内对我们设计中的IO进行分配。

第四步:分配管脚。在Location栏中输入相应管脚的位置,完成管脚分配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何新建Quartus工程—FPGA入门教程 的相关文章

  • git format-patch详解

    git format patch详解 打包最近的一个patch git format patch HEAD 有几个 就打包几个patch的内容 或git format patch n 打包版本n1与n2之间的patch git format
  • 【Mysql高频面试题整理 一】

    Mysql高频面试题 持续手机更新ing Mysql 常用的数据库之一 面试一般会问哪些相关的问题呢 今天带大家整理一波 后面持续更新 一点浅见 欢迎各位大佬莅临指导 Mysql面试高频题有哪些呢 1 Mysql的存储引擎有哪些 有什么区别
  • 如何使用Vue实现自定义双向数据绑定?

    目录 理解Vue的双向数据绑定 sync修饰符实现双向数据绑定 自定义组件实现双向数据绑定 总结 理解Vue的双向数据绑定 在 Vue 中 双向数据绑定是一项非常强大的功能 它能够使数据和视图之间保持同步 让开发者更加方便的操作数据 在本文
  • Linux文件编程常用函数详解——read()和write()函数

    read 函数 include
  • 使用pandas把计算数据写入excel的指定单元格

    要使用 pandas 将计算数据写入 Excel 的指定单元格 您可以使用 pandas DataFrame to excel 方法 首先 您需要使用 pandas read excel 方法将 Excel 文件读入一个 pandas Da
  • Stable Diffusion使用方法

    SD的本地安装教程有很多我就不重复了 这里主要是记录我在使用SD Webui的过程中遇到的问题 总结的一些提升出图效率 出好图概率的经验 先搞几张看看效果 二次元妹妹 高达 Ok 以上只是一小部分成品 属于是抛砖引玉之作 我当时设置的参数出
  • word打不开提示安装Genko.msi该怎办

    word打不开提示安装Genko msi该怎办 今天有同学给我说电脑有问题了 启动WORD后让安装Genko msi 正好解决了顺便写一个经验吧 方法一 1 错误提示是这样的 2 首先在开始菜单打开 运行 win7直接开始菜单输入就行 然后
  • webpack5后台管理

    1 系统基于panjiachen后台管理系统模板 升级webpack5 2 github地址 https chengmanxiang webpack5 vue2 admin 3 线上地址 webpack5 vue2
  • Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable方式)

    场景 Java中基于JDK的LRU算法实现 LRU算法 缓存淘汰算法 Least recently used 最近最少使用算法 根据数据的历史访问记录来进行淘汰数据 其核心思想是 如果有数据最近被访问过 那么将来被访问的几率也更高 在Jav
  • TS2550: Property ‘entries‘ does not exist on type ‘ObjectConstructor‘.

    TS2550 Property entries does not exist on type ObjectConstructor Do you need to change your target library Try changing
  • requests请求

    请求方式 requests get 发送get请求 通过params传递参数 requests post 发送post请求 通过json data 传递参数 data 数据报文 dict字典类型 默认情况下请求头为applilcation
  • Unity学习总结(学几个月C++,找到了用Unity和C#的活)

    一 主人物控制 通过调整Main Camera位置和角度 可以确定合适的游戏视角 可以建立playController脚本 里面存放对主人物进行控制的代码 transform translate 可以设置当前组件的坐标 transform
  • 【STM32学习笔记】(1)—— STM32详解

    什么是STM32 STM32的字面含义 1 ST 代表着意法半导体公司 即由什么公司生产 意法半导体公司是一家SOC厂商 所谓SOC System on a Chip 根据它的中文意思可以知道 把系统都做在一个芯片上 如果在PC时代我们说一
  • 开放型 MODBUS-TCP规范(中文版)2

    导读 5 3 等级2指令详述 5 3 1 强制多点线圈 FC 15 请求 Byte 0 FC 0F 16进制 Byte 1 2 参考数值 Byte 3 4 比特数 1 800 Byte 5 字节数 B 比特数 7 8 Byte 6 B 5
  • Matlab计算完全消耗系数

    数据来源wiod 1 计算 clear clc eta cell 14 2 year 2000 2013 for i 1 14 eta i 2 1999 i end Type Sheet Fromat xlsfinfo F yida pro
  • 树莓派练习程序(避障模块)

    火焰检测模块如下 树莓派的引脚如下图 我们将Vcc引脚连接物理接口2 GND引脚连接物理接口39 DO引脚连接物理接口40 实物连接如下图 编程使用WiringPi库 使用wpi引脚编码方式控制GPIO 代码如下 include
  • 电路基础(3)电阻电路等效变换的经典例题

    1 R 2 求Rab的等效电阻 这个电路是个对称网络 若通过a b结点做一条中分线 中分线两侧的电路相同 d d d 三点的电位相同 2 求Rab的等效电阻 这个电路是双T网络 每个T形就是一个Y形联结 但两个Y形联结的中点电位一般不同 不

随机推荐