怎样新建Quartusproject—FPGA新手教程
这一章我们来实现第一个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新手教程的更多相关文章
- Groovy新手教程
Groovy新手教程 kmyhy@126.com 2009-5-13 一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也执行在 JVM 中. 作为跑在JVM ...
- 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...
- A-Frame WebVR开发新手教程
WebVR和WebGL应用程序接口使得我们已经能够在浏览器上创建虚拟现实(VR)体验.但从project化的角度而言,开发社区还须要很多其它方便强大的开发库来简化编程.Mozilla的 A-Frame ...
- [新手教程]windows 2003 php环境搭建详细教程(转)
对于windows服务器的php环境配置一直是是新人朋友的难题,也难倒了很多高手.这里分享一个新手教程,给那些建站新人使用.本教程来自朋友吴文辉的博客,欢迎大家有时间可以访问他的博客:吴文辉博客htt ...
- Android基础新手教程——4.1.3 Activity登堂入室
Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...
- Pycharm新手教程,只需要看这篇就够了
pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...
- ionic新手教程第七课-简要说明几种界面之间的參数传递及优缺点
截至2016年4月13日19点32分,我公布的ionic新手教程,已经公布6课了, 总訪问量将近6000,平均每节课能有1000的訪问量.当中訪客最多的是第三课有2700的訪客. watermark/ ...
- 有用PHP依赖管理工具Composer新手教程
PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理 ...
- C#游戏开发高速新手教程Unity5.5教程
C#游戏开发高速新手教程Unity5.5教程 试读文档下载地址:http://pan.baidu.com/s/1slwBHoD C#是微软公布的高级程序设计语言.这门语言和C语言一样,已经成为了大学计 ...
随机推荐
- Linux下多进程服务端客户端模型二(粘包问题与一种解决方法)
一.Linux发送网络消息的过程 (1) 应用程序调用write()将消息发送到内核中 ( 2)内核中的缓存达到了固定长度数据后,一般是SO_SNDBUF,将发送到TCP协议层 (3)IP层从TCP层 ...
- poj2774(最长公共子串)
poj2774 题意 求两个字符串的最长公共子串 分析 论文 将两个字符串合并,中间插入分隔符,在找最大的 height 值的时候保证,两个字符串后缀的起始点分别来自原来的两个字符串. code #i ...
- NOIP 2017 赛后反思 [补档]
首先写一下比赛的情况: D1: T1: 之前做过类似的题目, 因而知道大致的结论, 迅速完成. T2: 貌似直接模拟就可以了, 涉及到字符串信息提取, 比较麻烦, 因而想放到最后做. T3: 非常简洁 ...
- 八. 输入输出(IO)操作7.文件的随机读写
Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程 ...
- 【视频】 Linux高级程序设计01.2开发平台及Linux环境限制
[课程笔记] Linux环境限制 遵循规范,使用现有资源,明确系统限制,增量开发. (1)规范问题 编码的规范,让程序更易读.Linux编码规范. “见着如意”:变量,函数命名等能够让人看到名称就知道 ...
- 使用Jenkins搭建iOS开发的CI服务器
目录 简介 下载并运行 Jenkins配置 安装git插件 E-mail设置 自动化构建 远程仓库设置 触发条件 ...
- 设计模式之组合模式(PHP实现)
github地址:https://github.com/ZQCard/design_pattern /** 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作 ...
- MySql中LongText字段对应Hibernate映射文件的设置(转)
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...
- Jakarta雅加达项目简介
Jakarta项目是在Apache软件基金会营运的公开源代码软件开发项目之一.开发着面向编程语言Java的程序库,框架等. Jakarta是Apache组织下的一套Java解决方案的开源软件的名称,它 ...
- idea 转普通项目为maven 项目
1.项目上右键 Add Framework Support. 2.选择maven,点击OK.