基於SOPC的通用型JTAG調試器的設計

來源:互聯網
上載者:User
 

基於SOPC的通用型JTAG調試器的設計
[日期:2008-12-18] 來源:單片機與嵌入式系統應用  作者:電子科技大學 馬俊 雷航 [字型: ]

 

SOPC技術的發展,給模擬器指出了新的發展方向。所謂SOPC技術,就是指用可程式化技術將整個系統放在一塊矽片上。在傳統設計中電路級相互獨立的各個系統被整合到一塊FPGA晶片中。
    SOPC的可重用性是一種先進的設計思想。為了降低使用者的負擔,避免重複勞動,將一些在數字電路中常用但比較複雜的功能模組,比如SDRAM控制器等,設計成可修改參數的模組,使用者在設計系統時可以直接調用這些模組。這些特定的功能模組被稱為IPcore(智慧財產權核)。由於IPcore通常是很成熟的,因此降低了開發風險。
    本文利用SOPC技術的特點,設計一種通用型調試器。根據待偵錯目標板的CPU型號,將相應的調試IPcore和其他通用IPcore一起編譯產生一個嵌入式調試系統,下載到FPGA上,實現一個通用型調試器。在使用同一個硬體系統的情況下,可以選擇不同的調試IPcore來調試不同的CPU,而不同的 IPcore可以方便的互相替換。該方法在設計靈活性、開發成本、開發週期、工作效能等方面都具有優越性。具體的實現採用了Cyclone開發板和 Altera開發套件。

1 JTAG調試原理
    目前線上模擬調試器中使用最多的調試方法都是基於JTAG標準。1986年,聯合測試行動組發表了最早的邊界掃描測試規範(Boundary Scan Testing),經不斷改進,1990年被批准為IEEE Std 1149.1a標準,簡稱JTAG標準。現在大多數複雜的IC晶片都帶有JTAG調試介面。本文所討論的調試方法也基於JTAG標準。下面首先簡單介紹一下JTAG調試原理。
    JTAG調試原理的基礎是邊界掃描測試。它通過在晶片的每個I/0腳附加一個邊界掃描單元(BoundaryScan Cell,BSC)以及一些附加的測試控制邏輯來實現。每個BSC有兩個資料通道:一個是測試資料通道——測試資料輸入TDI(Test Data Input)、測試資料輸出TD0(Test Data 0utput);另一個是正常資料通道——正常資料輸入NDI(Normal Data Input)、正常資料輸出ND0(Normal Data Output)。在正常工作狀態,輸入和輸出資料可以自由通過每個BSC,正常工作資料從NDI進,從NDO出。在測試狀態,可以選擇資料流動的通道:對於輸入引腳,可以選擇從NDI或從TDI輸入資料;對於輸出引腳,可以選擇從BSC輸出資料至NDO或至TDO。晶片輸入輸出引腳上的邊界掃描寄存器單元可以相互串連起來,在晶片周圍形成一個掃描鏈。利用邊界掃描鏈就可以控制晶片的輸入,觀察晶片的輸出。一般來說,晶片都提供了若干條掃描鏈來完成測試功能。例如ARM7TDMI核提供了3條掃描鏈。
    JTAG控制器主要由3部分組成:測試連接埠控制器(Test Access Port,TAP)、指令寄存器和資料寄存器。其中,TAP控制器是JTAG的核心控制器,需要以下5個控制訊號:TCK(邊界掃描時鐘)、 TMS(JTAG測試模式選擇)、TDI(串列邊界掃描輸入資料)、TDO(串列邊界掃描輸出資料)和TRST(JTAG測試邏輯複位)。正是通過TAP 控制器狀態的不斷變化,JTAG控制器得以控制CPU的運行。TAP控制器的狀態機器1所示。

2 系統設計與實現
2.1 硬體設計與實現
   
本文採用A1tera的FPGA器件實現了圖2所示的硬體結構。

    列出了所需要的各類IPcore,其中大部分在Altera的開發包中可以找到,主要包括:
    Nios II/f CPU,50 MHz,Altera提供的免費軟核CPU。
    Avalon匯流排,用於資料通訊。
    Flash控制器,用於控制和操作Flash晶片。Flash晶片中靜態存放作業系統、1wIP協議棧及其他調試代碼。本系統中使用的Flash晶片為Am29LVl60D,容量為2MB。
    SDRAM控制器,用於控制和操作SDRAM晶片。SDRAM晶片用於動態執行偵錯工具。本系統中使用的SDRAM晶片為三星公司的K4S640432,容量為8 MB。
    Ethernet控制器,用於控制和操作網卡晶片。模擬器使用這個乙太網路口與PC部分的整合式開發環境通訊。本系統中使用的網卡晶片為LAN91C111。
    ARM7TDMI JTAG IPcore,模擬調試IPcore,需要自主開發。其內部邏輯用Verilog語言實現,然後按照Altera IPcore的標準編寫IPcore描述檔案,最後掛在三態匯流排上,完成全部調試功能。
    TCK發生器,TCK脈衝產生邏輯,需要自主開發。它利用Nios的時鐘產生TCK訊號,作為時鐘來驅動ARM7TDMI JTAG IPcore。它被做成一個小的功能模組,通過PIO與三態匯流排通訊。
    上述所介紹的IPcore使用Altera公司的開發工具Quartus II編譯,最後下載到Altera FPGA中。本系統使用的CPGA晶片是Cyclone系列的EPlCl2。該晶片包含12 060個邏輯單元,具有239 616位RAM,片上整合2個鎖相環,最大使用者I/O引腳達到249個。
    該硬體結構很好地體現了SOPC的概念,所有的IPcore(包括Altera公司發布和自主開發的)整合在一片FPGA上。一個片上系統就基本包含了線上模擬器的絕大部分功能,任何硬體結構設計的變化都在該片FPGA上,這使得通用線上模擬器這個概念得以實現。對其他晶片線上模擬,只需更改 ARM7TDMI JTAG IPcore模組,重新下載到FPGA中,便可以對另一種處理器晶片進行線上模擬。該IPcore用Verilog語言實現,儲存為armjtag.v檔案。通過Quartus II裡的SOPC Builder可以將該檔案產生組件,再將其加入Nios系統中。器件引腳分配好後,就在Quartus II裡全編譯,最後產生ice.pof檔案。將該檔案通過編程器燒寫到配置晶片EPCS4裡面。這樣硬體系統就完成了。
