基于FPGA的八位RISC CPU的設計

發(fā)布時(shí)間:2010-8-2 23:38    發(fā)布者:conniede
關(guān)鍵詞: CPU , FPGA , 八位RISC
1 引 言   

隨著(zhù)數字通信和工業(yè)控制領(lǐng)域的高速發(fā)展,要求專(zhuān)用集成電路(ASIC)的功能越來(lái)越強,功耗越來(lái)越低,生產(chǎn)周期越來(lái)越短,這些都對芯片設計提出了巨大的挑戰,傳統的芯片設計方法已經(jīng)不能適應復雜的應用需求了。SoC(System on a Chip)以其高集成度,低功耗等優(yōu)點(diǎn)越來(lái)越受歡迎。開(kāi)發(fā)人員不必從單個(gè)邏輯門(mén)開(kāi)始去設計ASIC,而是應用己有IC芯片的功能模塊,稱(chēng)為核(core),或知識產(chǎn)權(IP)宏單元進(jìn)行快速設計,效率大為提高。CPU 的IP核是SoC技術(shù)的核心,開(kāi)發(fā)出具有自主知識產(chǎn)權的CPU IP核對我國在電子技術(shù)方面跟上世界先進(jìn)的步伐,提高信息產(chǎn)業(yè)在世界上的核心竟爭力有重大意義。
  
精簡(jiǎn)指令集計算機RISC(Reduced Instruction Set Computer)是針對復雜指令集計算機CISC(Complex Instruction Set Computer)提出的,具備如下特征

1)一個(gè)有限的簡(jiǎn)單的指令集;

2)強調寄存器的使用或CPU配備大量的能用的寄存器;

3)強調對指令流水線(xiàn)的使用。
  
2 CPU IP核的組成
  
盡管各種CPU的性能指標和結構細節不同,但所要完成的基本功能相同,從整體上可分為八個(gè)基本的部件:時(shí)鐘發(fā)生器、指令寄存器、累加器、RISC CPU算術(shù)邏輯運算單元、數據控制器、狀態(tài)控制器、程序控制器、程序計數器、地址多路器。狀態(tài)控制器負責控制每一個(gè)部件之間的相互操作關(guān)系,具體的結構和邏輯關(guān)系如圖1所示。
  
時(shí)鐘發(fā)生器利用外部時(shí)鐘信號,經(jīng)過(guò)分頻生成一系列時(shí)鐘信號給CPU中的各個(gè)部件使用。為了保證分頻后信號的跳變性能,在設計中采用了同步狀態(tài)機的方法。
  
指令寄存器在觸發(fā)時(shí)鐘clk1的正跳變觸發(fā)下,將數據總線(xiàn)送來(lái)的指令存入寄存器中。數據總線(xiàn)分時(shí)復用傳遞數據和指令,由狀態(tài)控制器的load_ir信號負責判別。load_ir信號通過(guò)使能信號ena口線(xiàn)輸入到指令寄存器。復位后,指令寄存器被清為零。每條指令為兩個(gè)字節16位,高3位是操作碼,低13位是地址線(xiàn)。CPU的地址總線(xiàn)為是13位,位尋址空間為8K 字節。本設計的數據總線(xiàn)是8位,每條指令取兩次,每次由變量state控制。
  
累加器用于存放當前的運算結果,是雙目運算中的一個(gè)數據來(lái)源。復位后,累加器的值為零。當累加器通過(guò)使能信號ena 口線(xiàn)收到來(lái)自CPU狀態(tài)控制器load_acc 信號后,在clk1時(shí)鐘正跳沿時(shí)就接收來(lái)自數據總線(xiàn)的數據。
  圖1 CPU結構圖
  
算術(shù)邏輯運算單元根據輸入的不同的操作碼分別實(shí)現相應的加、與、異或、跳轉等基本運算。
  
數據控制器其作用是控制累加器的數據輸出,由于數據總線(xiàn)是各種操作傳送數據的公共通道,分時(shí)復用,有時(shí)傳輸指令,有時(shí)要傳送數據。其余時(shí)候,數據總線(xiàn)應呈高阻態(tài),以允許其他部件使用。所以,任何部件向總線(xiàn)上輸出數據時(shí),都需要一個(gè)控制信號的,而此控制信號的啟、停則由CPU狀態(tài)控制器輸出的各信號控制決定?刂菩盘杁atactl_ena決定何時(shí)輸出累加器中的數據。
  
地址多路器用于輸出的地址是PC(程序計數器)地址還是數據/端口地址。每個(gè)指令周期的前4個(gè)時(shí)鐘周期用于從ROM中讀取指令,輸出的應是PC地址,后4個(gè)時(shí)鐘周期用于對RAM或端口的讀寫(xiě),該地址由指令給出,地址的選擇輸出信號由時(shí)鐘信號的8分頻信號fecth提供。
  
