APP下载

基于C/C++的多核处理器设计

2015-10-21姜欣宁桂小林姜晨炜

计算机时代 2015年9期
关键词:高效率

姜欣宁 桂小林 姜晨炜

摘 要: 为了解决高校学生多核处理器的设计与实现困难的问题,介绍了一种多核处理器的设计思想和实现方法。该方法利用了面向对象技术将多核处理器的工作原理抽象出来,在ISE平台上通过高级编程语言完成从模型设计到HLS编码,再到具体硬件布局实现的完整过程。该方法和硬件描述语言(VHL)设计方法相比较,大大降低了FPGA设计的复杂度,提高了系统的开发效率,并且对于从事软件设计的编程人员也可以通过C/C++进行FPGA的设计。它为高校学生进行多核处理器(模型机)的开发提供了一种新型的、实用的、高效的设计思路和方法。

关键词: 多核处理器; FPGA; HLS; ARM; 高效率

中图分类号:TP332 文献标志码:A 文章编号:1006-8228(2015)09-47-04

Multi-core processor design with C/C++

Jiang Xinning, Gui Xiaolin, Jiang Chenwei

(Xi'an Jiaotong university institute of telecommunications, Xi'an, Shanxi 710049, China)

Abstract: In order to solve the problem of the design and implementation of the multi-core processor for college students, this paper introduces a design idea and implementation method of multi-core processor. The method uses object-oriented technology to abstract the work principle of multi-core processor, and on the ISE platform, the complete process from the model design to the HLS encoding and then to the specific hardware layout realization, is completed through the advanced programming language. Comparing with the design method of hardware description language (VHL), this method greatly reduces the complexity of FPGA design, improves the development efficiency of the system, and ensures that the software programmer can also use C/C++ to achieve the design of FPGA. It provides a new, practical and efficient design method for college students to develop multi-core processor (model machine).

Key words: multi-core processor; FPGA; HLS; ARM; high efficiency

0 引言

學习和掌握一个计算机模型机的设计和实现方法,对于培养学生理论联系实际、创新能力及培养计算机系统的设计人才,都有着十分重要的意义。目前在高校的计算机专业课程实验教学中,基本上是以单处理器为教学对象,而现实的应用中,主流处理器均是多核的处理器,它相对于单核处理器具有更高的指令并行执行能力,它能大大提高指令执行效率,进而提高整个系统的效率。所以开展多核处理器的研究和设计是我们教学改革的一个有益尝试。

我们开展单核处理器设计的实验教学已有八年多了。利用硬件描述语言(如VHDL,Verilog HDL等)在FPGA上实现单核处理器的的功能设计是目前国内外比较通用的方法,相比于微处理器,它具有功耗低,设计周期短,开发费用低等特点。随着计算机技术的迅猛发展,双(多)核处理器被广泛应用在各个领域,让计算机、电子等相关专业的学生掌握其中的设计思想是十分必要的。然而,在硬件电路上完成多核处理器系统设计并不是一件容易的事,因为需要多方面的考虑,如系统的逻辑结构、复杂的接口等问题,以及较高的知识门槛和丰富的实际设计经验。若在教学实践中让学生设计,则难以在有限的时间内完成它。另外,这相关的开发资料十分匮乏。为此,本文给出了一种新的设计思想及描述了完整的实现的过程;较好地解决了以上问题。

1 双核/多核处理器系统设计

1.1 开发平台

本项目采用了我们自己研制的“XJECA开放式计算机系统结构实验系统(开发板)”。开发板的核心部件是Xilinx公司的Zynq-7000 All Programmable SoC(Zynq-7020)器件,它在一个芯片内将ARM双核Cortex-A9 MPCore处理系统(PS)与可扩展的可编程逻辑架构(PL)完美地结合在一起。芯片内部采用了业界事实标准的AMBA总线作为片上系统的互连总线;它可支持双核Cortex-A9处理器系统作为主控部件以及可编程逻辑的定制和外设的并行开发[9]。软件开发平台采用Xilinx公司的ISE14.*(或Vivado)。

1.2 系统架构的设计

本项目设计为同构的处理模块组成多核处理器结构,类似Intel的双核处理器的设计思路,如图1所示。每个处理模块中有独自的数据和指令cache,访存操作则通过各自的内存管理器进行,而内存管理器由统一的总线协调模块管理,分配给不同的处理单元不同的访存地址,并且解决各个处理器访存冲突问题。这里处理单元CPU0,CPU1,CPU2…及其相对应的数据指令cache通过FPGA(PL)设计实现,而内存管理器的总线协调模块则用ARM(PS)来实现[1-8]。

1.3 单核处理模块的设计

