版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章SOPC技术3.1SOPCBuilder
3.2Avalon交换架构3.3NiosⅡ软核处理器3.4NiosⅡ软核处理器软件开发3.5SOPC系统设计实例3.6DE2开发板描述及组件库3.1SOPCBuilder3.1.1Altera的SOPC技术
SOPC是可编程芯片系统的缩写,就是在一个可编程芯片上实现一个电子系统的技术。SOC技术已经成为半导体行业的技术主流,在SOPC出现之前,业界广泛使用ASIC技术实现SOC。ASIC和FPGA不同的技术特征造就了它们应用于不同的市场:ASIC被用于大批量的专用产品,以尽可能摊薄高额的设计与制造成本,实现良好的性价比;FPGA虽单价昂贵,但由于其可编程的灵活性而广受小批量应用的青睐。但近年来半导体市场发生了显著的变化,打破了二者之间的平衡,产品面市时间的压力以及市场对产品设计的快捷性和灵活性要求的提升,使得FPGA的发展势头强劲。Altera公司于2000年提出了SOPC概念,在可编程器件上实现SOC技术,并同时推出了相应的开发软件QuartusⅡ。目前Xilinx也利用自己在FPGA方面的优势,积极发展可编程芯片系统产品。SOPC是可编程逻辑器件和基于ASIC的SOC技术融合的结果,目前0.13 mm的ASIC产品制造价格仍然相当昂贵,而集成了硬核或软核CPU、DSP、存储器、外围I/O及可编程逻辑器件的SOPC芯片在应用的灵活性和价格上有极大的优势。
SOPC结合了SOC和可编程逻辑器件各自的优点,一般具备以下基本特征:
(1)至少包含一个嵌入式处理器内核。
(2)具有小容量片内高速RAM资源。
(3)丰富的IPCore资源可供选择。
(4)足够的片上可编程逻辑资源。
(5)处理器调试接口和FPGA编程接口。
(6)包含部分可编程模拟电路。
(7)单芯片、低功耗、小封装。
Altera公司于2000年发布了Nios软核处理器,Nios软核处理器是一款RISC处理器,是业界第一款专为可编程逻辑优化的可配置处理器。NiosⅡ软核处理器兼容Nios软核处理器的指令集,是Altera公司最新的软核处理器。Altera把可编程逻辑器件固有的优势集成到嵌入式处理器的开发流程中,定义了处理器之后,可以在Nios处理器的体系结构之上开始设计软件原型。硬件工程师将CPU周边的专用硬件逻辑逐渐集成到系统中去,在每个阶段软件都能够进行测试并解决遇到的问题,因而软件工程师能对系统的结构提出更合理的建议,以改善代码效率和处理器性能。
Altera公司的SOPCBuilder为建立SOPC设计提供了标准化的图形环境,SOPCBuilder包含在QuartusⅡ软件中。SOPCBuilder可以帮助设计者以与传统SOC设计方法相比非常短的时间来完成由处理器、存储器和外设等组件组成的SOPC系统。传统的SOC设计方法中,设计者需要手工编写将系统中各个组件连接起来的顶层HDL设计文件。而SOPCBuilder则帮助设计者自动完成系统集成的工作,SOPC提供了直观的图形用户界面(GUI),帮助设计者添加和配置系统所需的外设(包括存储器、定制外设和IP模块),根据设计者的要求将这些外设与处理器连接在一起,并自动完成外设和存储器的地址映射、中断控制和总线控制等工作。
完成系统配置之后,SOPCBuilder根据要求生成VHDL或VerilogHDL的系统级设计代码,并自动生成部分外设的硬件抽象层(HAL)代码和底层硬件驱动代码,为软件开发做好准备。图3.1所示为一个由SOPCBuilder生成的系统的例子。这个系统中有3个主组件和5个从组件,各自完成不同的功能,组件之间的通信通过Avalon交换架构来实现。图3.1由SOPCBuilder生成的系统示例
SOPCBuilder中提供了一系列的组件库,可供用户直接使用,这些组件包括:
(1) NiosⅡ等处理器。
(2)微控制器外设。
(3)定时器。
(4)UART、SPI等串行通信接口。
(5)通用输入输出口(GPIO)。
(6)存储器接口。
(7)总线和总线桥。
(8)数字信号处理(DSP)内核。在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Ⅱ软件中设置系统编译所需的所有文件。3.1.2SOPC系统设计流程
SOPCBuilder系统的设计流程如图3.2所示,主要分为三个步骤:①从组件库中选择组件;②定制组件并集成系统;③验证并构建系统。图3.2SOPCBuilder设计流程在QuartusⅡ中,每一个SOPCBuilder的系统对应一个QuartusⅡ的工程,可以用Tools>SOPCBuilder菜单启动SOPCBuilder,也可以用工具按钮启动SOPCBuilder。如果工程中没有SOPCBuilder系统,QuartusⅡ会提示使用者输入SOPCBuilder系统的名称,并选择生成VHDL代码还是Verilog代码。SOPCBuilder同时只能对一个系统进行操作,但一个QuartusⅡ工程可以包含多个系统。在SOPCBuilder中可以打开一个已有的系统,也可以新建系统,系统的文件与相关的QuatursⅡ工程存储在同一个目录中,每个系统的信息都保存在一个名称为<系统模块名称>.ptf的文件中。
SOPCBuilder的用户界面按功能分为不同的标签页,SOPCBuilder启动后默认的标签页为SystemContents标签页。SystemContents标签页的主要作用为:①将组件库中的组件添加为系统组件;②配置组件;③指定组件之间的连接。SOPCBuilder的图形界面如图3.3所示。图3.3SOPCBuilder的图形界面在SOPCBuilder中,一个系统是由多个组件(Component)组成的,这些组件按照一定的规则设计,能够被SOPCBuilder识别并可以自动连接到系统中去。SOPCBuilder将多个组件连接在一起生成一个顶层设计模块,称做“系统模块”(SystemModule)。图3.3中,系统组件列表区域中列出了当前系统中例化的组件,在这个区域中,可以修改组件的名称,设定从组件的基地址、时钟源,如果需要,还可以设定每个组件的中断优先级。所有外设在系统中的管理都是按统一分配的地址进行的,系统组件列表中可以设置每一个外设的基地址,根据基地址和外设的特性,自动生成结束地址。如果设计者不干预,SOPCBuilder则自动分配各个外设的地址。有效组件列表区域分类列出了当前有效的组件,包括Altera提供的以及自定义的组件库,用户可以从这个列表中选择自己需要的组件添加到右侧的系统组件列表中,建立用户自己的系统,每个添加到系统中的组件都可能会启动一个配置向导,指导用户配置这个组件。连接面板区域显示了组件之间的连接,可以在这个区域中指定主组件与从组件之间的连接关系以及与多个主组件共享的从组件的总线仲裁器。时钟设置表用以设置系统的时钟。3.2Avalon交换架构3.2.1Avalon总线基本概念
Avalon交换式总线是由Altera开发的一种专用的用以连接SOPC系统主组件与从组件的内部连线技术。Avalon交换式总线由SOPCBuilder自动生成,是一种理想的用于系统处理器和外设之间的内联总线。每当一个新的组件被添加到系统中或是某个外设的优先级被改变了,SOPCBuilder就会自动生成一个新的、最佳的交换式总线。用户可以很容易地修改自己设计的系统以提高性能或增加系统功能。Avalon交换式总线的特性包括以下几点:
(1)基于向导的配置方式。
(2)可以并发操作的多主设备。
(3)内建地址译码。
(4)原始的或动态的位宽可变的外设接口。
(5)支持各种模式的Avalon传输。
(6)支持等待时间读/写传输。
(7)跨时钟域电路。
Avalon交换式总线使用很少的逻辑资源来支持数据总线复用、地址译码、产生等待周期、对齐外设地址(支持原始的和动态的总线尺寸对齐)、指定中断优先级以及高级的交换式总线传输。如图3.4所示的例子中,用Avalon交换架构将多个主组件和多个从组件连接到一起。图3.4Avalon交换式总线的例子图3.4中的部分组件使用了多个Avalon端口,由于一个组件可以拥有多个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总线传输,而不能发起总线传输。从外设,例如存储器设备和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)描述。3.2.2Avalon总线信号
Avalon总线是一种同步总线接口,由主设备提供总线时钟。在总线时钟的上升沿发起一次总线传输,而在下一个时钟的上升沿或上升沿之前完成传输。Avalon总线上的数据必须保证在总线时钟的上升沿是稳定的,如果有片外异步外设连接到Avalon总线上,则该外设必须保证在总线时钟上升沿到来之前输出达到稳定。
Avalon总线规范定义了主端口和从端口之间通过Avalon总线模块传输数据所需的信号和时序。构成Avalon总线模块和外设之间接口的信号随着传输模式的不同而不同。首先,主传输与从传输的接口不同,使得主端口与从端口的信号定义也不同。此外,通过系统PTF文件的设置,所需信号的确切类型与数量也是可变的。当讨论Avalon总线传输时,必须要注意讨论的是总线的哪一侧,是主端口接口还是从端口接口。由主端口输出的信号与输入到目标外设的从端口的对应信号可能会有较大的差别。从端口的信号活动总是主外设发起总线传输的结果。但是,实际的从端口输入信号并非直接来自主端口。Avalon总线模块传递来自主端口的信号,并对信号进行裁剪(例如插入等待周期,在主端口间进行仲裁等),以满足从外设的需要。由于以上原因,对Avalon总线传输的介绍将分为主传输类型和从传输类型两个部分。大多数用户只关心从传输,因为他们设计的用户自定义外设一般都是从外设,这种情况下用户只需考虑Avalon总线模块和用户自定义外设之间的信号,只有当用户创建主外设时才涉及到主传输。因为Avalon总线由HDL文件综合而来,所以在连接Avalon总线模块和Avalon外设时需要一些特别的考虑。对于传统的片外总线结构,所有外设都共享一组固定的、预先设计的线路。而Avalon总线与此不同:SOPCBuilder必须准确地了解每个外设提供了哪些Avalon端口,以便连接外设与Avalon总线模块;它还需要了解每个端口的名称和类型,这些信息保存在系统PTF文件中。
Avalon总线规范不要求Avalon外设必须包含哪些信号。它只定义了外设可以包含的各种信号类型(例如地址、数据、时钟等)。外设的每一个信号都要指定一个有效的Avalon信号类型,以确定该信号的作用。信号也可以是用户自定义的,在这种情况下,SOPCBuilder不会将该端口与Avalon总线模块连接。Avalon信号分为主端口信号和从端口信号两类,外设使用的信号类型由端口的主/从角色来决定,每个单独的主端口或从端口使用的信号类型由外设的设计决定。例如,设计一个只有输出的PIO从外设,只需定义用于写传输(从外设向Avalon总线模块方向)的信号,而不需定义用于读传输的信号。尽管从端口允许使用中断请求(irq)信号,但也不是必须使用的。
Avalon总线规范未规定Avalon外设信号的命名规则,不同类型信号的作用是预先定义的,而信号的名称则是由外设决定的,信号可以按照它的信号类型来命名,也可以遵照系统级的命名规范采用不同的名称。在下面的章节中讨论Avalon总线传输时会涉及到一些Avalon信号,例如readdata信号和irq信号,在这里将信号类型的名称作为信号名称,但外设信号的实际名称可以与此不同。表3.1列举了部分Avalon从端口可用的信号类型,信号的方向是从外设的角度来定义的。例如时钟信号clk(方向为in)对于从外设来说是输入信号,而对于Avalon总线模块来说是输出信号。表3.1中列举的信号类型都是高电平有效。Avalon总线还提供了各信号类型的反向形式,在PTF声明中,在信号类型名称后面添加“_n”,便可将对应的端口声明为低电平有效,这对许多使用低电平有效逻辑的片外外设非常有用。不论外设是在系统模块的内部还是外部实现,Avalon总线信号及其操作都是相同的。在内部实现的情况下,SOPCBuilder自动将外设的主端口或从端口连接到Avalon总线模块;在外部实现的情况下,用户必须手工地将主端口或从端口连接到系统模块。在任何情况下,Avalon总线信号的行为都是相同的。
Avalon总线允许多个主端口连接到Avalon总线模块,而且实现Avalon总线的并发多主端口功能时,Avalon总线模块不需要额外的特殊信号。当多个主外设试图同时访问同一个从外设时,Avalon总线模块用内部的从端口仲裁逻辑来解决冲突。仲裁机制对于Avalon总线外设是完全透明的,因而,不论是否使用了仲裁,应用于主端口和从端口的Avalon总线传输协议是相同的,换句话说,从端口不会意识到有多个主外设同时请求总线传输。类似地,被仲裁逻辑强制等待的主外设也不会意识到另一个获胜的主外设的存在,主端口只是简单地发现它的等待请求信号被置为有效,并一直等待,直到目标从外设准备好处理总线传输。将仲裁的细节隐藏在Avalon总线模块内部极大地简化了外设的设计,任何Avalon外设都可以在单主端口和多主端口结构中使用。
Avalon三态接口用于将片外设备通过可编程逻辑器件的I/O引脚直接连接到Avalon总线模块上。用PTF参数Bus_Type=“valon_tristate”指定一个片外外设时使用了Avalon三态接口,大多数系统都需要使用片外存储器设备。片外存储器设备一般会在PCB上共享地址和数据总线线路,与这些设备连接需要使用三态双向数据接口,以便其他外设也能够驱动数据线而不会引起信号竞争。Avalon三态接口就是通过可编程逻辑器件的I/O引脚连接简单的片外从外设,如FLASH存储器、SRAM以及同步SRAM(SSRAM)等。有些Avalon传输模式不支持片外设备。Avalon三态接口仅限于片外从外设,片外从外设可以使用外设控制的等待周期或是固定的建立时间、保持时间和等待周期。外设可以使用固定的延迟传输,但不能使用可变的延迟传输;不能用Avalon三态接口扩展片外主外设,用户可通过创建一个片上的用户自定义外设来连接片外主外设,这一外设用作Avalon接口和片外设备通信协议之间的桥。这种桥比较复杂且旨在特殊场合中使用,因此Avalon总线规范不包括这些情况。表3.2列举了片外从外设与Avalon总线模块之间接口的信号类型,信号的方向是从外设的角度定义的。外设提供的端口由外设的设计和PTF文件中的端口定义来决定,不需要提供全部的信号类型。同非三态的Avalon接口一样,所有的信号类型在添加了“_n”之后便成为低电平有效的形式,例如chipselect_n和write_n。
Avalon三态接口使用双向端口data代替分离的readdata和writedata端口。data端口是双向的,从外设和Avalon总线模块只能在特定的时间驱动data信号线。在写传输期间,Avalon总线模块驱动data端口,从设备捕获data;在读传输期间,从设备驱动data端口,Avalon总线模块捕获data。
Avalon三态接口引入了共享端口的概念。共享端口在将Avalon总线连接到外部设备时能够减少所需的外部引脚数量,PTF参数Is_Shared用于声明一个端口是共享的。一个特定类型的共享端口可以连接到多个片外从设备,并由它们共享。数据端口总是共享的,例如,当Avalon总线模块的data端口连接到可编程逻辑器件的I/O引脚时,这些data引脚可以连接到多个片外外设,其他端口例如address、read和write根据需要也可以共享。如果一个或多个其他外设使用了一个同样类型的端口,并且这些外设的端口也都声明为共享,那么SOPCBuilder就会将这些共享端口复用到相同的设备I/O引脚上,Avalon三态从外设根据chipselect和outputenable的定义,在特定时间响应共享信号。使用Avalon三态接口的外设必须使用chipselect端口。片外从外设只能在它的chipselect信号有效时接受传输。chipselect不是共享信号,每个片外外设都由独立的chipselect信号驱动。
Avalon三态接口为从端口读传输引入了outputenable信号类型。为避免data线上的信号竞争,片外从外设只能在outputenable有效时驱动它们的data输出引脚。outputenable主要用于具有延迟的片外存储器设备,例如SSRAM在发起读传输后的几个时钟周期之后驱动data信号线。3.2.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总线传输基础上,通过增加以下几种特性中的的一种或多种,对总线传输作以扩展,可以派生出能够适应所有外设的传输模式,这些特性包括:①插入固定长度的或可变长度的等待状态;②固定延迟或可变延迟的流水线传输模式;③建立和保持时间;④突发传输;⑤流控信号;⑥三态驱动。例如在传输中增加等待状态可以适应低速外设,而使用流控信号实现的流模式传输以及多主传输则可以适应对带宽要求较高的外设。主端口的基本传输模式是所有Avalon主传输的基础。以下对常用的几种Avalon总线传输的时序加以说明,本书中只涉及到Avalon总线模块与从外设之间的传输。
1.Avalon总线基本从读(SlaveRead)传输
Avalon总线基本从读传输,是所有Avalon从读传输的信号时序都源自从端口的基本传输模式。基本从读传输(FundamentalSlaveReadTransfer)是在一个总线时钟周期内,由Avalon总线从外设向Avalon总线模块传输一个全数据总线宽度的数据,基本从读传输由Avalon总线模块发起。
Avalon总线基本从读传输时序如图3.5所示。从读传输从第一个总线时钟clk的上升沿开始,到下一个总线时钟的上升沿结束。在第一个clk的上升沿中,Avalon总线模块将address、byteenable和read信号传输给从端口,Avalon总线模块在内部对address解码产生从端口的片选信号chipselect,chipselect有效后,从端口以最快的速度将输出数据送到数据总线信号readdata上,Avalon总线模块在下一个时钟周期的上升沿读取readdata。图3.5Avalon总线基本从读传输时序
Avalon总线基本从读传输只适用于异步从外设,比如异步存储芯片等。为了在一个总线时钟周期内完成传输,从端口必须在chipselect信号有效后,立即将数据送到数据总线上,而且在下一个时钟上升沿到来之前达到稳定。对输入寄存的同步从外设必须使用等待状态属性或流水线状态属性才能够完成Avalon总线传输。等待状态的加入,扩展了从读传输的性能,可以给从外设一个或多个时钟周期以捕获地址信号并输出数据信号,但会影响从端口数据的吞吐量。如果不加入等待状态,每个周期完成一次数据传输;加入一个时钟周期的等待状态,则每两个周期完成一次数据传输,数据吞吐量降低一半;如果加入更多的等待状态,则数据传输速率会更低。有两种向从读传输中加入等待状态的方法,即加入固定时钟周期数的等待状态和加入可变时钟周期数的等待状态。固定时钟周期数等待状态的从读传输与基本从读传输所使用的信号一样,区别仅在于从chipselect信号有效至readdata有效之前需要等待多长时间,比如插入一个时钟周期的等待状态的从读传输,在chipselect有效后,Avalon总线模块等待一个时钟周期之后才去捕捉readdata信号。图3.6是带一个时钟周期的等待状态的Avalon总线从读传输时序。在第一个时钟周期中,Avalon总线模块先提供有效的address、byteenable、read及chipselect信号,插入等待状态后,外设不必在第一个周期内提供有效数据,而在第二个总线时钟周期内将有效数据输出到readdata上即可,在第三个时钟周期的上升沿,Avalon总线模块从readdata上捕获数据,完成总线传输。图3.6带一个时钟周期的等待状态的Avalon总线从读传输时序可变时钟周期数等待状态的从读传输与基本从读传输相比,需要为从端口增加一个waiterequest信号。可变时钟周期数等待状态的Avalon总线从读传输时序如图3.7所示。在第一个时钟周期中,Avalon总线模块先提供有效的address、byteenable、read及chipselect信号,从端口在第一个时钟周期内提供有效的waitrequest信号以停止Avalon总线模块,此时Avalon总线模块保持地址信号和控制信号不变并停止从readdata捕捉数据。从端口将数据准备好之后,取消waitrequest信号,在下一个时钟信号的上升沿,Avalon总线模块从readdata上捕获数据,完成总线传输。需要注意的是,Avalon总线模块停止之后,一般相应的也会停止一个相关的Avalon总线主外设,Avalon总线模块并不提供停止之后的超时处理机制,因此在设计从外设时,要确保从模块不会无限期停止Avalon总线模块,进而永久性终止了一个相关的主外设的运行。图3.7可变时钟周期数等待状态的Avalon总线从读传输时序
2.Avalon总线基本从写(SlaveWrite)传输
Avalon总线基本从写传输是所有Avalon总线从写传输的基础,它不包括Avalon总线规范定义的所有传输特性。
Avalon总线基本从写传输由Avalon总线模块发起,在一个总线时钟周期内,向总线从外设传输一个单元的数据。如果数据总线宽度超过一个字节,byteenable信号将确定向哪一个字节写入数据,如果没有byteenalble信号,则表示向数据总线上的所有字节写数据。图3.8是Avalon总线基本从写时序。图3.8Avalon总线基本从写时序
Avalon总线模块提供有效的address、writedata、byteenable及write信号,avalon总线模块内部完成地址解码并提供有效的从端口片选信号chipselect,在下一个时钟周期的上升沿,从端口捕捉到地址、数据及控制信号,完成总线传输。
Avalon总线基本从写传输只适用于能够在一个时钟周期内捕捉数据的片上同步外设,对于不能在一个总线时钟周期内捕捉数据的外设则需要增加等待状态。与从读传输一样,有两种向从写传输中加入等待状态的方法:加入固定时钟周期数的等待状态和加入可变时钟周期数的等待状态。在从读传输时序中加入等待状态,也一样会降低写数据的吞吐量。固定时钟周期数等待状态的从写传输与基本从写传输所使用的信号一样,区别仅在于从Avalon总线模块提供了有效地址、数据及控制信号开始至从端口捕获数据之前所需要等待的时间。比如插入一个时钟周期的等待状态的从写传输,Avalon总线模块将提供有效地址、数据及控制信号并保持稳定直至传输完成,在第一个时钟周期内,Avalon总线模块先提供有效的address、byteenable、writedata及write信号,在等待期间,这些信号保持不变,在固定长度的等待状态之后,从设备读取数据,完成传输,Avalon总线模块也立即释放地址、数据及控制信号线。可变时钟周期数等待状态的从写传输允许从外设停止Avalon模块来捕捉writedata,这种传输模式适用于需要可变时间长度来读取数据的从外设,与基本从读传输相比,需要为从端口增加一个waiterequest信号。可变时钟周期数等待状态的Avalon总线从写传输时序如图3.9所示。在第一个时钟周期中,Avalon总线模块先提供有效的address、writedata、byteenable、write及chipselect信号,如果从端口需要额外的时间来捕捉数据,则必须在第一个时钟周期内提供有效的waitrequest信号以停止Avalon总线模块,此时Avalon总线模块保持地址信号和控制信号不变。从端口捕捉数据之后,取消waitrequest信号,完成总线传输。图3.9可变时钟周期等待状态的Avalon总线从写传输时序同样需要注意的是,Avalon总线模块停止之后,一般相应地也会停止一个相关的Avalon总线主外设,Avalon总线模块不提供停止之后的超时处理机制,因此在设计从外设时,要确保从模块不会无限期停止Avalon总线模块,进而永久性终止了一个相关的主外设的运行。还有一点需要注意:如果要对一个从端口可读也可写,而且其中读或写需要插入可变周期数的等待状态,则读/写都必须插入可变周期数的等待状态。
3.流水线传输模式针对需要多个时钟周期才能返回第一个数据,之后则每个周期都可以返回数据的同步从外设,使用Avalon流水线从读传输模式可以增加数据传输的带宽。使用流水线传输,主端口可以在捕获前一个readdata之前启动下一个传输。流水线读传输过程可以分为地址段和数据段两个独立的阶段。主端口通过在地址段提供有效地址来发起一次传输,从端口通过在数据段发送数据完成传输,下一次传输的地址段可以在前一次传输的数据段结束之前开始。这种传输方式会导致一个等待时间,即从一次传输的地址段结束至数据段结束之间的时间,也就是数据段的延迟时间,这个延迟称做流水线潜伏期(Latency),流水线潜伏期可以是固定的,也可以是变化的。地址段的持续时间决定了端口的吞吐率,即地址段持续的时间越长,端口的吞吐率越低。在流水线传输模式中,Avalon总线流水线传输从外设从Avalon总线模块捕获地址及控制信号后,需要一个或一个以上的时钟周期来产生输出数据。从端口捕获地址之后,Avalon总线模块即使没有捕获有效数据,也可以马上发起一次新的传输,这样,流水线从设备可能在任何时候都会有多个传输被挂起。固定等待时间的流水线从读传输使用的从端口信号与基本从读传输的一样,区别只在于地址段与数据段的时序。除readdata信号之外,其他信号在地址段与基本从读传输也相同。在地址段,从端口可以使用等待状态,地址段在等待状态(如果有必要的话)结束后的下一个总线时钟的上升沿结束时,从端口不需要在地址段提供这次传输的readdata信号,Avalon总线模块在地址段结束后可以发起下一次传输。在数据段,外设在多个时钟周期之后,将有效数据送到readdata上,如果外设固定的等待时间周期数为N,从端口则必须在地址段结束之后的第N个总线时钟信号clk的上升沿到来之前提供有效数据。如果N=1,则从端口应该在捕获地址及控制信号之后的下一个时钟周期的上升沿向readdata提供有效数据。图3.10为一个等待周期数可变而潜伏期为二个时钟周期的流水线从读传输时序。图3.10等待周期数可变而潜伏期为二个时钟周期的流水线从读传输时序可变潜伏时间的流水线从读传输允许从端口在可变潜伏时间之后返回有效数据。这种情况下,从端口需要一个额外的readdatavalid信号向Avalon总线表明从端口何时提供有效数据,如果使用了这个输出信号,则说明该从设备是可变潜伏时间的流水线从读端口。可变潜伏时间的时序在地址段与固定潜伏时间的流水线从读时序相同。地址段结束后,可变潜伏时间的流水线从端口可以花费任意时间来返回有效的从读数据,从外设能够提供有效数据后,同时使readdata和readdatavalid有效,并将这两个信号保持到下一个总线时钟的上升沿,Avalon总线模块在这个时钟的上升沿捕捉readdata及readdatavalid,数据段结束,即传输完成。图3.11是一个可变潜伏期的流水线从读传输时序。图3.11一个可变潜伏期的流水线从读传输时序
4.流控(FlowControl)传输
Avalon流控信号提供了一种从外设控制数据传输的模式,传输由从外设发起,当从外设表明其数据有效或可以接收数据时,传输便开始了。由于主端口不需要不断轮询从端口,因此流控信号简化了逻辑设计,另外流控信号也降低了带宽开销,适合大量数据的传输。主、从端口必须都使用流控信号才可以。从端口传输的流控信号有readyfordata、dataavailable或endofpacket等三个,使用一个或多个流控信号的传输就是流控传输,流控信号不影响其他信号的时序。从端口通过readyfordata信号标明已经准备好接收数据,取消readyfordata信号则表明如果继续向从端口写数据会导致溢出。从端口通过dataavailable表明它已经准备好数据,可以开始从读传输,取消dataavailable则表明继续读取数据会导致数据断流。可以用endofpacket信号表明传输的边界。图3.12是带流控的从读传输时序。图3.12带流控的从读传输时序3.3NiosⅡ软核处理器3.3.1NiosⅡ软核处理器概述嵌入式处理器内核是SOPC技术的核心。在一个SOPC系统中,如果条件允许,可以用任意一款软核处理器或硬核处理器作为嵌入式处理器,这个处理器可以非常复杂而且功能强大,也可以非常简单,这里所说的条件包括硬件和软件开发工具、可编程逻辑器件对该处理器的支持以及与外部设备的接口能力等方面。在SOPC的概念逐渐清晰的过程中,有一些不同的处理器被用于完成这一任务。目前市场上使用最多的SOPC系统软核处理器是Altera公司的Nios与NiosⅡ。
NiosⅡ嵌入式处理器是Nios处理器的升级版本,与Nios处理器采用相同的指令集。NiosⅡ处理器是一种RISC处理器,其主要特性如下:
(1) 32位指令集。
(2) 32位数据总线宽度。
(3) 32位地址空间。
(4) 32个通用寄存器。
(5) 32个外部中断源。
(6) 32×32乘法器和除法器。
(7)可以计算64位与128位乘法的专用指令。
(8)单精度浮点运算指令。
(9)基于边界扫描测试(JTAG)的调试逻辑,支持硬件断点、数据触发以及片外和片内的调试跟踪。
(10)最多达256个用户定义的CPU指令。
(11)软件开发工具:NiosⅡ的集成化开发环境(IDE),基于GNU的编译器以及硬件辅助调试模块。
(12)与SignalTapⅡ配合,可以实时分析FPGA中的指令和数据。
(13)最高可达250DMIPS(250×100万条指令/秒)的性能。
NiosⅡ系列32位RISC嵌入式处理器在FPGA中的实现成本只有35美分,并且由于处理器是软核形式,具有很大的灵活性,因此可以在多种系统配置组合中进行选择,以满足在性能、特性和成本之间的平衡。
NiosⅡ处理器的最大特点是其可配置性能,即用户可以根据自己的标准定制处理器,按照需要选择合适的外设、存储器和接口,此外还可以轻松集成自己专有的功能,使设计具有独特的竞争优势。为了满足设计升级的需求,对同一设计,NiosⅡ设计人员必须能够更改其设计,加入多个NiosⅡCPU、定制指令集、硬件加速器,以达到新的性能目标。还可以通过Avalon交换架构来调整系统性能,该架构是Altera的专有互联技术,支持多种并行数据通道,可实现大吞吐量的应用。
DE2平台是学习NiosⅡ系统设计的一个很好的平台,图3.13是一个在DE2上实现的NiosⅡ处理器系统的例子。这个系统中包括一个NiosⅡ软核处理器,通过Avalon总线与FPGA片上及片外的各种外设相连。片上的外设包括片上ROM、两个定时器Timer1和Timer2;与片外资源相连的外设包括UART、LCD显示驱动器、GPIO接口控制器、以太网接口、SD卡接口、SDRAM控制器以及与外部闪存和SRAM存储器连接的三态桥。系统中还配置了一个用于调试软件的JTAG调试模块。
NiosⅡ软核处理器系统的开发任务主要包括两方面:定制NiosⅡ处理器系统和软件开发。定制NiosⅡ处理器系统的工作由Altera提供的系统级设计工具SOPCBuilder完成;QuartusⅡ软件通过SOPCBuilder工具定制NiosⅡ处理器系统,在设计中对NiosⅡ处理器系统进行例化,并自动生成该处理器系统的部分底层驱动程序。图3.13一个在DE2上实现的NiosⅡ处理器系统的例子3.3.2NiosⅡ软核处理器的硬件结构可以将NiosⅡ软核处理器(NiosⅡ Processor Core)理解为对NiosⅡ架构的一种实现。NiosⅡ架构是一个指令集架构(InstructionSetArchitecture,缩写为ISA),NiosⅡ软核处理器并不包括外设及处理器与外部的连接电路,而只包括实现ISA的电路。
NiosⅡ软核处理器是实现NiosⅡ指令集架构时对三方面权衡的结果,即在性能与成本之间的权衡,保留或取消某些特性之间的权衡以及用软件实现还是用硬件实现特定功能之间的权衡。图3.14是一个NiosⅡ软核处理器的原理框图。NiosⅡ架构定义的用户可见的单元电路包括寄存器文件、算数逻辑单元(ALU)、与用户自定义指令逻辑的接口、异常控制器、中断控制器、指令总线、数据总线、指令及数据缓存、紧密耦合存储器接口电路及JTAG调试模块等。寄存器文件包括32个32位的通用寄存器和6个32位的控制寄存器,NiosⅡ架构允许在未来增加浮点运算寄存器。图3.14NiosⅡ软核处理器的原理框图算数逻辑单元(ALU)对存储在通用寄存器中的数据进行操作,其输入为1个或2个寄存器的数据,操作结果存储在一个通用寄存器中,NiosⅡ ALU支持常用的算数、逻辑、关系及移位操作,软件通过这些基本操作完成复杂的操作。在一些NiosⅡ的实现中,mul、muli、mulxss、mulxsu、mulxuu、div、divu等指令是不用硬件来实现的,当处理器处理这些指令时,会产生一个异常,异常处理器调用软件实现这些指令,因此从处理器使用者的角度看,没有什么不同。
NiosⅡ架构允许使用最多256条用户自定义指令,这些指令通过用户自定义指令逻辑电路来实现,对于处理器的使用者,这些指令与其他指令没有区别。NiosⅡ支持IEEE754-1985标准规定的单精度浮点运算指令,这些指令就是通过用户自定义指令来实现的。
NiosⅡ软核处理器支持两个复位信号,全局复位信号reset对软核处理器进行强制复位,cpu_resetrequest只是复位CPU,而不影响NiosⅡ系统中的其他组件。
NiosⅡ用异常控制器和中断控制器来处理异常时间和中断。
NiosⅡ处理器对存储器和外设的管理如图3.15所示。NiosⅡ处理器架构是哈佛结构,即使用两个独立的存储器模块分别存储指令和数据,每个存储器模块都不允许指令和数据并存,使用独立的指令总线和数据总线。NiosⅡ处理器的指令和数据是存储在外部存储器上的,处理器与外部存储器的数据交换通过Avalon交换架构实现,外部存储器作为Avalon交换架构的从设备。处理器作为一个Avalon架构的主设备连接到Avalon总线上以从外部存储器获取指令,获得的指令经过指令缓存连接到指令总线上。处理器使用另外一个Avalon主端口从外部存储器获得数据,获得的数据可以通过数据缓存连接到数据总线上,也可以直接连接到数据总线上。对外设的管理也通过Avalon交换架构,将外设映射到Avalon总线上特定的从设备地址来实现。除常规的数据与指令存储器之外,为了提高对存储器的存取速度,还可以为处理器配置紧密耦合存储器(TightlyCoupledMemory,TCM),NiosⅡ处理器与紧密耦合存储器的连接不经过Avalon交换架构而直接相连,紧密耦合指令存储器直接连接到指令缓存,紧密耦合数据存储器直接连接到数据缓存,紧密耦合存储器一般容量不大,而且只能用FPGA片上存储器实现。图3.15NiosⅡ处理器对存储器和外设的管理3.4NiosⅡ软核处理器软件开发3.4.1HAL系统库
NiosⅡ软核处理器的硬件抽象层(HAL)系统库是个小型运行时环境,它为NiosⅡ软核处理器的软件开发环境提供了简单的硬件驱动接口,是软件与硬件之间的桥梁。HAL应用程序接口(API)集成在ANSIC的标准库中,通过HALAPI可以使用如printf( )、fopen( )和fwrite( )等大家非常熟悉的C语言库函数来访问外设。HAL与SOPCBuilder和NiosⅡIDE紧密地集成在一起,HAL系统库由SOPCBuilder自动产生,SOPCBuilder生成一个系统时,会自动生成与系统配置相匹配的HAL系统库,当使用SOPCBuilder改变系统配置,并重新生成系统时,HAL系统库也会发生相应的改变,不会因为考虑不周而产生程序错误。因此NiosⅡ软核处理器的软件工程师可以不用深入了解底层硬件结构即可开发应用软件,也保证了NiosⅡ应用软件具有良好的可移植性。
HAL系统库提供以下服务:
(1)与NewlibANSIC标准库结合,提供用户熟知的库函数。
(2)提供设备驱动,使用户可以访问系统中的所有设备。
(3) HALAPI为用户提供了与HAL服务统一的标准接口来访问外设及处理中断等。
(4)系统初始化:在main( )函数之前为NiosⅡ处理器及运行时环境完成初始化任务。
(5)设备初始化:在main( )函数之前例化并初始化系统中的所有设备。图3.16为基于HAL的系统的分层结构。从图中可以看出,HAL系统库将系统硬件与用户应用程序联系在一起。图3.16基于HAL的系统的分层结构在基于HAL的系统设计中,软件人员要做的是编写设备驱动软件及应用软件。HAL已经提供了如下几类基本设备的通用驱动软件:
(1)字符模式设备:如UART等可以通过串行接口访问的设备。
(2)定时器设备:具有定时功能的硬件外设。
(3)文件系统设备:可以按文件系统管理方式存取的设备。
(4)以太网设备:可以通过为Altera的lwIP提供网络接入的设备。
(5) DMA设备:可实现不同地址范围的大量数据搬移的设备。
(6) FLASH存储器设备。
HAL为每一种设备模型定义了访问该设备的一组驱动程序,涵盖了大多数的应用场和,如果需要增加新的外设,只需在这些设备的基础上做一些简单的修改即可。HAL系统库调用设备驱动访问硬件,应用程序则调用ANSIC或HALAPI访问硬件,而不需要直接调用设备驱动。
Newlib是一种专为嵌入式系统开发的开源标准C语言库,HAL系统库中结合了Newlib标准库,关于Newlib的具体资料请参照/newlib。3.4.2NiosⅡ IDE
NiosⅡ的软件开发环境称为TheNiosⅡ IntegratedDevelopmentEnvironment(IDE),即NiosⅡ集成开发环境。NiosⅡ IDE是在EclipseIDE的基础上建立的,编译器采用GNUC/C++编译器。在NiosⅡ IDE中可以完成NiosⅡ处理器软件的编辑、编译、运行管理、调试和下载等工作。
NiosⅡ IDE将HAL系统库与用户设计紧密地结合在一起,在NiosⅡ IDE中每建立一个新的用户工程,IDE同时也会根据用户选择的NiosⅡ系统,建立一个HAL系统库工程。图3.17为NiosⅡ IDE工程的结构。通过SOPCBuilder建立的NiosⅡ处理器系统,称做SOPCBuilder系统,其信息保存在.ptf文件中,代表系统的硬件。NiosⅡ IDE在此基础上建立了HAL系统库工程,相当于是对完整的HAL系统库的一种定制。在HAL系统库工程中包括应用程序与硬件系统接口所需的所有信息,在NiosⅡIDE中,HAL系统库工程作为单独的工程与应用工程并列存在。用户在HAL系统库工程的基础上建立自己的应用工程,用户应用工程中包含所有用户自己编写的代码以及编译后的可执行文件。图3.17NiosⅡIDE工程的结构
HAL系统库中的系统头文件system.h担负着连接软件与硬件的关键任务,system.h中定义了NiosⅡ处理器系统中所有外设的名称、配置、基地址等,如果该外设需要中断服务,还会定义中断的优先级。应用程序设计者不需要与system.h直接打交道,甚至不需要在自己的工程中直接包含该头文件。system.h由NiosⅡ IDE自动产生并维护,用户不用手工修改,在NiosⅡIDE中对system.h的配置通过SystemLibraryProperties页面来修改。代码3.1是3.5节设计的系统中定时器sys_clk_timer、七段数码管显示seg7_lut_8及sysid等外设在system.h头文件中的定义。代码3.1system.h程序摘录。
/**sys_clk_timerconfiguration**/#defineSYS_CLK_TIMER_NAME"/dev/sys_clk_timer"#defineSYS_CLK_TIMER_TYPE"altera_avalon_timer"#defineSYS_CLK_TIMER_BASE0x00010800#defineSYS_CLK_TIMER_SPAN32#defineSYS_CLK_TIMER_IRQ1#defineSYS_CLK_TIMER_ALWAYS_RUN0#defineSYS_CLK_TIMER_FIXED_PERIOD0#defineSYS_CLK_TIMER_SNAPSHOT1#defineSYS_CLK_TIMER_PERIOD1#defineSYS_CLK_TIMER_PERIOD_UNITS"ms"#defineSYS_CLK_TIMER_RESET_OUTPUT0#defineSYS_CLK_TIMER_TIMEOUT_PULSE_OUTPUT0#defineSYS_CLK_TIMER_MULT0.001#defineSYS_CLK_TIMER_FREQ50000000/**seg7_lut_8_0configuration**/#defineSEG7_LUT_8_0_NAME"/dev/seg7_lut_8_0"#defineSEG7_LUT_8_0_TYPE"seg7_lut_8"#defineSEG7_LUT_8_0_BASE0x00010830#defineSEG7_LUT_8_0_SPAN4#defineSEG7_LUT_8_0_HDL_PARAMETERS""/**sysidconfiguration**/#defineSYSID_NAME"/dev/sysid"#defineSYSID_TYPE"altera_avalon_sysid"#defineSYSID_BASE0x00010828#defineSYSID_SPAN8#defineSYSID_ID2660984649u#defineSYSID_TIMESTAMP1160149925u3.5SOPC系统设计实例3.5.1SOPC系统设计流程
SOPC系统设计流程如图3.18所示。设计者首先根据任务要求决定系统需求,然后用SOPCBuilder建立自己的SOPC系统,完成这项工作后,硬件工程师与软件工程师可以开始协同工作。硬件工程师首先建立一个顶层设计文件,将生成的SOPC系统例化,并设置引脚分配、时序要求及其他设计约束,然后编译硬件设计并将FPGA设计下载到目标板中。在硬件工程师工作的同时,软件工程师可以用NiosⅡ IDE开发应用软件,并在NiosⅡIDE中使用NiosⅡ指令仿真器运行并调试软件,等硬件工程师将硬件设计下载到目标板中之后,软件工程师将可执行软件下载到目标板上的NiosⅡ系统中,并在目标板上运行调试软件,如果发现设计不满足需求,则再改进硬件与软件的设计。图3.18SOPC系统设计流程3.5.2SOPC系统设计实例在本部分内容中,用SOPC系统在DE2平台上实现一个计数器。先在DE2平台上建立SOPC系统的硬件,这个系统包括一个NiosⅡ/s嵌入式处理器、一个JTAGUART及一个定时器。另外,我们将加入一个自定义组件,实现对DE2平台上七段数码管的控制。
1.建立工程启动QuartusⅡ软件,用New>NewProjectWizard…菜单在QuartusⅡ中新建一个工程,本例中将工程的工作目录设定在C:\de2\niosII_DE2,工程的名称为niosii_rtos,如图3.19所示。如果希望使用已有工程的配置,点击图3.19中所示的UsingExistingProjectSettings按钮,显示如图3.20所示的界面,建议选用DE2系统光盘中提供的DE2_Top工程的配置。在接下来的向导中,先不用加入设计文件,器件中选择EP2C35F672C6,向导完成后的汇总界面如图3.21所示。图3.19为SOPC系统新建一个工程图3.20使用已有工程的配置图3.21新工程汇总界面
2.建立顶层设计文件建立工程之后,需要为工程建立一个顶层设计文件,这个设计文件的名称应该与工程的名称完全一致。设计文件可以是QuartusⅡ允许的各种设计输入格式的文件,如VerilogHDL、VHDL、AHDL及原理图设计文件等。本例中使用原理图设计文件。用File>New菜单建立一个新文件,选择BlockDiagram/SchematicFile文件,文件名称与工程名称保持一致,为niosii_rtos。保存新建的文件。
3.用SOPCBuilder建立一个新的SOPC硬件系统单击工具按钮或者Tools>SOPCBuilder菜单启动SOPCBuilder。如图3.22所示,输入新系统的名称为niosⅡ_system,当然也可以输入其他名称,但应该注意,所有的名称中都不能出现空格。TargetHDL选项可以选择Verilog,也可以选择VHDL,这里选择Verilog。按OK按钮,进入SOPCBuilder的主界面,如图3.23所示。SOPCBuilder主界面的组成部分在3.1节中已经讲述过,这里不再赘述。图3.22用SOPCBuilder建立一个新系统图3.23SOPCBuilder主界面
4.向系统中添加NiosⅡ处理器在SOPCBuilder主界面左侧的组件列表中,选中NiosⅡ Processor,按鼠标右键,在弹出的菜单中选择AddNewNiosⅡ Processor,显示如图3.24所示的NiosⅡ处理器配置界面。选择NiosⅡ/s作为本设计的处理器,从界面中可以看到,NiosⅡ/s占用约1200~1400个逻辑单元,2个M4K
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石林彝族自治县2024云南昆明市石林县退役军人事务局编外人员招聘(1人)笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 浙江省2024浙江大学医学院附属第二医院乳腺外科周娇娇课题组招聘项目聘用人员1人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 宿州市2024安徽宿州市人民政府发展研究中心选调事业单位工作人员4人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 国家事业单位招聘2024语言文字应用研究所招聘拟录用人员笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 四川省2024四川省发展和改革委员会机关服务中心编外聘用人员招聘3人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 云南省2024云南教育对外交流中心招聘1人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 2025辽宁抚顺市国际工程咨询集团有限公司下属规测院子公司招聘建筑所所长1人笔试历年常考点试题专练附带答案详解
- 2025贵州毕节市金沙县国有资本投资运营集团有限公司招聘笔试笔试历年典型考点题库附带答案详解
- 中国社会科学院中国边疆研究所2026年非事业编制人员招聘备考题库带答案详解
- 苏轼黄州的词
- 司法局司法辅助人员考试真题及答案
- 网咖服务意识培训
- 员工心理健康评估量表及使用说明
- 2025年私人银行服务行业分析报告及未来发展趋势预测
- 国开大学电大本科《组织行为学》2025期末试题及答案
- 2025及未来5年中国草本植物染发剂市场调查、数据监测研究报告
- 学前教育专升本2025年幼儿教育心理学专项训练试卷(含答案)
- 新能源储能电站应急预案事故处置方案
- 2025年食品安全管理员能力考核考试练习题及答案解析
- T-CI 879-2025 职业教育装备制造类安全教育实训规范
- (正式版)DB61∕T 1609-2022 《润滑油导热系数测定法》
评论
0/150
提交评论