,,,
(中國(guó)兵器工業(yè)第214研究所,蘇州 215163)
隨著大規(guī)模集成電路和SoC系統(tǒng)的發(fā)展,SoC系統(tǒng)內(nèi)部集成多個(gè)微處理器核,能夠?qū)崿F(xiàn)大數(shù)據(jù)計(jì)算量和快速準(zhǔn)確的實(shí)時(shí)信息處理。而設(shè)計(jì)的事件捕捉器可用于記錄外部輸入高速信號(hào)發(fā)生的時(shí)間以及狀態(tài)信息,時(shí)間基準(zhǔn)可由通過(guò)內(nèi)部寄存器配置選擇SoC系統(tǒng)內(nèi)部的多路定時(shí)器的某一路定時(shí)器提供。設(shè)計(jì)的多路事件捕捉器可作為一個(gè)通用IP模塊集成在SoC系統(tǒng)中,借助于SoC系統(tǒng)內(nèi)部集成的定時(shí)器和微處理器核對(duì)中斷的處理功能,可以實(shí)現(xiàn)實(shí)時(shí)捕獲外部事件,可以通過(guò)進(jìn)一步計(jì)算實(shí)現(xiàn)對(duì)信號(hào)的測(cè)距、測(cè)頻等。多路事件捕捉器對(duì)輸入的事件信息信號(hào)進(jìn)行采樣,具有高實(shí)時(shí)性、高精度的特點(diǎn)。
復(fù)位管理電路為SoC片上系統(tǒng)提供復(fù)位結(jié)構(gòu)和層次、啟動(dòng)流程和復(fù)位結(jié)果的電路模塊,主要支持的復(fù)位類(lèi)型有冷復(fù)位、暖復(fù)位、調(diào)試復(fù)位、軟件復(fù)位等。
設(shè)計(jì)的多核SoC系統(tǒng)(結(jié)構(gòu)簡(jiǎn)圖如圖1所示)主要包括內(nèi)嵌的4個(gè)DSP微處理器核、AMBA總線和一些外設(shè)IP模塊等。外設(shè)IP模塊主要有時(shí)鐘管理、復(fù)位管理(RST)、8路事件捕捉器(CPI)、外設(shè)接口(MIF)、GPIO等。
圖1 多核SoC系統(tǒng)結(jié)構(gòu)簡(jiǎn)圖
設(shè)計(jì)的多路事件捕捉器主要對(duì)外部輸入的8路高速輸入信號(hào)進(jìn)行捕捉,具有高實(shí)時(shí)性、高精度的特點(diǎn)。對(duì)每個(gè)外部輸入信號(hào)捕捉都通過(guò)內(nèi)部寄存器配置有三種捕捉方式可供選擇:上升沿捕捉、下降沿捕捉、雙沿捕捉。由于設(shè)計(jì)的多核SoC系統(tǒng)內(nèi)部每個(gè)處理器核內(nèi)部都有2個(gè)定時(shí)器工作,多路事件捕捉器通過(guò)配置可選擇捕捉計(jì)時(shí)的定時(shí)器基準(zhǔn),時(shí)間信息基準(zhǔn)可從內(nèi)嵌的4個(gè)DSP核中的8路定時(shí)器中選擇,發(fā)生事件捕捉后,會(huì)產(chǎn)生相應(yīng)的中斷信號(hào)。
SoC中事件捕獲器的具體功能描述如下:事件捕獲器主要依賴(lài)DSP核中的定時(shí)器對(duì)輸入端口的相關(guān)事件進(jìn)行捕獲,并在事件發(fā)生時(shí)保存相關(guān)定時(shí)器的當(dāng)前值,同時(shí)產(chǎn)生中斷信號(hào)。相關(guān)事件包括輸入端口的上升沿、下降沿、正負(fù)雙沿,事件發(fā)生之后的捕獲值包括4個(gè)DSP的Timer0或Timer1,通過(guò)4個(gè)DSP核的事件捕獲分配寄存器分別產(chǎn)生中斷送給對(duì)應(yīng)的DSP核。捕獲模塊結(jié)構(gòu)圖如圖2所示。
圖2 8路事件捕捉器結(jié)構(gòu)圖
從結(jié)構(gòu)框圖中,可以看出多路事件捕捉器電路的輸入、輸出信號(hào)。具體的事件捕捉器信號(hào)如表1所列。除了控制事件捕捉器工作的時(shí)鐘、復(fù)位信號(hào)外,8路事件捕捉器外部輸入端有8路控制信號(hào)CPI0~CPI7,對(duì)應(yīng)8路事件輸入;而dsp1_t0~dsp4_t1作為8路事件捕捉器的計(jì)時(shí)時(shí)間基準(zhǔn),分別控制CPU的8個(gè)定時(shí)器;電路輸出端有8路對(duì)應(yīng)的捕獲中斷CPIINT0~CPIINT7。另外還有兩個(gè)32位寄存器CPISTA和CPITMR,CPISTA是事件捕獲狀態(tài)寄存器,指示8路捕獲中斷相對(duì)應(yīng)的狀態(tài),CPITMR是事件捕獲器時(shí)間寄存器,用于保存捕獲有效沿時(shí)刻相應(yīng)定時(shí)器的值。
表1 捕獲模塊接口信號(hào)
當(dāng)外部有事件輸入時(shí),立刻捕獲當(dāng)前的定時(shí)器值和捕捉事件沿信息狀態(tài)后,存儲(chǔ)在FIFO中,并產(chǎn)生中斷信號(hào)。對(duì)于同一路事件捕獲輸入,有效事件輸入間隔要求大于事件捕捉器內(nèi)部工作時(shí)鐘的8個(gè)時(shí)鐘周期,否則將只響應(yīng)第一次。另外,對(duì)同一個(gè)事件來(lái)說(shuō),事件捕獲器儲(chǔ)存的事件狀態(tài)寄存器與時(shí)間寄存器是相對(duì)應(yīng)的,事件捕獲器每一個(gè)狀態(tài)周期對(duì)事件采樣一次,要求引腳上事件的高電平和低電平持續(xù)時(shí)間各不小于一個(gè)狀態(tài)周期。
多路事件捕捉器內(nèi)部主要包括CPISTA事件捕獲器狀態(tài)寄存器、CPICTL事件捕獲器全局控制寄存器、CPIxCTL事件0捕獲控制寄存器~事件7捕獲控制寄存器、 CPITMR事件時(shí)間寄存器、CPIFR即FIFO狀態(tài)寄存器等一些寄存器,通過(guò)配置這些寄存器可控制多路事件捕捉器。這些寄存器具體功能特性如表2~表4所列。
表2 CPISTA的功能表
表3 CPICTL的功能表
事件捕獲器事件x捕獲控制寄存器具體指CPI0CTL~CPI7CTL,由于8路捕獲控制寄存器結(jié)構(gòu)相同,唯一區(qū)別為對(duì)應(yīng)地捕獲外部不同8路事件信號(hào)。
CPITMR事件捕獲器事件時(shí)間寄存器用于保存捕獲有效沿時(shí)刻相應(yīng)定時(shí)器的值。
CPIFR事件捕獲器FIFO狀態(tài)寄存器、事件捕獲器內(nèi)部包含了兩個(gè)32×32的先進(jìn)先出隊(duì)列寄存器FIFO,用于存儲(chǔ)事件發(fā)生時(shí)的信息。其中一個(gè)FIFO用于存儲(chǔ)事件發(fā)生時(shí)的時(shí)間,另一個(gè)FIFO用于記錄事件狀態(tài)。因此事件捕獲器在不讀取信息的情況下最多可以記錄32個(gè)事件,若記滿FIFO,在讀取信息前,進(jìn)一步發(fā)生的事件不再記錄。通過(guò)FIFO的空滿標(biāo)志,可以證實(shí)FIFO中數(shù)據(jù)的有效性。FIFO空滿狀態(tài)寄存器屬性如表5所列。
表4 CPIxCTL的功能表
表5 FIFO空滿狀態(tài)寄存器
設(shè)計(jì)的多路事件捕捉器內(nèi)部主要包括事件檢測(cè)器、時(shí)間存儲(chǔ)及管理模塊、事件狀態(tài)FIFO模塊和事件時(shí)間FIFO模塊、中斷設(shè)置等。
2.3.1 事件檢測(cè)器模塊
事件檢測(cè)器每個(gè)狀態(tài)周期對(duì)外部狀態(tài)采樣,如發(fā)生變化,會(huì)檢測(cè)到外部事件。用戶(hù)可通過(guò)配置CPIxCTL事件捕獲器,選擇對(duì)事件的跳變可檢測(cè):無(wú)捕獲功能、正跳沿捕獲、負(fù)跳沿捕獲、正和負(fù)跳沿都捕獲。產(chǎn)生觸發(fā)信號(hào)傳送給其他模塊,事件檢測(cè)器模塊如圖3所示。
圖3 事件檢測(cè)器模塊
2.3.2 時(shí)間存儲(chǔ)及管理模塊
事件檢測(cè)器檢測(cè)到事件發(fā)生時(shí),根據(jù)CPIxSEL選擇捕獲的Timer,把相應(yīng)DSP的Timer0或Timer1存儲(chǔ)到相應(yīng)時(shí)間寄存器中,時(shí)間存儲(chǔ)及管理模塊如圖4所示。
圖4 時(shí)間存儲(chǔ)及管理模塊
2.3.3 事件狀態(tài)FIFO模塊和事件時(shí)間FIFO模塊
事件檢測(cè)器檢測(cè)到相應(yīng)的跳變沿后,把事件發(fā)生引起的中斷狀態(tài)及時(shí)間信息同時(shí)存入事件狀態(tài)FIFO隊(duì)列和事件時(shí)間FIFO隊(duì)列。如事件狀態(tài)寄存器和事件時(shí)間寄存器是空的,當(dāng)讀取寄存器信息時(shí),F(xiàn)IFO隊(duì)列記載的信息被推入寄存器內(nèi),并根據(jù)讀取操作,F(xiàn)IFO隊(duì)列記載信息一次前進(jìn)一步。
2.3.4 中斷設(shè)置
事件捕獲器輸出8個(gè)中斷信號(hào),分別對(duì)應(yīng)8路事件輸入,8路中斷信號(hào)參與外設(shè)的中斷分配,和外設(shè)一起最終產(chǎn)生不同的中斷信號(hào)分別送入4個(gè)DSP核。DSP核在收到中斷信號(hào)之后,通過(guò)訪問(wèn)相應(yīng)寄存器,獲知具體的中斷信息,來(lái)決定后續(xù)的操作。
通過(guò)仿真激勵(lì)編寫(xiě)跳變的輸入信號(hào)CPI0~CPI7在仿真圖中對(duì)應(yīng)為ipt0~ipt7,為事件0~事件7輸入,設(shè)置捕獲事件的捕捉模式和配置內(nèi)部相關(guān)的寄存器,使多路事件捕捉器工作。CPIINT0~CPIINT7對(duì)應(yīng)仿真圖中的evt_int0~evt_int7,為事件捕獲器事件0~事件7產(chǎn)生的中斷信號(hào)。圖5中事件0~事件7八路事件同時(shí)發(fā)生,讀取狀態(tài)寄存器對(duì)應(yīng)仿真圖中的evt_sr及時(shí)間寄存器對(duì)應(yīng)圖中evt_tr的值,以及中斷發(fā)生后處理中斷的情況。
圖5 8路事件捕捉器仿真圖
為了測(cè)試事件捕捉器電路功能特性,在CCS界面編寫(xiě)DSP程序,配置2路CPI工作,并配置中斷服務(wù)程序,當(dāng)發(fā)生CPI中斷后,處理器核每次進(jìn)入中斷程序,在中斷服務(wù)程序中,配置GPIO引腳輸出發(fā)出翻轉(zhuǎn)的方波,并讀取CPI事件捕捉器的CPISTA事件捕獲器狀態(tài)寄存器和CPIMR事件捕獲器時(shí)間寄存器。測(cè)試CPI輸入信號(hào),并與對(duì)應(yīng)處理器核響應(yīng)中斷后GPIO發(fā)出的波形。設(shè)置的主要程序如下:
#define REGex1 *((int *)(0x40006010))
//中斷狀態(tài)寄存器,低8位代表CPI0~CPI7的中斷狀態(tài)
#define REGex2 *((int *)(0x40005000))
//事件捕獲器狀態(tài)寄存器地址
#define REGex3 *((int *)(0x40005080))
//事件捕獲器時(shí)間寄存器地址
*(int *)0x40005004 = 0x00000001;
//CPICTL,Enable CPI
*(int *)0x40005010 = 0x00000011;
//捕獲DSP0的T0,捕獲正跳沿,使能打開(kāi)
*(int *)0x40005014 = 0x00000031;
//捕獲DSP0的T0,捕獲正、負(fù)雙跳沿,使能打開(kāi)
中斷服務(wù)程序如下:
c_int4(void){
IER&=~(1<<4);
reg_data1 = (REGex1 & 0x000000ff);
if(reg_data1 == 0x1){
reg_data2 = REGex2;
reg_data3 = REGex3;
GPVAL&=~(1<<11);
for(Tj=1;Tj<0x00000fff;Tj++);
GPVAL|=1<<11;}
if(reg_data1 == 0x4){
reg_data2 = REGex2;
reg_data3 = REGex3;
GPVAL&=~(1<<13);
for(Tj=1;Tj<0x00000fff;Tj++);
GPVAL|=1<<13;}
IER|=1<<4;
return;}
通過(guò)示波器進(jìn)行GPIO波和CPI的輸入端口的測(cè)試,測(cè)試結(jié)果如圖6所示。圖中1通道代表其中1路CPI波輸入,內(nèi)部配置捕捉事件的上升沿變化,4通道代表設(shè)置事件捕獲上升沿后發(fā)出中斷,并且DSP進(jìn)行響應(yīng)進(jìn)入中斷服務(wù)程序,在DSP響應(yīng)中斷時(shí)使GPIO11引腳發(fā)出方波波形。圖中,3通道代表其中另一路CPI輸入波,2通道波形是代表設(shè)置事件捕獲在輸入的上升和下降沿雙沿時(shí)發(fā)出中斷,并使GPIO13引腳在DSP響應(yīng)中斷時(shí)發(fā)出方波波形,并且每次進(jìn)入中斷服務(wù)程序,DSP都能正確讀取事件捕捉器內(nèi)部的寄存器值,測(cè)試結(jié)果表明,設(shè)計(jì)的事件捕捉器能夠正常捕捉和響應(yīng)外部輸入事件,并存儲(chǔ)事件發(fā)生時(shí)刻的時(shí)間和狀態(tài)信息,并發(fā)出中斷信號(hào),在DSP處理器核響應(yīng)中斷信號(hào)后,進(jìn)入下一個(gè)事件中斷信息的處理。
圖6 CPI輸入和GPIO發(fā)出波形