《电子技术综合设计与实践教程》课件第6章_第1页
《电子技术综合设计与实践教程》课件第6章_第2页
《电子技术综合设计与实践教程》课件第6章_第3页
《电子技术综合设计与实践教程》课件第6章_第4页
《电子技术综合设计与实践教程》课件第6章_第5页
已阅读5页,还剩190页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章基于NiosⅡ的SOPC系统开发6.1NiosⅡ软核处理器 6.2SOPC系统设计概述 6.3Avalon总线规范 6.4NoisⅡ应用软件开发 6.5SOPC系统设计实例 6.6设计IP核——PS/2IP核及CharacterLCDIP核 近年来,微电子技术、EDA技术飞速发展,不仅使电子系统的小型化、微型化进程加快,而且给电子系统的设计带来了前所未有的变革。大规模FPGA芯片的问世,为电子系统设计提供了硬件基础,大多数电子系统都可以在一块芯片上实现,形成所谓的片上系统(SOC)。使用FPGA后,其好处不仅表现在设计的初级阶段,即使在电子系统设计完成之后,甚至在投入实际使用的过程中,还可以根据实际需要添加功能。早期的FPGA在绝大多数场合中仅仅作为嵌入式处理器的组合逻辑或用于实现某些逻辑功能。IP核技术的出现对FPGA的发展起着变革性的作用,很多厂商将自己的数字器件、专用算法以IP核的形式嵌入到FPGA中,这时,采用单片FPGA已经可以完成整个嵌入式系统数字部分的设计。但是因为没有微处理器的支持,FPGA还是无法实现嵌入式系统的特性,无法享用嵌入式系统提供的操作系统、网络协议栈等软件模块,应用范围受到很大限制。在这种背景下,基于技术发展,可编程的片上系统SOPC(SystemOnProgrammableChip)技术诞生了。

SOPC技术一般采用大容量FPGA作为载体,在一片FPGA中实现软核微处理器,也可以嵌入ARM等硬核处理器,使FPGA具有嵌入式系统的可编程能力。通过这种技术,SOPC平台既可以拥有微处理器系统丰富的软件资源和出色的人机交互能力,同时又具备FPGA系统的快速硬件逻辑特性,实现了软件系统和硬件系统的互补,不仅提高了设计的性能,而且加快了开发周期。所以说,SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理技术等融为一体,在结构上融合为单芯片,是现代电子技术和电子系统设计的汇聚点和发展方向。

继第一代可配置嵌入式软核处理器Nios后,Altera公司于2004年推出了性能更好的NiosⅡ软核处理器,与第一代相比,最大处理性能提高了3倍,而CPU内核部分的面积最多可缩小1/2。6.1NiosⅡ软核处理器

Altera推出的NiosⅡ系列嵌入式处理器扩展了目前世界上流行的软核嵌入式处理器的性能,把NiosⅡ嵌入到Altera的所有FPGA中,例如StratixⅡ、Stratix、CycloneⅡ、Cyclone、APEX、ACEX和HardCopy系列器件中,用户可以获得超过200DMIPS的性能,并可从

图6-1NiosⅡ系统在DE2板的实现流程

NiosⅡ软核处理器在提高系统性能、产品的生命周期、开发工具和降低系统成本等方面具有明显优势。使用NiosⅡ处理器的用户可以根据他们的需要来调整嵌入式系统的特性、性能以及成本,快速将产品推向市场,从而扩展产品的生命周期,并且避免处理器的更新换代。

NiosⅡ软核处理器具有以下优点:

1.更高的系统性能

(1)一系列的处理器核可供选择,其中包括了超过200DMIPS性能的核。

(2)实现任何数量的处理器或将不同的处理器核组合在一起。

(3)增加已有的处理器,可在FPGA中添加一个或更多的NiosⅡ软核处理器。

2.更低的系统成本

(1)通过将处理器、外设、存储器和I/O接口集成到一个单一的FPGA中,从而降低了系统成本、复杂性和功耗,如图6-2所示。

图6-2定制NiosⅡ系统

(2)将NiosⅡ软核处理器嵌入到低成本的FPGA中只需花费35美分或者更低(对大多数用户而言,NiosⅡ所占逻辑资源的成本大约是10~20元人民币,具体取决于所选FPGA的类型和NiosⅡ的配置)。

3.延长产品的生命周期

(1)提供易用的设计工具,从而快速将产品推向市场。FPGA可编程的特性使其具有最快的产品上市时间,许多功能只需通过简单的设计修改就可以被快速地实现;对于包含一个或多个NiosⅡ软核处理器,具备硬件加速、定制指令、定制的可裁剪外设的SOPC系统,可延长产品的生存周期。

(2)提供永久的、免费的许可,从而使基于NiosⅡ软核处理器的产品避免了处理器的更新换代而带来的损失,在产量增加的情况下,还可以减少成本。

4.功能强大、易用的开发工具

(1)通过使用NiosⅡ集成开发环境(IDE),从而加速了软件的开发。

(2)利用Altera强大的SOPCBuilder系统开发工具和QuartusⅡ设计软件,可以在几分钟内设计一个系统。

5.使用完全功能的开发包

使用易用的NiosⅡ开发包进行设计,可以选择具有低成本特性的CycloneFPGA开发套件,或高性能的StratixFPGA开发套件。

NiosⅡ系列嵌入式处理器使用32位的指令集结构(ISA),是建立在第一代16位Nios处理器的基础上的,定位于广泛的嵌入式应用。NiosⅡ处理器系列包括三种内核:经济的(NiosⅡ/e)、标准的(NiosⅡ/s)和快速的(NiosⅡ/f)内核。每一型号都针对价格和性能进行了优化,表6-1列出了三种内核在性能、逻辑资源及缓存方面的比较。

表6-1NiosⅡ系列CPU

目前,SOPC可看做是基于FPGA解决方案的SOC,与ASIC的SOC解决方案相比,SOPC系统及其开发技术具有更多的特色。构成SOPC的第一种方案是基于FPGA嵌入式硬核SOPC系统,即预先将硬核植入FPGA中,目前最常用的嵌入式硬核是ARM内核。6.2SOPC系统设计概述同时会为嵌入式处理器集成诸多通用和专用的接口,但设计者无法根据实际需要改变处理器结构,如总线规模、接口方式、指令集等,这无疑增加了芯片的成本和功耗。第二种方案是基于FPGA嵌入式软核SOPC系统。利用软核处理器可以较好地克服硬核处理器的不足。目前最有代表性的软核处理器分别是Altera公司的NiosⅡ核、Xilinx公司的MicroBlaze核。第三种方案是基于Hardcopy技术的SOPC系统。Hardcopy技术是将专用的硅片设计核和自FPGA至ASIC自动移植过程结合在一起的技术。该技术是利用原有的FPGA开发工具,将成功实现于FPGA器件上的SOPC系统,通过特定技术(即Hardcopy技术)直接向ASIC转化,从而克服传统ASIC设计中普遍存在的问题。本章以嵌入式软核SOPC系统方案为重点,讨论SOPC系统的设计方法(以下除特别说明外,均指基于FPGA嵌入式软核SOPC系统的方案)。

