基于NIOS II的SOPC存储器型外设接口的设计
扫描二维码
随时随地手机看文章
0 引言
随着微电子设计技术与工艺的发展,数字集成电路由最初的电子管、晶体管逐步发展成专用集成电路(ASIC,Application Specific IntegratedCircuit),同时可编程逻辑器件也取得了长足进步。
如今,可完成超大规模的复杂组合逻辑与时序逻辑的FPGA器件不断推陈出新,从而为实现片上可编程系统(SOPC)提供了强大的硬件支持。SOPC是Ahera公司提出的一种灵活、高效的片上系统(SOC)解决方案,它将处理器、存储器、I/O口等系统设计所需要的功能模块集成到一个可编程器件上,从而构成一个可编程的片上系统。
同时,Altera公司也提供了完整的开发套件(QuaItus II、SOPC Builder、Nios II IDE)和仿真工具等软件,并将其无缝地集成在一起。
利用Quartus II的SOPC Builder能够方便的构建一个基于FPGA的SOPC系统,SOPC Builder的系统库中包含了一些常用的Nios II外围设备,可以自动生成Avalon总线,以用于连接各个模块,从而形成SOPC系统。但系统库中没有提供的器件,而需要用户根据器件的具体情况设计Avalon接口。另外,对于一些没有逻辑功能的接口可以直接与总线相连,但需要根据Avalon总线规范和外设的控制时序来定制接口。
在实际工程中,通常可以使用的存储器有片上存储器和片外存储器,其中前者指的是FPGA内嵌的存储器,如片上RAM、FIFO、紧耦合存储器等;后者为FPGA片外存储器,如SRAM、SDRAM等。本文介绍了将片内存储器FIFO、紧耦合存储器及16位的SRAM集成在SOPC系统中,并在FPGA开发板上实现的方法,其内容包括外设的接入方法,以及紧耦合存储器如何通过紧耦合从端口直接与处理器的紧耦合数据/指令主端口相连等。
1 SOPC中的Avalon总线
Avalon交换式总线是由Altera公司开发的一种专用的内部连线技术。Avalon交换式总线由SOPCBuilder自动生成,是一种理想的、用于系统处理器和外设之间的内部连线。SOPC Builder可利用最少的FPGA资源,产生最佳的Avalon交换结构。在SOPC Builder中,每当一个新的组件被添加到系统中或是某个外设接人优先权被改变时,就会有一个新的、最佳的Avalon交换式总线被生成。Avalon交换式总线的整个生成过程都由SOPCBuilder自动完成。SOPC Builder自动生成的Avalon交换式总线可使用最少的逻辑资源来支持数据总线的服用、地址译码、等待周期的产生、外设的地址对齐(包括支持静态和动态地址对齐)、中断优先级的指定以及高级的交换式总线传输。Avalon交换式总线所定义的内联线策略使得任何一个Avalon总线上的主外设都可以与任何一个从外设进行通信。
Avalon总线结构构成的基本原则是:所有外设的接口与Avalon总线的时钟同步,并与Avalon总线的握手/应答信号一致;同时所有信号均为高电平或低电平,并由多路选择器完成选择功能,它没有三态信号,地址、数据和控制信号使用分离的专用端口,外设无需识别总线地址周期和数据总线周期。
1.1 Avalon从端口
Avalon接口定义了一组信号类型(如片选、读使能、写使能、地址、数据等),可用于描述主/从外设上基于地址的读/写接口。Avalon端口就是一组Avalon信号,这些信号用作一个单一的接口。Avalon端口分为主端口和从端口。主端口为发起传输的Avalon信号类型的集合。从端口为响应传输请求的Avalon信号类型的集合。从端口的基本信号有address、readdata、writedata、read、write、chipselect等。从端口的读传输可使用等待周期、建立时间等传输属性,但Avalon从端口读传输不使用保持时间属性。对于有些外设,在read信号有效之前,其address和chipselect信号需要一定周期才能达到稳定,因此具有建立时间的Avalon传输应满足上述建立时间要求。具有建立时间的读传输使用的信号与基本读传输的信号相同,不同之处只在于信号的时序。从端口的写传输除了具有与读传输同样的传输属性外,还具有保持时间,其建立保持时间通常用于需要addtess、byteenable、writedata和chipselect信号在write脉冲之前和/或之后的几个周期内保持稳定的片外外设。
1.2 地址对齐方式
当系统中存在数据宽度不匹配的主-从端口对时,需要考虑地址对齐问题。若系统中所有主端口和从端口都具有同样的数据宽度,则从端口数据的所有单元与主端口地址空间的静态地址边界对齐。对于存储器外设,一般应使用动态地址对齐。若Avalon从端口是一个对寄存器文件的接口,则应使用静态地址对齐。寄存器文件提供有对内部外设逻辑的访问功能。
一般情况下,动态地址对齐方式可以自动适应和Avalon master端口宽度不同的器件,而同时保持地址增长的方式是以字节为单位增长的方式。匹配不同端口宽度的mater和slave时,可使用动态地址对齐方式来得到一个连续的存储器空间。而采用动态地址对齐方式需要连接字节使能信号。
静态地址对齐的地址增长单位是Avalon master的端口宽度,每次读写都只对应一次操作,但在匹配不同端口宽度的mater和slave时,地址不能自动调整。某些地址可能没有相应的物理实体和它对应。
2 Nios II系统中的紧耦合存储器
Nios II系统中的紧耦合存储器是旁路缓存的片上存储器,该存储器具有最好的存储器访问性能,能采用与其它存储器一样的方法为之分配代码和数据。图1是包括紧耦合存储器和其他外设的Nios II系统图。
SOPC Builder中的片上存储器是唯一能够与Nios II内核上的紧耦合主端口相连接的存储器,而且,该片上存储器必须配置为RAM,同时处理器上的紧耦合主端口也必须只与一个片上存储器从端口相连接。每个紧耦合主端口都可以通过紧耦合接口与紧耦合从端口进行连接,因此,需要双端口存储器与紧耦合指令主端口进行连接。由于紧耦合指令主端口只能访问可执行代码,因此,双端口存储器的第二个存储器端口应当与处理器的数据端口相连,这样便于对数据的读/写操作。
在构建SOPC系统时,Nios II处理器需要选中Include tightly coupled instruction master pods以及Include tightly coupled data master pods,这样就可以添加处理器的紧耦合指令/数据主端口。片上存储器可选择SOPC Builder提供的onchip_memory,并在紧耦合指令存储器中设置其为双端口。当系统中的元件添加完成后,SOPC Builder会自动连接紧耦合指令/数据存储器的从端口和其他主端口,但是,这时候需要手动修改连接关系。tightly_coupled_instruction_memory的s1端口仅与处理器的紧耦合指令主端口相连接,而s2端口则可以作为一个Avalon从端口仅与处理器的Avalon数据主端口相连接,而tightly_coupled_data_memory的sl端口仅连接到处理器的紧耦合数据主端口。Nios II处理器中紧耦合存储器的配置如图2所示。
[!--empirenews.page--]
紧耦合数据存储器中的数据可以通过设定数据单元大小后在.hex文件中进行初始化。SOPCBuilder编译成功后,可在Nios II IDE下编写测试代码,以便将初始化文件中的数据通过指向地址的指针读出。以下是部分测试代码:
3 FIFO接口的设计
Altera公司已将FIFO内嵌到FPGA中,用户可以根据不同的设计需求来使用。FIFO的基本单元是寄存器,作为存储器件,它的存储能力可由内部定义的存储寄存器的数量决定,一般以数据量的深度X为宽度形式来说明所采用的基本结构,它通常是双端口的存储器,其中一个端口用于写入数据,另一个端口用于读出数据。使用时可以同时对存储器的存储单元进行写入和读出操作,而且FIFO型的存储器不需要由地址来存取数据。它通常需要由另外的信号线(或标志)来标明存储器的状态。
SOPC Builder中没有相应的FIFO接口控制器,因此需要自己定义FIFO接口。可首先在Quartus II的界面中新建一个.bdf文件,在下拉菜单中选择MegaWizard Plug-InManager,在打开的选项中从altera提供的库中找到FIFO,并根据需要选择FIFO的深度及宽度,设定好参数后再添加在.bdf中。然后在Ouartus II工程中打开SOPC Builder,并在Create New Comlaonet打开创建元件向导,同时在Signals选项卡中添加端口信号。由于需要将紧耦合存储器中的数据写到FIFO中,因此,FIFO的接口信号有写使能addr和32位写数据接口writedata等,且时钟和处理器的时钟信号相同。FIFO作为外设存储器设备,其地址对齐方式一般选择动态地址对齐。通过实验验证FIFO的时序符合要求后,即可将紧耦合数据存储器中的数据写到FIFO。图3所示是将紧耦合数据存储器中的数据写人FIFO的时序验证。
4 SRAM的接口设计
本设计中的SRAM采用的是ISSI公司的IS61LV25616AL-10TL型16位高速异步SRAM,它属于存储器型外设,因此,地址对齐方式选择动态地址对齐。SRAM可通过Avalon三态从端口与Avalon交换架构相连接。图4所示是SRAM在系统中的位置示意图。
Avalon的三态特性允许基于Avalon的系统直接与片外设备相连接,例如存储器芯片或一个外部处理器。Avalon三态从端口允许Avalon SwitchFabric与PCB板上共享的地址和数据总线的片外设备进行接口,可用于将Avalon Switch Fabric与同步和异步存储器芯片的连接。三态从端口通常使用双向信号data,而不是独立的、单向信号readdata和writedata。Data信号是三态的,因而允许多个三态外设与数据总线相连而不引起信号冲突。Avalon三态从端口经常使用负逻辑信号,符合典型的存储器芯片的约定。Avalon三态从端口信号需要注意的是地址信号。Avalon三态从端口地址信号一般代表一个字节地址,这与使用字地址的非三态从端口不同。Avalon三态从端口的地址信号可被多个片外设备共享,这些设备可能有不同的数据宽度。若Avalon三态从端口的数据宽度比一个字节大,则必须将地址信号从AvalonSwitch Fabric正确映射到从设备的地址线。
Avalon Switch Fabric信号直接与具有Avalon三态从端口的片外异步存储器相连一般不需要时钟信号,而在chipsclest、read或write信号上的脉冲则使用建立和保持时间与传输同步。
PCB板中有片选、读写使能、高低字节使能、数据线、地址线,因此,在SOPC Builder中的Create New Componet中设置SRAM的信号线包括数据线sram_data、地址线sram_addr、片选sram_ce、读写使能sram_oe、we以及字节使能信号sram_be。通过阅读IS61LV25616AL-10TL型高速异步静态RAM手册可知,其建立时间、保持时间都为40ns,读等待和写等待为160ns,这使其既可符合Avalon总线时序的要求,又符合IS61LN25616AL-10TL型SRAM的时序要求。图5所示为SRAM的三态从接口配置图,图6是将紧耦合数据存储器的数据写入SRAM的时序波形。
5 结束语
本文通过将片上和片外存储器接入SOPC系统,介绍了存储器型外设接口的定制方法。同时说明了将紧耦合存储器添加至系统,以及将数据通过处理器由存储器读写到存储器的设计方法,并在cyclone EP1C120240C8的FPGA上进行了结果验证,因此,用户可根据实际需要采用此方法将外设接入Avalon总线,并构建SOPC系统。