程序計數器用于提供指令地址,以便讀取指令,指令按地址順序存放在存儲器中,有兩種途徑可形成指令地址,一是順序執行程序的情況,二是執行JMP指令后,獲得新的指令地址。
  
狀態(tài)機控制器接受復位信號RST,當RST有效時(shí),能通過(guò)信號ena使其為0 ,輸入到狀態(tài)機中以停止狀態(tài)機的工作。狀態(tài)機是CPU 的控制核心,用于產(chǎn)生一系列的控制信號,啟動(dòng)或停止某些部件,CPU何時(shí)進(jìn)行讀指令來(lái)讀寫(xiě)I/O端口及RAM區等操作,都是由狀態(tài)機來(lái)控制的。狀態(tài)機的當前狀態(tài),由變量state記錄,state的值就是當前這個(gè)指令周期中已經(jīng)過(guò)的時(shí)鐘數。指令周期是由8 個(gè)時(shí)鐘組成,每個(gè)時(shí)鐘都要完成固定的操作。
  
3 系統時(shí)序
  
RISC CPU的復位和啟動(dòng)操作是通過(guò)rst引腳的信號觸發(fā)執行的,當rst信號一進(jìn)入高電平,RISC CPU就會(huì )結束現行操作,并且只要rst停留在高電平狀態(tài),CPU就維持在復位狀態(tài),CPU各狀態(tài)寄存器都設為無(wú)效狀態(tài)。當信號rst回到低電平,接著(zhù)到來(lái)的第一個(gè)fetch 上升沿將啟動(dòng)RISC CPU開(kāi)始工作,從ROM的000處的開(kāi)始讀取指令并執行相應的操作。

讀指令時(shí)序,每個(gè)指令的前3個(gè)時(shí)鐘周期用于讀指令,4~6周期讀信號rd有效,第7 個(gè)周期讀信號無(wú)效,第8個(gè)周期地址總線(xiàn)輸出PC地址,為下一個(gè)指令作準備。
  
寫(xiě)指令時(shí)序,每個(gè)指令的第3.5個(gè)時(shí)鐘周期建立寫(xiě)地址,第四個(gè)周期輸出數據,第5個(gè)時(shí)鐘周期輸出寫(xiě)信號,第6個(gè)時(shí)鐘結束,第7.5個(gè)時(shí)鐘周期輸出為PC地址,為下個(gè)指令做準備。
  
如圖2 所示,這是ModelSim SE6.0進(jìn)行波形仿真的結果。
  
4 微處理器指令
  
數據處理指令:數據處理指令完成寄存器中數據的算術(shù)和邏輯操作,其他指令只是傳送數據和控制程序執行的順序.因此,數據處理指令是唯一可以修改數據值的指令,數據處理指令一般需兩個(gè)源操作數,產(chǎn)生單個(gè)結果.所有的操作數都是8位寬,或者來(lái)自寄存器,或者來(lái)自指令中定義的立即數.每一個(gè)源操作數寄存器和結果寄存器都在指令中獨立的指定。

  圖2 讀寫(xiě)指令時(shí)序
  
數據傳送和控制轉移類(lèi)指令:共有17條,不包括按布爾變量控制程序轉移的指令。其中有全存儲空間的長(cháng)調用、長(cháng)轉移和按2KB分塊的程序空間內的絕對調用和絕對轉移;全空間的長(cháng)度相對轉移及一頁(yè)范圍內的短相對轉移;還有條件轉移指令。這類(lèi)指令用到的助記符有ACALL, AJMP, LCALL, LJMP, SJMP, M, JZ, JNZ, ONE,DJNZ?刂妻D移類(lèi)指令主要用來(lái)修改1x指針從而達到對程序流的控制,所用到的寄存器主要有sp, pc, ir等寄存器。
  
指令由操作碼和操作數組成,取指令電路的目的就是把指令碼和操作數分開(kāi)。組成電路由如圖3所示。取指令電路由程序指針,程序指針解析模塊、ROM, IR(指令寄存器),控制器狀態(tài)寄存器組成。取指令指令的過(guò)程如下:PC指針的值經(jīng)過(guò)pc_mux模塊賦值,把ROM中的指令取出來(lái),送到指令寄存器的數據輸入口。指令寄存器受狀態(tài)寄存器的控制,當取指令信號有效時(shí),ROM中的指令碼被保存在指令寄存器中,然后經(jīng)控制器譯碼,產(chǎn)生控制信號,對PC指針的增量加以控制取出下一條指令。
  圖3 取指令電路
5 匯編
  