SOPC系统设计包括以NiosⅡ软核处理器为核心的嵌入式系统硬件配置、硬件仿真、基于IDE环境的软件设计、软件调试等。SOPC系统设计的基本软件工具包括QuartusⅡ、SOPCBuilder、MATLAB/DSPBuilder及NoisⅡIDE。具体的开发流程框架如图6-3所示。

图6-3SOPCNiosⅡ开发流程框图下面介绍各个流程。

(1)

QuartusⅡ完成NiosⅡ系统的分析综合、硬件优化、适配、配置文件编程下载及硬件系统测试等工作。

(2)

SOPCBuilder定制并生成处理器系统。SOPCBuilder包含于QuartusⅡ中。根据系统需求,用SOPCBuilder可以定制NiosⅡ处理器内核、内存以及其它系统所需的标准外设;提供自定义外设和自定义指令的方法,并将它们加入系统组件(component)。SOPCBuilder为这些组件分配内存地址,并将它们相互连接,形成一个完整的硬件系统。

SOPCBuilder的输出包括两个文件:

SOPCBuilder系统文件(

.pt)。这个文件存储了所有SOPCBuilder构建的系统硬件内容。这个文件被NiosⅡIDE导入,生成与硬件相关的系统库。

HDL文件。这些文件是硬件设计文件,对SOPCBuilder生成的NiosⅡ系统进行描述。这些文件被QuartusⅡ导入用来创建FPGA系统。

(3)用QuartusⅡ创建最终的FPGA硬件系统。在SOPCBuilder中生成NiosⅡ系统之后,就可将HDL文件集成在QuartusⅡ之中。很多设计并不只包含NiosⅡ系统,还有许多外围逻辑。这就需要在QuartusⅡ中设计并添加。同样,可以将其它IP核加入工程来扩展系统功能。一个完整的SOPC系统就是由NiosⅡ处理器系统和外围逻辑组成的。

硬件系统设计完毕后,需要在Quartus中为各个接口分配I/O引脚,定义时序以及其它配置。最后编译Quartus工程,并生成一个FPGA的

.sof配置文件。这个文件通过JTAG接口下载到目标板中,就完成了一个SOPC系统的硬件平台设计。

(4)

SOPCBuilder生成NiosⅡ系统之后,在NiosⅡIDE中将

.ptf文件导入,可用于设计嵌入式应用程序。为了更快地开发应用程序,并创建和底层无关的编程环境,NiosⅡIDE提供标准外设驱动和HAL系统库。

NiosⅡIDE产生了如下输出文件:

system.h文件。该文件定义了系统中硬件的标识,可以在程序编译过程中自动创建。

②可执行文件(

.e1f)。此文件是NiosⅡIDE的编译结果,可以下载到Flash中执行。

③内存初始化文件(

.hex)。某些片上存储器需要预定义存储内容。IDE为片上存储器产生初始化文件。

Flash程序数据。IDE包含一个Flash编程工具,它允许将程序写入Flash存储器。Flash编程工具加入适当的启动代码,使用户定义的系统可以从Flash存储器启动,也可以用Flash编程工具将任意的数据写入Flash存储器。6.2.1SOPCBuilder简介

在建立一个系统时,最耗时的任务是根据系统要求集成大量的组件。Altera公司的SOPCBuilder为建立SOPC设计提供了标准化的图形环境,SOPCBuilder包含在QuartusⅡ软件中。与传统SOC设计方法相比,SOPCBuilder可以帮助设计者以非常短的时间来完成由处理器、存储器和外设等组件组成的SOPC系统。在传统的SOC设计方法中,设计者需要手工编写将系统中各个组件连接起来的顶层HDL设计文件,而SOPCBuilder则帮助设计者自动完成系统集成的工作。SOPC提供了直观的图形用户界面(GUI),帮助设计者添加和配置系统所需的外设(包括存储器、定制外设和IP模块),再根据设计者的要求将这些外设与处理器连接在一起,并自动完成外设和存储器的地址映射、中断控制和总线控制等工作。完成系统配置之后,SOPCBuilder根据要求生成VHDL或VerilogHDL的系统级设计代码,并自动生成部分外设的硬件抽象层(HAL)代码和底层硬件驱动代码,为软件开发做好准备。SOPCBuilder避免了手动系统集成任务,使用户能够将精力集中在定制用户自身逻辑设计上,从而突出系统优势。

Altera的QuartusⅡ设计软件的所有版本均包括SOPCBuilder系统生成的工具。SOPCBuilder具有如下特性:

(1)使用方便的GUI接口,帮助用户高效地建立并修改系统。

(2)自动集成常用的SOPCBuilder组件、Altera知识产权(IP)、Altera宏功能合作伙伴计划(AMPPSM)IP,以及定制组件内核等。

(3)可以高效地连接外部处理器和SOPCBuilder可用IP库,包括SerialRapidIO™、千兆以太网、PCI和PCIExpress。

(4)在系统中可建立自己的可重用定制组件,支持选用的DSPBuilder系统级设计工具。

(5)生成系统HDL,包括针对系统组件集成需求而经过优化的系统互联架构。

Altera的QuartusⅡ设计软件含有SOPCBuilder系统级设计工具,支持选用的DSPBuilder系统级设计工具。系统级设计工具使工程师能够迅速设计、评估可编程芯片系统(SOPC)体系结构,在更高级抽象层上进行设计。在全部或者部分FPGA以及MAXⅡCPLD系统设计中使用SOPCBuilder。采用SOPCBuilder接口来选择元件以及元件间的连接,用户会发现系统集成任务能够在几分钟内完成。一般,SOPCBuilder应用包括:

(1)构建定制NiosⅡ嵌入式处理器解决方案。

(2)采用外设扩展定制单机处理器。

(3)通过PCI接口连接至ASSP以及CPU。

(4)构建数字信号处理(DSP)协处理器。

SOPCBuilder组成元件包括FPGA内部或外部的嵌入式处理器、知识产权(IP)内核和用户生成的外设内核等外设以及ASSP和ASIC等片外器件。SOPCBuilder采用头文件和外设驱动器输出,加速实现应用软件的开发。SOPCBuilder使用户能够将精力集中在系统关键部分,不用花费系统集成任务所需的工程时间,尽快进入应用开发。

SOPCBuilder中提供了一系列的组件库,可供用户直接使用,这些组件包括:

(1)

NiosⅡ等处理器。

(2)微控制器外设。

(3)定时器。

(4)

