为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

NIOS+II课件--北航

2011-09-22 50页 ppt 4MB 11阅读

用户头像

is_481150

暂无简介

举报
NIOS+II课件--北航null计算机EDA设计 教 程计算机EDA设计 教 程北航计算机学院 艾明晶第7章 Nios Ⅱ嵌入式处理器设计第7章 Nios Ⅱ嵌入式处理器设计7.1 Nios Ⅱ嵌入式处理器简介 7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程 7.3 Nios Ⅱ嵌入式处理器系统的开发 7.4 Nios Ⅱ嵌入式处理器外围接口 7.5 HAL系统库 7.6 设计实例——电子钟共2学时7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介一、第一代Nios嵌入式处理器 二、第二代...
NIOS+II课件--北航
null计算机EDA 教 程计算机EDA设计 教 程北航计算机学院 艾明晶第7章 Nios Ⅱ嵌入式处理器设计第7章 Nios Ⅱ嵌入式处理器设计7.1 Nios Ⅱ嵌入式处理器简介 7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程 7.3 Nios Ⅱ嵌入式处理器系统的开发 7.4 Nios Ⅱ嵌入式处理器外围接口 7.5 HAL系统库 7.6 设计实例——电子钟共2学时7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介一、第一代Nios嵌入式处理器 二、第二代Nios嵌入式处理器 三、可配置的软核嵌入式处理器的优势内容概要7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介一、第一代Nios嵌入式处理器2000年,Altera发布了Nios处理器,这是第一款可用于可编程逻辑器件的可配置的软核处理器。 基于RISC技术 16位指令集 16/32位数据通道 5级流水线 在一个时钟周期内完成一条指令的处理 具有一种基于JTAG的OCI(片上仪器)芯核 7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介2003年,Altera发布了Nios3.0处理器,它有16位和32位两个版本,能在低成本的Cyclone和高性能的Stratrix芯片上实现。 主要特性: 更多的可配置寄存器 极大的灵活性和可扩展性 功能强大的开发工具(SOPC Builder)第一代Nios处理器的缺点 没有提供软件开发的集成环境,用户需要在Nios SDK Shell中以命令行的形式执行软件的编译、运行、调试。程序的编辑、编译、运行都是分离的。 不支持对项目的编译。7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介二、第二代Nios嵌入式处理器2004年6月,Altera继在全球推出CycloneⅡ和StratrixⅡ器件系列后,又推出支持这些新款芯片的NiosⅡ嵌入式处理器。 与第一代Nios相比,最大处理性能提高了3倍,CPU内核部分的面积最大可缩小1/2(32位Nios 处理器占用1500个LE, Nios II 最少只占用600个LE)。广泛应用于嵌入式系统的设计中。 7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介表7-1 Nios Ⅱ系列处理器的特性7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Nios II提供3种不同的内核,以满足系统对不同性能和成本的需求。最高性能的优化平衡性能和尺寸最小逻辑占用的优化表7-2 Nios Ⅱ系列处理器的成员7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Nios Ⅱ vs Nios Nios Ⅱ Pipelined RISC Architecture 32-Bit Instructions Flat Register File 32-Bit Data Path 32 Prioritized Interrupts Optional Instruction & Data Cache Custom Instructions Branch Prediction Nios Pipelined RISC Architecture 16-Bit Instructions Windowed Register File 16 -Bit or 32-Bit Data Path 64 Prioritized Interrupts Optional Instruction & Data Cache Custom Instructions 7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Nios Ⅱ : Faster & Smaller(Nios Ⅱ /f)7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Nios Ⅱ: Faster & Smaller (Nios Ⅱ /s)7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Nios Ⅱ: Faster & Smaller (Nios Ⅱ /e)7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介High-Performance Interconnect 采用内部Avlon总线,连接主从构件,并进行主从构件间的通信。 主外设从外设7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Some Important Peripherals for Nios IISystem ID Peripheral Used to Ensure Hardware/Software Version Synchronization Simple 2 read-only register peripheral containing hardware ID tags. Register 1 contains random number Register 2 contains time and date when system was generated in SOPC Builder Can be checked at runtime to ensure that the software to be downloaded matches the hardware image Memory Interfaces EPCS Serial Flash Controller On-Chip RAM, ROM Off-Chip SRAM CFI Flash7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Other Important Peripherals for Nios II LCD Display JTAG UART Single JTAG Connection For: Device Configuration Code Download Debug Target STDIO (printing) Flash ProgrammingCompact Flash Interface Mass Storage Support True IDE Mode Compact Flash Mode Software Supports Low-Level API MicroC/OS- Ⅱ File System Support µCLinux File System 7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介New Peripherals for Nios II 5.0 SSRAM Controller Cypress CY7C1380C Sync SRAM controller Provided to support SSRAM component on Cyclone II dev kit board Not a fully configurable general purpose controller Support for DDR/DDR2 in SOPC Builder GUI With burst adapter Sequential master to interleaved slave enhancement Separate READ/Write duplex slaves Automatically matches address of read/write slaves Arbitration logic connects read/write masters to both slaves Support for PCI and Bursting DMA in SOPC Builder GUI Higher bandwidth transfers through PCI7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Example of a Nios Ⅱ Processor System 处理器内核内部总线定时器外设接口7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介Nios II: Hard Numbers 7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介三、可配置的软核嵌入式处理器的优势1. 合理的性能组合 使用NiosⅡ嵌入式处理器和FPGA,用户可以实现在处理器、外设、存储器和I/O接口方面的合理组合。 3种处理器内核 60余种SOPC Builder配备的IP核 无限的DMA通道组合 可配置的硬件及软件调试特性 7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介2. 提升系统的性能 NiosⅡ系统的性能可根据应用来裁减,与固定的处理器相比,在较低的时钟速率下具备更高的性能。 多CPU内核:可选择最快的内核,或在一片FPGA内采用多个内核 支持的FPGA系列:StratixⅡ,Stratix, Stratix GX,Cyclone,CycloneⅡ,HardCopy Stratix 定制指令:把用户自定义的功能直接添加到NiosⅡ处理器的ALU中,加快专项任务的执行,以提高系统的性能 硬件加速:专用的硬件加速器添加到FPGA中作为CPU的协处理器7.1 Nios Ⅱ嵌入式处理器简介7.1 Nios Ⅱ嵌入式处理器简介3. 降低系统成本 主要途径: 更大规模的系统集成 优化FPGA/CPU的选择:选择经济型内核应用于低成本、低性能系统,或者在单个FPGA上使用多个内核 更好的库存管理 4. 延长产品的生命周期 加快产品上市时间:FPGA可编程、可随时验证修改 建立有竞争性的优势:硬件加速、定制指令、定制外设 延长了产品的生存时间:可对硬件和软件及时进行升级 在产品产量增加的情况下减少成本:可将FPGA设计无缝移植到Altera的HardCopy器件(一种结构化的ASIC)中 7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程一、硬件开发流程 二、软件开发流程内容概要7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程Nios Ⅱ Design FlowSOPC Builder GUIProcessor LibraryCustom InstructionsConfigure Processor(1)(2)(3)(4)7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程一、硬件开发流程下载完硬件配置文件后,软件开发者就可以把此开发板作为软件开发的初期硬件平台进行软件功能的开发验证了。(1)定义NiosⅡ嵌入式处理器系统:使用SOPC Builder系统综合软件选取合适的CPU、存储器以及外围器件,并定制其功能。 (2)指定目标器件、分配引脚、编译硬件:使用QuartusⅡ选取Altera器件系列,并对SOPC Builder生成的HDL设计文件进行布局布线;再选取目标器件,分配管脚,进行硬件编译选项或时序约束的设置。编译,生成网表文件和配置文件。 (3)硬件下载:使用QuartusⅡ软件和下载电缆,将配置文件下载到开发板上的FPGA中。当校验完当前硬件设计后,还可再次将新的配置文件下载到开发板上的非易失存储器里。 7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程7.2 Nios Ⅱ嵌入式处理器软、硬件开发流程二、软件开发流程(1)在使用SOPC Builder进行硬件设计的同时,就可以开始编写独立于器件的C/C++软件,比如算法或控制程序。用户可以使用现成的软件库和开放的操作系统内核来加快开发过程。 (2)在NiosⅡIDE中建立新的软件时,IDE会根据SOPC Builder对系统的硬件配置自动生成一个定制HAL(硬件抽象层)系统库。这个库能为程序和底层硬件的通信提供接口驱动程序。 (3)使用NiosⅡIDE对软件工程进行编译、调试。 (4)将硬件设计下载到开发板后,就可以将软件下载到开发板上并在硬件上运行。 7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发一、Nios Ⅱ集成开发环境(IDE)介绍 二、Nios Ⅱ嵌入式处理器系统设计过程内容概要7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发一、NiosⅡ集成开发环境(IDE)介绍Nios Ⅱ IDE是NiosⅡ系列嵌入式处理器的基本软件开发工具,包括程序的编辑、编译、调试和下载运行。 Nios Ⅱ IDE使用方法和Visual C++类似。在7.6节中会结合示例进行讲解。 Nios Ⅱ IDE为软件开发提供了4个功能: 工程管理器; 编辑器和编译器; 调试器; 闪存编程器。7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发1. 工程管理器(1)新工程向导 自动建立C/C++应用程序工程和系统库工程。 (2)软件工程 提供软件代码实例,帮助用户尽快推出可运行的系统 (3)软件组件(系统软件) Nios Ⅱ运行库(或称为硬件抽象层HAL); 轻量级IP TCP/IP库; μC/OS Ⅱ实时操作系统(RTOS); Altera压缩文件系统。7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发2. 编辑器和编译器(1)文本编辑器 全功能源文件编辑器: 语法高亮显示C/C++程序代码; 全面的搜索工具; 文件管理; 快速定位及自动纠错; 内置调试功能等 (2) C/C++编译器 提供图形化用户界面; 提供按钮式流程; 自动生成一个基于特定用户配置的makefile。 7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发3. 调试器(1)基本调试功能 运行控制; 调用堆栈查看; 软件断点; 反汇编代码查看; 调试信息查看; 指令集仿真器。 (2) 高级调试功能 硬件断点调试ROM或闪存中的代码; 数据触发; 指令跟踪。 (3)调试信息查看 使用户可以访问本地变量、寄存器、存储器、断点以及表达式赋值数。 (4) 连接多种目标 FPGA开发板(通过JTAG); 指令集仿真器; 硬件逻辑仿真器。 7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发4. 闪存编程器 闪存可用来存储FPGA配置数据和/或Nios Ⅱ编程数据。 NiosⅡIDE闪存编程器可对连接到FPGA的兼容通用闪存接口(CFI)的闪存器件、或Altera串行配置器件进行编程。表7-3 编程到闪存中的通用内容类型7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发二、Nios Ⅱ嵌入式处理器系统设计过程1. 硬件设计过程 (1)创建一个Quqrtus Ⅱ工程 (2)创建Nios Ⅱ系统模块 启动SOPC Builder 添加CPU和外围器件 指定基地址 系统设置 生成系统模块 (3)将Nios Ⅱ系统模块符号添加到BDF文件中 (4)编译Quqrtus Ⅱ工程 (5)配置FPGA7.3 Nios Ⅱ嵌入式处理器系统的开发7.3 Nios Ⅱ嵌入式处理器系统的开发2. 软件设计过程(1)启动Nios Ⅱ IDE; (2)建立新的软件工程,编写源程序; (3)编译工程; (4)运行程序; (5)调试程序; (6)将程序下载到开发板上的Flash中。7.4 Nios Ⅱ处理器外围接口7.4 Nios Ⅱ处理器外围接口一、外围设备 二、用户定制外围设备 内容概要7.4 Nios Ⅱ处理器外围接口7.4 Nios Ⅱ处理器外围接口一、标准外围设备 Nios Ⅱ包括一个常用外围设备及接口库,在Altera FPGA中可免费使用。 标准外围设备为即用型设计模块,采用Verilog HDL和VHDL的源代码方式交付使用,其中包括简单系统集成所需要的所有软件子程序。 查看各接口的详细说明:可在SOPC Builder的元件池中用右键点击元件,在弹出的菜单中选择“Data Sheet”选项。 7.4 Nios Ⅱ处理器外围接口 7.4 Nios Ⅱ处理器外围接口    表7-4  Nios&Nios Ⅱ外围设备接口7.4 Nios Ⅱ处理器外围接口7.4 Nios Ⅱ处理器外围接口二、用户定制外围设备用户可以创建自己的外围设备,并通过用户逻辑接口向导集成到Nios Ⅱ处理器系统中。 整个过程用户介入很少。 7.5 HAL系统库7.5 HAL系统库一、HAL系统库简介 二、使用HAL开发程序 内容概要7.5 HAL系统库7.5 HAL系统库一、 HAL系统库简介什么是HAL系统库? 用户在进行嵌入式系统的软件开发时,会涉及到与硬件的通信问题。 HAL(Hardware Abstraction Layer,硬件抽象层)系统库可为与硬件通信的程序提供简单的设备驱动接口。它是用户在NiosⅡIDE中创建一个新的工程时,由IDE基于用户在SOPC Builder中创建的NiosⅡ处理器系统自动生成的。 HAL应用程序接口(API)和ANSI C标准库综合在一起,它使用户用类似C语言的库函数来访问硬件设备或文件,如printf()、fopen()、fwrite()等函数。7.5 HAL系统库7.5 HAL系统库HAL为嵌入式系统中的外围设备提供接口程序。HAL和SOPC Builder紧密相关,如果硬件配置有了变化,HAL设备驱动配置也会自动随之改动,从而避免了由于底层硬件的变化而产生的程序错误。 用户不必自己创建或拷贝HAL文件,也不必编辑HAL中的任何源代码。NiosⅡIDE会为用户自动创建和管理HAL文件。 7.5 HAL系统库7.5 HAL系统库1. HAL构成 与ANSI C合成的标准库——提供类似C语言的标准库函数; 设备驱动——提供访问系统中每个设备的驱动程序; HAL API——提供标准的接口程序,如设备访问、中断处理等; 系统初始化——在main()函数之前执行对处理器的初始化; 设备初始化——在main()函数之前执行对系统中外围设备的初始化。图7-1 HAL所基于的系统层次7.5 HAL系统库7.5 HAL系统库2. 应用程序和驱动 应用程序开发 是用户软件开发的主要部分,包括系统的主程序和其他子程序。 应用程序与系统设备的通信主要是通过C语言标准库或HAL系统库API来实现。 驱动程序开发 指编写供应用程序访问设备的程序。 驱动程序直接和底层硬件的宏定义打交道。 一旦用户要访问设备的驱动程序编写好,用户的程序开发只要利用HAL提供的各种函数就可以编写各种应用程序了。7.5 HAL系统库7.5 HAL系统库3. 通用设备模型 HAL为嵌入式系统中常见的外围设备提供了通用的设备模型,使用户无需考虑底层硬件,只需利用与之相一致的API编写应用程序即可。 字符模式设备——发送和接受字符串的外围硬件设备,如UART 定时器设备——对时钟脉冲计数并能产生周期性中断请求的外围硬件设备 文件子系统——提供访问存储在物理设备中的文件的操作,如用户可以利用有关Flash存储器设备的HAL API编写Flash文件子系统驱动来访问Flash。 以太网设备——对Altera提供的轻量级的IP协议提供访问以太网的连接。 DMA设备——执行大量数据在数据源和目的地之间传输的外围设备。数据源和目的地可以是存储器或其他设备,如以太网连接。 Flash存储器设备——利用专门编程协议存储数据的非易失性存储设备。7.5 HAL系统库7.5 HAL系统库4. C标准库——Newlib HAL系统库与ANSI C标准库一起构成HAL的运行环境(Runtime Environment)。HAL使用的Newlib是C语言标准库的一种开放源代码的实现,是在嵌入式系统上使用的C语言程序库,正好与HAL和Nios Ⅱ处理器相匹配。 5. HAL支持的外围设备 Altera提供了许多在Nios Ⅱ处理器系统中使用的外围设备,大部分外围设备都提供了HAL驱动,使用户可通过HAL API访问硬件。 字符模式设备 定时器设备 文件子系统 以太网设备 DMA设备 Flash存储器设备 一些第三方外围设备7.5 HAL系统库7.5 HAL系统库二、使用HAL开发程序HAL和SOPC Builder紧密相关,如果硬件配置有了变化,HAL设备驱动配置也会自动随之改动,从而避免了由于底层硬件的变化而产生的程序错误。 用户不用自己创建或拷贝HAL文件,而且用户也不用编辑HAL中的任何源代码。NiosⅡIDE会为用户自动创建和管理HAL文件。7.5 HAL系统库7.5 HAL系统库1. Nios ⅡIDE工程结构软件硬件7.5 HAL系统库7.5 HAL系统库2. System.h 系统描述文件 System.h文件是HAL系统库的基础,它提供了关于Nios Ⅱ系统硬件的软件描述。它描述了系统中的每个外围设备,并给出以下一些详细信息: 外围设备的硬件配置; 基地址; 中断优先级; 外围器件的符号名称。 用户无须编辑System.h文件,它是由Nios ⅡIDE自动生成的。 可以到以下目录中查看System.h文件,: [Quartus工程]\software\[NiosⅡ工程名]_syslib\Debug\system_description 7.5 HAL系统库7.5 HAL系统库3. 数据宽度和HAL类型定义 alt_types.h头文件定义了HAL的数据类型。在以下路径可以查看该文件: [Nios Ⅱ安装路径]\components\altera_nios2\HAL\inc 部分代码摘抄如下: typedef signed char alt_8; typedef unsigned char alt_u8; typedef signed short alt_16; typedef unsigned short alt_u16; typedef signed long alt_32; typedef unsigned long alt_u32;7.5 HAL系统库7.5 HAL系统库4. 文件系统 HAL提出了文件系统的概念,可以使用户操作字符模式的设备和文件。 在整个HAL文件系统中将文件子系统注册为载入点,要访问这个载入店下的文件就要由这个文件子系统管理。 字符模式的设备寄存器常作为HAL文件系统中的节点。通常情况下,system.h文件中将设备节点的名字定义为前缀/dev/+在SOPC Builder中指定给硬件元件的名称。 以下例子完成了从一个只读文件的文件子系统rozipfs中读取字符的功能。 7.5 HAL系统库7.5 HAL系统库[例] 从文件子系统中读取字符。 #include #include #include #define BUF_SIZE (10) int main() { FILE * fp; char buffer[BUF_SIZE]; fp = fopen(“/mount/rozipfs/test”,”r”); if ( fp == NULL ) { printf(“cannot open file.\n”); exit(1); } fread(buffer,BUF_SIZE,1,fp); Fclose(); return 0; }7.5 HAL系统库7.5 HAL系统库5. 外围设备的使用 现以字符模式外围设备为例介绍在用户程序中如何对外围设备进行操作。字符模式外围设备在HAL文件系用中被定义为节点。一般情况下,程序先将一个文件和设备名称联系起来,再通过使用file.h中定义的ANSI C文件操作向文件写数据或从文件读取数据。 (1)标准输入(stdin)、标准输出(stdout)和标准错误(stderr)函数 使用这些函数是最简单的控制I/O的方法; HAL系统库在后台管理stdin、stdout和stderr函数。 [例] 发送Hello world给任何一个和stdout连接的设备。 #include int main() { printf(“Hello world!/n”); return 0; }7.5 HAL系统库7.5 HAL系统库(2)字符模式设备的通用访问方法 除stdin、stdout和stderr函数外,访问字符模式设备还可以通过打开和写文件的方式。 [例] 向UART写入字符”hello world”。 #include #include int main() { char* msg = “hello world”; FILE* fp; fp = fopen(“/dev/uart1”,”w”); if ( fp ) { fprintf(fp,”%s”,msg); fclose(fp); } return 0; }7.5 HAL系统库7.5 HAL系统库(3) /dev/null设备 所有的系统都包括/dev/null设备。向/dev/null写数据对系统没有什么影响,所写的数据将被丢弃。 /dev/null用来在系统启动过程中重定向安全I/O,也可以用在应用程序中丢弃不需要的数据。这个设备只是个软件指令,不与系统中任何一个硬件设备相关。 7.6 设计实例—电子钟7.6 设计实例—电子钟一、设计要求与软硬件规划 二、硬件部分设计 三、软件部分设计 内容概要7.6 设计实例—电子钟7.6 设计实例—电子钟一、设计要求与软硬件规划本节介绍一个电子钟的软、硬件方案设计以及具体的软件实现。 1. 系统功能 1)在液晶屏上显示时间、日期、状态提示; 2)对时间、日期能够进行设置。 2. 硬件系统组成规划 本系统需使用的外围器件包括: 1)LCD:电子钟显示屏幕; 2)按钮:电子钟设置功能键; 3)Flash存储器:存储硬件和程序; 4)SRAM存储器:程序运行时将其导入SRAM。 7.6 设计实例—电子钟7.6 设计实例—电子钟2. 硬件系统组成规划(续) 在SOPC Builder中建立系统要添加的模块包括: 1) Nios Ⅱ 32bits CPU; 2)定时器; 3)按键PIO; 4)LCD Display ; 5)外部RAM总线(Avalon 三态桥) ; 6)外部RAM接口; 7)外部Flash接口; 8)重新配置请求PIO; 9)JTAG UART Interface; 10)EPCS Serial Flash Controller。 7.6 设计实例—电子钟7.6 设计实例—电子钟端口定义表7.6 设计实例—电子钟7.6 设计实例—电子钟端口定义表(续) 7.6 设计实例—电子钟7.6 设计实例—电子钟3. 软件系统规划 软件功能包括显示、设置和时间算法三大部分。 1)显示部分 (1)显示时间(小时:分钟:秒) (2)显示日期(年-月-日) (3)显示状态提示(如Beijing Time、Set hour等等) 2)设置部分 其功能包括设置小时、分钟、年份、月份、日期和退出设置。 编写程序前对开发板上4个功能键的分配如下: (1)主菜单 SW0:设置选择键,可依次选择设置小时、分钟、年份、月份、日期 SW1:显示日期键 SW2 :显示时间键 (2)子菜单(即进入到对某个对象设置后的键盘功能) SW1 :对象数字增加 SW2 :对象数字减少 SW3 :退出,返回主菜单7.6 设计实例—电子钟7.6 设计实例—电子钟3. 软件系统规划(续) 3)时间算法部分 (1)时间累加 (2)确定每个月的最大天数,使年、月、日能够正确累加 只有显示和响应按键部分涉及硬件,其它子程序可以在进行硬件设计的同时开始编写。7.6 设计实例—电子钟7.6 设计实例—电子钟电子钟主程序流程图7.6 设计实例—电子钟7.6 设计实例—电子钟按键处理子程序handle_button_press(FILE * lcd) 是一个主要的子程序。 它首先采用多分支if…else if…else形式,根据flag的取值,执行不同的程序块。在每一个条件下(如flag=0,flag=1,……,flag=5),又采用开关(switch)分支结构,根据edge_capture的值判断应执行哪个程序段。7.6 设计实例—电子钟7.6 设计实例—电子钟按键处理子程序流程下面以表格形式给出按键处理子程序进行处理的关键步骤。7.6 设计实例—电子钟7.6 设计实例—电子钟二、硬件部分设计1)创建一个QuartusⅡ工程 (1)启动Quartus Ⅱ5.0 (2)创建工程quartus_nios2_project ① 按第4章所教的方法建立一个工程,取名为quartus_nios2_project.qpf,选择元件为Cyclone库的EP1C20F400C7 ② 新建设计文件quartus_nios2_project.bdf ③ 在设计文件中依次添加如下图所示的一些引脚 最简单的方法是沿用Nios ⅡIDE已给示例的硬件设计!7.6 设计实例—电子钟7.6 设计实例—电子钟新建设计文件quartus_nios2_project.bdf7.6 设计实例—电子钟7.6 设计实例—电子钟方法: (1)将“C:\altera\kits\nios2\examples\verilog\ niosII_cyclone_1c20\standard”中所有文件拷入自己新建的工作目录elec_timer_std; (2)在Quartus Ⅱ5.0中打开其中的standard.qpf文件; (3)打开顶层图形文件standard.bdf; (4)根据实际需要删除或添加引脚,对引脚重命名等 。说明:最简单的方法是沿用Nios ⅡIDE已给示例的硬件设计,这样容易将设计成功下载到目标芯片中。7.6 设计实例—电子钟7.6 设计实例—电子钟打开已有的设计standard.bdf7.6 设计实例—电子钟7.6 设计实例—电子钟2)创建Nios Ⅱ系统模块 (1)启动SOPC Builder重点掌握! ① 在Quartus Ⅱ5.0中执行“Tools>SOPC Builder”命令,则出现Create New System设置向导; ② 在“System Name”栏中输入系统名称first_nios2_system; ③ 点击OK按钮,弹出Altera SOPC Builder主窗口; ④ 在Target-Board选择Nios Development Board Cyclone(EP1C20) ; ⑤ 在Clock-clk中输入50。7.6 设计实例—电子钟7.6 设计实例—电子钟修改已有的Nios Ⅱ系统模块的方法: 1. 在standard.bdf文件中双击std_1c20,则自动打开SOPC Builder ; 2. 在SOPC Builder的模块表中将不用组件(或称模块)的Use复选框去掉;更改某些组件的名称;删除不用的组件(如system ID);添加所需的新组件; 3. 如果需要,还可以右击cpu,选择“Edit”,对该cpu的类型、 Instuctions Caches大小等选项重新进行设置。 说明:若沿用的是Nios ⅡIDE已给示例的硬件设计,则不必从头创建Nios Ⅱ系统模块,可对已有的Nios Ⅱ系统模块进行适当修改,而快速得到用户所需的Nios Ⅱ系统模块。7.6 设计实例—电子钟7.6 设计实例—电子钟对已有的Nios Ⅱ系统模块std_1c20进行修改不用组件的Use复选框去掉7.6 设计实例—电子钟7.6 设计实例—电子钟(2)添加CPU和外围器件 需从SOPC Builder的元件池中选择以下元件加入到当前系统中: Nios Ⅱ 32bit CPU、 JTAG UART 接口、定时器、按键PIO、LCD Display、外部RAM总线(Avalon 三态桥)、外部RAM接口、外部Flash接口和新配置请求PIO。 ① 添加Nios Ⅱ 32bit CPU 在模块池的Avalon Module下选择 Nios Ⅱ Processor-Altera Corporation; 点击Add,出现设置向导(默认名为cpu_0); 在Nios Ⅱ Core页中选择Nios Ⅱ/S,在Caches & Tightly coupled Memoris页中选择Instuctions Caches为4 Kbytes,在JTAG Debug Module页中选择Level 1; 点击Finish返回主窗口,将cpu_0重命名为cpu。7.6 设计实例—电子钟7.6 设计实例—电子钟① 添加Nios Ⅱ 32bit CPU7.6 设计实例—电子钟7.6 设计实例—电子钟② 添加JTAG UART Interface 在模块池中选择Communication->JTAG UART,点击Add,会出现JTAG UART-jtag uart_0的设置向导; 保持系统默认的选项,点击Finish,返回主窗口; 将jtag uart_0重命名为jtag_uart。 7.6 设计实例—电子钟7.6 设计实例—电子钟③ 添加定时器 在模块池中选择Other->Interval timer,点击Add,会出现Avalon Timer-timer_0的设置向导; 在Initial Period栏中选择“1 msec”,在Preset Configuration栏中选择“Full-featured”; 点击Finish,返回主窗口; 将timer_0重命名为system_timer 。 7.6 设计实例—电子钟7.6 设计实例—电子钟④ 添加外部存储Flash接口 在模块池中选择memory->Flash Memory(Common Flash Interface),点击Add,会出现Flash Memory(Common Flash Interface)-cfi_flash_0的设置向导;根据所使用的开发板,在Presets项选择Flash器件为AMD29LV065D-120R; 其余保持系统默认的选项,点击Finish,返回主窗口; 将cfi_flash_0重命名为ext_flash。 7.6 设计实例—电子钟7.6 设计实例—电子钟⑤ 添加外部RAM接口 根据开发板类型在元件池中选择相应的SRAM,在本例中选择EP1C20->IDT71V416 SRAM ,点击Add,会出现SRAM(two IDT71V416 chips)-sram_0的设置向导; 在Attributes栏中,确定存储器大小为1024KB; 其余保持系统默认的选项,点击Finish,返回主窗口; 将sram_0重命名为ext_ram 。7.6 设计实例—电子钟7.6 设计实例—电子钟⑥ 添加外部RAM总线(Avalon Tri-State Bridge)Avalon Tri-State Bridge是Nios处理器与FPGA片外存储器之间相互通信的桥梁。 在模块池中选择Bridge-> Avalon Tri-State Bridge,点击Add,会出现Avalon Tri-State Bridge-tri_state_bridge_0的设置向导; 保持系统默认的选项,点击Finish,返回主窗口; 将tri_state_bridge_0重命名为ext_ram_bus。 7.6 设计实例—电子钟7.6 设计实例—电子钟⑦ 添加Button PIO 在模块池中选择Other-> PIO(Parallel I/O),点击Add,会出现Avalon PIO-pio_0的设置向导; 确定以下选项:Width为4bits,Direction选中Input port only,则使能了Input Options栏;7.6 设计实例—电子钟7.6 设计实例—电子钟⑦ 添加Button PIO(续) 点击Input Options标签页; 在Edge Capture Regster域选取Synchronously capture; 选择Falling Edge; 在Interrupt域选取Generate IRQ; 选择Edge; 点击Finish,返回主窗口; 将pio_0重命名为button_pio。7.6 设计实例—电子钟7.6 设计实例—电子钟⑧ 添加重新配置请求PIO重新配置请求PIO可使器件根据其它外围设备的输入自动进行重新配置。 选择Other-> PIO(Parallel I/O),点击Add,会出现Avalon PIO-pio_0的设置向导; 添加方法与添加其它PIO的过程一样,不同的是设置以下属性:width设为1bit,在Direction中选择Bidirectional(tri-state) ports选项,其余设置均保持默认选项; 点击Finish,返回主窗口; 将Avalon PIO- pio_0重命名为reconfig_request_pio。在模块池中选择Display-> Character LCD(16ⅹ2 optrex 16207),点击Add,则直接添加到模块表中; 将lcd_16207_0重命名为lcd_display。⑨ 添加LCD Display7.6 设计实例—电子钟7.6 设计实例—电子钟最终的Nios Ⅱ系统模块配置7.6 设计实例—电子钟7.6 设计实例—电子钟(3)指定基地址① 在SOPC Builder的模块表中点击ext_flash,并修改其Base为0x0,此时会在信息栏出现基地址冲突错误,如图所示; ② 选中ext_flash那一行,执行Module->Lock Base Address菜单命令,会在ext_flash的基地址旁边出现一个锁子的图标; ③ 执行System->Auto Assign Base Address菜单命令。使SOPC Builder给其它没有锁定的地址重新分配地址,则之前出现的那些错误信息都消失了。7.6 设计实例—电子钟7.6 设计实例—电子钟指定基地址7.6 设计实例—电子钟7.6 设计实例—电子钟(4)系统设置选择Nios Ⅱ More ”cpu” Settings标签页,按照下图所示对系统进行设置。7.6 设计实例—电子钟7.6 设计实例—电子钟(5)生成Nios Ⅱ系统模块① 选择System Gerneration标签页;② 在System Gerneration中选中HDL选项;如果安装了ModelSim软件并需要仿真此设计,可以选择Simulation选项;③ 点击Generate,则生成系统模块,成功则显示“SUCCESS:SYSTEM GENERATION COMPLETED”; ④ 点击Exit退出SOPC Builder。7.6 设计实例—电子钟7.6 设计实例—电子钟3)将Nios Ⅱ系统模块的符号添加到BDF文件中 在生成过程中,SOPC Builder会生成Nios Ⅱ系统模块的符号(Symbol),可以将该符号像添加其它QuartusⅡ符号一样添加到当前项目的BDF文件quartus_nios2_project.bdf中。(1)双击BDF文件空白处,出现Symbol对话框,选择Project->first_nios2_system;7.6 设计实例—电子钟7.6 设计实例—电子钟(2)点击OK按钮,将其添加到BDF文件中; (3)将first_nio2_system模块与输入输出引脚相连,指定目标器件,并进行引脚锁定,完成系统的硬件设计; (4)保存BDF文件。7.6 设计实例—电子钟7.6 设计实例—电子钟4)编译Quartus Ⅱ的工程设计文件 在Quartus Ⅱ5.0中执行“Processing->Start Compilation”命令,进行全编译。5)配置FPGA 在Quartus Ⅱ5.0中执行“Tools->Programmer”命令,将quartus_nios2_project.sof下载到目标板上。7.6 设计实例—电子钟7.6 设计实例—电子钟三、软件部分设计1. 创建一个Nios Ⅱ IDE 工程 (1)启动NiosⅡ IDE 5.0 既可以在“开始>所有程序>Altera”中启动,也可以直接在SOPC Builder 的System Generation标签页中单击“Run NiosⅡ IDE”按钮来启动。 则弹出如下对话框,提示用户选择一个工作空间来存储所有的工程,选择系统默认的目录即可 。7.6 设计实例—电子钟7.6 设计实例—电子钟(2)建立新的软件工程elec_timer_std ① 执行File->New->C/C++ application命令; ② 在弹出的New Project对话框中,Name栏填入新建软件工程名elec_timer_std,SOPC Builder System栏选择刚才修改的Nios Ⅱ系统模块std_1c20 ,CPU项选择cpu,左侧的Select Project Templete域中,选择Blank Project,点击next; ③ 在弹出的对话框中选择creat a new system named …单选钮,点击Finish,则在Quartus Ⅱ的工作目录elec_timer_std下自动生成software文件夹,新创建的工程elec_timer_std会出现在C/C++工程浏览器中 ,同时会自动创建一个系统库工程<软件工程名>_syslib。 7.6 设计实例—电子钟7.6 设计实例—电子钟新建C/C++工程软件工程名用户定制的Nios Ⅱ系统模块7.6 设计实例—电子钟7.6 设计实例—电子钟创建软件工程后的Nios Ⅱ IDE 工作界面软件工程系统库工程7.6 设计实例—电子钟7.6 设计实例—电子钟(3)导入已有的软件工程elec_timer_std若事先已创建好一个软件工程,当启动NiosⅡIDE后没有打开该工程,则需要将它们导入: ① 执行File->Import命令; ② 在弹出的Import对话框中,选择“Existing Project into Workspace”,单击“Next”; 7.6 设计实例—电子钟7.6 设计实例—电子钟③ 在弹出的对话框中单击Browse,则弹出“浏览文件夹”对话框,选择事先已创建好的软件工程所对应的文件夹elec_timer_std ,单击“确定”,再单击Finish,则此工程会添加到工作区;再将系统库工程elec_timer_std _syslib也导入。7.6 设计实例—电子钟7.6 设计实例—电子钟2. 建立源文件time.c和头文件time.h(1)创建头文件 在NiosⅡ IDE左侧的C/C++工程浏览器中,选择elec_timer_std,执行“File> new> file”菜单命令,或点击鼠标右建,选择new>head file,在弹出的对话框中,键入time.h。 (2)创建源文件 在C/C++工程浏览器中,选择elec_timer_std ,点击鼠标右建,选择new>file,在弹出的对话框中,键入time.c。 然后设计源程序……,保存。7.6 设计实例—电子钟7.6 设计实例—电子钟3. 编译工程 在左侧的C/C++工程浏览器中,选择elec_timer_std,点击鼠标右键,在弹出菜单中选择Build Project;或执行“Project> Build All”菜单命令。 编译完成后会在Task浏览器中显示警告和错误信息。 如果编译出现错误,则根据提示信息改正程序错误或工程设置,重新编译,直到无任何错误为止。7.6 设计实例—电子钟7.6 设计实例—电子钟4. 运行程序 Nios ⅡIDE提供三种运行平台,分别为Nios Ⅱ Hardware、 Nios Ⅱ Instruction Set Simulator和Nios Ⅱ ModelSim;这里选择Nios Ⅱ Hardware作为平台。 步骤: 执行Run->Run命令,弹出Run对话框; 在左边的Configration栏双击Nios Ⅱ Hardware ,出现运行设置对话框,在Main标签页中选择工程名为elec_timer_std,在Target Connection标签页中确认JTAG cable栏中为与目标板相连的下载电缆; 然后单击Run,将程序下载到FPGA中; 若没有错误,则按动开发板上的按键,在线测试设计是否满足预定的功能。 将程序下载到FPGA中在线运行。 7.6 设计实例—电子钟7.6 设计实例—电子钟运行设置对话框运行平台下载电缆单击7.6 设计实例—电子钟7.6 设计实例—电子钟5. 在线调试程序 Nios ⅡIDE提供了两种调试平台,分别为Nios Ⅱ Hardware和 Nios Ⅱ Instruction Set Simulator;这里选择Nios Ⅱ Hardware作为平台。 步骤: 选择Run->Debug,在弹出的对话框中,确认左边的Configration选中Nios Ⅱ Hardware ,main标签页中选择工程名为elec_timer_std,在Target Connection标签页中确认JTAG cable栏中为与目标板相连的下载电缆; 单击Debug按钮,则启动调试器。用户可以通过点击界面按钮在调试界面和C/C++界面之间转换显示。7.6 设计实例—电子钟7.6 设计实例—电子钟Nios ⅡIDE在调试界面的Run菜单中提供以下几种调试方式: Step Into(F5):单步跟踪时进入子程序; Step Over(F6):单步跟踪时执行子程序,但不进入子程序; Resume(F8):从当前代码处继续运行; Run to Line(Ctrl+R):运行到断点停止; Terminate:停止调试。在某代码行处设置断点:在代码行最左边空白处双击,或单击右键选择“Toggle Breakpoint” 。7.6 设计实例—电子钟7.6 设计实例—电子钟6. 将程序和硬件下载到外部Flash中 许多Nios Ⅱ处理器系统都使用外部存储器来存储:程序代码、程序数据、FPGA的配置数据和文件系统。 因此可以将程序和FPGA的配置数据下载到Flash中,使系统能够脱机运行。 下载步骤: (1)执行Tools->Flash
/
本文档为【NIOS+II课件--北航】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索