新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 基于FPGA的M2M異構虛擬化系統(三)

        基于FPGA的M2M異構虛擬化系統(三)

        作者: 時間:2018-08-31 來源:網絡 收藏

        因為8086混合8位和16位寄存器,所以經常需要將8位寄存器移出至臨時寄存器,運算完以后再從臨時寄存器移入8086寄存器。這些操作比較頻繁,可以將其封裝成函數。

        本文引用地址:http://www.104case.com/article/201808/388221.htm

          指令的操作碼決定了進行何種運算,指令還具有各種操作數。每條指令一般都有多種操作數類型。常見的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位有效


        上一頁 1 2 3 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 河津市| 措勤县| 茂名市| 彭山县| 绍兴县| 株洲县| 镇巴县| 寿阳县| 荆州市| 黄骅市| 内乡县| 社会| 湖口县| 蒙自县| 察隅县| 余庆县| 榆中县| 靖边县| 绥阳县| 安溪县| 颍上县| 吉木乃县| 新昌县| 呼图壁县| 龙门县| 浮山县| 郁南县| 太仆寺旗| 安龙县| 江山市| 福贡县| 高碑店市| 来宾市| 桓仁| 广州市| 宣武区| 昆山市| 安达市| 东港市| 法库县| 于都县|