UART、SPI等串行通信接口。

(5)通用输入输出口(GPIO)。

(6)存储器接口。

(7)总线和总线桥。

(8)数字信号处理(DSP)内核。可以使用SOPCBuilder构建由CPU、存储器接口和I/O等组成的嵌入式微处理器系统,也可以生成不包括CPU的数据流系统。SOPCBuilder可以建立具有多个主机和从机的系统拓扑结构。

在SOPCBuilder中构建系统时,可以选择用户自定义组件或组件库中提供的组件。SOPCBuilder可以导入或提供用户定义逻辑块的接口。SOPCBuilder系统与用户定义逻辑配合使用时具有以下四种机制:简单PIO连接、系统模块内例化、外部逻辑总线接口以及发布本地SOPCBuilder组件。

SOPCBuilder除提供可用于下载的组件库(包括NiosⅡ处理器、UART、定时器、PIO、Avalon三态桥接器、多个简单存储器接口和OS/RTOS内核)外,还可以从MegaCore功能列表中选择组件,包括支持OpenCorePlus硬件评估的功能等。使用SOPCBuilder构建系统时,首先应使用其中的SystemContents页面定义系统;然后,在组件库中选择组件,将组件添加到系统中成为系统的组件,所添加的组件将在组件列表中列出。其中,SystemContents页面提供的工具可定义以下组件选项:

(1)系统组件和接口。

(2)主端口与从端口连接。

(3)系统地址映射。

(4)系统IRQ分配。

(5)共享从端口的仲裁优先级。

(6)多时钟域工作。

SOPCBuilder生成的系统包含一个系统说明文件(

.ptf文件),该文件中保存了所有在SOPCBuilder中输入的设置、选项和参数。此外,每个组件具有相应的

.ptf文件。在系统生成期间,SOPCBuilder使用这些文件为系统生成源代码、软件组件和仿真文件。完成系统定义之后,可以使用SOPCBuilder的SystemGeneration页面生成系统。SOPCBuilder软件自动生成所有必要的总线逻辑,用以将处理器、外设、存储器、仲裁器、IP功能以及系统外逻辑和存储器接口用Avalon交换架构连接在一起,并建立将组件捆绑在一起的HDL源代码。

SOPCBuilder还可以建立软件开发工具包(SDK)所需的软件模块,例如头文件、通用外围设备驱动程序、定制软件库和OS/real-time操作系统(RTOS内核)等。

SOPCBuilder建立用于仿真的MentorGraphicsModelSim仿真目录,包括ModelSim工程文件、所有存储器模块的仿真数据文件、提供设置信息的宏文件、别名和总线接口波形初始设置。SOPCBuilder还建立仿真测试激励,用于例化系统模块、驱动时钟和复位输入,并可以例化和连接仿真模型;还可以生成Tcl脚本,用于在QuartusⅡ软件中设置系统编译所需的所有文件。6.2.2SOPCBuilder设计流程

SOPCBuilder的图形界面如图6-4所示。SOPCBuilder设计流程主要分为三个步骤(见图6-5),即从组件库中选择组件;定制组件并集成系统;验证并构建系统。

图6-4SOPCBuilder的图形界面

图6-5SOPCBuilder设计流程在QuartusⅡ中,每一个SOPCBuilder系统对应一个QuartusⅡ工程,可以用Tools->SOPCBuilder菜单启动SOPCBuilder,也可以用 工具按钮启动SOPCBuilder。如果工程中没有SOPCBuilder系统,QuartusⅡ则会提示使用者输入SOPCBuilder系统的名称,并选择生成VHDL代码还是Verilog代码。SOPCBuilder同时只能对一个系统进行操作,但一个QuartusⅡ工程可以包含多个系统,在SOPCBuilder中可以打开一个已有的系统,也可以新建系统。系统的文件与相关的QuatursⅡ工程存储在同一个目录中,每个系统的信息都保存在一个名称为“系统模块名称

.ptf”的文件中。

SOPCBuilder的用户界面按功能分为不同的标签页,SOPCBuilder启动后,默认的标签页为SystemContents标签页。SystemContents标签页的主要作用包括:

(1)将组件库中的组件添加为系统组件。

(2)配置组件。

(3)指定组件之间的连接。在SOPCBuilder中,一个系统是由多个组件组成的,这些组件按照一定的规则设计,能够被SOPCBuilder识别并可以自动连接到系统中去。SOPCBuilder将多个组件连接在一起组成一个顶层设计模块,称做系统模块(SystemModule)。图6-5中的活动组件列表区域列出了当前系统中例化的组件,在这个区域中,可以修改组件的名称,设定从组件的基地址及时钟源,如果需要,还可以设定每个组件的中断优先级。所有外设在系统中的管理都是按统一分配的地址进行的,活动组件列表中可以设置每一个外设的基地址,根据基地址和外设的特性,自动生成结束地址。如果设计者不干预,SOPCBuilder则自动分配各个外设的地址。有效组件列表区域中,分类列出了当前有效的组件,包括Altera提供的以及自定义的组件库,用户可以从这个列表中选择自己需要的组件添加到右侧的活动组件列表中,建立用户自己的系统,每个添加到系统中的组件都可能会启动一个配置向导,指导用户配置这个组件。连接面板区域显示了组件之间的连接,可以在这个区域中指定主组件与从组件之间的连接关系以及与多个主组件共享的从组件的总线仲裁器。时钟设置表用于设置系统的时钟。

NiosⅡ系统的所有外设都是通过Avalon总线与NiosⅡCPU相接的。Avalon总线是一种协议较为简单的片内总线,NiosⅡ通过Avalon总线与外界进行数据交换。6.3Avalon总线规范

Avalon总线接口可以分为两类:slave和master。slave是一个从控接口,而master是一个主控接口。slave和master的主要区别是对于Avalon总线控制权的把握。master接口拥有所连的Avalon总线控制权,而slave接口是被动的。常见的Avalon传输结构有:Avalon总线从读(slaveread),Avalon总线带一个延迟状态从读,Avalon总线从写(slavewrite),Avalon总线带一个延迟状态从写。所有外设的接口都与Avalon总线时钟同步,不需要复杂的握手/应答机制。这样就简化了Avalon总线的时序行为,而且便于集成高速外设。Avalon总线以及整个系统的性能可以采用标准的同步时序分析技术来评估。Avalon总线所有的信号都是高电平或低电平有效,这便于信号在总线中高速传输。在Avalon总线中,由数据选择器(而不是三态缓冲器)决定哪个信号驱动哪个外设,因此外设即使在未被选中时也不需要将输出置为高阻态。为了方便外设的设计,地址、数据和控制信号使用分离的、专用的端口。外设不需要识别地址总线周期和数据总线周期,也不需要在未被选中时使输出无效。分离的地址、数据和控制通道还简化了与片上用户自定义逻辑的连接。Avalon总线还包括许多其它特性和约定,用以支持SOPCBuilder软件自动生成系统、总线和外设,其中包括:最大4