2.2 軟體設計與實現
   
本系統的軟體部分包括2個模組:一是PC端的開發調試介面,二是調試器裡面的控製程序。2個模組通過TCP/IP協議通訊。
    PC端開發調試介面的主要功能是接收使用者的調試命令,並顯示調試結果。這是系統與使用者進行互動的唯一方式。開發調試介面對上給使用者提供統一的調試功能介面,對下給調試器提供統一的調試命令。本系統使用VisualC++開發。
    調試器裡的控製程序主要功能是將上層使用者調試命令轉換成特定的JTAG指令序列,並控制IPcore將其發送出去,同時接收JTAG反饋資訊並發送回使用者介面。本系統使用Nios IDE來開發。在Nios IDE的工程屬性中加入LwIP和μC/OS組件。主程式首先初始化μC/0S,初始化LwIP協議棧,再啟動μC/OS。所有程式控制放在μC/OS的 OSStart()任務裡。該任務首先建立一個通訊端,然後在死迴圈中等待資料到來。當收到來自PC端的調試命令後,從資料包中分離出命令字和參數,將命令字轉換成IPcore需要的調試命令,通過Avalon匯流排將其發送到IPcore,並等待IPcore工作完成。最後將IPcore傳回的資料打包發回PC端。
    目前提供的通用調試命令如表1所列。

    在TCP/IP資料包中,有效資料為12位元組。第1至4位元組是命令代碼,第5至8位元組為命令參數1,第9到12位元組為命令參數2。命令參數1和命令參數2 是否有效取決於命令代碼。主控製程序收到資料包後,將命令代碼發往JTAG IPcore的指令連接埠地址,並根據命令代碼向參數連接埠地址發送命令參數1。如果該命令代碼需要命令參數2,則在下一個周期發送。
    在SOPC的硬體系統設計中,所有的外設都是統一編址。將JTAG IPcore的指令連接埠地址和參數連接埠地址分別設定成0x00910850和0x00910860,連接埠位寬為32位。因此在程式裡,往IPcore發送指令只需要往地址0x00910850寫32位元據;往IPcore發送參數只需要往地址Ox00910860寫32位元據。反饋資料連接埠地址設定成 Ox00910870,連接埠位寬為32位。因此在程式裡,讀取JTAG反饋資料只需讀取地址0x00910870的32位元據。
2.3 JTAG IPcore的實現
    JTAG IPcore是本調試器的核心,下面簡單介紹一下該部分的實現。
    IPcore的介面3所示。

    該IPcore的對外介面由兩部分組成:一是與Avalon匯流排通訊的介面部分,即圖中的左邊部分;二是與被調試CPU通訊的介面部分,即圖中的右邊部分。另外,在整個實現中,定義了一些重要的寄存器。
    “reg[3000:O]tms,tdo"分別用來存放完成當前操作的tms序列和tdo序列。像訪問儲存空間這樣的操作需要很長的tms序列和tdo序列,因此用了3001位。IPcore每次從這2個寄存器讀取1位後,就向對應的引腳發送資料。tdi寄存器只用了134位,因為不是每個tdi輸入對 JTAG調試都有用。parmreg寄存器用來存放匯流排上傳來的參數。tdidata寄存器用來存放從tdi引腳讀取的有效資料,將被發送到Avalon 匯流排。tdicolJnter寄存器用來對tdi輸入資料計數。
    Avalon匯流排上來的指令發送到ins[31:0]連接埠。在調試器主程式裡判斷指令,做出相應的動作。當IPcore讀取到某個指令後,根據命令代碼尋找對應的TMS命令序列,找到以後將命令序列送到tms寄存器。同時,通過parm[31:O]連接埠讀取命令參數,根據命令參數產生對應的TDO序列,將其送到tdo寄存器。當兩個寄存器的內容準備好後,在TCK時鐘的控制下,通過TMS引腳和TD0引腳分別串列輸出。在TDO引腳輸出的同時檢測TDI引腳,並在適當時機將TDI引腳上的資料讀入IPcore,經過處理後發送回匯流排。
    由於TMS序列長度較長且其對應於各個調試命令是固定不變的,因此在本設計中,將TMS序列作成一個表,存放在IPcore裡,而不是通過匯流排發送。需要時,根據不同的命令代碼來讀取。這樣可以節約時間,提高調試速度。

結 語
    本文介紹了一個基於SOPC的通用調試器的設計方案與實現過程。在開發過程中,IP複用、軟硬體協同設計等先進的嵌入式設計思想對縮短開發時間、降低開發風險起到了很好的作用。同時,自主開發的ARM7TDMIJTAG IPcore和C8051 JTAG IPcore體現了該調試器的通用性。接下來還將推出基於ARM其他系列和PowerPC系列的IPcore,本調試器的應用價值將得到進一步提高。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.