嵌入式体系结构分析

上传人:E**** 文档编号:109426292 上传时间:2019-10-26 格式:PDF 页数:64 大小:1.29MB
返回 下载 相关 举报
嵌入式体系结构分析_第1页
第1页 / 共64页
嵌入式体系结构分析_第2页
第2页 / 共64页
嵌入式体系结构分析_第3页
第3页 / 共64页
嵌入式体系结构分析_第4页
第4页 / 共64页
嵌入式体系结构分析_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《嵌入式体系结构分析》由会员分享,可在线阅读,更多相关《嵌入式体系结构分析(64页珍藏版)》请在金锄头文库上搜索。

1、逢 甲 大 學 資 訊 工 程 學 系 專 題 報 告 Portability Analysis of An Embedded Architecture 學 生:吳季穎 (資電四甲) 指 導 教 授 : 王文 師 中華民國九十三十一月 摘要 單晶片系統(SoC,System-on-Chip)系統開發,經由 FPGA 可程式 化的過程,完成系統的雛型設計。對於特定 CPU 的系統,往往被限制 只能在特定實驗板上面使用。特定實驗板會整合好系統需要的 I/O(Input/Output)與記憶體,且使用特定支援軟體,系統自然容 改且重複使用。本專題研究 SoC 發展平台的可移植性,藉由 Altera

2、公司 NIOS 系統為,將系統實作在非 NIOS 限定的實驗板。 研究探討 NIOS 移植時要修正的部份 , 並對移植後的系統做效能分析。 本專題將現有以Altera的NIOS為CPU的SoC系統,突破實驗板廠商 對同實驗板之間的硬體的差,將最小系統實作在FPGA晶片是 FLEX10K系EPF70RC240-4的UP2實驗板上,並藉此機會瞭解最小系統 的最低需求元件以及CPU的架構等。 關鍵詞 NIOS, SoC,SOPC,FPGA,Flash memory,Static RAM,LPM, UP2,FLEX10K - I - 目 摘要I 關鍵詞I 圖表目III 第一章 UP2 實驗板簡介.1

3、1.1 硬體規格1 1.2 UP2 與 NIOS 開發板比較.2 第二章 NIOS CPU 架構6 第三章 實作系統架構.12 第四章 系統開發程.14 4.1 開發工具之設定15 4.2 CPU j2500;j+) for(k=0;k2500;k+); 而主要的註標變 j 與 k 使用種定義方式宣告,一為暫存器, 另一個為 int 型態,主要測試執這圈迴圈的時間。測試結果如下: 16 位元 CPU 32 位元 CPU j、k 為暫存器 20 20 j、k 為 int 型態 41 51 單位:秒 可以發現 16 位元與 32 位元 CPU,j、k 為暫存器時效似乎是 相同,實際上 nios-b

4、uild 編譯後所產生的指碼在 16 位元與 32 位 元是一模一樣的,運作速相同是正常的。 在相同位元的 CPU 況下,只使用暫存器與使用變大概相差 一倍的時間,原因是編譯後的指中,因為多寫入與取 data memory 的指 , 在這一段程式用變的指個碰巧是比用暫存器時 多一倍,所以時間上會多一倍。 在同樣 j、k 為變,CPU 位元同的況下,比較真實機械碼, 個系統產生的程式碼是一模一樣的,但是速卻一樣,原因是 - 35 - avalon bus 的 data master 在 32 位元系統下,取指會需要收集 4 次 8 bits(本專題 data memory 資寬只有 8 bits

5、)組合成 32 bits 才傳給 CPU,CPU 寫入指的 32 位元要拆成 4 個 8 bits 寫入 data memory,而 16 位元系統中只需要拆解或組合次,16 位元系統的這 次可以在 pipeline 中被化簡掉,而 32 位元系統下 bus arbitrator 需要做計的動作,等到收集好資後才傳給 CPU,在這之間 CPU 必 須等待資回(pipeline 會被 freeze 住),造成 delay,所以 32 位 元的執效沒有 16 位元高。結是,當 bus、記憶體資寬夠 時,提升 CPU 的寬會造成系統效低。 將測試程式放到 stratix 實驗板(50 MHz)中測試