GB的地址空间——存储器和外设可以映像到32位地址空间中的任意位置;内置地址译码——Avalon总线自动产生所有外设的片选信号,极大地简化了基于Avalon总线的外设的设计工作;多主设备总线结构——Avalon总线上可以包含多个主外设,并自动生成仲裁逻辑;采用向导帮助用户配置系统,SOPCBuilder提供图形化的向导帮助用户进行总线配置(添加外设、指定主/从关系、定义地址映像等)。Avalon总线结构将根据用户在向导中输入的参数自动生成;流式读和写(StreamingReadandWrite)能力——在主、从设备之间进行流传输使能的逻辑包含于Avalon总线模块的内部。6.3.1Avalon交换式总线基本概念

Avalon交换式总线是由Altera开发的一种专用的连接SOPC系统主组件与从组件的内部连线技术。Avalon交换式总线由SOPCBuilder自动生成,是一种理想的用于系统处理器和外设之间的内联总线。每当一个新的组件被添加到系统中或是某个外设的优先级被改变时,SOPCBuilder就会自动生成一个新的、最佳的交换式总线。用户可以很容易地修改自己设计的系统以提高性能或增加系统功能。Avalon交换式总线的特性包括:

(1)基于向导的配置方式。

(2)可以并发操作的多主设备。

(3)内建地址译码。

(4)原始的或动态的位宽可变的外设接口。

(5)支持各种模式的Avalon传输。

(6)支持等待时间的读/写传输。

(7)跨时钟域电路。

Avalon交换式总线使用很少的逻辑资源来支持数据总线复用、地址译码、产生等待周期、对齐外设地址(支持原始的和动态的总线尺寸对齐)、指定中断优先级以及高级的交换式总线传输。图6-6所示的例子正是用Avalon交换架构将多个主组件和多个从组件连接到一起,部分组件使用了多个Avalon端口。

图6-6Avalon总线的例子由于一个组件可以拥有多个Avalon端口,所以用Avalon交换式架构可以构建非常复杂的总线应用,比如每一个从端口只能有一个中断请求信号。如果一个组件需要多个中断请求,只需要为该组件配置多个从端口即可。SOPCBuilder的主要任务就是生成Avalon交换式架构的总线,这个过程是自动完成的,设计者一般不需要与生成的HDL代码打交道,但了解Avalon交换式架构实现原理,有助于设计者更好地使用它。Avalon总线的一些基本概念如下。

1.总线周期

总线周期是总线传输中的基本时间单元,定义为从Avalon总线主时钟的前一个上升沿到下一个上升沿之间的时间。总线信号的时序以总线周期为基准来确定。

2.总线传输

Avalon总线传输是指对数据的一次读或写操作,一次传输可能需要一个或多个总线周期来完成。Avalon总线支持的传输宽度包括字节(8位)、半字(16位)和字(32位)。

3.流传输模式

通过流控信号实现流传输模式,流传输模式在流模式主外设和流模式从外设之间建立一个开放的通道,以提供连续的数据传输。只要存在有效数据,便能通过该通道在主从端口对之间流动,主外设不必为了确定从外设是否能够发送或接收数据而不断地访问从外设的状态寄存器。流传输模式使得主从端口对之间的数据吞吐量达到最大,同时避免了从外设的数据上溢或下溢。它对于DMA传输特别重要。

4.延迟读传输模式

有些同步外设在第一次访问时需要几个时钟周期的延迟,此后每个总线周期都能返回数据。对于这样的外设,延迟读传输模式可以提高带宽利用率。延迟传输使得主外设发起一次读传输后,尽管上一次读传输的数据还没有返回,主设备仍可以发起下一次读传输,也可以转而执行一个不相关的任务或等外设准备好数据后再接收数据。在取指令操作(需要经常访问连续地址)和DMA传输中,延迟传输是非常有用的。在这两种情况下,CPU或DMA主外设会预先读取期望的数据,从而使同步存储器处于激活状态,并减少平均访问时间。

5.Avalon总线模块

Avalon总线模块是系统模块的主干,是SOPC设计中外设之间通信的主要通道。Avalon总线模块由各类控制、数据和地址信号以及仲裁逻辑组成,它将构成系统模块的外设连接起来。Avalon总线模块是一种可配置的总线结构,可以随着用户的不同互联需求而改变、Avalon总线模块是由SOPCBuilder自动生成的,系统用户不需要关心总线与外设的具体连接。大多数应用中Avalon总线都是在SOPCBuilder中自动将处理器和其它Avalon总线外设集成到系统模块中,因此Avalon总线模块很少作为分离的单元使用。对于用户来说,Avalon总线模块通常可以被看做是连接外设的途径。Avalon交换式架构为连接到总线上的外设提供以下服务:

(1)数据通道复用。Avalon总线模块中的数据选择器将数据从选中的从外设传送到相应的主外设。

(2)地址译码。地址译码逻辑为每个外设产生片选信号,外设不必各自对地址线进行译码来产生片选信号,从而简化了外设的设计。

(3)生成等待周期。为适应具有特殊同步要求的外设,加入等待周期可以将总线传输延长一个或多个总线周期。当目标从外设不能在一个时钟周期内响应时,总线模块会加入等待周期使主外设暂停。当读使能和写使能信号具有建立时间或保持时间要求时也会加入相应的等待周期。

(4)动态地址对齐。动态地址对齐隐藏了宽度不同的外设之间连接的细节。例如,通过32位的主端口读传输来访问16位存储器时,动态地址对齐会自动执行两次从端口读传输,以便从16位存储器设备中取出32位数据。主外设不必考虑从外设的物理特性,因此这一特性简化了主外设硬件和软件的设计。

(5)中断优先级分配。当一个或多个从外设产生中断时,Avalon总线模块会将中断传递给相应的主外设,同时传递优先级最高的中断请求(IRQ)信号。

(6)延迟传输功能。Avalon总线模块内部包含了在主从端口对之间进行延迟传输所需要的逻辑。

(7)流传输模式。Avalon总线模块内部包含了在主从端口对之间进行流传输所需要的逻辑。

6.Avalon总线外设

