这一章我们来实现第一个FPGAproject—LED流水灯。我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程,从新建project,代码设计,综合实现。管脚约束,下载FPGA程序。

掌握本章内容,大家就算正式的開始入门FPGA开发了。

1.1.2.新建project

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

第二步:菜单条选择File—>New Project Wizard,新建project。

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

第三步:例如以下图。依次设置project的存放路径,project名称。顶层文件名,如图依次设置好,这里我们将全部project相关的文件放在prj目录内,便于project文件与源代码文件的管理,同一时候要保持project名称与顶层实体名称一致,继续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。

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

1.1.3.代码设计

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

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

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

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

第四步:编写代码逻辑,这里我们实现了一个流水灯。这里我们用了一个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上资源是相互映射的。

首先什么是网表文件?网表文件描写叙述了对应project的FPGA设计中包括了FPGA资源。相同描写叙述了这些资源又是怎样连接的。其次,FPGA有哪些资源?我们会在兴许章节具体介绍,这里就说一个最简单的资源——触发器。这个是我们数电里面学习过的,在FPGA里一般叫做寄存器。

比如我们这个project中。终于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栏中输入对应管脚的位置,完毕管脚分配。

怎样新建Quartusproject—FPGA新手教程的更多相关文章

  1. Groovy新手教程

    Groovy新手教程 kmyhy@126.com  2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也执行在 JVM 中. 作为跑在JVM ...

  2. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  3. A-Frame WebVR开发新手教程

    WebVR和WebGL应用程序接口使得我们已经能够在浏览器上创建虚拟现实(VR)体验.但从project化的角度而言,开发社区还须要很多其它方便强大的开发库来简化编程.Mozilla的 A-Frame ...

  4. [新手教程]windows 2003 php环境搭建详细教程(转)

    对于windows服务器的php环境配置一直是是新人朋友的难题,也难倒了很多高手.这里分享一个新手教程,给那些建站新人使用.本教程来自朋友吴文辉的博客,欢迎大家有时间可以访问他的博客:吴文辉博客htt ...

  5. Android基础新手教程——4.1.3 Activity登堂入室

    Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...

  6. Pycharm新手教程,只需要看这篇就够了

    pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...

  7. ionic新手教程第七课-简要说明几种界面之间的參数传递及优缺点

    截至2016年4月13日19点32分,我公布的ionic新手教程,已经公布6课了, 总訪问量将近6000,平均每节课能有1000的訪问量.当中訪客最多的是第三课有2700的訪客. watermark/ ...

  8. 有用PHP依赖管理工具Composer新手教程

    PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理 ...

  9. C#游戏开发高速新手教程Unity5.5教程

    C#游戏开发高速新手教程Unity5.5教程 试读文档下载地址:http://pan.baidu.com/s/1slwBHoD C#是微软公布的高级程序设计语言.这门语言和C语言一样,已经成为了大学计 ...

随机推荐

  1. PostgreSQL(EXCEPT,INTERSECT)

    except 可以查看表一对表二不一样的数据,有点像是对表一进行表一表二交集的反集的交集,好绕: intersect 可以查看表一和表二一样的数据,求交集: select t1.name,t1.age ...

  2. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 2131  Solved: 865[Submit][Statu ...

  3. [HDU4336]Card Collector(min-max容斥,最值反演)

    Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. Bluetooth篇 开发实例之六 蓝牙RSSI计算距离

    计算公式: d = 10^((abs(RSSI) - A) / (10 * n)) 其中: d - 计算所得距离 RSSI - 接收信号强度(负值) A - 发射端和接收端相隔1米时的信号强度 n - ...

  5. App Distribution Guide (一)

    This guide contains everything you need to know to distribute an app through the App Store or Mac Ap ...

  6. Kubernetes 针对资源紧缺处理方式的配置

    如何在资源紧缺的情况下,保证 Node 的稳定性,是 Kubelet 需要面对的一个重要的问题.尤其对于内存和磁盘这种不可压缩的资源,紧缺就相当于不稳定. 在kubelet启动作为参数或者在配置文件中 ...

  7. hibernate,mybatis,beetlsql 全面比較

    这是我的一个综合评分.总共分为12个单项.每一个单项最高5分.最低0分. 注意.评价仅仅包括这些软件提供的标准功能,不包括第三方提供的功能,如代码生成等. 开发效率 hibernate  能获取数据库 ...

  8. Cocos2d-x游戏开发之luaproject创建

    操作系统:OS X 10.85 Cocos2d-x 版本号: 2.2.1 使用Cocos2d-x 能够创建luaproject,已经使用cpp创建的project也能够继承lua进行开发,可是lua并 ...

  9. 什么是HotSpot VM & 深入理解Java虚拟机 JVM

    参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...

  10. sqoop使用记录

    sqoop简介 Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具.它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实 ...