6、 32 位元 CPU,j、 k 宣告為暫存器的況下(bus 強制為 8 bits),跑到 2 秒鐘就結束 ,速明顯比 FLEX10K 下快很多。如果將程式碼改成: for(j=0;j2500;j+) for(k=0;k25000;k+); /多一個 0 測試出 stratix 只需要跑 12 秒就完成(32 bits bus 要 11 秒), 而本專題的系統需要執 208 秒才完成。 比較之後,給人一種 32 位元好像除定址較長以外,沒有任何優 勢的感覺,實際上,上一節中 32 位元是因為遇到能足的記憶 體,導致 bus 足,拖慢效,在如 stratix 等實驗板中,因為已經 提供很好的記憶體

7、,所以會有 32 位元比 16 位元差的況。 - 36 - 測試二: 測試程式碼如下: i = 0x55AAAA55; j = 0xAA5555AA; k = i+j; 其中 i、j、k 是用 unsigned long 型態宣告(16 位元系統與 32 位元系統中,long 型態是 32 位元)。 這段程式碼在 32 位元系統中執,只需要 37 個 clock cycle(包 含停止 counter 送出的 5 個指) , 在 16 位元下卻需要 82 個 cycle(含 停止 counter 的 4 個指)。 差在 32 位元系統中,在這段程式碼做加法運算時,只需要個 暫存器放 i 與 j

8、 的值 , k 的值直接放在 i 的暫存器中 。 而 16 位元模式 , 需使用 4 個暫存器存值,然後使用較多的 add 與 addc 指。另外 寫回去 data memory 的指花費 16 位元因為要寫入較多次,指比 32 位元多一倍。 - 37 - 乘法除法結果:(方法同加法測試) 16 位元 CPU 32 位元 CPU 乘法(software) 1657 177 除法 168 86 單位:clock cycle 16 位元與 32 位元最大的差別在乘法器上就很明顯,相差幾乎 10 倍的效能。這所選用的乘法器在 SOPC Builder 的 CPU 指定是 software,會使用指左

9、移右移與加法實作。除法器也是用軟體實 作,由 nios-build 提供。 結是,32 位元 CPU 在算術計算上,明顯比 16 位元具有優勢, 但這也是當 16 位元系統需要用到 32 位元變的時候。 - 38 - 第章 系統弱點與未展望 這些算是目前已知實作的系統的弱點: ? Compiler 的時候,建議要開最佳化。(nb 的-O0 ) ? 變宣告的時候要給預設值,主程式區再初始化。 ? GDB 只能跑模擬模式,NIOS CPU 也須為 16bits 版。 ? 未可能需要去開發一個新的 32 位元指模擬器,或是 修改 GDB,加上 UART 功能,如此才能進軟體的 debug 工作。 ?

10、 沒有 printf(),debug 困難 ? 由於沒有 printf(),所以要確定程式有執到哪一段程 式碼必須要自己用 I/O 配合燈號處,如果真的需要 printf,必須加上 UART 功能,然後加上 germs monitor。 ? 快速 download 軟體 ? 需要加上 UART 功能 , 然後加上 germs monitor , 但是 germs monitor 的程式碼所需空間,無法在 FLEX10K70 上騰出 ,所以本專題中並沒有實作這部份。 ? 還無法用 model sim 模擬整個系統 ? 因為是外掛記憶體,所以 modelsim 上面沒有相關的模擬 程式碼,因此無法

11、模擬。 - 39 - 第七章 經過與心得 這個專題,是從大三上開始著手實作,那個時候還是真的決定 是做這個題目,原本的任務是:給我個星期,試試看能能把最 小系統放到 UP2 上面跑。後發現事情並沒有那麼簡單,加上感覺 上也滿有趣的,雖然有學長繼續做下去成功的可能性大,但我還 是繼續做下去,知覺就進入大四。 最一開始的時間要追朔回到大二暑假,那時是第一次接觸 NIOS 系 統 。 那個時候在學校除習寫 VHDL外 , 也習跟著NIOS tutorial 這份文件建系統,但是還解 SOPC Builder 在建一個叫做 standard_32 的系統時為麼要出那麼多東西,每個東西的意義 沒有辦法解