Avalon总线外设可以在片内,也可以在片外。Avalon总线外设完成一定的功能,并通过Avalon总线与其它的系统组件通信。外设是模块化的系统组件,可以根据系统的要求在设计时增加或删除。Avalon外设不仅包括存储器和处理器,还包括传统的外设模块,例如UART、PIO、定时器和总线桥等。任何用户自定义逻辑只要提供了连接Avalon总线的地址、数据和控制信号,就能成为Avalon总线外设。Avalon总线外设连接到Avalon总线模块为其分配的特定端口上。除了Avalon总线信号外,外设还可以拥有自定义的端口,用来连接系统模块外的用户自定义逻辑。Avalon外设分为主外设和从外设两类。能够在Avalon总线上发起总线传输的外设是主外设。一个主外设至少拥有一个连接到Avalon总线模块上的主端口,主外设也可以拥有从端口,使得该外设可以响应Avalon总线上由其它主外设发起的总线传输。从外设只能响应Avalon总线传输,而不能发起总线传输。从外设,例如存储器设备和UART,通常只有一个连接到Avalon总线模块上的从端口。在SOPC环境中,区分以下两类外设是十分重要的,它们均可以是主外设或从外设。第一类外设可以在SOPCBuilder的组件库中找到,或者用户指定了用户自定义外设的设计文件的位置,SOPCBuilder自动将该外设连接到Avalon总线模块上。这样的外设是系统模块内部的外设,它们是系统模块的一部分。这些外设与Avalon总线模块的地址、数据和控制端口的细节对用户是透明的,这些模块上的非Avalon总线的端口作为系统模块的端口引出到外部,这些端口可以直接连接到物理器件的引脚,也可以连接到其它片上模块的端口。另一类Avalon总线外设位于系统模块的外部,在以下几种情况下,一般将Avalon总线模块置于系统模块外部:①外设实际存在于可编程逻辑器件的外部;②需要通过一些时序转换逻辑才能将外设连接到Avalon总线上;③在生成系统模块时外设的设计尚未完成。在这些情况下,可以把Avalon总线模块信号作为系统模块的端口引出,连接外部外设。

7.主端口

主端口是主外设在Avalon总线上发起传输的一组信号。主端口直接连接到Avalon总线模块上。一个主外设可以拥有一个或多个主端口,也可以拥有从端口。这些主端口和从端口之间的相互关系取决于外设的设计,而在这些端口上的单个总线传输必须符合Avalon总线规范。主传输是指从主端口角度描述的Avalon总线传输。

8.从端口与从传输

从端口是外设用于接收来自另一个Avalon外设主端口的总线传输的一组信号。从端口直接连接到Avalon总线模块上。主外设也可以拥有从端口,使得它能够响应来自Avalon总线上其它主外设的总线传输。从传输是指从从端口角度描述的Avalon总线传输。

9.主从端口对

主从端口对是指通过Avalon总线模块连接到一起的一个主端口和一个从端口的组合。在结构上,这些主端口和从端口连接到Avalon总线模块的相应端口上。主端口的控制和数据信号穿过Avalon总线模块,与从端口进行交互。在SOPCBuilder中指定主端口和从端口之间的连接,即建立主从端口对。

10.PTF文件与SOPCBuilder参数和选项

Avalon总线和外设的配置是在SOPCBuilder的图形用户界面中指定的。用户在图形用户界面中指定各种参数及选项,SOPCBuilder将这些参数和选项存入一个系统PTF文件。PTF文件是一个文本文件,其中包括以下内容:

(1)

Avalon总线模块结构与功能的参数。

(2)每个外设结构与功能的参数。

(3)每个外设的主/从角色。

(4)每个外设提供的端口信号,例如读使能、读数据、写使能、写数据。

(5)每个可被多个主端口访问的从端口的仲裁机制。

SOPCBuilder将PTF文件传递给HDL生成器,来创建系统模块实际的寄存器传输级(RTL)描述。6.3.2Avalon总线信号

Avalon总线是一种同步总线接口,是由主设备提供的总线时钟。Avalon总线规范定义了主端口和从端口之间通过Avalon总线模块传输数据所需的信号和时序。每一个信号都要指定一个有效的Avalon信号类型,以确定该信号的作用。Avalon总线规范不要求Avalon外设必须包含哪些信号,它只定义了外设可以包含的各种信号类型(例如地址、数据、时钟等)。信号也可以是用户自定义的,在这种情况下,SOPCBuilder不将该端口与Avalon总线模块连接。Avalon信号分为主端口信号和从端口信号两类,外设使用的信号类型由端口的主/从角色来决定,每个单独的主端口或从端口使用的信号类型由外设的设计决定。例如,设计一个只有输出的PIO从外设只需定义用于写传输(从外设向Avalon总线模块方向)的信号,而不需定义用于读传输的信号。尽管从端口允许使用中断请求(IRQ)信号,但也不是必须使用。

Avalon总线规范没有规定Avalon外设信号的命名规则,信号可以按照它的信号类型来命名,也可以遵照系统级的命名规范采用不同的名称。

表6-2列举了部分Avalon从端口可用的信号类型,信号的方向是从外设的角度定义的。例如时钟信号clk(方向为in)对于从外设来说是输入信号,而对于Avalon总线模块来说是输出信号。

表6-2部分Avalon从端口可用的信号类型表6-2中列举的信号类型都是高电平有效。Avalon总线还提供了各信号类型的反向形式,在PTF声明中,在信号类型名称后面添加“_n”,便可将对应的端口声明为低电平有效,这对许多使用低电平有效逻辑的片外外设非常有用。

不论外设是在系统模块的内部还是外部实现,Avalon总线信号及操作都是相同的。在内部实现的情况下,SOPCBuilder自动将外设的主端口或从端口连接到Avalon总线模块。在外部实现的情况下,用户必须手工地将主端口或从端口连接到系统模块。在任何情况下,Avalon总线信号的行为都是相同的。

Avalon总线允许多个主端口连接到Avalon总线模块,而且实现Avalon总线的并发多主端口功能时,Avalon总线模块不需要额外的特殊信号。当多个主外设试图同时访问同一个从外设时,Avalon总线模块用内部的从端口仲裁逻辑来解决冲突。

Avalon三态接口用于将片外设备通过可编程逻辑器件的I/O引脚直接连接到Avalon总线模块上。用PTF参数Bus_Type=“avalon_tristate”指定一个片外的外设使用了Avalon三态接口。大多数系统都需要使用片外存储器设备。片外存储器设备一般会共享地址和数据总线线路,与这些设备连接时需要使用三态双向数据接口,以便其它外设也能够驱动数据线而不会引起信号竞争,如Flash存储器、SRAM以及同步SRAM(SSRAM)等。

表6-3列举了片外从外设与Avalon总线模块之间接口的信号类型,信号的方向是从外设的角度定义的。外设提供的端口由外设的设计和PTF文件中的端口定义决定,不需要提供全部的信号类型。

表6-3Avalon总线接口三态从端口信号6.3.3Avalon总线传输类型及时序

Avalon总线是一个同步总线接口,由Avalon总线主时钟提供定时。所有总线传输的信号都与Avalon总线时钟同步。同步总线接口并不意味着所有的Avalon总线信号都是锁存的,比如,Avalon的chipselect信号便是由组合逻辑产生的,其输入同步于Avalon总线时钟的寄存器输出,因此,外设不能使用Avalon信号的边沿,因为Avalon信号在达到稳定之前会发生多次变化。就像所有同步设计一样,Avalon总线外设只能在时钟上升沿对稳定的信号作出响应,输出信号也必须在时钟上升沿到来之前达到稳定。

