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所示。