亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

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

        0 引 言

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

        計算機(jī)存儲體系中,“三級存儲”指的是高速緩沖存儲器、主存儲器、輔助存儲器。高速緩沖存儲器用來改善主存儲器與中央處理器的速度匹配問題;輔助存儲器用于擴(kuò)大存儲空間。三級存儲系統(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 中初始部分的引導(dǎo)代碼,從而將存儲在SD中的CPU 二進(jìn)制流遷移到DDR緩存中,在以此調(diào)入主存供CPU 執(zhí)行,同時會將位于SD中的系統(tǒng)或用戶程序目標(biāo)代碼遷移到DDR中等待CPU調(diào)用執(zhí)行。

        圖1 三級存儲總體框架

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

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

        1.1 BootLoader啟動

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

        圖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)和保證了一臺簡易計算機(jī)處理效率和性能。

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

        1.3 統(tǒng)一編址

        在整個執(zhí)行過程中,代碼段地址和存儲器地址進(jìn)行統(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

        但僅進(jìn)行上述的設(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最遠(yuǎn)段的一級存儲器,要進(jìn)行存儲塊和頁面的地址管理,在進(jìn)行數(shù)據(jù)的讀寫時,需要先進(jìn)行初始化[11]。

        2 實驗驗證

        本次三級存儲體系的設(shè)計與實現(xiàn)采用的CPU 是“計算機(jī)系統(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ā)板上進(jìn)行了下板測試。

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

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

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

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

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

        圖6 Led燈顯示情況

        3 結(jié) 語

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

        猜你喜歡
        用戶程序計算機(jī)系統(tǒng)寄存器
        Lite寄存器模型的設(shè)計與實現(xiàn)
        變速箱控制系統(tǒng)Bootloader設(shè)計與實現(xiàn)
        IBM推出可與人類“辯論”的計算機(jī)系統(tǒng)
        英語文摘(2019年3期)2019-04-25 06:05:32
        嵌入式設(shè)備遠(yuǎn)程升級方案設(shè)計
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        分布處理計算機(jī)系統(tǒng)研究
        MIMD 并行計算機(jī)系統(tǒng)結(jié)構(gòu)與定量分析
        C8051F410單片機(jī)BootLoader的實現(xiàn)
        基于國產(chǎn)CPU的立方星星載計算機(jī)系統(tǒng)設(shè)計
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        免费女同毛片在线不卡| 三级4级全黄60分钟| 国产福利免费看| 国产一区二区内射最近人| 色婷婷精品午夜在线播放| 国产电影无码午夜在线播放| 99久久99久久精品国产片果冻| 国产自产av一区二区三区性色| 中文字幕日韩精品中文字幕| 日本丰满老妇bbw| 欧美尺寸又黑又粗又长| 依依成人影视国产精品| 国产一区二区三区白浆肉丝| 丝袜美腿亚洲一区二区| 水蜜桃无码视频在线观看| 国产精品久久久久久久专区| 中文字幕人妻av四季| 免费国产在线精品一区| 拍摄av现场失控高潮数次| 国产呦系列视频网站在线观看 | 亚洲精品久久久久久久久av无码| 国产亚洲欧美在线观看的| 亚洲日本一区二区在线观看| 一本色道久久亚洲综合| 人妻av乱片av出轨| 欧美韩国精品另类综合| 亚洲性日韩一区二区三区| 男人和女人做爽爽视频| 国产精品一区二区 尿失禁| 国产精品亚洲av国产| 中国亚洲一区二区视频| 成人久久久久久久久久久| 国产视频网站一区二区三区| 亚洲精品一区二在线观看| 在线播放免费人成毛片乱码| 精品丝袜人妻久久久久久| 九色精品国产亚洲av麻豆一| 亚洲综合极品美女av| 亚洲精品国产av成拍色拍| 久久HEZYO色综合| 国产一级二级三级在线观看视频|