Avalon总线模块也可以连接异步外设,例如片外异步存储器。但设计时需要考虑一些额外因素:由于Avalon总线模块的同步操作,Avalon信号只以Avalon总线时钟周期为间隔变化,此外,如果异步外设的输出直接连接到Avalon总线模块,则用户必须保证输出信号在时钟上升沿到来之前达到稳定。

Avalon总线规范并不定义在时钟上升沿之间信号如何变化,信号的变化由Avalon总线时钟触发,信号只要在捕获时钟上升沿之前达到稳定就可以了,因此总线规范中的Avalon总线时序图中不会描绘精确的时间信息。在时钟上升沿之间信号是可变的,它取决于用于实现系统的Altera可编程逻辑器件的特性。类似地,Avalon总线没有规定固有的最高性能,系统模块在特定的器件上综合布线之后,用户必须对系统模块进行标准的时序分析,以确定Avalon总线传输能达到的最高速度。

不同Avalon总线端口的传输能力并不一致,基本的Avalon总线传输只能实现一次总线传输中在一对主设备和从设备之间传递一个数据单元。在基本的Avalon总线传输基础上,通过增加以下几种特性中的一种或多种,对总线传输作以扩展,可以派生出能够适应所有外设的传输模式,这些特性包括:

(1)插入固定长度的或可变长度的等待状态。

(2)固定延迟或可变延迟的流水线传输模式。

(3)建立和保持时间。

(4)突发传输。

(5)流控信号。

(6)三态驱动。例如,在传输中增加等待状态可以适应低速外设,而使用流控信号实现的流模式传输以及多主传输则可以适应对带宽要求较高的外设。主端口的基本传输模式是所有Avalon主传输的基础,诸如:Avalon总线基本从读(SlaveRead)传输、Avalon总线基本从写(SlaveWrite)传输、流水线传输模式及流控(FlowControl)传输。以下就常用的几种Avalon总线传输的时序加以说明。本书中只涉及Avalon总线模块与从外设之间的传输。

1.Avalon总线基本从读传输

Avalon总线基本从读传输是所有Avalon从读传输的信号时序都源自从端口的基本传输模式。基本从读传输(FundamentalSlaveReadTransfer)是在一个总线时钟周期内,由Avalon总线从外设向Avalon总线模块传输一个全数据总线宽度的数据,基本从读传输由Avalon总线模块发起。

2.Avalon总线基本从写传输

Avalon总线基本从写传输是所有Avalon总线从写传输的基础,它不包括Avalon总线规范定义的所有传输特性。Avalon总线基本从写传输由Avalon总线模块发起,在一个总线时钟周期内,向总线从外设传输一个单元的数据。如果数据总线宽度超过一个字节,byteenable信号确定向那一个字节写入数据;如果没有byteenalble信号,则表示向数据总线上的所有字节写数据。

3.流水线传输模式

针对需要多个时钟周期才能返回第一个数据,之后每个周期都可以返回数据的同步从外设,使用Avalon流水线从读传输模式可以增加数据传输的带宽。

4.流控传输

Avalon流控信号提供了一种从外设控制数据传输的模式,传输由从外设发起。当从外设表明其数据有效或可以接收数据时,传输便开始了。由于主端口不需要不断轮询从端口,因此流控信号简化了逻辑设计。另外流控信号也降低了带宽开销,适合大量数据的传输。主、从端口必须都使用流控信号才可以。

在NiosⅡ下开发软件和其它嵌入式系统有所不同,系统开发环境SOPCBuilder和

NiosⅡIDE已经为开发者提供了生成硬件系统的工具以及底层的基本驱动,软件开发者可以在与硬件无关的平台(HardwareAbstractionLayer,HAL)上编制程序。这种分离了驱动和应用软件的系统开发方式为协同开发带来可能,在很大程度上提高了系统开发的效率。目前NiosⅡ的开发都是在HAL的基础上进行的。6.4NoisⅡ应用软件开发

1.HAL工程结构

HAL系统库是一个轻量级的运行环境,提供了简单的和硬件通信的设备驱动程序。HAL给上层应用程序提供了一系列API函数,用来读/写底层硬件。HALAPI集成了ANSIC标准库,允许用标准C函数(例如printf、fopen、fwrite等)去存取设备,这会使控制外设变得简单。例如:需要在LCD上显示一系列字符,只需要将LCD设置为标准输出,调用printf()就可以实现字符显示。这种基于HAL编写和管理软件工程的方式,可通过NiosⅡIDE来实现。

HAL类似于ARM系统中的BSP(Board-SupportPackage),提供了一个一致的设备存取界面。如图6-7所示,最底层是SOPCBuilder定义的NiosⅡ硬件系统,因此在NiosⅡIDE中使用system.h文件来描述。由于SOPCBuilder和NiosⅡIDE紧密地集成,在SOPCBuilder生成硬件系统以后,NiosⅡIDE能够自动生成对应的客户HAL系统库。更新硬件系统设置以后,NiosⅡIDE能自动更新HAL的驱动设置,system.h文件会被更新。在创建软件项目的时候,NiosⅡIDE会自动生成并管理HAL系统库。

图6-7NiosⅡIDE工程结构

HAL系统库连接上层应用程序和下层硬件系统,可以通过设置来修改HAL配置,由NiosⅡIDE根据底层提供的

.ptf文件来创建。顶层是用户创建的应用程序代码,在NiosⅡIDE中编译并调试。依据这种互相独立的工程结构,如果SOPCBuilder改变了底层硬件配置,由NiosⅡIDE管理的HAL系统库也会升级相应的硬件配置信息,应用程序和硬件配置完全被HAL系统库分离,即基于HAL的应用程序总是和底层硬件配置同步。

HAL系统库用system.h头文件描述底层硬件信息,这个文件是整个HAL系统库的基础,它对SOPCBuilder生成的NiosⅡ系统的硬件做了完全描述。简单来说,system.h描述了当前系统的硬件。它的详细内容包含以下几方面信息:

(1)外设的硬件配置。

(2)基地址。

(3)中断优先级。

(4)外设的符号名。

2.HAL的使用

HAL提供字符模式设备和数据文件的文件系统的访问操作。对文件系统进行访问时,可以通过使用newlib库提供的C标准I/O函数(例如fopen、fclose、fread等函数),或使用HAL系统库提供的UNIX类型文件I/O函数。

