国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于ASIC實(shí)現(xiàn)的流水線架構(gòu)8051內(nèi)核設(shè)計(jì)

2013-02-21 07:52史大龍周遠(yuǎn)遠(yuǎn)
關(guān)鍵詞:子程序存儲(chǔ)器流水線

史大龍 ,唐 建 ,周遠(yuǎn)遠(yuǎn) ,黃 魯

(1.中國科學(xué)技術(shù)大學(xué) 電子科學(xué)與技術(shù)系,安徽 合肥230027;2.中國科學(xué)技術(shù)大學(xué) 信息科學(xué)實(shí)驗(yàn)中心,安徽 合肥230027)

8051微控制器至今具有非常廣泛的應(yīng)用。其指令集簡單易懂,許多指令可直接訪問I/0引腳,便于迅速操作外圍設(shè)備。但在電路集成度和工作頻率越來越高、SoC結(jié)構(gòu)越來越復(fù)雜的今天,高達(dá)12的CPI(Cycle Per Instruction)使得指令的執(zhí)行效率十分低下。因此,設(shè)計(jì)一個(gè)指令執(zhí)行效率高且兼容全部8051指令集的硬件架構(gòu)具有重要意義。

1 8051的流水線設(shè)計(jì)

1.1 三級(jí)流水線的確定

按照計(jì)算機(jī)指令系統(tǒng)劃分,8051微控制器屬于CISC架構(gòu)。這種架構(gòu)的特點(diǎn)是追求用最少的指令來完成所需的任務(wù),因此它有數(shù)目龐大的指令集以提高編程效率;而由于不同功能的指令繁多,其代價(jià)是每條指令的長度和執(zhí)行所占用的機(jī)器周期均不相同。與CISC架構(gòu)對(duì)應(yīng)的是RISC架構(gòu),雖然它只有少數(shù)指令,執(zhí)行復(fù)雜運(yùn)算時(shí)需要將多條指令組合操作,但這些指令絕大多數(shù)都可在一個(gè)周期內(nèi)完成,有很高的指令執(zhí)行效率[1]。因此,對(duì)8051微控制器進(jìn)行某些類似RISC架構(gòu)的改造,會(huì)使微控制器的執(zhí)行效率得以提高。

比較常見的流水線結(jié)構(gòu)有三級(jí)流水線結(jié)構(gòu)和五級(jí)流水線結(jié)構(gòu)。五級(jí)流水線結(jié)構(gòu)一般包括取指令、譯碼、執(zhí)行、訪存和寫回五級(jí)。其優(yōu)點(diǎn)是把整個(gè)執(zhí)行過程分散到5個(gè)時(shí)鐘周期內(nèi),有助于提高硬件設(shè)計(jì)的主時(shí)鐘頻率;其缺點(diǎn)是由于前后指令之間的相關(guān)性,級(jí)數(shù)越大,每條指令的流水線之間的沖突就會(huì)越大,需要用一些“額外的”邏輯消除這些沖突或者在流水線隊(duì)列中插入大量的“氣泡”。三級(jí)流水線結(jié)構(gòu)一般包括取指令、執(zhí)行和寫回三級(jí)。與五級(jí)流水線結(jié)構(gòu)相比,其“執(zhí)行”級(jí)包括了五極流水線中的“譯碼”、“執(zhí)行”和“訪存”三級(jí),級(jí)數(shù)的減少有助于減少流水線中的沖突冒險(xiǎn),使得整個(gè)流水線結(jié)構(gòu)相對(duì)簡單,適用于比較簡單、數(shù)據(jù)率較低的SoC系統(tǒng)中[2]。本設(shè)計(jì)采取三級(jí)流水線的結(jié)構(gòu),即在第一個(gè)時(shí)鐘周期內(nèi)指令1進(jìn)行取指令;第二個(gè)時(shí)鐘周期內(nèi)指令1執(zhí)行,指令2取指令;第三個(gè)時(shí)鐘周期內(nèi)指令1進(jìn)行寫回,指令2執(zhí)行,指令3取指令。

8051的指令集是CISC指令集,每條指令的執(zhí)行(如圖1中的E階段)并不都是只需要一個(gè)時(shí)鐘周期,為了方便問題的表述,在圖1和后文中,將執(zhí)行階段描述為一個(gè)時(shí)鐘周期。

1.2 一種提高取指令效率的方法

如前文所述,8051的指令集中每條指令的長度并不相同,如“CLR A”長度為1 B,“LJMP address”長度為 3 B。如果程序以字節(jié)為單位順次在程序存儲(chǔ)器中排列,那么在取指令階段讀取長字節(jié)指令時(shí),就要花費(fèi)多個(gè)時(shí)鐘周期。因此,改變程序在程序存儲(chǔ)器中的存儲(chǔ)方式,使在取指令階段能夠在一個(gè)時(shí)鐘周期內(nèi)讀出多長度的字節(jié),對(duì)于提升微控制器的執(zhí)行效率具有一定意義。

