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

?

一種基于CPLD的高速JTAG調(diào)試器的設(shè)計(jì)與實(shí)現(xiàn)

2014-08-07 09:42:16張紅余建
關(guān)鍵詞:狀態(tài)機(jī)命令嵌入式

張紅余建

(常州信息職業(yè)技術(shù)學(xué)院電子與電氣工程學(xué)院 江蘇常州 213164)

0 引言

隨著信息技術(shù)的發(fā)展,越來越廣泛地用到嵌入式處理器。通常,嵌入式處理器上運(yùn)行的操作系統(tǒng)都沒有完善的調(diào)試軟件,需要通過主機(jī)來控制才能進(jìn)行調(diào)試。由于嵌入式處理器千差萬別,這就導(dǎo)致每一個(gè)SOC芯片都需要移植操作系統(tǒng)。工程師通常使用JTAG接口來調(diào)式操作系統(tǒng)而使其能正常工作。

最初,設(shè)計(jì)JTAG作為芯片的邊界掃描接口。后來有廠商開始在嵌入式處理器內(nèi)部集成調(diào)試控制模塊,該模塊可以用來控制CPU的停止和單步執(zhí)行,而JTAG接口就用來作為主機(jī)和這個(gè)調(diào)試控制模塊的通信接口[1-2]。通常把這個(gè)調(diào)試控制模塊稱為OCD,而把JTAG接口控制模塊稱為TAP(TEST ACCESS PORT)。圖1所示的是一個(gè)完整的基于JTAG的調(diào)試方案。

圖1 JTAG調(diào)試方案

主機(jī)用來運(yùn)行調(diào)試軟件,調(diào)試軟件通過USB等接口與JTAG協(xié)議轉(zhuǎn)換器通信。JTAG協(xié)議轉(zhuǎn)換器則用來將調(diào)試軟件發(fā)送的調(diào)試命令轉(zhuǎn)換為對TAP控制器的控制信號并控制OCD模塊來調(diào)試CPU。

本文主要研究圖1中的JTAG協(xié)議轉(zhuǎn)換器,用來實(shí)現(xiàn)USB到JTAG的信號轉(zhuǎn)換。主機(jī)軟件則采用開源的GDB調(diào)試器。

1 系統(tǒng)設(shè)計(jì)

JTAG接口總共包括5個(gè)信號TCK,TMS,TDI,TDO和TRST:其中4個(gè)是輸入信號,另外1個(gè)是輸出信號接口。作用如下:

Test Clock Input(TCK):為TAP提供一個(gè)獨(dú)立的時(shí)鐘,TAP的所有操作都基于這個(gè)時(shí)鐘。

Test Mode Select Input(TMS):TMS信號用來控制TAP狀態(tài)機(jī)的轉(zhuǎn)換,TMS信號在TCK的上升沿有效。

Test Data Input(TDI):TAP的數(shù)據(jù)輸入接口,在TCK的上升沿有效。

Test Data Output(TDO):TAP的數(shù)據(jù)輸出接口,在TCK的下降沿有效。

Test Reset Input(TRST):TAP復(fù)位控制輸入。

JTAG協(xié)議轉(zhuǎn)換器通過對TMS信號的控制,可實(shí)現(xiàn)

TAP狀態(tài)機(jī)的轉(zhuǎn)換[3],狀態(tài)轉(zhuǎn)換如圖2所示:

圖2 TAP狀態(tài)機(jī)

圖2中狀態(tài)轉(zhuǎn)換發(fā)生在TCK信號上升沿,根據(jù)TMS信號處于0或者1狀態(tài)來進(jìn)行相應(yīng)的狀態(tài)轉(zhuǎn)換。

根據(jù)JTAG協(xié)議,TAP定義了2個(gè)寄存器,分別是數(shù)據(jù)寄存器和指令寄存器。當(dāng)TAP處于Shift-DR和Shift-IR狀態(tài)時(shí),可分別實(shí)現(xiàn)對TAP數(shù)據(jù)寄存器和指令寄存器的編程。根據(jù)不同的TAP指令,可實(shí)現(xiàn)對OCD的控制,進(jìn)而實(shí)現(xiàn)對CPU的控制。

為提高通信的效率,JTAG協(xié)議轉(zhuǎn)換器需要實(shí)現(xiàn)宏指令到JTAG信號的轉(zhuǎn)換。也就是,主機(jī)調(diào)試軟件只發(fā)送一個(gè)狀態(tài)切換或者移位等的高級操作命令,JTAG協(xié)議轉(zhuǎn)換器負(fù)責(zé)將這個(gè)高級操作命令轉(zhuǎn)換為一連串 TCK,TMS,TDI,TDO 等的信號。