HAL系统库提供的UNIX类型文件I/O函数有:close()、fstat()、ioctl()、isatty()、lseek()、open()、read()、stat()、write()。文件子系统在HAL文件系统中作为挂载点,如果访问在挂载点下的文件,可直接访问挂文件子系统。例如,如果ZIP子系统挂在/mount/zipfs0,则可用fopen()函数访问zipfs文件子系统下的相关文件myfile,路径为/mount/zipfs0/myfile。另外一种较简单的方法是使用标准输入、标准输出及标准错误输出。HAL系统库可以在幕后管理stdin、stdout和stderr,这样不用明确操作文件描述符就可以通过信道进行字符的发送和接收。例如,用printf()的输出作为标准输出,用perror()作为标准错误输出。对于字符模式设备,HAL将其视为节点。通常,system.h文件在SOPCBuilder的硬件器件名称前加前缀/dev来定义设备节点。例如,访问SOPCBuilder中的UART硬件uart1时,在system.h文件中使用/dev/uart1表示。

下面我们设计一个最简单的SOPC系统,使用NiosⅡ处理器的通用输入/输出(PIO)去控制一个LED灯,通过这个例子我们可以了解整个SOPC系统的设计流程。

6.5SOPC系统设计实例6.5.1建立SOPC硬件系统

首先,为了定义系统,我们打开QuartusⅡ软件并进行以下步骤:

(1)如图6-8所示,为系统创建一个新的QuartusⅡ工程,我们把工程保存为“D:\sopc_builder_tutorial”,并对工程和顶层文件设计实体进行命名。我们可以选择不同的路径或工程名字,但是必须注意SOPCBuilder软件不允许文件名字里面有空格。例如,用sopcbuilderturorial作为目录名就会导致出错。在工程当中,选择EP2C35F672C6芯片,因为DE2板上的FPGA采用此款芯片。

图6-8创建一个工程

(2)选择菜单命令Tools->SOPCBuilder,弹出一个如图6-9所示的对话框。键入“nios_system”作为系统的名字,这将作为SOPCBuilder生成的系统名。选择“Verilog”作为“TargetHDL”,系统的模块数将被指定,点击“OK”按钮出现如图6-10所示的窗口。

图6-9创建一个新的NiosⅡ系统

图6-10系统内容标签窗口

(3)图6-10展示了SOPCBuilder系统的列表内容,其中包含系统需增加的元件和配置选择的元件以满足设计要求。窗口左侧是可选的元件。在选择元件之前,应检查图像标签对象,下拉列表中有一些可供Altera板选择的选项。没有必要去选择板,因为在DE2板的列表当中不包括未指明的板。然后,检查设备组的配置以确定已经选择了CycloneⅡ。

(4)

NiosⅡ处理器在时钟的控制下工作,在本例中我们给DE2板提供50

MHz的时钟,如图6-10所示,在SOPCBuilder显示器上指定名称和时钟信号的频率。如果列表中没有包括这些,则指定时钟命名为clk,指定外部时钟频率为50.0

MHz。

(5)指定处理器。在图6-10左边的窗口中选择“AvalonComponents->NiosⅡProcessor-AlteraCorporation”,然后点击“Add”按钮,弹出如图6-11所示的窗口。选择“NiosⅡ/e”,这个是最简单的处理器,再点击“Finish”按钮回到图6-10所示的窗口,显示NiosⅡ处理器已经被指定。在SOPCBuilder信息窗口(在屏幕的下方)里可能会出现一些警告和错误信息,这是因为有一些参数还未指定。先忽略这些信息,后面会提供一些必需的数据。通过观察可以发现一个叫做NiosⅡMore“cpu_0”Settings的选项出现(见图6-12),这个选项允许我们对处理器做更进一步的配置,在这里我们没有用到它。

图6-11创建NiosⅡ处理器

图6-12设定处理器

(6)指定芯片存储器。选择菜单命令AvalonComponents->Memory->On-chipMemory(RAMorROM),然后点击“Add”按钮,在如图6-13所示的窗口“On-chipMemoryConfigurationWizard”中设置存储器的宽度为“32”位,总的存储容量为“4Kbytes”,不要改变其它的默认设置。点击“Finish”按钮,回到如图6-14所示的系统内容标签窗口。

图6-13定义onchip_memory

图6-14包含onchip_memory

(7)指定输入并行I/O接口。选择菜单命令AvalonComponents->Other->PIO(ParallelI/O),点击“Add”按钮,出现如图6-15所示的窗口,指定端口宽度为“8”位并选择端口的方向为输入。点击“Finish”按钮回到如图6-16所示的窗口。

图6-15定义一个并行输入接口

图6-16包含并行输入接口

(8)用同样的方法指定输出I/O并行接口。选择菜单命令AvalonComponents->Other->PIO(ParallelI/O),点击“Add”按钮,再次出现PIOConfigurationWizard窗口,指定端口宽度为“8”位,选择端口方向为输出。点击“Finish”按钮回到“SystemContents”标签页。

(9)如果希望FPGA和主机连接并使NiosⅡ系统和主机通信,安装JTAGUART接口就可以实现:选择菜单命令AvalonComponents->Communication->JTAGUART,点击“Add”按钮,打开如图6-17所示的窗口,不要改变默认设置。点击“Finish”按钮回到“SystemContents”标签页。

图6-17定义JTAGUART接口

(10)完整的系统如图6-18所示。注意SOPCBuilder将自动地给各个元件命名。名字有必要描述得很仔细就能够轻易地与设计目标文件关联,而且名字也是可以改变的。如图6-18所示,分别命名开关和LED作为并行输入和输出接口,这些名字可用在执行系统当中。击pio_0的名字后选择Rename,把名字改为Switches。同样地,改变pio_1为LEDs。

图6-18完整的系统

(11)各个元件的基数和终端地址都可以由用户指定,也可以由SOPCBuilder自动指定。在这里我们选择后者。选择命令(用SOPCBuilder窗口上面的菜单)System->Auto-AssignBaseAddresses,出现如图6-19所示的窗口。

图6-19系统的最终配置

(12)指定所有执行系统需要的元件后,就开始生成了,选择“SystemGeneration”检签页,出现如图6-20所示的窗口。取消“Simulation,Createsimulatorprojectfiles”,在本例中不采用处理器硬件仿真,在SOPCBuilder窗口的底部点击“Generate”按钮。图中显示了生成过程产生的信息。当出现“SUCCESS:SYSTEMGENERATIONCOMPLETED”这样的信息时,点击“Exit”按钮,回到QuartusⅡ主窗口。SOPCBuilder生成的系统包含一个系统说明文件(nios_system.ptf文件),该文件中保存了所有在SOPCBuilder中输入的设置、选项和参数。

图6-20生成SOPC系统如果想改变设计好的系统也相当简单,无论什么时候重新打开SOPCBuilder工具,任何在SOPCBuilder系统内容列表中的元件都可以被选择和删除或者增加一个新的元件,然后重新生成系统。

