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

这一章我们来实现第一个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栏中输入相应管脚的位置,完成管脚分配。

  • 28
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
第一章 概述 1.1 SOPC 的概念 1.2 SOPC 系统设计流程 1.2.1 SOPC Builder 的设计流程 1.2.2 SOPC Builder 的设计阶段 1.2.3 SOPC 系统开发流程 1.3 SOPC 系统开发环境 1.4 本书中的系统配置 第二章 SOPC 系统构架 2.1 系统模块框图 2.2 Nios CPU 2.2.1 指令总线主端口 2.2.2 数据总线主端口 2.2.3 缓冲存储器 2.2.4 移位单元 2.2.5 乘法支持 2.2.6 中断支持 2.2.7 Nios 片上调试模块 2.2.8 开发环境 2.3 Avalon 总线 2.3.1 基本概念 2.3.2 Avalon 总线传输 2.3.3 Avalon 三态接口 2.3.4 地址对齐 2.4 外设IP 模块 2.4.1 通用异步串行接口(UART ) 2.4.2 可编程并行输入/输出模块(PIO ) 2.4.3 定时器 2.4.4 DMA 控制器 第三章 系统硬件开发 3.1 硬件开发流程 3.2 创建Quartus II 工程 3.3 创建Nios 系统模块 3.3.1 开始使用SOPC Builder 3.3.2 系统频率 3.3.3 添加CPU 和外设模块 3.3.4 指定基地址 3.3.5 生成系统模块 3.3.6 添加符号到BDF 中 3.4 编译设计(Compilation) 3.5 编程(Programming ) 3.5.1 配置FPGA 3.5.2 用户微控制器 3.5.3 在Nios 系统上运行软件 3.6 下载设计到 Flash 存储器 第四章 系统软件开发 4.1 软件开发流程 4.2 软件开发环境 4.3 文件系统 4.4 软件开发工具 4.4.1 GNUPro 工具 4.4.2 Nios OCI 调试模块 4.4.3 Nios OCI 调试控制台 4.4.4 Nios SDK Shell 4.5 可配置的处理器硬件属性 4.5.1 乘法器 4.5.2 数据和指令高速缓冲器 4.5.3 用户指令 4.5.4 同时执行的多主(Multi-Master)总线结构和 DMA 4.5.5 数据和指令高速缓冲器 4.5.6 外设和存储器接口 4.6 Nios SDK 4.6.1 inc 目录 4.6.2 lib 目录 4.6.3 src 目录 4.7 软件开发应用 4.7.1 开始前的准备 4.7.2 打开 Nios SDK Shell 4.7.3 编译程序 4.7.4 用insight 下载、运行和调试程序 4.7.5 用Nios OCI 调制控制台下载、运行和调试程序 4.7.6 重建(rebuild)软件 4.7.7 下载软件到 Flash 4.7.8 第三方开发和调试工具 4.8 使用.hexout 4.9 其它的开发板通信和调试方法 4.9.1 GERMS 监视器 4.9.2 Insight:GNU调试器 4.9.3 Gprof:GNU Profiler 4.10 Nios SDK Shell提示信息 4.11 在 Nios 系统中实现中断服务程序(ISR) 4.12 用户自定义指令 4.12.1 用户自定义指令的概念 4.12.2 加速效果 4.12.3 用户自定义指令应用 第五章 系统模拟与调试 5.1 软件配置 5.2 模拟设置 5.2.1 存储器初始化 5.2.2 UART 外设模拟设置 5.2.3 SOPC Builder模拟设置 5.2.4 通用系统模拟文件 5.3 ModelSim 模拟 5.4 模拟结果分析 5.4.1 通过 UART 外设同 GERMS 监控程序交互 5.4.2 执行 PIO 外设操作的 C 程序 5.5 增加/删除波形图信号 5.6 片外存储器模拟 5.6.1 使用自动产生的存储器模块 5.6.2 指定一个定制模块 5.6.3 定义存储器模块内容 5.7 调试 5.7.1 使用 SignalTap II 逻辑分析器 5.7.2 使用 SignalProbe 5.7.3 使用 Chip Editor 第六章 系统设计实例 6.1 建立硬件需求 6.2 创建一个基本的Nios 设计 6.3 GDB 调试 6.4 添加用户外设 6.5 RTL 仿真 6.6 Flash 编程 6.7 用户指令和DMA 6.8 MP3 播放器 附录 1:Nios 嵌入式处理器 32 位指令集 附录 2:Nios 嵌入式处理器开发板-APEX 20K200E 附录 3:Nios 嵌入式处理器开发板-Cyclone_1C20 附录 4:Nios 嵌入式处理器开发板-Stratix_1S10 附录 5:Nios 嵌入式处理器开发板-Stratix_1S40 参考文献
简介: FPGA技术经过20多年的发展,现在已经被应用到各个领域,并且正在逐渐成为越来越多领先技术的系统级解决方案。为了帮助从事或者即将从事FPGA设计的工程师尽快的了解FPGA技术,掌握设计的方法和手段,华清远见针对FPGA的初学者设计了这个视频教程。通过对FPGA技术的阐述,分析典型器件的特点,教授FPGA设计的常用方法及开发的基本流程,并通过简明合理的实验,帮助学员掌握相关设计工具的使用方法及FPGA硬件平台的常用调试手段。 本课程将对FPGA的相关基础概念、工艺特点、FPGA基本结构及选型策略进行讲解,结合开发工具及硬件平台使学员掌握FPGA的设计方法和设计流程。在基础方面,掌握FPGA的结构特点及典型型号;在硬件设计方面,掌握FPGA PCB设计的要点;逻辑设计方面,掌握Verilog语言设计的要点;在调试方面,掌握工具的基本操作及常用软硬件协同调试手段。 主讲人:姚远老师,华清远见高级讲师,北京航空航天大学自动化专业博士学位,有8年的FPGA和DSP系统硬件开发经验,成功开发了卫星载超高速图像压缩系统、红外图像采集压缩和传输系统、基于MPEG4/H.264的网络监控系统、高速(1GHz)并行(4颗)DSP图像处理系统,超大规模高速500万门FPGA验证平台(Altera StratixII EP2S180)。 主要内容: 1、红色飓风FPGA入门普及活动 第一讲、FPGA设计基础 第二讲、FPGA设计入门 第三讲、VerilogHDL基础 第四讲:Verilog HDL中的组合逻辑设计方法 第五讲:ModelSim软件使用方法和技巧 第六讲、Sopc硬件系统 第七讲、sopc软件系统 2、红色飓风FPGA入门普及活动 第1讲:FPGA系统设计基础 第2讲:从零开始设计FPGA最小系统一:核心电路 第3讲:从零开始设计FPGA最小系统二:外围电路 第4讲:Verilog HDL语法一:常用语句 第5讲:Verilog HDL语法二:任务与函数 第6讲:Verilog HDL语法三:有限状态机 第7讲:QuartusII 7.2设计入门 第8讲:NIOSII 7.2设计入门 第9讲:FPGA系统设计技巧-乒乓操作 第10讲:FPGA设计常用IP核-锁相环 3、其它 2006年5月27日姚老师《FPGA技术与数字系统设计基础》视频 2006年9月17日姚老师《基于FPGA的数字视频图像处理系统设计方法》视频 2007年4月21日姚老师《FPGA在视频图像处理领域的应用》视频 2007年7月14日姚老师《FPGA硬件最小系统设计》视频 2007年8月25日陆老师《FPGA系统设计的主要思路和方法初探》视频 2008年5月24日潘老师《Xilinx FPGA开发要点介绍》视频 2008年5月24日姚老师《Altera FPGA的选型及开发》视频 2008年5月24日姚老师《FPGA在视频处理领域的应用》视频 2008年11月01日陆阳老师《FPGA设计的良好设计方法及误区》视频 2008年11月29日姚远老师《FPGA的高端应用案例》视频
SOPC ,系统设计入门教程 前言 目录 第一章 概述 1.1 SOPC 的概念 1.2 SOPC 系统设计流程 1.2.1 SOPC Builder 的设计流程 1.2.2 SOPC Builder 的设计阶段 1.2.3 SOPC 系统开发流程 1.3 SOPC 系统开发环境 1.4 本书中的系统配置 第二章 SOPC 系统构架 2. 1 系统模块框图 2. 2 Nios CPU 2.2.1 指令总线主端口 2.2.2 数据总线主端口 2.2.3 缓冲存储器 2.2.4 移位单元 2.2.5 乘法支持 2.2.6 中断支持 2.2.7 Nios 片上调试模块 2.2.8 开发环境 2. 3 Avalon 总线 2.3.1 基本概念 2.3.2 Avalon 总线传输 2.3.3 Avalon 三态接口 2.3.4 地址对齐 2. 4 外设 IP 模块 2.4.1 通用异步串行接口(UART) 2.4.2 可编程并行输入/输出模块(PIO) 2.4.3 定时器 2.4.4 DMA 控制器 第三章 系统硬件开发 3.1 硬件开发流程 3.2 创建 Quartus II 工程 3.3 创建 Nios 系统模块 3.3.1 开始使用 SOPC Builder 3.3.2 系统频率 3.3.3 添加 CPU 和外设模块 3.3.4 指定基地址 3.3.5 生成系统模块 3.3.6 添加符号到 BDF 中 3.4 编译设计(Compilation) 3.5 编程(Programming) 3.5.1 配置 FPGA 3.5.2 用户微控制器 3.5.3 在 Nios 系统上运行软件 3.6 下载设计到 Flash 存储器 第四章 系统软件开发 4.1 软件开发流程 4.2 软件开发环境 4.3 文件系统 4.4 软件开发工具 4.4.1 GNUPro 工具 4.4.2 Nios OCI 调试模块 4.4.3 Nios OCI 调试控制台 4.4.4 Nios SDK Shell 4.5 可配置的处理器硬件属性 4.5.1 乘法器 4.5.2 数据和指令高速缓冲器 4.5.3 用户指令 4.5.4 同时执行的多主(Multi-Master)总线结构和 DMA 4.5.5 数据和指令高速缓冲器 4.5.6 外设和存储器接口 4.6 Nios SDK 4.6.1 inc 目录 4.6.2 lib 目录 4.6.3 src 目录 4.7 软件开发应用 4.7.1 开始前的准备 4.7.2 打开 Nios SDK Shell 4.7.3 编译程序 4.7.4 用 insight 下载、运行和调试程序 4.7.5 用 Nios OCI 调制控制台下载、运行和调试程序 4.7.6 重建(rebuild)软件 4.7.7 下载软件到 Flash 4.7.8 第三方开发和调试工具 4.8 使用.hexout 4.9 其它的开发板通信和调试方法 4.9.1 GERMS 监视器 4.9.2 Insight:GNU 调试器 4.9.3 Gprof:GNU Profiler 4.10 Nios SDK Shell 提示信息 4.11 在 Nios 系统中实现中断服务程序(ISR) 4.12 用户自定义指令 4.12.1 用户自定义指令的概念 4.12.2 加速效果 4.12.3 用户自定义指令应用 第五章 系统模拟与调试 5.1 软件配置 5.2 模拟设置 5.2.1 存储器初始化 5.2.2 UART 外设模拟设置 5.2.3 SOPC Builder 模拟设置 5.2.4 通用系统模拟文件 5.3 ModelSim 模拟 5.4 模拟结果分析 5.4.1 通过 UART 外设同 GERMS 监控程序交互 5.4.2 执行 PIO 外设操作的 C 程序 5.5 增加/删除波形图信号 5.6 片外存储器模拟 5.6.1 使用自动产生的存储器模块 5.6.2 指定一个定制模块 5.6.3 定义存储器模块内容 5.7 调试 5.7.1 使用 SignalTap II 逻辑分析器 5.7.2 使用 SignalProbe 5.7.3 使用 Chip Editor 第六章 系统设计实例 6.1 建立硬件需求 6.2 创建一个基本的 Nios 设计 6.3 GDB 调试 6.4 添加用户外设 6.5 RTL 仿真 6.6 Flash 编程 6.7 用户指令和 DMA 6.8 MP3 播放器 附录 1:Nios 嵌入式处理器 32 位指令集 附录 2:Nios 嵌入式处理器开发板-APEX 20K200E 附录 3:Nios 嵌入式处理器开发板-Cyclone_1C20 附录 4:Nios 嵌入式处理器开发板-Stratix_1S10 附录 5:Nios 嵌入式处理器开发板-Stratix_1S40
cylone4e(EP4CE6) FPGA基础实验程序例程源码quartus11.0工程源码学习资料合集(18例):可以做为你的学习设计参考。 外设控制入门篇01:点亮4个LED 外设控制入门篇02:控制4个LED亮灭 外设控制入门篇03:LED流水灯实验 外设控制入门篇04:独立按键控制LED灯 外设控制入门篇05:拨码开关控制LED灯 外设控制入门篇06:数码管静态控制 外设控制入门篇07:蜂鸣器报警声 外设控制入门篇08:RS232串口实验 外设控制入门篇09:PS2接口控制实验 外设控制入门篇10:LCD1602显示英文字符 外设控制入门篇11:LCD12864显示英文字符 外设控制入门篇12:LCD12864显示中文 数字逻辑基础篇01:利用LED和按键验证与门 数字逻辑基础篇02:利用LED和按键验证与非门 数字逻辑基础篇03:2选一数据选择器 数字逻辑基础篇04:2-4译码器译码器 数字逻辑基础篇05:4线-2线编码器 优先编码器 数字逻辑基础篇06:一位半加器 数字逻辑基础篇07:一位全加器 module lcd(clk, rs, rw, en,dat); input clk; output [7:0] dat; output rs,rw,en; //tri en; reg e; reg [7:0] dat; reg rs; reg [15:0] counter; reg [4:0] current,next; reg clkr; reg [1:0] cnt; parameter set0=4'h0; parameter set1=4'h1; parameter set2=4'h2; parameter set3=4'h3; parameter dat0=4'h4; parameter dat1=4'h5; parameter dat2=4'h6; parameter dat3=4'h7; parameter dat4=4'h8; parameter dat5=4'h9; parameter dat6=4'hA; parameter dat7=4'hB; parameter dat8=4'hC; parameter dat9=4'hD; parameter dat10=4'hE; parameter dat11=5'h10; parameter nul=4'hF; always @(posedge clk) begin counter=counter+1; if(counter==16'h000f) clkr=~clkr; end always @(posedge clkr) begin current=next; case(current) set0: begin rs<=0; dat<=8'h30; next<=set1; end set1: begin rs<=0; dat<=8'h0c; next<=set2; end set2: begin rs<=0; dat<=8'h6; next<=set3; end set3: begin rs<=0; dat<=8'h1; next<=dat0; end dat0: begin rs<=1; dat<="H"; next<=dat1; end dat1: begin rs<=1; dat<="E"; next<=dat2; end dat2: begin rs<=1; dat<="L"; next<=dat3; end dat3: begin rs<=1; dat<="L"; next<=dat4; end dat4: begin rs<=1; dat<="O"; next<=dat5; end dat5: begin rs<=1; dat<=" "; next<=dat6; end dat6: begin rs<=1; dat<="W"; next<=dat7; end dat7: begin rs<=1; dat<="O"; next<=dat8; end dat8: begin rs<=1; dat<="R"; next<=dat9; end dat9: begin rs<=1; dat
Quartus使用入门及一些实验经验 Maxplus主要是教学使用,对于一般的教学需求,Maxplus软件可以很好的满足要求了, 但是为了以后学习的需要,还是得尝试学会使用更加专业的软件,比如Altera公司的Quartus 软件。 Quartus软件是Alter公司提供的FPGA/CPLD开发集成环境,Altera公司是世界上最大 的可编程逻辑器件供应商之一。Quartus是Maxplus的更新替换产品,其界面友好,使用方 便。在Quartus中可以完成设计输入,HDL综合,布线布局(适配),(前)仿真,下载等测 试。 Quartus软件主要有网页版订购版,都可以从Altera公司的网站上下载到。网络版相比 订购版只是少了一点小小支持,但是对我们的实验是没有任何影响的。本人使用的是Quartus 9.0订购版,大家可以在网络上查找下Quartus的crack来生成license,一般流行的都是俊龙 提供的。如果在网络上没有找到的话可以发我邮箱([email protected])索要。 关于Quartus软件的使用,及FPGA后续学习,个人推荐一本书《基于Alter FPGA/CPLD 的电子系统设计及工程实践》。湖大图书馆藏有这本书,是一本很好的入门书籍,图书馆藏 编号为:TP332.145。里面很详细介绍了Quartus的使用入门及一些简单的工程的建立流程, 等一些知识。 Quartus软件破解完成后,进入Quartus软件,界面如图1.(第一次登陆使用会让你选 择使用Quartus风格还是Maxplus界面风格) 图1 更具个人使用爱好,自己取舍界面需求,一般建议使用standard Quartus。在工具栏 工具栏 空白处右击,然后选择custom,然后显示如图2,选择标签toolbars,勾选standard Quartus, 确定。 图2 在custom里面有很多选项,如果都想了解,可以自己都去点选试试,那些英文都很直 观的告诉了用户对应的风格选项。 自己可以在工具栏直接右击后选择哪些显示,哪些不显示,当然那也可以通过菜单栏中 的view—>utility windows中选择。 利用快键按钮或者快捷键,可以节省自己很多操作,使自己的使用更加方便。 软件的用户界面都是很友好且相似的,Quartus的工具栏和菜单栏的使用和word是很相 像的,连新建,保存,另存为图标的样子都一样。 每一个设计项目都是以工程为单位的,里面可以包含设计图,波形图,管脚绑定,芯片 选择等信息。(就如同vc软件的工作空间这个概念) 点选工具栏中的new,新建一个工程。 接下来就是设置工程的一些基本信息。 输入完工程名字后,点选next。如果所在的文件夹下还有其他工程Quartus会显示提 示信息,自己阅读后进行选择。 当然也可以直接点选finish,在后续的设计中,可以通过菜单栏中的Assignment进行修 改,如Device选项,修改使用的器件。 接下来是在工程中添加文件,比如自己曾经设计好的VHDL源码,原理图等或者库之 类信息。如果不要添加任何文件,直接选择next。 接下来就是器件芯片的选择。 更具实验箱上的芯片进行选择。在Device family中选择Cyclone,在Available devices 中选择EP1C6Q240C6。 点选next,让自己选择第三方软件,如ModelSim,Synplify等,不做任何修改,直接 next,最后finish,整个工程配置完成。 当我们以后再建立工程的时候,由于我们下载使用的芯片都是一样的,工程的基本信息 都是一样的,我们可以使用先前的工程的settings。 在输入工程name的时候,点选use existing project settings,选择指定的工程settings或 者上一次的工程settings,然后直接点选finish,省去了每一次新建工程都需要选择器件。 图3 建立完工程后,假使我们使用原理图的设计方案,因此新建一个block diagram,如图 4. 图4 如果我们设计一个16位计数器,选用74163芯片来制作一个简单的16位计数器。 在bdf文件的空白处双击然后在name选项中直接输入芯片名称。 插入input,output 后,连接进行布线。光标移动到线的一段后就会自动变成十字形, 表示可以进行线输入,连接完线后,如图5. 图5 为了显示清晰,可以将一些功能相同的线或者输入输出合并,即利用总线。比如将输出 端QD,QC,QB,QA合并。先将输出端连出线,然后给各线命名。直接点选中线后从键盘输入 可以看到每条线都有了自己的name。 每条线有了name后可以方便很多,比如我们进行连线的时候,就可以不必每次将需要 相连的线连上,只需取上相同的名字,编译的时候编译器就知道这些线是相连的。因此如果 采用命名的方式连接,一定要注意线的命名,不要使得不相连的线命名相同,这样就会导致 错误,请注意Quartus的编译器是不区分英文大小写的。 如果是进行总分线连接,则一定要按照规定命名。在首先分线的名字一定要一样,然后 表示哪条分线的数字一定要用[ ]括起来,否则编译无法通过。该实验中命名为 Q[0],Q[1],Q[2],Q[3],因此总线应为Q[3..0]或者Q[0..3]。最后连接一个输出端,其中输出端命 名也要注意宽度,和总线宽度保持一致。并注意输入输出端的和总线的顺序,比[3..0],[0..3] 对应是不一样的,为了自己使用的方便,一定要养成自己的总线,输入输出命名方式风格, 个人建议全部从高到低命名,并使得最低位为0,这样符合数字电路的习惯,如本例中8位 总线命名为Q[7..0],输出命名为Q[7..0]。 如果这只是自己设计的一个模块,自己可以试着将该文件编译一下。本例中memory是 顶层设计图,如果要单独编译该设计图,应点选project——set as top-level entity。如图8. 图8 点选编译的快件按键,鼠标移上去会显示:Start compilation。 对这一自己设计的芯片进行打包。点file——create——create symbol file for current file, 如图9. 图9 生成一个和设计图名字一样的bsf文件,即为打包的芯片。 在memory设计图中,双击空白处,输入cdu16(名称为刚才自行设计模块的文件名) 就可以调出自己打包的芯片,也可以双击后在project中点选,如图10. 图10 电路设计完成后,就是在此编译了,如果前面点选了别的文件为top-level entity不要忘 了设置下,把memory设为top-level entity。 在原理图的设计时,自己可以尝试用用工具栏中的各种辅助工具,比如注释工具,使得 自己的原理图更加直观易懂,如下图。 其中观察的zoom in,zoom out选项,单击是zoom in,按住shift后单击是zoom out, 当然直接右击就是zoom out,这和后面波形仿真中观察波形是一样的。 进行波形仿真,验证设计的正确性。新建一个vector waveform file,如图11. 图11 个人比较喜欢把设计图,波形图等界面单独显示,利用自己电脑windows7系统的预览 功能,切换起来十分方便,便于观察。点detach window,就可实现,如图12. 图12 然后在edit里面编辑end time和grid size。如图13. 图13 在左边name一栏双击,如下图。 点选node find。 第一次的时候有可能需要设置Filter中为Pin:all。 点选List,列出所有Pin。 选择Nodes Found中到Selected Nodes。(利用两者直接的四个按钮可以方便传送,删除) 完成后,如图14(此图我已经进行过波形仿真,顾不是原始的波形图) 图14 自己开始进行波形仿真。其中会发现总线上的信号D0,D1等信号左边符号显示的是io, (D0,D1本来的属性就是IO)这个问题后面再说。左边工具栏的功能,自己一个个点点试 试就知道什么功能了,很容易上手。第一次做波形仿真的时候有可能会遇到无法点选珊格, 需要自己小心意义,选满珊格,其实是没有勾选snap to grid。在工具栏倒数第二个键就是此 功能键,当然也可以在view里面选择,如图15. 图15 将一些类似的信号进行合并,一起选中后右击,点选group,进行合并或者拆分。在对 一些信号合并的时候,个人使用Quartus有个小瑕疵,不能命名为SW R1 R2 R3 BUS,这样 的信号名,有空格或者“【”等符号都会显示illegal node name。 对于那些名称很类似的信号合并,由于你需要重新排序,可以点工具栏最后那个按钮, 看英文你就知道选按照升序或者降序排列,默认的是升序,由于波形仿真需要一般都选 descenting。 点选波形仿真的快捷键。 波形仿真中有个需要注意的是,波形图的名称一定要与你所在的工程名相同。因为波形 仿真是和编译后的文件关联的。因此如果你在设计16位计数器的时候进行了波形仿真来测 试是否符合要求,如果想保留此波形图,请save as其他名称,因为后面进行memory的波 形仿真图的时候,会把原图覆盖。如果不取和工程名相同名称的波形图名称,将无法进行波 形仿真。 波形仿真完后,出来一个类似波形仿真对话框的界面,他的label 名称为:simulation如 图16. 图16 会发现该波形图比原波形图多出了8个信号,正好与原来波形图中的双向信号对应,只 是多了个后缀result。这正是你要总线输出信号。你可以试着去修改波形图(其实修改不了, 所以我一般随便双击一段波),会弹出对话框如图17. 图17 点选I want那个选项。然后出现一个对话框,点yes,发现自己创建的波形图变了。两 个英文对话框的意思就是我要重修原来的input file,你点了修改了,系统检测到你点波形图 已经改变了,因此询问你是否替换成修改后的波形图,点yes后就发现自己原来的波形图上 也多出了那几个信号。将这些信号排序组合,命名,如图18. 图18 你会发现波形仿真的结果原来的总线信号还是处于高阻态信号,后来出现的信号显示了 你预期的结果。这个时候注意,原来那些高阻态的信号不能删除,如果删除波形仿真会出错。 (不信可以自己试试,到底哪里会错误)为了避免影响自己观察,既然已经将他们打包了, 把他们放在波形仿真末尾,不碍着自己。 在设计的过程中,如果通过波形仿真发现问题错了,得修改电路图。如果没有改变顶层 的输入输出,如只改变了内部连线,则直接点波形仿真好了,不用再次重新建立波形仿真图。 同样,如果打包的芯片内部连线改变了,只用去修改下内部的连线就可以了,重新编译一下。 但是如果某个打包的芯片需要改变输入输出,那么只能将该芯片重新create symbol file for current file了,将原来的bsf文件覆盖了。不然编译的时候会显示被改变的输入或者输出端 与原来的不符合。在顶层芯片图中,也需要右击该芯片,然后选择update symbol or block。 如图19. 图19 三个选项自己英文都能够看懂,更新后引脚的位置有可能改变了,自己需要注意下,然 后重新连接正确。重新编译。 得到正确的波形图后,写实验报告的时候需要对波形图进行说明,此时点选A工具, 进行注释十分方便。 波形仿真正确后,需要进行下载电路的设计(有些图甚至不需要添加外围下载电路), 然后进行只需进行管脚绑定了。 点选Assignment->Pin Planner 只需在管教的location 选项直接输入管教的数字,就可以很简单的绑定了。 管教绑定后结果如图20. 图20 管脚绑定完再次编译,自己可以看到原来的设计图中的输入输出旁边都会显示已经绑定 好的管教,非常直观,便于自己观察。如图21. 图21 下载: 点选tools->Programmer 第一次有可能使用Hardware Setup。(本人使用的USB下载,写此文时未接上所以显示 No Hardware。实验室的下载线使用的都是并口下载线(有个学长做好了USB下载线,不知 道有没有广泛使用)。Mode选择JTAG,选中sof文件后就可以start了。) 关于下载的一些经验: 每个人都有自己的下载习惯,根据我们实验需要,我们可以养成自己的下载习惯。由于 下载需添加下载电路,万一我们要仿真原来的设计图就显得麻烦了,因此个人建议,在工程 所在的文件夹下再次新建一个工程,然后将原来的设计文件全部add all进去。(在工程建立 的时候那个add file步骤,也可以点选Project->Add/Remove Files in Project进行操作)如图 22 图22 将原来的顶层图打包,作为下载的一个模块,然后添加下载电路。如下图所示: 由于我们下载经常要用到一些下载辅助模块,如扫描电路,消抖电路,7端译码器,可以专 门新建一个文件夹保存这些设计文件,然后在Project中add就可以。然后依次生成对应的 bsf文件(即打包,bsf 文件必须在工程所在的文件下),添加到下载电路中。 管脚绑定也可以利用tcl 命令来完成,我们做实验的时候要反复用到数码管的下载,数 码管的绑定每次都是一样的,而且我们都是用自己设计的扫描电路和7段译码器,因此我们 可以利用tcl命令来简化我们自己的绑定。一种比较省事的办法就是在第一次使用Pin Planner 后,点选file->export,导出文件类型选择tcl。 查看tcl 文件,我们可以看到里面的信息如下: # Copyright (C) 1991-2009 Altera Corporation # Your use of Altera Corporation's design tools, logic functions # and other software and tools, and its AMPP partner logic # functions, and any output files from any of the foregoing # (including device programming or simulation files), and any # associated documentation or information are expressly subject # to the terms and conditions of the Altera Program License # Subscription Agreement, Altera MegaCore Function License # Agreement, or other applicable license agreement, including, # without limitation, that your use is for the sole purpose of # programming logic devices manufactured by Altera and sold by # Altera or its authorized distributors. Please refer to the # applicable agreement for further details. # Quartus II Version 9.0 Build 132 02/25/2009 SJ Full Version # File: E:\code\computer system\cpu design\result\memory\mem_download.tcl # Generated on: Thu Dec 24 19:08:02 2009 package require ::quartus::project set_location_assignment PIN_184 -to q[2] set_location_assignment PIN_183 -to q[1] set_location_assignment PIN_182 -to q[0] set_location_assignment PIN_29 -to scan set_location_assignment PIN_186 -to y[6] set_location_assignment PIN_187 -to y[5] set_location_assignment PIN_188 -to y[4] set_location_assignment PIN_193 -to y[3] set_location_assignment PIN_194 -to y[2] set_location_assignment PIN_195 -to y[1] set_location_assignment PIN_196 -to y[0] set_location_assignment PIN_116 -to CLR_INDATA set_location_assignment PIN_115 -to EN_INDATA set_location_assignment PIN_152 -to CLK_COUNT set_location_assignment PIN_117 -to 161ar set_location_assignment PIN_105 -to 161pc set_location_assignment PIN_118 -to ldar set_location_assignment PIN_28 -to H set_location_assignment PIN_107 -to pcclrn set_location_assignment PIN_108 -to memenab set_location_assignment PIN_113 -to rd set_location_assignment PIN_114 -to we set_location_assignment PIN_106 -to pcload set_location_assignment PIN_123 -to pc_bus set_location_assignment PIN_124 -to sw_bus set_location_assignment PIN_122 -to reset set_location_assignment PIN_64 -to T3 保留我们所要的下载信息: package require ::quartus::project set_location_assignment PIN_184 -to q[2] set_location_assignment PIN_183 -to q[1] set_location_assignment PIN_182 -to q[0] set_location_assignment PIN_29 -to scan set_location_assignment PIN_186 -to y[6] set_location_assignment PIN_187 -to y[5] set_location_assignment PIN_188 -to y[4] set_location_assignment PIN_193 -to y[3] set_location_assignment PIN_194 -to y[2] set_location_assignment PIN_195 -to y[1] set_location_assignment PIN_196 -to y[0] 以后每次进行下载的时候,只需在Project中添加该tcl 文件,然后点选菜单栏tools->Tcl Scripts 然后选择Project中的那个tcl 文件,点选Run,即运行下这个tcl 命令。当我们去查看 原图的时候,会发现那几个数码管的下载管教已经成功绑定了。其余的利用Pin Planner可 以快速绑定。 p.s:一些补充的内容 1.关于Quartus使用 去图书馆借阅一本Quartus的书,很多书籍都有介绍如何入门使用,而且写的很详细。要学 会充分利用图书馆的书籍资源。 Quartus的使用和其他软件一样,完全是孰能生巧。比如放大缩小,自己可以使用鼠标的单 击,右击,其实还可以通过ctrl键和鼠标的滚轮结合使用。如果你不知道某项操作,一种方 法是在他人寻求帮助,找有经验的人,而Google恐怕是每个人最好的老师。还有一种办法 就是自己去尝试。毕竟很多软件做的都是很人性化的,作者设计的软件是很为用户考虑的, 而且通过那些选项的英文提示,我们就很容易完成我们所设想的事情。比如要用到建立mif 文件,你会发现无法填入16进制数,他会提示你请输入十进制的数,这个时候就知道他默 认的是10进制,因此你第一个想到的就是采用16进制,自己右击一下就会发现有地址和内 容的16进制选项了,我们要学会自己去尝试,一个软件很大,不可能全部由别人来告诉自 己怎么使用,自己也会养成自己使用软件的习惯和窍门。 2.HDL语言 实验中的下载模块,我们尝试着使用VHDL或者Verilog来完成设计,你会发现很简单使用。 不管是使用原理图还是HDL语言,我们都可以在顶层框图导航,右击 locate in RTL viewer, 查看编译后的RTL图。为了进一步学习,应当熟练掌握HDL描述语言,在工业界以Verilog 占主导地位。查看RTL如下: 选择完后显示如下: RTL查看的好处有很多,很方便自己排错,如果你是图形输入,可以很轻松的检查线是否 存在连接错误。(光标移动到某根线就知道为什么了) 3.例化原件 本人做的时候也遇到过这种问题,自己在使用VHDL完成课程设计的时候,自己使用语言 写了一个存储器,结果编译的时候过了,但是综合的时候出错,显示逻辑单元不够,在后来 的学习当中,知道了这个是Quartus综合工具的问题,因为他不够智能。在我们每次编译完, 我们可以看到编译信息,使用了多少逻辑单元,使用了多少存储资源。Quartus综合的时候 将我们的语言使用逻辑单元来实现,因此逻辑单元被全部用光。解决的办法有两个:使用第 三方综合工具,例化原器件。 点选菜单栏的tools->MegaWizard Plug-in Manager,如下图: 会显示对话框如下: 点选next 在左边的方框中选择Memory Compiler->RAM:1-PORT,右半部分第一个是Cyclone芯片选 项,自己选不同的Device family可以看到左边有些资源就不可以例化,因为每个芯片的ip core不一样造成的,比如我们的Cyclone芯片就有两个pll让我们调用,第二个选项选择例 化语言:VHDL,AHDL,Verilog HDL,然后选择例化后的文件名极其位置,点选next,进 行存储字的大小,线宽等选项。 可以如果还需要更加详细的参数设置,只需next下去,当然可以直接finish,利用默认的参 数。 我们可以看到可以有很多原件可以让我们调用,就如同图形输入的元器件库。 4.第三方软件 当我们熟练掌握了使用Quartus后,可以试着尝试使用第三方软件来完善我们的工程, 有些第三方软件确实比Quartus自带的工具强大,如用于仿真的Modelsim,用于综合的 Synplify,而且这些软件和Quartus软件都能很方便的配合使用。 新建工程的向导当中就有一步是选择第三方软件,我们起初选择的默认参数,即都没有 使用,当我们熟练使用后就可以试着通过调用第三方软件来实现。 ModelSim可以进行前仿真,也可以进行后仿真。(前仿真即功能仿真,不考虑延时等器 件性能,后仿真即模仿实际情况的仿真,Quartus也可以实现,在仿真的opinion选项里有勾 选是否考虑器件等因素),ModelSim的仿真功能还是很强大的。 Synplify软件是一款很流行的综合软件。就比如前面的存储器,如果自己用语言描述, Synplify的综合就知道调用存储单元来实现该功能,Synplify的好处有很多,对于逻辑资源 的节省是其一大特色。Quartus的编译,综合 完成后会显示消耗的资源,如果通过Synplify 综合,逻辑资源有时候能节省很多。Synplify软件和Quartus软件能够很好的配合使用,可 以通过Synplify软件调用Quartus软件,也可以通过Quartus软件调用Synplify软件。
Quartus 中建立一个 ROM,可以按照以下步骤进行: 1. 打开 Quartus,创建一个新项目。 2. 在项目中,创建一个新的 Verilog 文件,用于描述 ROM 的行为。 3. 在 Verilog 文件中,定义一个数组,用于存储 ROM 中的数据。例如: ``` reg [7:0] rom [0:255] = { 8'h00, 8'h01, 8'h02, 8'h03, 8'h04, 8'h05, 8'h06, 8'h07, 8'h08, 8'h09, 8'h0A, 8'h0B, 8'h0C, 8'h0D, 8'h0E, 8'h0F, // ... }; ``` 这里定义了一个 256 字节的 ROM,每个字节大小为 8 位。初始值为从 0x00 到 0xFF 的连续递增序列。 4. 在模块的主体中,使用 $readmemh() 系统函数将 ROM 中的数据加载到模拟器中。例如: ``` module rom_module( input clk, input [7:0] address, output reg [7:0] data ); reg [7:0] rom [0:255]; initial $readmemh("rom.hex", rom); always @(posedge clk) begin data <= rom[address]; end endmodule ``` 这里定义了一个 ROM 模块,包含一个时钟输入 clk,一个地址输入 address,一个数据输出 data。在模块的主体中,定义了一个 reg 类型的数组 rom,用于存储 ROM 中的数据。然后,在 initial 块中,使用 $readmemh() 函数从文件 rom.hex 中读入数据,存储到数组 rom 中。 最后,在 always 块中,使用地址输入 address 访问数组 rom 中的数据,将数据输出到数据输出 data。 5. 在 Quartus 中打开 Pin Planner,将模块的输入输出引脚与 FPGA 开发板上的引脚进行映射,然后生成比特流文件,烧录到 FPGA 开发板中即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值