摘要:基于FPGA和嵌入式操作系統VxWorks的優點,設計了“龍騰R2”微處理器的系統驗證平臺#65377;在該驗證平臺上成功調試了VxWorks操作系統以及該驗證平臺支持的所有tShell和wShell命令及大量的測試程序#65377;實踐表明,該驗證平臺的調試和錯誤定位方法快捷有效,提高了驗證效率,縮短了設計周期#65377;
關鍵詞:嵌入式微處理器; 現場可編程邏輯; VxWorks; 系統驗證平臺
中圖分類號:TP302.1文獻標志碼:A
文章編號:1001-3695(2007)10-0240-03
驗證是保證嵌入式微處理器設計正確性的關鍵,不僅要對其進行模塊級驗證和回歸測試,還要進行系統級的全面驗證#65377;為了在系統級驗證自主研發的嵌入式微處理器“龍騰R2”,筆者使用了Altera公司的FPGA驗證開發板和嵌入式操作系統VxWorks來構建一個復雜的系統驗證平臺#65377;在該平臺下采用Quartus Ⅱ的signalTap Ⅱ和VxWorks的WDB代理以及其交叉開發環境Tornado的debugger來調試,對“龍騰R2”設計進行了全面測試和驗證#65377;該驗證平臺有較高的運行速度和快捷有效的debug方法#65377;通過該驗證平臺發現了在RTL級仿真時沒有出現的corner case問題,極大地提高了驗證效率,縮短了驗證周期#65377;
1驗證平臺的設計思路
“龍騰R2”是一款基于PowerPC體系結構的32位嵌入式微處理器,采用自頂向下的正向設計方法,使用Verilog編碼,與PowerPC750的指令集完全兼容#65377;對“龍騰R2”進行模塊級驗證和回歸測試的同時,為了在系統級驗證“龍騰R2”,必須構造一個系統驗證平臺,在這個平臺上構造各種復雜的情況去驗證設計#65377;
“龍騰R2”是一款嵌入式微處理器,如果能夠在以它為核心的系統上穩定地運行嵌入式操作系統,就可以有力地證明設計的正確性#65377;設計系統驗證平臺的思想也由此而來:a)構建一個以“龍騰R2”為核心的硬件環境,在此環境上啟動嵌入式操作系統構成一個軟硬件驗證平臺;b)在該驗證平臺上執行操作系統的命令并運行大量的測試程序進行驗證#65377;基于這樣的思想,設計系統驗證平臺需要考慮兩個方面的問題,即怎樣構建“龍騰R2”的系統和選擇怎樣的嵌入式操作系統#65377;
目前可以使用兩種方式來構建“龍騰R2”的系統:寫BFM(bus function model)構建完整的Verilog軟件系統;采用FPGA來搭建硬件系統#65377;在軟件系統上仿真嵌入式操作系統,不僅需要耗費大量的時間而且構造復雜的情況比較困難,大大降低了驗證的效率和可靠性,在系統驗證時采用這種方法不合適#65377;FPGA的可重用性及其在密度#65380;速度以及其他方面與ASIC的相似性使得FPGA成為系統驗證的最佳選擇#65377;采用FPGA搭建的系統驗證硬件子平臺,容易修改和擴充,運行速度快,一般比RTL仿真快幾個數量級,而且驗證可信度高#65377;Altera公司的Quartus Ⅱ內嵌了能夠探測設計內部信號的signalTap Ⅱ技術,可以方便地debug#65377;因此,“龍騰R2”的系統驗證硬件子平臺采用了Altera的FPGA來實現#65377;
筆者通過仔細分析和比較目前比較流行的嵌入式操作系統,考慮內核大小#65380;可裁減性#65380;可配置性#65380;靈活性等因素的影響,最終選擇了VxWorks作為驗證平臺的軟件子平臺#65377;VxWorks是美國風河公司(WindRiver)開發的一個嵌入式實時操作系統(RTOS),具有良好的持續發展能力#65380;高性能的內核及友好的用戶開發環境,在嵌入式實時操作系統領域占據了一席之地#65377;其主要商業用戶包括Cisco System#65380;Bay Networks#65380;3Com#65380;Fore System#65380;HP#65380;Lucent#65380;Qualcomm等著名公司;應用實例包括著名的火星探測車#65380;愛國者導彈等#65377;VxWorks采用模塊化設計,它由一個體積很小的內核及一些可以根據需要進行定制的系統模塊組成#65377;由于它的高度靈活性和良好的可裁減性,可以很容易地對這一操作系統進行定制或作適當開發以滿足驗證的需要;同時,VxWorks的交叉開發環境Tornado提供了強大的調試功能,可以通過Tornado的調試工具debugger查看內存和處理器內部寄存器,極大地方便了驗證和調試#65377;這些突出的優點使得它成為“龍騰R2”系統驗證軟件子平臺的首選#65377;
2“龍騰R2”的系統驗證平臺設計
2.1硬件子平臺設計
從VxWorks的角度看,微處理器#65380;系統內存加上它們之間的數據和控制通路就能構成一個可運行VxWorks的簡單系統#65377;但是這個系統使得VxWorks成了一個非實時#65380;單任務#65380;無中斷的系統,降低了驗證的覆蓋率;同時也很難監視其運行情況,不能快速判斷驗證結果的正誤,降低了驗證效率#65377;為了支持完整的VxWorks內核功能,硬件子平臺必須包含:一個定時器作為VxWorks主時鐘,以支持實時及多任務功能;一個中斷控制器,以支持VxWroks對定時中斷和其他外部中斷如讀寫中斷等的處理#65377;為了使用VxWorks的交互開發調試工具進行驗證,還需要與PC機進行連接和通信#65377;連接方式可以是以太網或串口,需要配置相應的以太網控制器或串口控制器#65377;以使用串口連接為例,運行VxWorks的硬件環境如圖1所示#65377;
為快速建立“龍騰R2”系統級驗證的硬件子平臺,筆者采用Altera生產的Stratix EP1S80 DSP開發板#65377;該開發板上的FPGA型號為Stratix EP1S80,采用1.5 V內核#65380;0.13 μm全銅工藝實現;Stratix EP1S80能提供79 040個邏輯器件,內部存儲器超過7 MB,是目前0.13 μm工業級容量最高的FPGA器件#65377;由于該開發板已經通過驗證,避免了設計驗證板及對驗證板自身的檢查和調試,縮短了搭建驗證平臺的時間#65377;
該開發板包括:2 MB的SRAM可作為硬件子平臺的內存使用;一個JTAG接口可供下載設計使用;一個80 MHz的晶振可為硬件子平臺提供系統時鐘;一個串口可與主機進行連接和通信#65377;除此之外,開發板就沒有提供驗證平臺可使用的硬件,因此,硬件子平臺需要的器件必須由自己設計#65377;參考PowerPC標準的橋/內存控制器MPC107a及VxWorks的要求,設計了由外部總線控制器#65380;內存控制器#65380;中斷控制器以及中央控制單元的簡化MPC107a,設計了一個雙端口串口控制器#65377;由于開發板上只有一個串行接口,還需要另外制作一個串行接口#65377;
在簡化的MPC107a中,接口與總線控制器提供與“龍騰R2”的接口,實現對60x總線地址周期和數據周期的響應;中央控制器識別接口與總線控制器發送過來的對地址空間訪問的請求,將相應的請求和數據發送到中斷控制器#65380;內存控制器;中斷控制器實現了兩個定時器,以產生定時中斷,接受外部中斷,并判斷中斷優先級,把中斷信號傳給微處理器;內存控制器控制對SRAM和串口的讀寫操作#65377;雙端口串口控制器除實現通用的串口控制器功能外,還添加了一個下載邏輯,實現通過串口下載VxWorks映像到內存的功能#65377;它的兩個端口分別與PC機的超級終端#65380;Tornado的目標機WDB代理服務器相連#65377;
各模塊設計完成并經驗證所有功能正確后,與微處理器設計連接構成一個SOC系統#65377;其結構如圖2所示#65377;
使用Quartus Ⅱ進行布局布線后,通過JTAG接口下載到開發板的FPGA中,驗證平臺的硬件子平臺就搭建完成,它可以作為VxWorks的目標板使用#65377;FPGA的資源使用情況如表1所示#65377;
2.2軟件子平臺的設計
按照與硬件環境的關系,VxWorks可以分為獨立于硬件環境的部分和依賴于硬件的部分#65377;獨立于硬件的部分由VxWorks的微內核wind#65380;網絡系統#65380;文件系統#65380;I/O系統組件組成#65377;VxWorks采用模塊化設計,把依賴于硬件部分的函數和信息放入BSP中#65377;BSP向上層軟件提供了一致的接口#65377;
依據系統驗證需求和已有的硬件環境,對VxWorks進行適當裁減和配置來設計軟件子平臺#65377;對于獨立于硬件的軟件部分,主要是依據需求對VxWorks進行裁減,去除不使用的組件,減少不必要的內存開銷#65377;針對“龍騰R2”的系統驗證平臺,需要添加target shell components和WDB components支持tShell交互調試與WDB代理調試功能,裁減不支持的網絡組件#65377;
依賴于硬件的軟件部分,即適合“龍騰R2”的BSP組件要依據硬件子平臺的配置和驗證需求進行配置,主要是修改BSP中的config.h文件#65377;修改內容包含以下幾個方面:修改了RAM的大小#65380;用戶保留區大小#65380;VxWorks內核存放起始地址等地址配置;使用undefine去除硬件環境中沒有的網卡#65380;硬盤#65380;鍵盤#65380;USB接口等設備驅動;添加串口驅動程序#65380;配置串口設備基地址為0xFF000000;添加了串口中斷服務子程序#65380;輔助時鐘中斷服務子程序,以及ISI異常#65380;DSI異常#65380;對齊異常#65380;程序異常等異常處理子程序#65377;經過裁減和配置后的Vxworks組織結構如圖3所示#65377;
在VxWorks的交叉開發環境Tornado下建立一個基于ppc604BSP的工程,按照上述分析進行裁減和配置,編譯生成可執行的VxWorks映像#65377;在驗證中,根據驗證需求可對VxWorks進行修改,如添加printf函數打印信息幫助調試#65380;添加用戶測試程序等#65377;因此生成的VxWorks映像大小會有所不同,約為1~1.5 MB#65377;
3“龍騰R2”系統驗證平臺的驗證結果
完成系統驗證平臺的軟硬件子平臺后,將FPGA開發板與宿主機相連,實現對“龍騰R2”的系統驗證#65377;使用Quartus Ⅱ通過JTAG接口將SOC設計下載到FPGA,使用串口助手通過串口將VxWorks下載到開發板內存,采用宿主機中的超級終端tShell和與WDB代理相連的wShell為交互平臺進行驗證#65377;該系統驗證平臺通過WDB代理使用Tornado的交叉調試工具debugger#65380;Quartus Ⅱ的signalTap及VxWorks部分系統命令作為調試手段#65377;Tornado的交叉調試工具debugger可以查看內存#65380;微處理器寄存器及VxWorks的運行情況;Quartus Ⅱ的signalTap可探測微處理器內部的信號,為快速定位bug提供了非常有效的途徑#65377;
該系統驗證平臺能在數秒內啟動VxWorks,而使用RTL仿真啟動VxWorks需要約80 h#65377;這充分說明了該平臺有巨大的速度優勢#65377;應用該系統驗證平臺成功地啟動了VxWorks操作系統,并測試了該平臺支持的所有tShell命令和wShell命令#65377;在此基礎上,進一步運行了大量的測試程序#65377;
在驗證的過程中,發現了一些在RTL仿真時沒有出現的bug#65377;以其中的一個bug為例來說明如何采用該驗證平臺快速有效地調試#65377;在調試過程中發現,在VxWorks的tShell下測試repeat命令執行無限循環打印VxWorks的啟動logo(repeat 0,printLogo)時,超級終端打印片刻之后就停止打印,但微處理器
仍在執行指令#65377;筆者結合Tornado的交叉調試工具及Quartus Ⅱ的signalTap Ⅱ技術,快速地找到了導致這個現象的根源:處理器中斷恢復機制設計存在問題#65377;修改處理器的中斷恢復機制后重新進行驗證,成功地解決了這個問題#65377;
使用這個系統驗證平臺還解決了已發現的其他bug#65377;目前經過修改后的“龍騰R2”已經能夠穩定地運行VxWorks操作系統#65377;
4結束語
本文針對“龍騰R2”處理器提出了一種系統級驗證調試的方案,構建了一個高效實用的系統驗證平臺#65377;該驗證平臺實現了對該款處理器的系統級全面驗證,同時還具有速度快#65380;驗證可信度高等優點#65377;本文論述了系統驗證平臺的設計思想#65380;具體實現和如何使用驗證平臺進行調試#65377;實踐結果表明,應用該驗證平臺能夠快速定位驗證中發現的設計問題,大大提高了系統調試的效率#65377;本文設計的驗證平臺具有較好的移植性和靈活性,進行一定的修改后可應用于驗證其他體系結構的嵌入式微處理器#65377;
參考文獻:
[1]鄭健,戎蒙恬.基于FPGA的驗證開發系統[J].集成電路應用,2004(4):62-64.
[2]馬躍虎.如何成功地完成ASlC原型驗證[J].集成電路應用,2005(1):40-41.
[3]VxWorks programmer’s guide 5.3.1[K].Alameda,CA:Wind River Systems Inc, 2002:594-608.
[4]羅國慶.VxWorks與嵌入式軟件開發[M].北京:機械工業出版社,2003:65-73.
[5]褚振勇,翁木云.FPGA設計及應用[M].西安:西安電子科技大學出版社,2002:171195.
[6]Tornado user’s guide 2.0[K].Alameda, CA: Wind River Systems Inc,2002.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”