新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 基于FPGA的M2M异构虚拟化系统(一)

基于FPGA的M2M异构虚拟化系统(一)

作者: 时间:2018-09-03 来源:网络 收藏

本文引用地址:https://www.eepw.com.cn/article/201809/388223.htm

  如图 14,在团队自主研发的QS-I 硬件系统的基础上,团队开发了函数系统库和多个应用程序。其中系统函数库包括图形库、VGA显示器接口、RS232串口接口、PS/2键盘接口。应用程序根据所最终运行时的机器码可以分为MIPS体系结构应用程序和x86体系结构应用程序。其中,MIPS体系结构应用程序包括使用MIPS汇编语言编写的俄罗斯方块游戏和使用C语言编写的吃豆子游戏;x86体系结构应用程序包括使用8086汇编语言编写的推箱子游戏。

  该项目的硬件系统是自主研发的,因而需要开发基于该系统的软硬件接口函数库,并且需要编写应用程序测试系统的各种功能。

  该项目的硬件系统支持MIPS体系结构的指令集。基于MIPS指令集,团队开发了将MIPS汇编语言翻译成机器码的汇编程序,并分别使用MIPS汇编语言和C语言开发了系统函数库。使用MIPS汇编语言开发应用程序,用来验证五级流水线CPU的功能正确性,检测出数据相关和控制相关出现的问题,验证硬件系统对MIPS指令集的支持度,验证CPU与各种外部设备互联的正确性以及系统的总体性能。

  基于MIPS汇编语言开发了俄罗斯方块游戏。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。本设计的俄罗斯方块有5种基本形状,7种颜色;可通过键盘控制左移(A)、右移(D)、旋转(W)、加速下降(S)、暂停(Space)、退出(Q)、选择级别(L);游戏设置两种级别,普通下降速度和较快下降速度两级;游戏界面显示帮助、玩家所得分数、下一个即将下落的形状等信息;当方块到达顶端时,游戏失败;玩家通过不断的刷新最高分获得愉悦。

  为了提高软件开发的效率,使软件开发人员方便的使用硬件系统及其外设资源,团队使用Gcc编译器和MASM汇编器的组合,项目团队开发了基于C语言的应用程序,验证硬件系统对Gcc编译器和MASM汇编器生成的机器指令的支持。团队还开发了基于C语言的系统函数库,包括图形库、VGA显示器接口、键盘接口和串口接口等。此外,团队还使用JAVA语言,开发了MIPS指令CPU模拟器,使得在软件的开发过程中不需要每次都传输到硬件开发板上就可以进行调试,大大提高程序开发的效率。

  基于C语言开发了吃豆子游戏。吃豆子的基本规则是控制packman的移动,使之吃完所有的豆子,并且躲开怪物的追捕。本程序设计的怪物有2个;豆子有两种,一种普通的小豆子,还有一种大豆子,吃了大豆子能让怪物慢下来几秒钟;可通过键盘控制左移(A)、右移(D)、旋转(W)、加速下降(S)、暂停(Space)、退出(Q);游戏界面显示帮助、玩家所得分数等信息;当玩家被怪物抓到时,游戏失败;玩家将所有的豆子都吃光时,游戏正常结束。

  该硬件系统能够执行不同指令集体系结构的机器码。为了验证系统执行不同指令集机器码的正确性,调试出硬件系统中存在的问题,团队开发了基于x86汇编语言的应用程序。团队还开发了基于x86语言的系统函数库,包括图形库、VGA显示器接口、键盘接口和串口接口等。

  基于x86汇编语言开发了推箱子游戏。推箱子的基本规则是控制机器人的移动,使之把所有的箱子放到指定的位置。箱子只有1种;可通过键盘控制左移(A)、右移(D)、旋转(W)、加速下降(S)、暂停(Space)、退出(Q);游戏界面显示帮助、玩家所用的时间等信息;玩家将所有的箱子都放到适当的位置时,游戏正常结束。

  4.详细设计方案

  4.1.RISC CPU详细设计方案

  4.1.1.RISC CPU(QS-I)整体模块

  

  图 15 QS-I CPU整体模块图

  如图 15所示,QS-I的整体模块中主要包括两部分,第一部分是五级流水线和Cache,另一个模块是动态二进制翻译加速模块(DBT Accelerator)。CPU的对外接口符合Wishbone总线标准。

  在下一节中,我们将会介绍QS-I CPU中各个单元模块功能以及其时序。

  4.1.2.RISC CPU(QS-I)各单元模块功能与时序

  4.1.2.1五级流水线模块详细设计方案

  功能描述

  本模块的功能是完成指令的五级流水化执行,并支持中断及异常。一条指令的执行经过是Fetch(取指) à Decode(译码) à Execute(执行) à Memory(访存) à Writeback(写回)五个阶段。其中Fetch阶段从指令Cache中由PC(Praogram Counter)取得下一条指令;Decode阶段完成指令的大部分译码工作,并产生相应的控制信号;Execute阶段主要完成指令的算术运算以及少量选择电路;Memory阶段完成访存任务,数据将从数据Cache中读取或者写入;Writeback阶段完成写回指令的修改Register File(寄存器堆)的写操作。此外,本模块完成了流水线中的精确中断处理。

  • 子模块列表