在“传统”CPU(运算器、寄存器和控制器)的基础上,另加高速缓存cache单元,构成新的单核处理模块。

通过Cache机制进行预测。预测数据主要是基于程序访问的局部性原理。Cache的替换算法有很多种,本文采用了先入先出算法(FIFO)。

1.4 指令系统设计

采用自定义的定长精简指令集。指令的长度为32位,指令格式分为6个段,各段分别表示:指令类型、寻找方式、操作码、源操作数、目的操作数、立即数。如图2所示。

为便于说明,我们对功能作了简化,在ALU中只用到十种运算,所以只用到前十个操作码,后面22个操作码用于以后拓展操作。而对于访存操作来说,第24~29位代表了访存操作的源和目的数据来源。其中第27~29位表示了源操作数的来源,第24~26位表示目的操作来源。一共有4种寻址方式,分别是寄存器寻址,直接寻找,寄存器间接寻址和立即数。

1.5 HLS的利用

在FPGA上进行复杂的系统设计,利用传统的方法(硬件描述语言)设计,在时间有限的情况下会有较大的困难;为解决这一局限性问题,我们利用了高级综合工具(HLS)的特性;能够大幅度提高设计效率,可以站在更高的层次、以一种全新的角度来设计,即FPGA的设计更加重视“系统级”建模。设计的效率取决于设计者对传统“软件串行执行”和“硬件并行执行”的理解程度。特别适合从事传统的“软件”设计、编程人员通过HLS工具进行FPGA的设计。HLS的主要功能,包括以下方面[12-13]。

⑴ 可以从C语言描述级的源代码创建一个RTL级实现。从C源代码提取出控制和数据流。

⑵ 实现多样的设计:较小的设计,较快速的设计,优化的设计。可以比较方便进行各种复杂系统的设计方法的“探索”。

⑶ 可以从C代码提取硬件结构,包括:从C代码中提取控制和数据通道(顶层)。在顶层控制流的一些点,将控制传递到子程序中;能并行地执行子程序。

⑷ 通过调度和绑定过程,HLS将C代码映射到硬件。

⑸ HLS工具的优势在可移植性及实现设计和IP“重用”等。

1.6 设计步骤

⑴ 使用C++技术对设计好的处理器的每个部件进行编码,并且通过HLS工具来生成对应的硬件描述语言以及对应的RTL级视图。

与传统的硬件描述语言设计相比较,描述设计过程更抽象,它可以忽略器件的一些硬件细节,相关的功能都可以交给HLS工具来自动生成。

⑵ 对控制器的HLS编码,包括了取指令、指令译码和指令跳转等操作,由于指令是从外部存储器中获取,模块所需的接口为外部数据总线和一些读写控制信号,以及一些标准接口的信号。外部数据总线应该与实验板中的核心芯片Zynq-7020内的ARM上的总线连接。

⑶ 多核控制器的HLS编码,因为是同构多核系统,所以可以将设计的单核处理模块作为一个类来使用,同时针对这个类生成多个实例,通过多核控制器来给每个实例分配对应的内存地址空间。

2 多核处理器的实现

一个完整的多核系统需要把设计的处理器模块(FPGA)与ARM配合起来使用。通过ARM来实现我们所设计FPGA上的多核处理器核间任务调度工作和FPGA访存工作。这些需要对ARM进行程序开发[10-11]。

2.1 生成Pcore

首先需要生成处理器RTL级模型对应的Pcore,然后将其添加到ARM的外设中,建立起ARM和FPGA之间的联系。操作步骤如下:

使用指令创建Pcore;在HLS工具中选择Directive標签,右键选择Insert Directive,在下拉框内选择RESOURCE。RESOURCE是用于在一个RTL接口上,添加一个总线接口。这样就为我们所需要的信号创建地址映射,然后就可以通过软件访问到。另一种方法是不在顶层模块上使用RESOURCE命令,而是为各个信号创建一个单独的接口。通过使用GPIO IP核,将这些端口连接到处理器系统中。最后,在HLS工具的主界面菜单下选择Solution->Export RTL,生成Pcore核。

2.2 ARM的编程

⑴ 通过创建一个ARM处理器系统(过程略),用于对HLS生成的处理器进行验证。

在Xilinx工具中打开Xilinx Platform Studio,创建一个新的设计工程。首先开始对外设参数进行配置,然后将我们上面所生成的Pcore核导入到本设计中。

⑵ 使用SDK设计和实现应用工程。

使用SDK生成新的应用工程,导入应用程序,并对应用工程进行验证。在SDK主界面中,创建一个新的应用工程,并导入用HLS生成Pcore核时的一些头文件和定义的操作函数。配置SDK开发环境后,进行ARM模块的编程。该模块主要实现了对FPGA中的处理器进行多核控制执行操作。最终得到执行结果。

