随着IC制造工艺水平的快速发展,片上系统(SOC)在ASIC设计中得到广泛应用。微处理器IP核是SOC片上系统的核心部分。但是大多数公司和研究机构没有足够的财力与人力开发自己的处理器,所以业界比较流行的做法就是购买微处理器的IP核,例如ARM核或MIPS核,但需要数十万美金的许可证费用的投入。
除了昂贵的ARM核与MIPS核以外,我们还有另外一种选择,就是选择开放源代码的微处理器的IP核。目前可以实际使用的开放源代码处理器有LEON系列与OPENRISC系列两种。本文就介绍了LEON2微处理器核,快速的建立起一个SOC的平台的原型对于验证系统性能与加快软件开发都是相当重要的。本文还详细阐述了如何在Altera的FPGA开发板上建立基于LEON2微处理器的SOC原型平台。
1 LEON2微处理器
LEON处理器系列是欧洲航天局的下属的研究所开发的32位微处理器,应用在航天局的各种ASIC芯片内。目前有LEON2,LEON3系列。LEON系列处理器是一个可配置,可综合适于在SOC设计中应用的微处理器核。LEON2处理器是一个使用SPARC V8指令集的32位的RISC处理器,它的源代码由可综合的VHDL代码构成。同时LEON2的性能也很不错,使用Dhrystone2.1的测试平台,LEON可以达到大约0.85MIPS/MHz。更大的好处是LEON处理器是一个公开源代码,遵循GNU LGPL协议。任何人都可以其网站上免费下载其硬件代码和各种开发软件工具与相关文档。并且在自己ASIC项目中使用。
LENO2的处理器具有以下的特点:
内部使用了5级流水线,兼容SPARC V8指令集。
具有硬件乘法,除法和MAC的功能。
具有分开的指令和数据cache结构(哈佛结构),可以根据需求灵活的配置cache的容量,大小范围是1-64kbyte。
片上总线规范使用了AMBA2.0规范,支持APB,和AHB标准。
具备一些片上常用外设,包括UART,中断控制,I/O端口,实时时钟,看门狗等。
支持硬件调试功能。
图1是LEON2的结构框图,虚线部分内是LEON2处理器的组成部分。
图1 LEON处理器的结构框图
从上面的介绍可以看出,LEON2的性能相当不错,但是作为一个处理器,除了本身的性能以外,同时还必须要有高效的编译器软件开发环境,各种应用软件和操作系统的支持。ARM和MIPS在嵌入式的广泛应用,与其背后的高效的软件编译开发工具,以及众多支持ARM和MIPS的实时操作系统软件有很大关系。很多公司选择ARM或MIPS,不仅看重微处理器的性能,更大的方面是看重其背后的软件支持环境。虽然LEON系列在这一点上不如商用微处理器,但是也是相当不错了。和硬件代码一起,可以下载LECCS,一个基于GCC的免费的C/C++的交叉编译系统,同时也可以使用GDB调试工具做源代码级别的调试。开源社区还提供免费的实时系统RTEMS,UClinux,eCos等免费实时操作系统。上述实时操作系统都已在LEON2处理器上移植成功了。
由于LEON2处理器的源代码是公开的,任何人都可以免费得到和使用。很多研究机构和公司没有自己的处理器的核,如果去开发,需要大量的人力物力支持,而且附带的各种软件编译器的开发也需要大量的工作,对于中小型的公司或研究院很难做到。如果通过购买ARM或者MIPS的核,通常都需要几十万美金的许可证的费用,同时以后的产品也必须要付一定的费用。而LEON系列处理器就给了这些公司和研究机构另外的一种选择。虽然在功耗和性能上同常用的ARM,MIPS等处理器还有些不足,但是完全可以使用。LEON处理器是经过了多个ASIC芯片流片成功的实践检验。目前基于LEON系列的ASIC芯片也有几十个项目。
2 在FPGA开发板上建立基于LEON2的SOC原型平台
随着片上系统复杂性的不断增加,为了克服片上系统(SOC)设计的挑战,半导体业界正在采取一种基于系统原型的平台设计方法。这种方法就是通过将片上系统映射到FPGA,这样可以在接近运行速度的前提下,验证硬件和软件。这样不仅给为软件部分能尽早的进行开发与调试工作提供了一个原型,同时也可以在实际运行中发现一些在系统设计中没有注意的地方。这样最终可以缩短设计周期,同时为ASIC设计一次成功提供了更大的把握。
在我们的设计中,为了上述的目的,所以决定在FPGA开发板上建立基于LEON2处理器的SOC平台。使用这个原型系统,就可以很容易验证系统的性能,并且加速软件开发调试流程。图2 就是我们的一个基于LEON2的平台的模块框图。LEON2处理器作为核心部分,片内ROM存放monitor负责系统初始化和将程序拷贝到片外SRAM内的任务,片外RAM是FPGA开发板上memory,用来存放程序和数据。我们自己设计的IP核通过AHB总线和LEON2相互交互。
FPGA开发板是Altera公司的FPGA开发板NIOS。板上主要有以下资源,一块APEX20KE的FPGA,256K字节的RAM(2个64K*16bit的片子),JTAG接口(通过JTAG接口我们可以从PC机上对APEX20KE进行编程),串行口和计算机的COM1口相连。APEX20KE是Altera公司的可编程逻辑器件,标准门数为20万门左右,片上可配置RAM或ROM为10K。
开发流程如图3开发流程图。
硬件流程: LEON2软核用VHDL代码编写的,和我们的VHDL设计文件一起使用Synplify综合工具生成FPGA的网表文件,然后使用Altera公司的布局布线和下载的工具Quartus生成相应的SOF文件。通过JTAG端口将SOF文件下载到片子上去。对FPGA硬件进行配置。由于Quartus软件可以预先配置APEX20KE片上ROM,所以我们可以利用这一点,在LEON2的片上ROM预先配置好1K大小的Monitor软件。
软件开发流程,当软件代码完成以后,使用LEON2的基于GCC的LECCS交叉编译系统对C代码编译,得到二进制代码以后,就可以通过串行口下载到FPGA开发板上。
3 软硬件详细设计
在LEON的开发网站上可以下载VHDL代码, LEON2是一个可配置的处理器核,可以根据具体系统的应用范围,对处理器的性能进行权衡。例如可以将指令和数据cache进行设置,选择从1kbyte到64kbyte的大小。同时选择处理器是否要支持硬件乘法器。是否要有硬件debug的功能等等。图四是LEON2的处理器配置的界面,将各个选项部分配置完毕,系统生成对应的VHDL代码。
图四 LEON2处理器的配置
在最终的设计中,选取了指令和数据cache分别是1kbyte,不带有硬件乘法功能的模块。得到LEON2的VHDL代码,然后加入我们自己设计的HDL代码,使用modelsim做简单的功能仿真。等功能仿真通过后,使用synplify对VHDL综合,应用 APEX20KE器件,最终的综合结果是:占用 FPGA资源是5800个LE,可以达到的时钟频率最大46M。应当注意的是,由于APEX20KE器件是Altera公司2000年的产品,如果采用Altera新一代的FPGA器件,例如StratixII器件,时钟频率可以达到107M,可以满足大多数的应用领域。
使用quartus进行布局布线时,需要将LEON2和外围的memory连接起来, LEON2对程序存储器和数据存储器是统一寻址。但是在FPGA原型平台设计时,软件需要多次修改调试,所以不能采取将程序固化在片外flash这种做法。所以采用了图5的结构,LEON2核同片内ROM和片外SRAM连接。其中ROM存放了一个monitor程序。由于这个部分是整个平台正常工作的核心,所以下面我专门对它做详细的解释。
图 5 LEON2与存储器的连接
LEON2的平台中有两个memory,分别是片内ROM,片外SRAM,LEON2对存储器是统一寻址的。分配如下:
Monitor的主要作用是在LEON2系统reset初始化的时候首先对处理器初始化,对LEON2的存储配置寄存器进行配置。然后向UART口发送启动信息,然后等待从UART信息。当软件部分使用交叉编译器LECCS在PC上编译完毕后, PC机通过UART口和FPGA开发板相互通信,就可以将编译好的srec文件下载到FPGA开发板上去,放置在片内rom里面的monitor程序就读入程序的内容以及程序的起始地址。起先monitor将srec程序拷贝到SRAM程序区,等全部程序下载好以后, monitor最后一条程序就会自动跳转到程序的起始位置,执行SRAM里的程序。
使用图5的连接。由于data_to_leon[31:0]的数据线是单向的,我们使用多路复用器来选择从外部SRAM的数据输入或者内部ROM数据输入和data_to_leon[31:0]相互连接,使用romsn[0]来选择。romsn[0]只有当访问PROM时才会置低,也就是地址为0x00000000-0x1FFFFFFF的时候。根据上面的描述只有系统reset初始化的时候访问PROM,也就是romsn[0]置低,等下载的程序全部都拷贝到SRAM程序区以后,monitor会控制LEON2处理器跳转到程序的起始位置,也就是片外的SRAM内,这时候romsn[0]保持高电平,也就是data_to_len[31:0]于ram_datain[31:0]连接。这样系统就只会接收外部SRAM的数据。
也就是,程序下载完毕后,就只会执行下载的程序。这样就可以反复修改程序,反复下载程序。可以在利用这个原型平台开发和调试软件硬件程序。
最终,在FPGA里根据上面图5的连接将LEON2分别和片内ROM,片外SRAM相互连接,其中片内rom放入了前面所说的monitor的程序。使用quartus做布局布线和下载。最终在FPGA开发板上建立了LEON2的SOC原型平台,系统可以稳定的工作在33M的时钟下,并且由于FPGA的可多次配置的特性,极大的方便了软件模块和硬件模块的开发调试工作。
4 总结和题外话
上面的内容论述了如何利用Altera的FPAG开发板资源,使用开放源代码的LEON2微处理器,建立一个基于LEON2的SOC原型开发平台。并且从软件结构和硬件设计的两个方面详细介绍了这个平台的建立。经过实际使用,完全满足要求,加快了我们的项目开发进度。