本文采用FT245BM+MAX II EPM570 CPLD來實(shí)現(xiàn)USB接口到JTAG接口的信號轉(zhuǎn)換。FT245BM用來實(shí)現(xiàn)USB接口到8bit并口的信號轉(zhuǎn)換。CPLD則用來讀取8bit并口給出的宏指令,解析宏指令產(chǎn)生JTAG控制信號,并將從JTAG接口讀取到的數(shù)據(jù)通過8bit并口返回給主機(jī)。宏指令的格式定義如圖3所示:

圖3 宏指令格式

一條宏指令由8bit組成,低4bit為命令部分,高4bit為參數(shù)部分。即圖3中,CCCC為命令部分,PPPP為參數(shù)部分。具體命令定義如下:

0000:設(shè)置時(shí)鐘分頻器,參數(shù)為0表示不分頻,參數(shù)為1表示2分頻,參數(shù)為3表示4分頻。

0001:設(shè)置 TAP狀態(tài),參數(shù)部分為需要設(shè)置到的TAP狀態(tài)值,如圖2所示。

0010:得到當(dāng)前的TAP狀態(tài)

0011:TAP軟復(fù)位

0100:TAP硬復(fù)位

0101:設(shè)置TAP移位的大小端模式

0110:讀取n比特

根據(jù)以上需求,系統(tǒng)設(shè)計(jì)框圖如圖4所示:

當(dāng)RXF#信號為低時(shí),CPLD可以讀取Data信號得到新的宏指令并產(chǎn)生JTAG信號。如果宏指令為移位指令,則CPLD需要將移出來的數(shù)據(jù)寫回FT245BM。當(dāng)TXE#為低時(shí),CPLD將數(shù)據(jù)放到Data總線上并產(chǎn)生一個(gè)WR信號高到低的跳變來將數(shù)據(jù)寫回FT245BM[4]。當(dāng)主機(jī)軟件查詢到FT245BM有數(shù)據(jù)需要返回時(shí),通過USB的讀端點(diǎn)讀取CPLD送回來的數(shù)據(jù)。

圖4 系統(tǒng)設(shè)計(jì)框圖

2 CPLD設(shè)計(jì)

CPLD邏輯設(shè)計(jì)采用狀態(tài)機(jī)設(shè)計(jì)。狀態(tài)機(jī)由6個(gè)狀態(tài)組成,如圖5,分別為:ReadByte,ProcessByte,ShiftOutNBits,WriteByte,WaitTapSM,SoftResetTap。ReadByte狀態(tài)時(shí),通過檢查RXF#信號來判斷是否有下一個(gè)1Byte的并口數(shù)據(jù),如果有則讀取這8bit數(shù)據(jù),并根據(jù)當(dāng)前是否是命令的處理的第2階段來決定跳轉(zhuǎn)到ProcessByte或者ShiftOutNBits狀態(tài)。如果是前一個(gè)命令的第2階段,則跳轉(zhuǎn)到ShiftOutNBits狀態(tài)。否則,跳到ProcessByte狀態(tài)。

圖5 頂層狀態(tài)機(jī)

ProcessByte狀態(tài)時(shí),根據(jù)讀取到的8bit宏指令的命令部分進(jìn)行跳轉(zhuǎn),如果是復(fù)位指令,則跳轉(zhuǎn)到ResetTAP狀態(tài)。如果是設(shè)置TAP狀態(tài)指令,則跳轉(zhuǎn)到WaitTapSm狀態(tài)。如果是得到當(dāng)前TAP狀態(tài)指令,則跳轉(zhuǎn)到WriteByte狀態(tài)。如果是讀取n比特命令,則跳回ReadByte狀態(tài),并將命令狀態(tài)設(shè)置成第二階段。

ResetTap狀態(tài)調(diào)用TAP狀態(tài)機(jī)產(chǎn)生TAP信號,使得目標(biāo)TAP轉(zhuǎn)移到Reset狀態(tài)。WaitTapSm狀態(tài)則調(diào)用TAP狀態(tài)機(jī)產(chǎn)生TAP信號,使得目標(biāo)TAP轉(zhuǎn)移到宏指令參數(shù)部分設(shè)置的狀態(tài)[5]。

ShiftOutNBits首先調(diào)用TAP狀態(tài)機(jī)將TAP目標(biāo)狀態(tài)設(shè)置為Shift-DR或者Shift-IR狀態(tài)。然后繼續(xù)調(diào)用TAP狀態(tài)機(jī)將讀取到8bit數(shù)據(jù)移出。結(jié)束之后將移回來的8bit數(shù)據(jù)暫存到寄存器中,并跳轉(zhuǎn)到WriteByte狀態(tài),等候WriteByte狀態(tài)將該8 bit數(shù)據(jù)寫回主機(jī)。

3 實(shí)驗(yàn)結(jié)果

