您的位置 首页 元件

根据FPGA的M2M异构虚拟化体系(三)

因为8086混合8位和16位寄存器,所以经常需要将8位寄存器移出至临时寄存器,运算完以后再从临时寄存器移入8086寄存器。这些操作比较频繁,可以将其封装

由于8086混合8位和16位寄存器,所以常常需要将8位寄存器移出至暂时寄存器,运算完今后再从暂时寄存器移入8086寄存器。这些操作比较频频,能够将其封装成函数。

  指令的操作码决议了进行何种运算,指令还具有各种操作数。每条指令一般都有多种操作数类型。常见的8086指令类型如下。

  

  图 40 常见8086指令类型

  以加法指令add为例。

  add reg, reg类型。依据reg位宽不一样,可分红五类:16位的一种,低8位跟高8位两两组合构成四种。

  其他类型都是在reg,reg类型的基础上。遇到reg,mem类型,先核算出内存地址,再取出内存内容将其载入到辅佐寄存器,接下来便是reg,reg类型的操作。mem,reg与reg,mem相似,仅仅运算方向相反,最终要将成果从寄存器写回内存。遇到当即数类型,则是将当即数载入寄存器再做运算。

  4.2.11.代码履行及搬运分发器

  当一个基本块翻译完今后,经上下文切换后,由MIPS环境转入8086环境,开端履行已翻译的代码块。当履行至代码块结尾时,遇到跳转指令,然后转入搬运分发器进行处理。搬运分发器核算跳转方针地址(8086),以此地址在跳转缓存中寻觅对应的MIPS地址。假如找到了,阐明跳转方针是已翻译过的,那么持续跳过去履行。假如没找到,阐明方针块还没有翻译,那么先履行翻译进程,再履行翻译块。

  4.3.体系库及应用程序具体规划方案

  4.3.1.体系可用资源及其分配

  体系可用内存空间有1MB的空间。内存地址空间的分配如下图:

  

  图 46 内存分配(1M)

  体系经过wishbone开源总线,与virtex-5硬件开发板自带的键盘、鼠标和串口等外设互联。键盘的硬件接口是PS/2规范,virtex-5支撑16位色液晶显现器,串口用来与其他电脑主机衔接,进行通讯和数据传输。

端口类型

端口地址

rs232数据端口

20000000H

rs232忙位检测

20000004H

vga显现基址

50000000H

led

70000000H

键盘

90000000H

表 1 体系常用端口及其地址

  体系库函数规划与完成

  体系开始只支撑MIPS汇编语言。用MIPS汇编语言开宣布俄罗斯方块游戏。这个应用程序,不只协助找出了硬件体系存在的一些bug,如流水线CPU中存在的数据相关和操控相关问题,指令集的功用问题,并且还验证了硬件体系与RS232串口之间的数据传输功用的正确性,以及键盘接口和显现器接口的正确性和易用性。

  体系宏界说和端口常量

  体系的内存和外设的地址空间是接连分配的。为了进步开发应用程序的进程中的设备无关性和应用程序的通用性,咱们把各个端口界说为常量,供体系库和应用程序参阅运用。

  unsigned int* text_base = (int *)0x000C0000;

  unsigned int* graphics_base = (int *)0x50000000; //VGA 端口

  unsigned int* ps2_base = (int *)0x90000000; //ps2键盘 端口

  unsigned int* rs232_base = (int *)0xFFFFE000;

  unsigned int* rs232_busy = (int *)0xFFFFF000;

  unsigned int* font_base = (int *)0x000C12C0; //字库 端口

  表 2 体系端口常量界说

  体系的显现器支撑16位色,即R5G5B6。为了坚持应用程序开发的一致性,咱们界说了一些供应用程序运用的色彩常量。

  #define COLOR_WHITE 0xFFFF

  #define COLOR_BLACK 0x0000

  #define COLOR_RED 0xF800

  #define COLOR_GREEN 0x07E0

  #define COLOR_BLUE 0x001F

  #define COLOR_BROWN 0xFC00

  #define COLOR_PURPLE 0x9009

  #define COLOR_YELLOW 0xFFE0

  #define COLOR_PINK 0xF81F

  图表 3 体系常用色彩常量界说

  键盘接口函数

  checkkey函数

  原型:int checkkey();

  功用:查看键盘是否有按键被按下

  阐明:有键被按下回来 1,不然回来 0

  checkandgetkey函数

  原型:int checkandgetkey(int* key);

  功用:查看键盘是否有按键被按下,并得到按键的ASCII码

  阐明:有键被按下回来 1,按键的ASCII由指针 key 保存;不然回来 0

  getchar函数

  原型:int getchar();

  功用:读键

  阐明:从键盘上读取一个键,并回来该键的键值

  显现器接口函数

  putpixel函数

  原型:void putpixel(int x, int y, int color);

  功用:在屏幕的指定方位上画点

  阐明: (x,y)为屏幕上点坐标,指定色彩 color

  getpixel函数

  原型:int getpixel(int x, int y);

  功用:回来屏幕上指定点的状况

  阐明:(x,y)为屏幕上点的坐标,假如点为铲除状况回来零,不然回来非零值

  printchar函数

  原型:void printchar(int x, int y, int ch, int color);

  功用:打印给定的字符

  阐明: (x,y)为起点坐标,ch 为要打印的字符的ASCII码,指定字体色彩 font_color,布景色彩

  printword函数

  原型:void printword(int x, int y, int word, int color);

  功用:打印给定的字,调试时运用

  阐明: (x,y)为起点坐标,word 为要打印的字即4个字节,先打印高字节,指定色彩 color

  printnum函数

  原型:void printnum(int x, int y, int num, int color);

  功用:打印给定的数字,调试时运用

  阐明: (x,y)为起点坐标,num 为要打印的数字,指定字体色彩 font_color 布景色bkg_color,现在该函数只支撑 0=

  line函数

  原型:void line(int x1,int y1,int x2,int y2, int color);

  功用:在屏幕上画直线

  阐明: (x1,y1)为起点坐标,(x2,y2)为结尾坐标

  circle函数

  原型:void circle(int x, int y, int radius, int color);

  功用:画圆框

  阐明:x和y分别为圆心的横纵坐标,radius 为半径,color 为圆边框的色彩

  circlefilled函数

  原型:void circlefilled(int x, int y, int radius, int color)

  功用:画圆,并填充

  阐明:x 和 y 分别为圆心的横纵坐标,radius 为半径,color 为圆边框以及填充的的色彩该函数还有待改善

  rectangle函数

  原型:void rectangle(int left, int top, int right, int bottom, int color);

  功用:在屏幕上画一矩形边框

  阐明: (left,top)指定左上角坐标,(right,bottom)指定右下角坐标,指定边框色彩color

  串口接口函数

  rs232Check函数

  原型:int rs232Check()

  功用:查看rs232是否busy

  阐明: return 回来值1为忙,0为闲暇

  rs232ReceiveByte

  原型:char rs232ReceiveByte()

  功用:从rs232接纳一个字节,轮询方法

  阐明: return 回来一个字节

  rs232SendByte

  原型:void rs232SendByte(char b)

  功用:给rs232发送一个字节

  阐明: param b 要发送的字节

  LED接口函数

  _lightLeds函数

  原型:void _lightLeds(int leds);

  功用:操控LED的显现

  阐明:leds的低8位有用

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/137081.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部