1、第二届中国电子学会Xilinx开放源码硬件创新大赛 基于多核技术的FPGA信息加密解密器设计 研究报告 大连理工大学参赛队 2010年3月10日 基于多核技术的FPGA信息加密解密器设计 指导老师:邱铁 团队成员:刘大伟、黄磊、满俊麟、张宝伟 联系方式:15940891366 dbmelody99z@ 目录 1.研究背景 - 5 - 1.1系统原理和技术特点: - 5 - 1.2多核技术:
2、 - 6 - 1.3多核的挑战: - 6 - 1.3.1 硬件挑战 - 6 - 1.3.2 软件挑战 - 6 - 1.4 多核的发展 - 7 - 1.5 优势 - 7 - 2 多核构架设计 - 8 - 2.1 系统架构结构概况 - 8 - 2.2 本地子系统 - 8 - 2.2.1 微处理器核 - 9 - 2.2.2 本地指令存储器 - 11 - 2.2.3 本地数据存储器 - 11 - 2.3 调度模块 - 11 - 2.3.1 任务分配器 - 11 - 2.3.2 任务调度器 - 11 - 2.3.3 全局数据通道 - 12 - 2.4
3、 通讯互连架构 - 12 - 2.4.1 局部总线 - 12 - 2.4.2 全局总线 - 13 - 2.4.3 总线桥 - 13 - 2.5 全局共享模块 - 14 - 2.5.1 共享数据存储器 - 14 - 2.5.2 中断控制器 - 14 - 3.调度算法的实现 - 14 - 3.1 多核CPU与调度算法的总体设计 - 14 - 3.2 存储地址分配 - 16 - 3.3 局部总线各模块的设计 - 16 - 3.3.1 本地指令存储器的设计 - 16 - 3.3.2 本地数据存储器的设计 - 17 - 3.4 调度模块中各模块的设计
4、 18 - 3.4.1任务分配器 - 19 - 3.4.2任务调度器 - 21 - 3.4.3 全局数据通道 - 24 - 3.5 全局总线各模块的设计 - 25 - 3.5.1 共享数据存储器 - 25 - 3.5.2 中断控制器 - 25 - 3.6 总线桥的设计 - 26 - 3.6.1 总线转换器 - 26 - 3.6.2 从主译码器 - 27 - 3.6.3 从主数据通道 - 27 - 4.加密解密算法实现 - 29 - 4.1加密解密算法的选择 - 29 - 4.2 RSA算法的实现 - 30 - 4.2.1汇编指令集 - 30 -
5、4.2.2汇编程序设计 - 36 - 4.3 RSA算法与四核调度 - 39 - 5.功能实现 - 39 - 5.1 测试原理 - 39 - 5.2 应用模型 - 40 - 5.3 系统级功能验证结果 - 40 - 参 考 文 献 - 46 - 1.研究背景 网络通信中的加密解密技术是信息安全技术领域的一项重要课题,本项目是针对当前网络通信特点—数据量较大,其通信速度受加密器和解密的限制,本项目采用FPGA设计多核CPU,实现对网络传输信息进行加密和解密,保证通信网络高效安全的实现。 1.1系统原理和技术特点: 1.在传统的
6、网络通信中,加密和解密的速度影响着通信的速度。单CPU难以满足高效性的要求。本项目采用FPGA设计具有4个核的处理器,外加一 个硬核,用硬核来控制4个软核,设计及优化调度算法,使四个核能协同工作,提高加密解密速度,保证数据传输速率。 2.加密解密采取RSA算法加密过程中,每个处理器完成一步加密技术,采用流水线式的处理机制,产生随机数—判断素数—加密—解密,这样不仅保证了网络传输的安全性,也保证了传输的高效性。 3.此项目中注重处理器的选型,处理器的数量,算法的编写,内存的分配等等。 4..Xilinx基于FPGA的嵌入式解决方案提供了构建范围广泛的嵌入式网络系统所需要的所有组件和资源。X
7、ilinx嵌入式解决方案的一个主要优点是其处理器、IP内核以及软件组件的灵活性和可扩展能力。 1.2多核技术: 1.多核平台的建立,及多核调度算法的的设计及优化。 2.将加密解密过程进行分配,用多核分步进行调度,及每一轮过程中给各处 理机分配合适的负载量。 3.利用平台使加密解密速度与网络传输速率相匹配。 1.3多核的挑战: 在单颗芯片上集成如此多的资源可以在很大程度上提升整体性能,但同时也在硬件和软件的设计上对设计人员提出了新的挑战。 1.3.1 硬件挑战 传统的并行处理系统是用来做科学运算、数据库,以及其他的与嵌入式系统工作环境大相径庭的应用领域。因此,相对传统的并行处理
8、系统而言,设计 人员必须着重考虑多处理器系统芯片的两个应用特征: (1) 实时性:所谓实时性,其核心含义在于确定性[8],实时性操作要求系 统架构有可以预见的性能体现,也就是说系统的每个组成单元都有可以预见 的为,这样软件开发人员可以计划如何在系统的关键部分获得要求的性能。 (2) 低功耗:大多数嵌入式设备都运行在对功耗要求比较严格的场合。封 装和机械散热装置解决了传统计算机的功耗问题,但是对于多处理器系统芯 片的设计,就需要从各个抽象层次去考虑功耗问题,在系统级设计时就必须 对功耗有足够精确的控制。 1.3.2 软件挑战 软件的设计在多处理器系统芯片的整体设计中起着越来越重要的作用
9、优秀的操作系统和应用软件使得同样的硬件平台能够更高效地完成系统功能。设计多处理器系统芯片在软件方面所面临的挑战主要体现在以下几个方面: 软硬件开发环境和工具:嵌入式软件的开发属于跨平台开发,即开发平 台使用的处理器和开发对象的处理器往往不是同一类型,因此,工程师需要交叉的软件集成开发环境,即进行代码编写、编译、链接和调试应用程序的集成开发环境。 软硬件协同设计:多处理器系统是一个专用系统,所以在设计过程中,软件设计和硬件设计是紧密结合、相互协调的,这就产生了软硬件协同设计、协同验证这种全新的设计方法,这就要求设计人员在设计时从系统功能的实现考虑,把实现时的软硬件同时考虑进去,硬件设计则需
10、要包括芯片级“功能定制”设计。这样既可以最大限度地利用有效资源,缩短开发周期,又能够获得更好的设计效果。 操作系统:大部分嵌入式系统都采用实时操作系统,而如今很多商业实 时操作系统都包括许多功能,从而显得过于庞大。对于多处理器系统芯片而言,根据应用环境的需要,仅仅需要这些操作系统的核心功能以支持少量应用软件的运行。 1.4 多核的发展 在单颗芯片上集成多个处理器来提高系统芯片的整体性能,已经成为下 一代集成电路的设计趋势。多处理器系统芯片的设计已经成为国内外研究的热点。 从产业界看,国际上已有多家公司建立了MPSoC平台,如表1.1所示, 分别有ARM的MPCORE,Philip的Ne
11、xperia,TI的OMAP以及Xilinx的Vertex-II Pro等。 目前,国内的多核发展水平还没有到达国际的水平,但是这同时也意味 着国内市场多核发展的广阔空间。自2006年开始,国内不少单位也开展MPSoC/NoC方面研究,并获得国家自然科学基金的资助,如表1.1所示。 表1.1 国家自然科学基金在MPSoC/NoC方向上的资助情况 项目名称 项目执行年限 项目承担单位 集成电路NoC低功耗通讯协议栈基础研究 2006.1-2008.12 合肥工业大学 多芯核共享的测试相应数据压缩方法研究 2006.1-2008.12 中科院计算技术研究所 无线通信自重
12、构容错NoC研究 2006.7-2008.12 西安邮电学院 多核体系结构下并行应用的性能评测与优化技术研究 2007.1-2008.12 北京应用物理与计算数学研究所 多核处理器系统的流式优化研究 2007.1-2009.12 清华大学 多核学习研究 2007.1-2009.12 西安电子科技大学 1.5 优势 网络通信中的信息加密解密技术是信息安全技术领域的一项重要课题,随着网络技术的发展,通过公司间通过通讯互联网来进行通讯越来越普及而公司内部亦大都通过局域网来传输,这就为信息的安全性埋下隐患,防范不好造成珍贵数据的丢失,重者被其他企业窃取商业机密而痛失买卖。目前
13、市场上的加密解密设备均为单核,密钥长度短(易被暴力破解(1)),运算速度远远达不到用户需求(视频会议,多线程通讯等等,需要很大计算量)。本公司所设计的产品是针对以上技术瓶颈,采用国际公认的高难度加密算法(RSA),配合超长密钥(2048位),本产品采用FPGA设计具有4个核的处理器,外加一个硬核。用硬核来控制4个软核,设计及优化调度算法,使4个软核进行流水线能协同工作,提高加密,解密速度。保证客户网络通信的高效和安全。 2 多核构架设计 2.1 系统架构结构概况 图2.1 系统架构图 如图2.1所示,该系统架构有如下几个主要部分:基于自己编写的微处理器的本地子系统、基于
14、双层总线的通讯架构、调度模块和全局共享模块。本地子系统主要有自己编写的微处理器核、本地存储器以及局部总线组成,并可扩展其他模块,但是在本设计中,仅研究了他的最简单的结构。子系统的数目可以配置,此多核系统具有4个子系统。调度模块包含了任务分配模块、任务调度模块和全局数据通道模块。全局总线包含了总线桥和译码器等。而全局共享模块包含共享数据存储器和中断控制器。 2.2 本地子系统 本地子系统包括微处理器核和本地存储器,其中每个处理器核都可以通过局部总线独占性地访问本地存储器,这样处理器之间就不会相互影响,为多核的并行操作奠定了基础。 在此体系中,微处理器采用的是自己编写的一个简单的处理器核,
15、处理器核采用的是哈佛结构(即程序指令和数据指令分开组织和存储的)同时具有基本的加、减和移位等操作。 同时也因为处理器核采用的是哈佛结构,所以本地处理器也分为本地指令存储器和本地数据存储器。 2.2.1 微处理器核 本课题研究的是多核与调度算法的设计,但是目前我们没有微处理器核,所以就把已有的向量机的内核做了一些改动,编写了可以适合本课题的微处理器核。 (1) 微处理器 图2.2 微处理器的五级流水线 该微处理器具有五级流水线,包括指令预取、指令译码、执行、存储器访问以及回写操作。如图2.2,在指令预取阶段,从Cache或主存储器中取出指令,并将其放入指令流水线,该指
16、令为当前指令的下两条指令。在指令译码阶段,对指令进行译码,从寄存器组中读取寄存器操作数。执行阶段,对操作数进行移位操作,产生算术逻辑单元ALU的结果,如果指令是存储访问指令Load/Store,则在ALU中计算存储器的地址。如果需要则在存储器访问阶段访问数据存储器,否则ALU的结果只是简单的缓冲一个时钟周期,以便与所有的指令具有同样的流水线流程。将指令产生的结果写到寄存器中则是在回写操作阶段实现的。 (2) 微处理器总线接口描述 该微处理器所采用的总线协议是自己定义的,我们称之为Start-Finish协议。其原理是:在做任何事之前,首先发出Start信号,表示我要做某事;待某事做完了,则
17、返回Finish信号,表示该事情已经做完,你可以继续做其他的事了。举个简单的例子:在指令取指阶段,首先要发出Start信号,告诉存储器将要进行取指操作,然后根据指令地址从指令存储器中取出指令,最后返回Finish信号,告诉CPU取指操作已经文成,可以进行下一阶段的操作。 该微处理器核的总线接口如图2.3所示,各个信号描述如表2.1所示。 表2.1 处理器核的接口信号描述 信号名 输入/输出 功能描述 clk 输入 总线时钟信号,所有其他信号都在此信号的上升沿被采样 Enable 输入 总线使能信号,用于启动系统和总线,高电平有效 ResetN
18、 输入 总线复位信号,用于复位系统和总线,低电平有效 ResetAddr 输入 32位中断地址总线 TaskFinished 输出 任务完成信号,高电平有效 InsMemStart 输出 指令操作开始信号 InsMemFinish 输入 指令操作完成信号 InsMemRW 输出 指令读/写控制信号,高电平时为读操作,低电平为写操作。注:该信号总是处于高电平状态 InsAddress 输出 32位指令地址总线 InsData 输入 32位指令数据总线 MemStart 输出 数据操作开始信号 MemFinish 输入 数据操作完成信号 M
19、emRW 输出 数据读/写控制信号,高电平时为读操作,低电平时为写操作 Address 输出 32位数据地址总线 Data 输入/输出 32位数据读/写总线,当MemRW为高电平时,为读数据总线;当MemRW为低电平时,为写数据总线。 图2.3 处理器核总线接口信号 2.2.2 本地指令存储器 本地指令存储器的这要功能是存放指令。微处理器核通过指令控制信号访问独自的本地指令存储器,构成局部子系统,其他处理器核没有访问权限。对于各个处理器核来说,各自的本地指令存储器的大小为1KB。 2.2.3 本地数据存储器 本地数据存储器的主要功能是存放临时数据。微处理
20、器核通过数据控制信号访问独自的本地数据存储器,构成局部子系统,其他处理器核没有访问权限。对于各个处理器核来说,各自的本地指令存储器的大小也为1KB。 2.3 调度模块 在多核中,什么是任务调度呢?通过查阅书籍我们可以知道任务调度是指如何把复杂的应用程序的所有任务,合理地调度分配到多核系统的各个核上,并追求整个应用程序的最小完成时间。任务调度问题是多核调度的关键,如果处理不好,则可能导致多核系统效率低下,甚至可能不如单个计算机,严重的可能导致计算失败。因此,在多核系统中,要取得好的系统和应用性能,有效地调度任务是一个非常关键的问题。 我们将任务调度模块分为三个部分:任务分配模块、任务调度
21、模块和全局数据通道模块。 2.3.1 任务分配器 在本多核系统中,任务分配器的功能是:处理选择任务在哪个核上执行,分配决策必须在调度决策执行前做出。在任务分配中,分配算法需要注意以下两个规则: (1) 分配更多的任务到结点能力强的; (2) 如果某个节点的负载已经很重,不要在调度其他任务到该结点。 2.3.2 任务调度器 在本多核系统中,任务调度器的功能是:负责各个微处理器核与共享内存之间的通信和各个微处理器核之间的任务调度。 2.3.3 全局数据通道 在本多核系统中,全局数据通道负责把共享数据存储器中的数据读入到相应的微处理器核中。 2.4 通讯互连架构 通讯互连
22、架构主要功能是:连接各系统主设备(微处理器核)和各系统从设备(本地指令存储器、本地数据存储器和全局共享模块),包括局部总线(第一层Start-Finish总线)和全局总线(第二层Start-Finish总线),如图2.1所示。在第一层Start-Finish总线中,主设备为微处理器核,从设备为本地存储器。因为采用的是哈佛结构,所以把本地存储器设计成本地指令存储器和本地数据存储器。因为只存在单个主设备和单个从设备,所以不存在总线冲突。每个微处理器核都可以随时对本地指令存储器和本地数据存储器发起读写操作,而互不干扰,从而极大地提高了数据运算的并行性。全局Start-Finish总线中则有多个主设备
23、和一个从设备,因此存在总线冲突的情况,需要一定的策略来解决。两层总线之间的连接通过总线桥来完成。 2.4.1 局部总线 局部总线是用Start-Finish总线实现的,在本地子系统通讯层次中主设备自己所编写的微处理器核,从设备为本地指令存储器和本地数据存储器,由于该微处理器核采用的是哈佛结构,所以指令的读取和数据的读取互不冲突,因此可以把本地指令存储器和本地数据存储器看做是一个本地存储器。因为只存在单个的主设备和单个的从设备,所以不存在总线冲突,只需要简单的译码器来判断微处理器核选择的是本地存储器还是全局通讯层次的全局存储器。每个微处理器都拥有一个私有的,唯一的本地存储器,通过局部总线访
24、问本地存储器,从而极大地提高了系统架构执行的并行性。其结构如图2.4所示。 图2.4 局部总线 图2.5 全局总线 2.4.2 全局总线 全局总线则连接各个本地子系统、调度模块和全局共享模块。本地子系统(包括处理器核、本地指令存储器和本地数据存储器)为主设备,全局共享模块(包括共享数据存储器和中断控制器)为从设备,由于存在多核主设备和多核从设备,所以在全局总线上必须设计译码器,所有总线主设备发出的总线请求都必须通过译码器来选择从设备,共享数据存储器把共享数据信息发送给所有的处理器核,而中断控制器则把地址信息发给任务分配器。其结构如图2.5所示。 2.4.3 总
25、线桥 总线桥的主要功能是连接局部总线和全局总线,并且控制处理器核对存储器的访问。总线桥通过微处理器核发出的地址判断本次操作是对本地数据存储器还是共享数据存储器发起访问,然后决定是把处理器核发出的地址、数据和控制信号传递到局部总线还是全局总线。同样,由本地数据存储器和共享数据存储器传递给处理器核的数据和应答信号也是通过译码器(由地址线产生的)来进行选择。总线桥的功能框图如图2.6所示。 图2.6 总线桥功能框图 2.5 全局共享模块 在本多核系统设计中,全局共享模块主要包括:共享数据存储器和中断控制器。分别介绍如下。 2.5.1 共享数据存储器 共享数据存储器主要用来实
26、现多核之间的通讯,处理器通过Store/Load指令实现各个处理器核与共享数据存储器的数据传递,从而实现多核之间的通讯。共享存储器的大小为4KB,地址空间从0x18000000-0x18000FFF。 2.5.2 中断控制器 中断控制器主要实现多核之间的任务调度,记录对其他处理器发起中断的中断地址,然后把该地址发送给任务分配中,在任务分配器中统一进行任务调度。中断控制器的起始地址是0x18100000。 3.调度算法的实现 3.1 多核CPU与调度算法的总体设计 图3.1 4核CPU与调度算法的总体设计框图 任务分配器是调度模块的一部分,为了框图的整体
27、对称性,因此把任务分配器画在了调度模块的外面。 4核CPU与调度算法设计具体分为两个通讯层次:本地通讯层次和全局通讯层次。 本地通讯层次主要由微处理器、本地指令存储器和本地数据存储器组成; 全局通讯层次包含如下模块:共享数据存储器和中断控制器。调度模块包括任务分配器、任务调度器和全局数据通道。 如图3.1所示,顶层结构由7个模块组成,分别为:4个本地子系统通讯层次模块、1个调度模块、1个共享数据存储器和1个中断控制器。各种模块的功能描述如下: 本地子系统通讯层次模块:包括处理器、本地指令存储器以及本地数据存储器。每个处理器都有一个指令存储单元和一个数据存储单元。为了保证这种私有的、唯
28、一的属性,每个本地指令存储器和本地数据存储器只能唯一地由特定的处理器来访问。即本地指令存储器和本地数据存储器只能被本地处理器来访问。 调度模块:实现处理器与共享数据存储器间的通讯及各个处理器间的相互调度。 共享数据存储器:实现处理器之间信息交换的数据存储区域。 总线桥模块:用于连接本地子系统通讯层次与全局通讯层次的数据通道以及相应的控制通道。 中断控制器:处理来自各处理器的中断请求信号,产生面向各处理器的中断请求,并将中断请求发送给任务分配器。 下面将依次介绍各个模块的设计。 3.2 存储地址分配 表3.1 本地存储器地址分配表 本地存储器 本地指令存储器Pn 本
29、地数据存储器Pn P0(1KB) 0X00000000-0X000003FF P0(1KB) 0X00000000-0X000003FF P1(1KB) 0X00001000-0X000013FF P1(1KB) 0X00001000-0X000013FF P2(1KB) 0X00002000-0X000023FF P2(1KB) 0X00002000-0X000023FF P3(1KB) 0X00003000-0X000033FF P3(1KB) 0X00003000-0X000033FF 本设计平台中,有四种存储器分别是:本地指令存储器、本地数据存储器
30、共享数据存储器和中断控制器。其中本地指令存储器和本地数据存储器属于本地存储器,而共享数据存储器和中断控制器则属于全局共享存储器。 表3.2 共存存储器地址分配表 共享存储器 共享数据存储器(4KB) 0X18007000-0X18000FFF 中断控制存储器(1KB) 0X18100000-0X181003FF 本设计中对存储器的地址分配采用的是分布式共享存储类型,即:指令存储器和数据存储器的地址是按照分布式存储类型分配的,采用分布式分配编址;而本地存储器和全局共享存储器是按照共享存储类型分配的,采用统一编址。具体分配的地址如表3.1和表3.2所示。 3.3 局部
31、总线各模块的设计 局部总线主要连接微处理器核与本地指令存储器、本地数据存储器,以构成局部子系统。局部总线是Start-Finish总线的简单实现,只有一个微处理器核、一个本地指令存储器和一个本地数据存储器。 3.3.1 本地指令存储器的设计 表3.3 本地指令存储器信号描述 信号名 输入/输出 功能描述 clk 输入 全局时钟信号 InsMemStart 输入 指令操作开始信号 InsAddress 输入 32位指令地址总线 InsMemRW 输入 指令读/写控制信号,高电平时为读操作,低电平为写操作。注:该信号总是处于高电平状态 InsData 输
32、出 32位指令数据总线 InsMemFinish 输出 指令操作完成信号 图3.2 本地指令存储器模型 本地指令存储器是用来存储相对应的微处理器的指令程序代码,当系统上电复位后,处理器将从中读取指令,执行程序。其模型如图3.2所示,各信号描述如表3.3所示。模块设计具体方案的伪指令如下: 如果InsMemStart为高电平 根据指令地址InsAddress,读出指令存储器中的指令数据放入InsData中 返回InsMemFinish = 高电平信号 如果InsMemStart为低电平 返回InsMemFinish = 低电平信号 3.3.2
33、 本地数据存储器的设计 表3.4 本地数据存储器信号描述 信号名 输入/输出 功能描述 clk 输入 全局时钟信号 MemStart 输入 数据操作开始信号 Address 输入 32位数据地址总线 MemRW 输入 数据读/写控制信号,高电平时为读操作,低电平为写操作。 DataIn 输入 32位数据写总线 DataOut 输出 32位数据读总线 MemFinish 输出 数据操作完成信号 图3.3 本地数据存储器模型 本地数据存储器是用来存储数据信息的,其中数据信息以二进制的形式存在。微处理器可以对本地数据存储器中的
34、数据进行读数操作,也可以把计算完成后的结果写入到本地数据存储器中。其模型如图3.3所示,各信号描述如表3.4所示。该模块具体设计方案的伪指令如下: 如果MemStart为高电平 如果MemRW = 高电平 根据数据地址Address,读出数据存储器中的数据放入DataOut中。 如果MemRW = 低电平 把数据DataIn写入地址Address中。 返回MemFinish = 高电平信号 如果MemStart为低电平 返回MemFinish = 低电平信号 3.4 调度模块中各模块的设计 在多核系统中,并行任务调度问题是指,如何把复杂的应用程序的所有任务
35、合理地调度分配到的各个处理器核上,并追求整个应用程序的最小完成时间。一般而言,任务调度大致包括以下两个过程: (1) 任务分配阶段:即把任务分配到合适的处理器核上; (2) 任务的具体调度阶段:即已分配到各处理器核上各个任务的具体执行问题。 在具体的任务调度算法中,有写可以明显的区分这两个阶段,有些则不一定能看出。从不同的角度出发,任务调度问题有着许多不同的分类,如静态和动态调度、集中式和分布式调度、抢占式和非抢占式调度、自适应和非自适应调度等。 (1) 静态调度和动态调度 静态调度也叫编译时间调度,它在编译时就已经确定了并行程序的各种属性(如任务处理时间、通信和数据依赖等),以及每
36、个任务分配到哪一个处理器核都是在编译时就确定了的。使用静态调度对许多科学计算问题都是非常有效的,如用图像处理中物体识别和数值计算等任务的调度都很适合用静态调度处理。 动态调度也叫实时调度,他在应用程序执行过程中根据得到的相应的调度信息来调度任务,有很多不确定的因素存在,且调度开销较大。因此,动态调度的目标不仅是最小化任务调度的完成时间,还要最小化调度本身的开销。 (2) 集中式调度和分布式调度 在集中式调度方法中,由一个成为中心调度器的处理器来收集全局的调度信息,其他处理器把他们的状态信息传送给中心调度器,并由中心调度器做出调度决定。集中式调度的主要优点在于实现比较简单。 在分布式调度
37、中,调度任务和调度信息分布在各个处理器上,分布式调度是由各个处理器单元的调度程序根据局部范围内的一些调度信息来进行任务调度,其最大优点在于具有良好的可扩展性。 在本设计中,调度模块连接各本地子系统和全局共享模块,本地子系统(包括微处理器核、本地指令存储器和本地数据存储器)为主设备,全局共享模块(包括共享数据存储器和中断控制器)为从设备,调度模块主要包括任务分配器、任务调度器和全局数据通道。 3.4.1任务分配器 在此多核系统中,任务分配器的功能是:处理选择任务在哪个核上执行,分配决策必须在调度决策执行前做出,所以属于静态调度,采用的调度算法是多轮可分负载调度算法[19]。 可分负载
38、理论是调度理论中的一个新的分支,可用于描述并行分布式系统中的通讯和计算问题,是关于可分计算和通信的一种方法学。可分负载理论假设任务是可以被划分成为任意大小的子任务,然后可以在并行分布式系统中的不同节点上并行处理这些子任务,各任务之间不存在相互的约束关系。可分负载理论实用于并行分布式计算模型、分析各种不同的通信拓扑结构和性能评价等方面。可分负载理论为任务调度提供了一个易于处理的、实际的方法,允许对并行分布式计算系统中的计算和通信模型的整合。 可分负载调度算法按对负载的分配方法可以分为:单轮可分负载调度算法和多轮可分负载调度两种类型的可分负载调度。 单轮可分负载调度算法:就是指主处理机节点将应
39、用划分成为块数与从处理机节点数目相等的子任务,然后一次性完成对负载的分配处理,每一个从处理机在整个应用的调度处理过程中仅一次接收并处理从主机节点发送来的子任务。 多轮可分负载调度算法:就是指主处理机节点将应用划分成为块数大于从处理机数目的子任务,采取并行多次分配方法多次将子任务分发给各个从处理机节点,每一个从处理机节点在整个应用的调度处理过程中将不止一次地接收并处理主处理机节点发来的子任务。 本多核设计系统中任务分配器所采用的多轮可分负载调度算法比较简单,首先已经确定了调度的轮数,其次所有分配的子任务的负载量是一样的。在任务分配器中,设计了一个数组,把事先分配好的任务放在数据里,由于该分配
40、器是任务调度模块的一部分,故该任务分配器也设计了核间通讯的中断地址线,分配器对中断地址线中的中断地址和数组中的任务进行统一处理,在分配到各个处理器核上。任务分配器的框图如图3.5所示,各信号描述如表3.5所示。任务分配器的调度算法流程图如图3.4所示(以两个核为例),首先把一个任务划分为多个子任务,存放在任务数组中,按不同地址将任务分给不同的处理器,中断也是通过不同地址进行区别。 图3.4 任务分配器调度算法流程图 表3.5 任务分配器信号描述 信号名 输入/输出 功能描述 clk 输入 全局时钟信号 IntAddr 输入 32位中断地址总线线 TaskFi
41、nished 输入 4位任务完成信号总线,分别对应4个核 Enable 输入 4位使能信号总线,分别对应4个核 ResetN 输入 4位复位信号总线,分别对应4个核 ResetAddr 输出 4个32位中断地址总线,分别对应4个核 图3.5 任务分配器框图 3.4.2任务调度器 在本多核系统中,任务调度器的功能是:负责各个微处理器核与共享内存之间的通信和各个微处理器核之间的任务调度,所以采用动态调度策略,采用的调度算法是FIFO调度算法。 FIFO调度算法:是指根据先入库先发出的原则,对于发出的存货以先入库存货的单价计算发出存货成本的方法。采用这
42、种方法的具体做法是:先按存货的期初余额的单价计算发出的存货的成本,领发完毕后,再按第一批入库的存货的单价计算,依此从前向后类推,计算发出存货和结存货的成本。后来该方法被用于与计算机科学中。在本设计系统中,是指任务先到先被执行,如果多核中有多个任务同时到达,规定:任务标号(同处理器核是一个标号)小的先被执行。 图3.6 任务调度器框图 表3.6 任务调度器信号描述 信号名 输入/输出 功能描述 clk 输入 全局时钟信号 MemStart_N 输入 数据操作开始信号 MemRW_N 输入 数据读/写控制信号,高电平时为读操作,低电平时为写操作。 Ad
43、dress_N 输入 32位数据地址总线 DataIn_N 输入 32位数据读/写总线,当MemRW为高电平时,为读数据总线;当MemRW为低电平时,为写数据总线。 MemStart 输出 数据操作开始信号 MemRW 输出 数据读/写控制信号,高电平时为读操作,低电平时为写操作 Address 输出 32位数据地址总线 DataIn 输出 32位数据读/写总线,当MemRW为高电平时,为读数据总线;当MemRW为低电平时,为写数据总线。 IntAddr 输出 32位中断地址总线 该任务调度模块实际上是主设备到从设备之间的数据信号通道和控制信号通道
44、因为Start-Finish总线具有流水性,主设备发出的数据信号总是延迟与地址信号,所以主设备到从设备多路选择器又可以分为地址/控制信号多路选择器和数据多路选择器,但在本设计中为了减少设计的逻辑层次,把地址/控制信号多路选择器和数据多路选择器好分到同一个模块中,即任务调度模块。图3.6为任务调度器的模块框图,其输入输出信号描述见表3.6。 图3.7 任务调度器的算法输出流程图 控制信号,地址信号,数据信号进入任务分配器中,首先被存放在FIFO数组中,在通过译码器(由地址总线组成)来区别从设备(共享数据存储器和中断控制存储器)。具体操作伪代码如下: 如果地址总线的高12位等
45、于“00011000000” 从设备选择共享数据存储器; 如果地址总线的高12位等于“00011000001” 从设备选择中断控制存储器; 任务调度器的算法输出流程图如图3.7所示,任务调度器的算法输入流程图如图3.8所示。 图3.8 任务调度器的算法输入流程图 3.4.3 全局数据通道 全局数据通道是从设备到主设备之间的数据信号通道和控制信号通道,在本设计中,只有共享数据存储器把数据直接送到个处理器核上,而中断控制存储器则把中断地址送到任务分配器中。该数据通道的设计是采用广播式,即把共享数据存储器中数据送到每个处理器核上,至于哪一个处理器核选择该数据不是有本模块
46、负责,而是由总线桥模块负责。图3.9为全局数据通道的框图,其信号描述见表3.7。该模块设计方案的伪代码如下: 如果clk从低电平->高电平 如果MemFinish为高电平 把DataOut和MemFinish的值分别分配给输出端口DataOut_N和MemFinish_N 如果MemFinish 为低电平 把0分配给输出端口DataOut_N和MemFinish_N 图3.9 全局数据通道框图 表3.7 全局数据通道信号描述 信号名 输入/输出 功能描述 clk 输入 全局时钟信号 DataOut 输入 32位数据总线 MemFinis
47、h 输入 数据操作结束信号 DataOut_N 输出 32位数据总线 MemFinish_N 输出 数据操作结束信号 3.5 全局总线各模块的设计 全局总线连接全局共享模块,主要包括共享数据存储器和中断控制存储器,下面将对他们分别介绍。 3.5.1 共享数据存储器 共享数据存储器主要用来实现多核之间的通讯,处理器通过Store/Load指令实现各个处理器核与共享数据存储器的数据传递,从而实现多核之间的通讯。共享存储器的大小为4KB,地址空间从0x18000000-0x18000FFF。其具体设计与本地数据存储器的设计是一样的,其框图见图3.3,各信号描述如表3.
48、4。 3.5.2 中断控制器 中断控制器主要实现多核之间的任务调度,记录对其他处理器发起中断的中断地址,然后把该地址发送给任务分配中,在任务分配器中统一进行任务调度。中断控制器的起始地址是0x18100000。即地址总线中的地址的高12位是0x181,就认为是处理器核发来的中断地址。中断控制器接收到中断地址,在把该地址发送到任务分配器中,有任务分配器来具体操作。为了方便起见,我把中断控制器模块集成到了调度模块中,具体请看任务调度器模块。 3.6 总线桥的设计 总线桥的主要功能是连接局部总线和全局总线,并且控制处理器核对存储器的访问。总线桥通过微处理器核发出的地址判断本次操作是对本地
49、数据存储器还是共享数据存储器发起访问,然后决定是把处理器核发出的地址、数据和控制信号传递到局部总线还是全局总线。同样,由本地数据存储器和共享数据存储器传递给处理器核的数据和应答信号也是通过译码器(由地址线产生的)来进行选择。总线桥的功能框图如图2.6所示。从框图中可以看出,总线桥模块由三部分组成,分别是:总线转换器,从->主译码器和从->主数据通道,下面将分别介绍。 3.6.1 总线转换器 总线转换器的主要功能是判断处理器核是对本地数据存储器还是全局共享模块发起访问,然后决定是把处理器核发出的地址、数据和控制信号传递到局部总线还是全局总线。总线转换器的框图如图3.10所示,其信号描述如表3.8所示。 图3.10 总线转换器框图 表3.8 总线转换器信号描述 信号名 输入/输出 功能描述 clk 输入 全局时钟信号 MemStart 输入 数据操作开始信号 MemRW 输入 数据读/写控制信号,高电平时为读操作,低电平时为写操作。 Address 输入 32位数据地址总线 DataIn 输入 32位数据写总线,当MemRW为高电平时,为读数据总线;当MemRW为低电平时,为写数据总线。 MemStart_lc 输出 局部数据操作开始信号 MemRW_lc 输出 局部数据读/写控制信号,高电平时