為此,采取將一個(gè)程序存儲(chǔ)器分為4個(gè)子程序存儲(chǔ)器的方式,子程序存儲(chǔ)器 0存儲(chǔ)第 0、4、8、12…個(gè)字節(jié),子程序存儲(chǔ)器 1存儲(chǔ)第 1、5、9、13…個(gè)字節(jié),子程序存儲(chǔ)器 2存儲(chǔ)第 2、6、10、14…個(gè)字節(jié),子程序存儲(chǔ)器 3存儲(chǔ)第 3、7、11、15…個(gè)字節(jié)。這樣可以將高 14位作為各自子程序存儲(chǔ)器的輸入地址總線,完成一個(gè)周期內(nèi)取出4 B的工作。這種方式與將整個(gè)存儲(chǔ)器分為非2的整數(shù)次冪個(gè)子存儲(chǔ)器的方式相比,其各個(gè)子存儲(chǔ)器的地址產(chǎn)生邏輯簡單容易得多。

當(dāng)程序執(zhí)行時(shí),程序計(jì)數(shù)器向程序存儲(chǔ)器發(fā)送某一個(gè)地址,通過下文給出的組合邏輯控制,一并讀出以這個(gè)請(qǐng)求地址為首地址的連續(xù)4 B內(nèi)容。由于8051的指令集中最長的指令是3 B指令,所以按照上述方法一定可以在一個(gè)周期之內(nèi)將一條指令的全部字節(jié)取出。因?yàn)橹噶畹牡谝粋€(gè)字節(jié)的內(nèi)容可以唯一確定該指令的長度,所以,不僅可以判斷出在取出的4 B中究竟有多少條屬于此指令,而且可以預(yù)測出下一條指令的地址,為下一周期的取指令做好準(zhǔn)備[3]。

例如程序存儲(chǔ)器的輸入地址Addr=0x0021時(shí),預(yù)期讀出第 0x0021、0x0022、0x0023和 0x0024共 4 B, 這種情況下,0x0021、0x0022和 0x0023字節(jié)在各子程序存儲(chǔ)器中的地址為 2’b00 0000 0000 1000(即 Addr的高 14位),而 0x0024在子程序存儲(chǔ)器 0中的地址為 2’b00 0000 0000 1001(即 Addr的高 14位加 1)。因此,將高 14位地址 Addr[15:2]和 Addr[15:2]+1作為二選一選擇器的兩個(gè)輸入,Addr[1]和 Addr[0]作為選擇器的控制端,即可實(shí)現(xiàn)上文提到的一個(gè)周期內(nèi)依次取出4 B的操作。各子程序存儲(chǔ)器的輸入地址如表1所示,改進(jìn)后的程序存儲(chǔ)器如圖2所示。

1.3 流水線沖突冒險(xiǎn)的處理

在程序計(jì)數(shù)器預(yù)測下一指令的地址時(shí),采取的方式是根據(jù)當(dāng)前已經(jīng)讀取指令的地址和長度來計(jì)算下一指令的地址,當(dāng)?shù)贜條指令執(zhí)行完畢,程序需要發(fā)生跳轉(zhuǎn)時(shí)(如圖 3時(shí)刻 1),第 N+1條指令已經(jīng)完成取指令,而這條已經(jīng)取過的指令是按照無跳轉(zhuǎn)情況發(fā)生的情況下的“下一條指令”,即此時(shí)這種預(yù)測策略就會(huì)發(fā)生錯(cuò)誤。但這條指令只完成了取指令,并沒有執(zhí)行,在此,設(shè)置一個(gè)周期的等待信號(hào)給執(zhí)行模塊,將執(zhí)行模塊暫停一個(gè)周期(時(shí)刻1和時(shí)刻2之間),一個(gè)周期后,程序完成跳轉(zhuǎn),跳轉(zhuǎn)后的指令進(jìn)入流水線。

表1 4種情況下各子程序存儲(chǔ)器的輸入地址

另外的一種流水線沖突發(fā)生在后一條指令要讀取前一條指令運(yùn)算結(jié)果的時(shí)刻,如圖4所示。在這種情況下,前一指令執(zhí)行階段完成,即將進(jìn)入寫回階段;后一條指令等待執(zhí)行,需要從合適的位置讀取操作數(shù)。這時(shí),前一條指令的結(jié)果尚未寫入到數(shù)據(jù)存儲(chǔ)器中,后一條指令讀取的是更新前的操作數(shù)(時(shí)刻1)。因此,如果在某一個(gè)時(shí)鐘周期對(duì)同一個(gè)地址進(jìn)行讀寫,那么寫操作照常進(jìn)行,而讀操作則不經(jīng)過存儲(chǔ)器直接讀取即將寫入存儲(chǔ)器的數(shù)據(jù),這樣就能避免讀取尚未更新的數(shù)據(jù)的問題[4]。