Module

Description

pc_reg

Module of PC register

if_stage

Instruction Fetch stage

if_id_reg

Registers between IF and ID stages

id_stage

Instruction Decode stage

id_exe_stage

Registers between ID and EXE stages

exe_stage

Execute stage

exe_mem_reg

Registers between EXE and MEM stages

mem_stage

Memory stage

mem_wb_reg

Registers between MEM and WB stages

wb_stage

Writeback stage

except

Module of exception handling

  详细设计

  pc_reg

  本模块完成对PC寄存器的更新任务。若流水线中出现stall或者Cache发生miss等情况则延迟对PC寄存器的更新。本模块的时序如下图所示。

  

  图 16 pc_reg时序图

  if_stage

  本模块完成对指令Cache的取指。模块的对外接口符合Wishbone总线标准。CPU的对外接口包括IBus(指令总线)和DBus(数据总线),为了将CPU成功集成入Wishbone总线中,CPU的对外接口部分的逻辑设计必须符合Wishbone标准。此外,CPU对外部设备(如RAM,ROM,UART)的访问速度以及CPU有无Cache(高速缓存)是未知的,因此这部分的逻辑设计必须带有通用性。

  本模块的主要时序如下图。

  

  图 17 if_stage时序图

  if_id_reg

  本模块完成IF和ID两个阶段之间的信号流水。本模块的时序图如下。

  

  图 18 if_id_reg时序图

  id_stage

  本模块完成指令的基本译码,并产生相应的控制信号。RISC处理器的结构竞争、控制竞争、数据竞争三大竞争的解决:

  采用旁路(bypass)技术解决数据竞争,双跳(double bump)解决结构竞争,延时槽技术解决控制竞争。

  本模块的基本时序图如下。

  

  图 19 id_stage时序图

  id_exe_stage

  本模块完成IF和ID两个阶段之间的信号流水。本模块的时序图如下。

  

  图 20 id_exe_reg时序图

  exe_stage

  本模块完成指令的算术逻辑运算。其中,运算包括add, sub, and, or, xor, nor, sll, srl, sra, lui等算术或逻辑运算。

  为了x86架构动态翻译的加速需要,在ALU(算术运算单元)中增加了x86 flag标志寄存器,并将该寄存器作为一个系统寄存器,用户程序可通过mfc0,mtc0指令来修改flag标志寄存器。

  本模块的时序图如下。

  

  图 21 exe_stage时序图

  


上一页 1 2 3 下一页

关键词:

评论


相关推荐

技术专区

关闭