為驗(yàn)證CPLD設(shè)計(jì)的正確性,本文搭建了系統(tǒng)仿真測試平臺,如圖6所示:

圖6 仿真平臺

根據(jù)宏指令格式,F(xiàn)T245BFM產(chǎn)生一組測試序列,首先設(shè)置TAP狀態(tài)到ShiftDR,然后發(fā)送讀取

8bit命令,之后設(shè)置TAP狀態(tài)到IDLE,宏指令序列如下:

0x41,0xf6,0x11

仿真波形見圖7:

圖7 仿真波形

從仿真波形可知,DUT正確執(zhí)行了宏指令,并給出了正確的TAP信號。

db[7:0]給出了第一個(gè)0x41的命令,經(jīng)過4個(gè)tck時(shí)鐘,Tap的狀態(tài) tap_state[3:0]的變化為1,2,3,4。根據(jù)圖2的TAP狀態(tài)機(jī)可知狀態(tài)變化是正確的。當(dāng)前狀態(tài)已經(jīng)轉(zhuǎn)移到Shit-DR。

db[7:0]給出了第二個(gè)0xF6的命令,根據(jù)宏指令設(shè)計(jì)格式,這個(gè)命令是讀取8bit命令。然后db[7:0]給出8比特?cái)?shù)據(jù)0x55。TAP信號出現(xiàn)了8個(gè)tck,并且tdi給出01010101的波形。由于TAP的工作模式是進(jìn)一個(gè)比特就對應(yīng)的移出來一個(gè)bit,所以進(jìn)去的01010101就把TAP內(nèi)部的初始值00000000給移出來,最后db[7:0]上就出現(xiàn)了移出來的0x0數(shù)據(jù)。在移出最后一個(gè)比特?cái)?shù)據(jù)時(shí),Tms信號被置高,tap_state[3:0]狀態(tài)從 Shift-DR轉(zhuǎn)移到 Exit1-DR,也就是狀態(tài)5。

db[7:0]給出的第三個(gè)命令是0x11。根據(jù)圖2狀態(tài)機(jī),從Exit1-DR狀態(tài)可以經(jīng)過4個(gè)tck時(shí)鐘,從Parse-DR,Exit2-DR,Update-DR狀態(tài)最后轉(zhuǎn)移到Run-IDLE狀態(tài)。因此,tap_state[3:0]的狀態(tài)值序列為 6,7,8,1。

4 結(jié)束語

本文設(shè)計(jì)的JTAG調(diào)試器可應(yīng)用于ASIC硬件驗(yàn)證以及嵌入式系統(tǒng)軟件的調(diào)試。相比以往基于FT232芯片設(shè)計(jì)的調(diào)試器,速度可以提高10倍以上,可穩(wěn)定工作于20 MHz的頻率下。該解決方案的應(yīng)用,必將為廣大嵌入式工程師以及ASIC工程師提供更好的工具并提高效率。

[1] 周金,張景璐.一種嵌入式系統(tǒng)實(shí)現(xiàn)的JTAG調(diào)試器[J].電子技術(shù)應(yīng)用,2006(11):69.

[2] 胡倩,楊景常.基于JTAG協(xié)議的ARM調(diào)試接口設(shè)計(jì)[J].西華大學(xué)學(xué)報(bào):自然科學(xué)版,2007(2):39.

[3] 殷偉鳳.基于JTAG的ARM嵌入式系統(tǒng)調(diào)試技術(shù)實(shí)現(xiàn)及應(yīng)用[J].浙江萬里學(xué)院學(xué)報(bào),2009(2):17.

[4] 曾強(qiáng),趙娟,魏林,等.基于FT245的Linux USB驅(qū)動(dòng)的設(shè)計(jì)[J].光電技術(shù)應(yīng)用,2011(1):70.

[5] 常志恒,尚鐵軍,史順波.基于JTAG的片上調(diào)試器與調(diào)試系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2012(30):78-82.

猜你喜歡
狀態(tài)機(jī)命令嵌入式
只聽主人的命令
基于有限狀態(tài)機(jī)的交會對接飛行任務(wù)規(guī)劃方法
移防命令下達(dá)后
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
這是人民的命令
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
藍(lán)色命令
FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
平山县| 扎鲁特旗| 密云县| 老河口市| 上高县| 云和县| 正宁县| 雷州市| 鹤庆县| 庄河市| 泸溪县| 酒泉市| 新绛县| 九江县| 德昌县| 梓潼县| 彩票| 灯塔市| 青阳县| 新昌县| 枣强县| 灵武市| 个旧市| 盐亭县| 长葛市| 黑河市| 阿瓦提县| 洱源县| 井冈山市| 沅陵县| 霍山县| 新晃| 泾阳县| 文登市| 那曲县| 东港市| 平顶山市| 马关县| 金平| 望都县| 沁源县|