(13)在生成硬件系统后,例化该模块到QuartusⅡ的工程当中,并指定FPGA管脚,编译设计电路,下载并配置CycloneⅡ设备到DE2板上。

SOPCBuilder生成的Verilog模块在工程目录下的nios_system.v文件里(注意Verilog模块的名字与第一次使用SOPCBuilder时指定的系统名字相同)。Verilog代码相当庞大,下面仅给出定义nios_system输入/输出信号模块的部分代码。

modulenios_system(

//globalsignal:

clk,

reset_n,

//the_LEDs

out_port_from_the_LEDs,

//the_Switches

in_port_to_the_Switches

);

output[7:0]

out_port_from_the_LEDs;

inputclk;

input[7:0]in_port_to_the_Switches;

input

reset_n;

8位输入向量作为并行口开关的输入叫做in_port_to_the_Switches,8位输出向量叫做out_port_from_the_LEDs。时钟和复位信号分别叫做clk和reset_n。注意复位信号是SOPCBuilder自动生成的,由于它是低电平有效,故命名为reset_n。例化NiosⅡ系统的上层Verilog模块,该模块命名为lights(这是在QuartusⅡ为顶层设计实体时指定的名字)。指定FPGA管脚,注意模块中输入和输出端口用的管脚名:50

MHz的时钟对应CLOCK_50,按钮开关对应KEY,拨动开关对应SW,绿色LED灯对应LEDG

(这些名字在DE2UserManual中已经被指定)。将下列代码输入到一个名为light.v的文件中,并将该文件和所有SOPCBuilder生成的*.v文件添加到QuartusⅡ工程中。

//ImplementsasimpleNiosⅡsystemfortheDE2board.

//Inputs: SW7−0areparallelportinputstotheNiosⅡsystem

//CLOCK_50isthesystemclock

//KEY0istheactive-lowsystemreset

//Outputs:LEDG7−0areparallelportoutputsfromtheNiosⅡsystem

modulelights(SW,KEY,CLOCK_50,LEDG);

input [7:0]SW;

input [0:0]KEY;

input CLOCK_50;

output[7:0]LEDG;

//InstantiatetheNiosⅡsystemmodulegeneratedbytheSOPCBuilder:

//nios_system(clk,reset_n,out_port_from_the_LEDs,in_port_to_the_Switches)

nios_systemNiosII(CLOCK_50,KEY[0],LEDG,SW);

endmodule同时,在DE2板上增加一些必要的管脚来分配到指定的工程当中。可采用一个简单的方法来设置管脚分配,当我们使用的管脚名字和DE2用户指南的名字相同时,直接在DE2_tutorials\design_files中导入DE2_pin_assignments.csv文件,该文件包含在伴随DE2板的CD-ROM中,也可以在Altera公司的网页上找到。在JTAG程序操作模式中,下载和配置CycloneⅡFPGA的步骤如下:

①依靠USB电缆插入USB-Blaster口使DE2板和主机连接。开启DE2板的电源,确保RUN/PROG开关打在RUN的位置。

②选择菜单命令Tools->Programmer后出现下载窗口。

③如果没有选择默认模式,则选择JTAG模式。同样,如果USB-Blaster没有选择默认模式,则点击下载窗口中的HardwareSetup...按钮并在出现的窗口中选择USB-Blaster。④配置文件lights.sof在窗口中必须列出,如果该文件没有列出,则点击下载窗口中的AddFile并选择它。

⑤点击下载窗口中的Program/Configure下的box按钮来选择这次活动。

⑥点击Start按钮,开始配置FPGA。

(14)在SOPCBuilder中,点击“RunNiosⅡIDE”按钮,启动NiosⅡIDE,如图6-21所示。在NiosⅡIDE中,选择菜单命令File->New->Project,开启“NewProject”对话框。选择“C/C++Application”,如图6-22所示,然后点击“Next”按钮,进入下一步。填写项目名,在“SelectProjectTemplate”中选择“HelloLED”,如图6-23所示,然后点击“Next”按钮,进入下一步。

图6-21启动NiosⅡIDE

图6-22建立NiosⅡ应用程序(一)

图6-23建立NiosⅡ应用程序(二)

(15)选择“Createanewsystemlibrarynamed”,最后点击“Finish”按钮,即可创建应用项目,如图6-24所示。

图6-24建立NiosⅡ应用程序(三)6.5.2基于SOPC硬件系统运行应用程序

在FPGA设备上配置完需要的硬件后,就可以创建和执行一个应用程序来实现需要的操作。可以通过NiosⅡ汇编语言或者用像C之类的高级语言编写需要的程序实现。我们这里给出这两种方法的例子。

1.NiosⅡIDE的启动及编程

NiosⅡ的软件开发环境为TheNiosⅡIntegratedDevelopmentEnvironment(IDE),即NiosⅡ集成开发环境,如图6-25所示。NiosⅡIDE是在EclipseIDE的基础上建立的,编译器采用GNUC/C++的编译器。在NiosⅡIDE中可以完成基于NiosⅡ处理器软件的编辑、编译、运行管理、调试及下载等工作。

一般在设计完SOPC硬件后,可直接通过SOPCBuilder生成页面来启动NiosⅡIDE,也可从“开始”菜单中启动NiosⅡIDE。启动时,NiosⅡIDE会提示选择工作空间,工程文件将保存在工作空间中,如图6-26所示。

图6-25NiosⅡIDE启动界面

图6-26NiosⅡIDE进入界面

SOPCBuilder生成的并行I/O口可以由接口的寄存器实现,其设置取决于PIO的配置,系统中共有四个寄存器,其中一个称为数据寄存器。若PIO配置作为一个输入接口,数据寄存器读出的数据是当前出现在PIO输入线上的数据。若PIO配置作为一个输出接口,则数据写入(通过NiosⅡ处理器)数据寄存器来驱动PIO输出线。如果PIO配置成为一个双向的接口,那么PIO输入和输出就共用同一条物理线。在这种情况下,设计应增加一个数据方向寄存器,用来决定输入/输出的传递的方向。在本系统中,使用单向PIO时只需要一个数据寄存器。在PIO口的开关数据寄存器中,SOPCBuilder指定0x00001800作为它的地址,0x00001810作为在PIO数据寄存器中LEDs的地址。

可以通过打开SOPCBuilder窗口,如图6-16所示,并右击PIO的模块名(开关或者LEDs)来获得PIO接口的完整描述。然后,在pop-upbox窗口中选择DataSheettoopenthedocumentPIOCorewithAvalonInterface,它将给出接口的完整描述,利用这些可以很容易实现与总线连接。下面给出了一个NiosⅡ汇编语言的程序,实现开关控制LED点亮/熄灭的简单任务。程序将两个PIO的数据寄存器的内容加载到寄存器r2和r3,然后通过无限循环来完成动作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论