3 测试结果与分析

3.1 处理器整体结构图

由各部件的HLS编码后生成最终的处理器模型,其中关键性的多核器件的构成十分复杂,如图3所示(或图略):

从图3中可以大致看出,这个处理器由上百个小器件通过复杂的连接构成,若单纯用硬件描述语言来描述,将会是一个很大的工程;它生成的vhd文件代码有1500多行,而用HLS来描述只需要约140行代码。以此说明HLS技术从系统层面上来描述所需的应用,大大的提高了设计的效率。

3.2 处理器的调试及仿真

我们可以用HLS工具对设计出来的处理器在C语言模式下进行调试,以检测设计的正确性,处理器调试程序代码如下。

我们先分别赋给寄存器r0,r1的值为0×100(即十进制的256),然后相加,并把结果放入内存地址5单元,最后得到了正确的结果512,这说明我们所设计的处理器在逻辑上是正确的。

3.3 多核处理器运行分析

本例对于不同数目的核,在处理器上运行1万次乘法所需要的时间来进行性能比较。

⑴ 执行如下代码

⑵ 实验结果分析

不同数目核的处理器运行,经过四次实验后得到的结果如表1及图4所示。

由表1和图4中可以看出,从单核到双核的过程,运行效率提高的比较明显,而从二核到四核并不是很明显,到达八核以后,运行的效率反而比四核的要慢一些, 其原因可能是当核的数目增加时,核间任务调度的时间会变得更长,还可能跟每个核启动的一些固有时间有关,这样导致了当核数目增加到一定时,继续增加反而会导致效率降低。对于本次设计的处理器系统,运行在四核情况下能达到其最高的运行效率。

通过在设计的处理器上分别调用其单核,双核,四核和八核完成的实验,得到了一些多核处理器性能方面的结论,同时也验证了本系统的正确性和可执行性。

⑶ FPGA资源使用情况

从表2的FPGA資源使用情况可以看出,使用HLS工具生成的硬件电路资源利用率还是很高的。

4 结束语

本文利用ARM、C/C++及HLS技术,从系统结构框架、指令代码系统、主要部件组成等方面进行了完整而全面的设计并给予验证。阐明了该方法可以大大降低设计一个计算机(模型机)系统的复杂度,也证明了这种设计思路和方法的可行性。它为今后高校计算机系统教学中进行高效率、较复杂系统的设计及方法验证提供了一种新的途径。

本项目仍有一些内容有待改进。例如,在HLS技术中,C对底层电路的内在关系(时序方面)还需进一步描述。今后需要在ARM中增加编译器功能;可以将多核的任务调度功能直接加入FPGA的设计;并且使FPGA和ARM完全的独立工作,以便FPGA的移植。

参考文献:

[1] 彭晓明,郭浩然,庞建民.多核处理器——技术、趋势和挑战[J].计算机科学,2012.11.14.

[2] 聂鹏程.多核处理器上的操作系统调度[D].西安电子科技大学,2013.

[3] 朱丹.基于FPGA的多核处理器系统的研究与设计[D].燕山大学,2013.

[4] 范晓亮.基于FPGA的双核模型机CPU的设计与实现[D].东北大学,2008.

[5] 章鸣嬛.基于可重构技术的双核微处理器系统的设计[J].微型电脑应用,2011.7.20.

[6] 姑苏飘雪.龙争虎斗AMD_lntel双核处理器技术解析[J].电脑迷,2006.4.15.

[7] 岳虹.嵌入式异构多核处理器设计与实现关键技术研究[D] 国防科学技术大学,2006.

[8] 英特尔亚太研发有限公司.多核多线程技术[M].上海交通大学出版社,2011.

[9] 何宾.Xilinx ALL Programmable Zynq-7000 SOC设计指南[M].清华大学出版社,2013.

[10] 张亮.基于Xilinx FPGA的多核嵌入式系统设计基础[J].西安电子科技大学,2011.

[11] 李宁.ARM Cortex-A8处理器原理与应用[M].北京航空航天出版社,2012.

[12] xilinx.Introduction to FPGA Design with Vivado HLS[M/OL].www.xilinx.com,2013.

[13] John Curreri, Greg Stitt, and Alan D. George. High-Level Synthesis of In-Circuit Assertions for Verification, Debugging, and Timing Analysis[J]. International Journal of Reconfigurable Computing,2011.

猜你喜欢

高效率
如何获得高效率的学习状态
小设疑与高效率
一种高效率单级PFC变换器的LED照明驱动电路
基于Si9112的高效率开关稳压电源