12、,大三第一次聽到要放入一個最小系統的時候,腦 筋充滿著疑問,最小系統需要麼東西? 要實作的最開始當然是搞清楚最小系統需要哪些東西,在那 個時候開始,我才慢慢的對系統架構開始有一點點的解。首先需 要一個 CPU,然後給 CPU 程式的記憶體,當然系統還要有輸出部分, 然麼能看到也沒麼意義。那個時候,學長:還需要 bus,過 NIOS 系統在加入 CPU 的時候 SOPC Builder 就會自動把 bus 加上去。那個時候我還清楚 bus 在系統扮演的角色是怎樣,一 直到大三下修作業系統二的時候對 PC 上的 PCI bus 做一點解, 比較之下才解 NIOS CPU 對周邊的存取控制主要需要透

13、過 bus 實 作,用 address mapping 控制。 - 40 - 開始動手的第一步,用 SOPC builder 建一個我所認知的最小系 統,丟上去 Quartus 做 compiler 動作,發現編譯一次還真是久的 誇張,一次半小時到 40 分鐘就過去,最後只跑到 50%就跳出錯 誤,訊息當然是:LE 足。那個時候第一個反應:板子裝下。但是 NIOS 的 CPU 在一般的板子上只有吃三千 LE 的資源,想想編譯跑出 的三萬,似乎差太多,看看是哪吃太多資源,發現是暫存器 問題,仔細一看 Quartus 有一個訊息:板子支援 lpm_ram_dp 記憶 體格式,將會用 D-FF 實作

14、。 那時還發現一個怪問題,明明設定記憶體只有 128 個,為麼 程式碼會跑出塊 128 的記憶體空間,學長的回答是因為有個 bank,那個時候只有滿腦子疑問,為麼會需要個 bank?後稍微 trace NIOS 的程式碼才知道那麼做的目的與意義 , 牽扯到記憶體格 式與 structure hazard 的問題。 既然發現是暫存器格式支援,第一個目標當然是修改那個部 份,那時學長建議測試的有:自己用 D-FF 兜,讓他自己 compiler 轉 出上萬 LE 太誇張、騙 CPU 有 128 個暫存器,實際上只給他 32 個, 上單一個程式的時候只要 CWP 會變,應該會成功。 一開始我決定試試

15、看騙 CPU 暫存器個,沒有成功,後用 modelsim 模擬一下系統運作 ,發現系統一開始就出現變動 CWP 的指 ,暫存器真實位址有大變動,這樣子也許會蓋掉一些該蓋掉的東 西,只好改其他方法。 本指定的個星期很快就過,沒有做出,死心又繼續做 下去,在寒假前,決定好要用 D-FF 或是大二暑假學的 FPGA 晶片內置 記憶體控制(本是想在任何板子能跑,所以打算用這個)其中一 - 41 - 個解決。後發現 D-FF 是的,FLEX10K70 無法負荷超過一萬八 千 LE 的使用,因此確定改用內建記憶體。 寒假的時候用lpm_ram_dq代替的計畫一直沒有成功,一直到快開 學,學長介紹另一套叫做FPGA Advantage的軟體使用方法,後我 發現在面有altera公司提供給mentor graphics公司的lpm_ram_dp 與lpm_ram_dq模擬性質的程式碼 4,經過比較個程式碼一樣的地 方之後,終於發現差別在哪。過那已經是大三下開學之後的事。 找到差別之後馬上就實作成功 16 位元系統的硬體,那個時候的 系統只是簡單的結合大二暑假學的控制螢幕與鍵盤,執變換螢幕底 色顏色的 C 程式。那個時候的系統,沒有剩餘很大的記憶體放程式, 只有 1KB 的記憶體可以放程式跟資,可以大部分情形的程式太 大而無

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号