2 仿真及流片測試

用Keil4(單片機(jī)系列的編譯軟件)對(duì)C代碼和匯編代碼進(jìn)行編譯鏈接產(chǎn)生二進(jìn)制的機(jī)器碼,存入程序存儲(chǔ)器作為被執(zhí)行程序以供仿真,多個(gè)機(jī)器碼覆蓋8051指令集的全部指令。

圖5所示為取指令階段仿真波形圖。pc指示指令的物理地址,該物理地址為首地址的4 B內(nèi)容被讀出,并將前3字節(jié)(8051最長指令)依次賦給operator1、operator2和 operator3,跟據(jù) operator1的內(nèi)容,可以判斷 op_len(即該指令的長度值)并計(jì)算下一指令的pc值。

圖5 關(guān)于取指令實(shí)現(xiàn)和解決流水線沖突的部分仿真結(jié)果

在 pc=0x73周期,完成取指令“SJMP EE”(對(duì)應(yīng)機(jī)器碼為0x80,0xEE);下一個(gè)時(shí)鐘周期按照無跳轉(zhuǎn)發(fā)生的情況完成下一條指令的取指,同時(shí)執(zhí)行這個(gè)跳轉(zhuǎn)指令;執(zhí)行結(jié)束后,程序跳轉(zhuǎn)到 0x63(0x73+指令長度+0xEE)這一正確位置繼續(xù)執(zhí)行。

經(jīng)仿真驗(yàn)證分析,該設(shè)計(jì)可以解決程序跳轉(zhuǎn)以及對(duì)同一地址進(jìn)行讀寫等易造成流水線沖突的問題,并執(zhí)行出正確的結(jié)果。

將此設(shè)計(jì)在SMIC 180 nm CMOS工藝下進(jìn)行綜合,可實(shí)現(xiàn)時(shí)鐘頻率為250 MHz的情況。進(jìn)一步的性能提升(如提高頻率、降低功耗)可通過改善集成電路工藝實(shí)現(xiàn)。

流片后測試應(yīng)用Altra公司的Stratix-Ⅱ FPGA芯片和自制的開發(fā)板產(chǎn)生測試向量 (即微控制器的輸入信號(hào)),用邏輯分析儀捕捉芯片的輸出信號(hào)。經(jīng)測試,流片后的微控制器可以根據(jù)二進(jìn)制機(jī)器碼正確執(zhí)行。

本文提出了一種流水線結(jié)構(gòu)的8051設(shè)計(jì),采用三級(jí)流水線結(jié)構(gòu),在指令集不變的情況下提高了指令執(zhí)行效率,滿足工程實(shí)際需要。該設(shè)計(jì)可以作為單獨(dú)的控制器微芯片使用,也可和其他IP一起進(jìn)行SoC設(shè)計(jì)。

[1]GOLZE U.VLSI chip design with the hardware description language Verilog[M].北京:北京航空航天大學(xué)出版社,2005.

[2]RAMIREZ A,SANTANA O J,LARRIBA-PEY J L,et al.Fetching instruction streams[C].Proceedings of the 35th Annual ACM/IEEE International Symposium on Microarchitecture,2002:371-382.

[3]SIMSIC J,TERAN S.8051 core specification[DB/OL].(2001-09-25)[2013-01-21].http://www.opencores.org.

[4]倪繼利,陳曦,李揮.CPU源代碼分析與芯片設(shè)計(jì)及Linux移植[M].北京:電子工業(yè)出版社,2007.

猜你喜歡
子程序存儲(chǔ)器流水線
靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
流水線
任意2~k點(diǎn)存儲(chǔ)器結(jié)構(gòu)傅里葉處理器
報(bào)廢汽車拆解半自動(dòng)流水線研究
淺談子程序在數(shù)控車編程中的應(yīng)用
流水線生產(chǎn)殺死藝術(shù)
子程序在數(shù)控車加工槽中的應(yīng)用探索
存儲(chǔ)器——安格爾(墨西哥)▲
西門子840D系統(tǒng)JOG模式下PLC調(diào)用并執(zhí)行NC程序
SIMATIC IPC3000 SMART在汽車流水線領(lǐng)域的應(yīng)用
崇州市| 庄浪县| 宁明县| 云阳县| 牙克石市| 若尔盖县| 公主岭市| 雷波县| 尚义县| 岢岚县| 双鸭山市| 定日县| 维西| 新民市| 盖州市| 汤原县| 五河县| 大连市| 思茅市| 赣州市| 科技| 彩票| 琼海市| 古田县| 深水埗区| 洞口县| 墨玉县| 桐乡市| 湛江市| 平利县| 上饶市| 潮安县| 榆林市| 阳曲县| 什邡市| 永和县| 河南省| 荥经县| 名山县| 禹城市| 福州市|