• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Artix-7 FPGA的三級存儲體系設(shè)計與實現(xiàn)實驗

    2020-11-20 03:20:16秦國鋒秦家豪鄒劍煌
    實驗室研究與探索 2020年10期
    關(guān)鍵詞:用戶程序計算機系統(tǒng)寄存器

    秦國鋒, 秦家豪, 鄒劍煌, 劉 鯤, 胡 岳

    (同濟大學計算機科學與技術(shù)系,上海201804)

    0 引 言

    計算機系統(tǒng)實驗課程是計算機類專業(yè)課程的配套動手實踐實驗課程,它通過設(shè)置與計算機重點專業(yè)知識相適配的實驗,達到幫助學生們更全面、更深入地理解計算機系統(tǒng)的基本組成和運作原理,培養(yǎng)學生們設(shè)計與開發(fā)個人計算機系統(tǒng)的能力。在之前“計算機系統(tǒng)結(jié)構(gòu)”理論課程設(shè)置的基于MIPS 指令集的靜態(tài)和動態(tài)流水線CPU設(shè)計與實現(xiàn)的同步實驗中,學生們很好地完成了流水線CPU的設(shè)計與實現(xiàn)[1]。然而,在實際的計算機系統(tǒng)中不僅是CPU和內(nèi)存模塊的交互,需要主存、緩存和輔存形成的三級存儲系統(tǒng)來與CPU進行數(shù)據(jù)交互,以此達到計算機的高效運行。因此,本文在實驗課程中提出了一種基于Artix-7 FPGA系統(tǒng)的三級存儲體系的設(shè)計與實現(xiàn)方案,該方案采用自頂向下的層次模塊化設(shè)計方法,使用verilog 硬件邏輯語言進行描述。

    計算機存儲體系中,“三級存儲”指的是高速緩沖存儲器、主存儲器、輔助存儲器。高速緩沖存儲器用來改善主存儲器與中央處理器的速度匹配問題;輔助存儲器用于擴大存儲空間。三級存儲系統(tǒng)解決存儲器速度、容量和價格三者的矛盾,并且提升了CPU 訪存速度,改善了系統(tǒng)的總體性能。在FPGA系統(tǒng)中,共有位于FPGA 系統(tǒng)的片內(nèi)內(nèi)存,位于片外的DDR 存儲,以及屬于外設(shè)的SD 卡3 種存儲模塊,分別在三級存儲實驗中可以模擬對應(yīng)主存儲器、高速緩沖存儲器和輔助存儲器[2]。

    1 三級存儲體系設(shè)計

    基于FPGA系統(tǒng)的三級存儲體系實驗的總體框架分為SD 卡、DDR 和FPGA 片內(nèi)內(nèi)存三級,如圖1 所示。系統(tǒng)一通電,會先執(zhí)行SD 中初始部分的引導代碼,從而將存儲在SD中的CPU 二進制流遷移到DDR緩存中,在以此調(diào)入主存供CPU 執(zhí)行,同時會將位于SD中的系統(tǒng)或用戶程序目標代碼遷移到DDR中等待CPU調(diào)用執(zhí)行。

    圖1 三級存儲總體框架

    一臺市場上商業(yè)發(fā)售的計算機都在它的核心硬盤(基本上都命名為C 盤)的初始地址空間固化有一段用于加載和遷移存儲,在核心硬盤上的用于維護系統(tǒng)啟動和運行的系統(tǒng)程序和用戶程序的固定程序,常被稱為BootLoader程序[3],這一加載的啟動機制借助三級存儲體系保證了計算機系統(tǒng)啟動的快速和準確。

    實驗設(shè)計的基于Artix-7 FPGA的三級存儲體系中也設(shè)計有適用于自主啟動運行系統(tǒng)的BootLoader 程序。其實現(xiàn)方法是將BootLoader 程序用匯編語言和C語言聯(lián)合開發(fā),通過gcc 交叉編譯后將其加載到irom里,類比于一般計算機的核心硬盤。當FPGA 板通上電后,會加載.bit 文件,然后執(zhí)行irom 里的BootLoader程序[4-10]。

    1.1 BootLoader啟動

    如圖2 所示,被執(zhí)行的BootLoader 程序首先會將存儲于SD卡中的用戶程序指令加載到iram 中(即圖1 中的DDR緩存組件中),然后搬遷進板內(nèi)等待被執(zhí)行;在完成加載任務(wù)后修改PC 寄存器中的指令地址信息,讓其指向剛被加載到板內(nèi)的用戶程序所在的地址空間,然后CPU按照PC 寄存器所指的指令地址空間執(zhí)行該用戶程序,完成一個簡易計算機的啟動和運行。

    圖2 BootLoader啟動過程

    1.2 程序執(zhí)行的指令流和數(shù)據(jù)流

    CPU在執(zhí)行用戶程序時指令和數(shù)據(jù)的流向如圖3所示。首先CPU通過讀取PC寄存器中的待執(zhí)行指令地址信息,然后結(jié)合指令地址映射模塊,找到存在于irom或iram地址空間的指令內(nèi)容,將其加載到板內(nèi),供CPU執(zhí)行。同理,在CPU 執(zhí)行指令時會發(fā)生對于內(nèi)存的讀寫需求,結(jié)合數(shù)據(jù)地址映射模塊,找到存在于dram和SD卡地址空間的數(shù)據(jù)內(nèi)容,將其讀取到板內(nèi)或者寫入到這些地址空間。通過多級儲存器之間相互協(xié)作,實現(xiàn)和保證了一臺簡易計算機處理效率和性能。

    圖3 執(zhí)行程序時的指令和數(shù)據(jù)流

    1.3 統(tǒng)一編址

    在整個執(zhí)行過程中,代碼段地址和存儲器地址進行統(tǒng)一編址,所有的代碼、數(shù)據(jù)和存儲器都在邏輯地址空間中有一個32 位的地址,C語言編寫的就是對這些地址的操作。

    BootLoader存儲于irom 地址空間,地址為0x0000 0000,如圖4 所示。在執(zhí)行完BootLoader程序后,需要將PC寄存器內(nèi)容改為0x00400000,指向存儲加載而來的用戶程序的iram地址空間中,于是在編譯時需要在0x00000000 附近加上一段跳轉(zhuǎn)指令到BootLoader的main 函數(shù),以及返回時跳轉(zhuǎn)回0x00400000,具體代碼實現(xiàn)如下:

    .org 0x00000000

    .global _start

    .set noat

    .start

    Lui $at,0x1000

    Ori $at,$at,0x1F00

    Add $sp,$zero,$at

    Jal main

    Nop

    Lui $at,0x40 #0040 0000

    Jr $at

    Nop

    圖4 Bootloader 后指令跳轉(zhuǎn)

    1.4 SD卡時鐘設(shè)置

    依據(jù)邏輯地址的排布表,通過宏定義編寫SD 卡控制管腳高低的宏函數(shù),實現(xiàn)SD卡時鐘設(shè)置。

    #define SD_CS 0x22000000

    #define SD_CLK 0x22000001

    #define SD_DATAIN 0x22000002

    #define SD_DATAOUT 0x22000003

    #define SD_HALF_CLK_LEN 0;

    #define SD_CLK_UP()*((uchar *)SD_CLK)= 1;

    #define SD_CLK_DOWN()*((uchar *)SD_CLK)= 0;

    #define SD_DATAIN_UP()*((uchar*)SD_ DATAIN)= 1;

    #define SD _ DATAOUT _ DOWN()*((uchar *)SD _DATAOUT)= 0;

    #define SD_CS_UP()*((uchar *)SD_ CS)= 1;

    #define SD_ CS_DOWN()*((uchar *)SD_ CS)= 0;

    如此,就可以用軟件方式一一對應(yīng)地寫C 語言代碼,實現(xiàn)SD卡的協(xié)議。以時鐘為例如下:

    Void SD_send_clk()

    SD_CLK_DOWN();

    DELAY_HALF_CLK();

    SD_CLK_UP();

    DELAY_HALF_CLK():

    For (int i = 0;i <80;i + +)

    SD_send_c

    但僅進行上述的設(shè)置是不夠的,還需將對存儲單元寫入0 / 1 轉(zhuǎn)換成TTL高低電平的信號,通過設(shè)計的接口模塊來實現(xiàn)電平轉(zhuǎn)換,如圖5 所示。

    圖5 SD卡接口模塊

    對應(yīng)的Verilog代碼實現(xiàn)如下:

    module SD_soft(

    input clk,/ /寫入時鐘

    input rst,

    input we,/ /寫使能

    input [3:0]sel_i,/ /位選信號

    input [31:0]data_i,/ /寫入數(shù)據(jù)

    output [31:0]data_o,/ /將它視作一個4字節(jié)的輸出

    / / SD相關(guān)

    output reg SD_cs,/ /片選,addr = 0

    output reg SD_clk,/ /時鐘,addr = 1

    output reg SD_datain,/ /數(shù)據(jù)輸入,addr = 2

    input SD_dataout / /數(shù)據(jù)輸出,addr = 3

    );

    assign data_o = {7`b0,SD_cs,7`b0,SD_clk,7`b0,SD_datain,7`b0,SD_dataout};

    always@(posedge clk or posedge rst)begin

    if(rst)begin

    SD_cs = 1`b0;

    SD_clk = 1`b0;

    SD_datain = 1`b0;

    end

    else if(we)begin

    if(sel_i[3]= = 1`b1)begin

    SD_cs <= (data_i[31:24]! = 8`b0);

    end

    if(sel_i[2]= = 1`b1)begin

    SD_clk <= (data_i[23:16]! = 8`b0);

    end

    if(sel_i[1]= = 1`b1)begin

    SD_datain <= (data_i[15:8]! = 8`b0);

    end

    end

    end

    SD卡作為三級存儲器中離CPU最遠段的一級存儲器,要進行存儲塊和頁面的地址管理,在進行數(shù)據(jù)的讀寫時,需要先進行初始化[11]。

    2 實驗驗證

    本次三級存儲體系的設(shè)計與實現(xiàn)采用的CPU 是“計算機系統(tǒng)結(jié)構(gòu)”課程中自主設(shè)計與實現(xiàn)的靜態(tài)和動態(tài)流水線CPU[12-13]。整個三級存儲體系的設(shè)計和實現(xiàn)采用Xilinx公司提供的vivado[14]集成開發(fā)工具和verilog[15]開發(fā)語言完成,并在Xilinx Nexys 4 Artix-7[16]開發(fā)板上進行了下板測試。

    首先將整個三級存儲體系實現(xiàn)代碼生成的.bit文件寫入到被格式化后的SD卡中,然后用WinHex在邏輯80 扇區(qū)(本次實驗采用的SD卡對應(yīng)的物理扇區(qū)是8272)寫入用戶指令(右鍵,從剪貼板寫入,寫入方式為16 進制)。然后放置好FPGA 板上的跳線。之后UART口連接上電源,開始啟動,實現(xiàn)三級存儲體系成功運行。

    實驗中,在BootLoader 程序中額外設(shè)置了開關(guān)控制Led燈的程序,以提示三級存儲的建立狀態(tài),控制代碼如下:

    assign led = sw[0]?(sw[1]?

    {debug_once_was,debug_i_data[14:0]}:inst_addr[15:

    0]):inst_addr[31:16];

    當sw[1:0]= = 2 時,Led 燈顯示PC 寄存器內(nèi)容的低16 位,sw[1:0]= = 1 時,Led 燈顯示PC 寄存器的高16 位。

    為避免無限循環(huán),在測試程序末尾加入無條件跳轉(zhuǎn)指令,該指令的指令代碼如表1 中黃色部分標識所示。

    表1 部分指令的執(zhí)行過程

    成功下板后,兩種開關(guān)下數(shù)碼管的顯示如下:當sw[0]= 1,sw[1]= 0 時,Led燈顯示情況如圖6(a)所示,說明PC[15:0]= = 0x00a0。當sw[0]= 0,sw[1]= 1 時,Led 燈顯示情況如圖6(b)所示,說明PC[31:16]= = 0x0040。兩者拼接組合起來就是0x0040 _00a0,即為表1 所示執(zhí)行J 指令的結(jié)果。該測試結(jié)果說明三級存儲體系設(shè)計與運行正確。

    圖6 Led燈顯示情況

    3 結(jié) 語

    本文提出了一種基于Artix-7 FPGA的三級存儲體系設(shè)計與實現(xiàn)方法,該方法指導學生們完成三級存儲體系的設(shè)計與實現(xiàn)實驗。此外,通過該實驗,增強了學生們對于計算機的三級存儲體系的結(jié)構(gòu)與工作機制的深入理解和認知,是貫通后續(xù)課程實驗的關(guān)鍵環(huán)節(jié),為學生自主設(shè)計、實現(xiàn)更加完善的個人計算機系統(tǒng)奠定了堅實的基礎(chǔ)[17]。

    猜你喜歡
    用戶程序計算機系統(tǒng)寄存器
    Lite寄存器模型的設(shè)計與實現(xiàn)
    變速箱控制系統(tǒng)Bootloader設(shè)計與實現(xiàn)
    IBM推出可與人類“辯論”的計算機系統(tǒng)
    英語文摘(2019年3期)2019-04-25 06:05:32
    嵌入式設(shè)備遠程升級方案設(shè)計
    分簇結(jié)構(gòu)向量寄存器分配策略研究*
    分布處理計算機系統(tǒng)研究
    MIMD 并行計算機系統(tǒng)結(jié)構(gòu)與定量分析
    C8051F410單片機BootLoader的實現(xiàn)
    基于國產(chǎn)CPU的立方星星載計算機系統(tǒng)設(shè)計
    計算機工程(2014年6期)2014-02-28 01:25:14
    高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
    花莲县| 昌黎县| 三门县| 将乐县| 阿鲁科尔沁旗| 东乌| 凤台县| 延川县| 广安市| 昌江| 康平县| 东兰县| 南丹县| 资阳市| 乳源| 疏勒县| 余干县| 拉孜县| 将乐县| 云安县| 湘潭市| 观塘区| 三门峡市| 弥渡县| 宕昌县| 平远县| 泌阳县| 溆浦县| 双城市| 安泽县| 景德镇市| 肇州县| 延长县| 马鞍山市| 宝鸡市| 尚义县| 漳平市| 华蓥市| 南开区| 宜都市| 威信县|