匯編程序是為了調試軟核而開(kāi)發(fā)的,手工編寫(xiě)機器碼很容易出錯并且工作量很大。在調試過(guò)程中修改指令集時(shí),匯編程序也要作相應的修改。所以要求編譯器的結構簡(jiǎn)單性能可靠,在程序中必要的地方可以用堆疊代碼方法實(shí)現,不必考慮編程技巧和匯編器效率問(wèn)題。匯編程序用于測試RISC CPU的基本指令集,如果CPU的各條指令執行正確,停止在HLT指令處。如果程序在其它地址暫停運行,則有一個(gè)指令出錯。程序中,@符號后的十六進(jìn)制表示存儲器的地址,每行的//后表示注釋。下面是一小段程序代碼,編譯好的匯編機器代碼裝入虛擬ROM,要參加運算的數據裝入虛擬RAM就可以開(kāi)始進(jìn)行仿真。
  
機器碼 地址 匯編助記符 注釋
  @00 //地址聲明
  101_11000 //00 BEGIN: LDA DATA_2
  0000_0001
  011_11000 //02 AND DATA_3
  0000_0010
  100_11000 //04 XOR DATA_2
  0000_0001  001_00000 //06 SKZ
  0000_0000
  000_00000 //08 HLT //AND does't work
  
6 調試
  
最基本的調試手段 是基于FPGA 廠(chǎng)商提供的開(kāi)發(fā)和仿真環(huán)境,用硬件描述語(yǔ)言編寫(xiě)TESTBENCH,構成一個(gè)最小運行環(huán)境。TESTBENCH產(chǎn)生對目標軟核的激勵,同時(shí)記錄軟核的輸出,和預期值進(jìn)行比對,可以確定核的設計錯誤。這種方法的好處是實(shí)現容易,結果準確,但硬件描述語(yǔ)言編碼量較大。為了仿真結果的準確性,無(wú)論功能仿真還是時(shí)序仿真,仿真的步長(cháng)都不能太小,結果導致整個(gè)系統仿真時(shí)間太長(cháng)。本設計中先對RISC CPU的各個(gè)子模塊進(jìn)行了分別綜合,檢查正確性,如果發(fā)現錯誤可以在較小的范圍內來(lái)檢查并驗證。子模塊綜合完畢后,把要綜合的RISC CPU的模塊與外圍器件以及測試模塊分離出來(lái)組成一個(gè)大模塊,綜合后的的RISC CPU模塊如圖4所示,這是Xilinx ISE7.1 所綜合生成的技術(shù)原理圖。

綜合的結果只是通用的門(mén)級網(wǎng)表,只是一些與、或、非門(mén)的邏輯關(guān)系,和芯片實(shí)際的配置情況還有差距。此時(shí)應該使用FPGA/CPLD廠(chǎng)商提供的實(shí)現與布局布線(xiàn)工具,根據所選芯片的型號,進(jìn)行芯片內部功能單元的實(shí)際連接與映射。這種實(shí)現與布局布線(xiàn)工具一般要選用所選器件的生產(chǎn)商開(kāi)發(fā)的工具,因為只有生產(chǎn)者最了解器件內部的結構,如在ISE的集成環(huán)境中完成實(shí)現與布局布線(xiàn)的工具是Flow Engine。
圖4 CPU技術(shù)原理圖
  
STA(Static Timing Analysis)靜態(tài)時(shí)序分析,完成FPGA設計時(shí)必須的一個(gè)步驟。在FPGA加約束、綜合、布局布線(xiàn)后,在ISE中可以運行Timing Analyzer生成詳細的時(shí)序報告,本設計中Minimum period: 12.032ns (Maximum Frequency: 83.112MHz),Minimum input arrival time before clock: 6.479ns,Maximum output required time after clock: 9.767ns。然后,設計人員檢查時(shí)序報告,根據工具的提示找出不滿(mǎn)足Setup/Hold time的路徑,以及不符合約束的路徑,進(jìn)行修改保證數據能被正確的采樣。在后仿真中將布局布線(xiàn)的時(shí)延反標到設計中去,使仿真既包含門(mén)延時(shí),又包含線(xiàn)延時(shí)信息。這種后仿真是最準確的仿真,能真實(shí)地反映芯片的實(shí)際工作情況。
  
7 結 論
  
復雜的RISC CPU設計是一個(gè)從抽象到具體的過(guò)程,本文根據FPGA的結構特點(diǎn),圍繞在FPGA上設計實(shí)現八位微處理器軟核設計方法進(jìn)行探討,研究了片上系統的設計方法和設計復用技術(shù),并給出了指令集和其調試方法,提出了一種基于FPGA的微處理器的IP的設計方法。本文作者創(chuàng )新點(diǎn)是:根據Spartan II 的內部結構,在編碼階段實(shí)現了地址和數據的優(yōu)化,實(shí)現階段對內部布局布線(xiàn)進(jìn)行重新配置,設計實(shí)現的微處理器僅占用78個(gè)slices,1個(gè)Block RAM,在10萬(wàn)門(mén)的芯片實(shí)現,占用6%的資源。
本文地址:http://selenalain.com/thread-18729-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页