陳崇森
(廣州海格通信集團(tuán)股份有限公司,廣州 510663)
?
基于P2020處理器的高速數(shù)據(jù)總線接口設(shè)計(jì)※
陳崇森
(廣州海格通信集團(tuán)股份有限公司,廣州 510663)
摘要:通過以Freescale公司的P2020雙核處理器為核心的嵌入式硬件平臺(tái),介紹了CPU與FPGA的基于Local Bus接口設(shè)計(jì)具備DMA傳輸功能及環(huán)形緩沖的高速數(shù)據(jù)總線接口方法,以及基于Linux3.0內(nèi)核開發(fā)此接口的驅(qū)動(dòng)程序的實(shí)現(xiàn)方法。該技術(shù)已在某寬帶高速設(shè)備上應(yīng)用,實(shí)際測試,其實(shí)時(shí)穩(wěn)定性、數(shù)據(jù)吞吐量、鏈路穩(wěn)定性均滿足設(shè)計(jì)要求,對(duì)同類型嵌入式平臺(tái)的高速數(shù)據(jù)總線接口設(shè)計(jì)及開發(fā)有借鑒意義。
關(guān)鍵詞:P2020;Local Bus;DMA;環(huán)形緩沖
引言
QorIQ P2平臺(tái)是Freescale公司推出的高性能低功耗系列處理器,包括P2020雙核以及P2010單核兩款產(chǎn)品。P2平臺(tái)憑借低功耗、高效率雙指令執(zhí)行、e500 Power核心以及1.33 GHz頻率,提供高效的單線程性能,非常適合應(yīng)用于聯(lián)網(wǎng)和電信線路卡等寬帶通信設(shè)備。P2020作為主CPU與大規(guī)模FPGA進(jìn)行通信,采用Local Bus接口連接可實(shí)現(xiàn)高速通信,此種連接具有通信可靠、FPGA時(shí)序邏輯易于實(shí)現(xiàn)等優(yōu)點(diǎn),但是Linux不是強(qiáng)實(shí)時(shí)操作系統(tǒng),難以實(shí)現(xiàn)對(duì)高速數(shù)據(jù)的實(shí)時(shí)傳輸及處理,所以Local Bus的實(shí)時(shí)緩沖接口設(shè)計(jì)成為系統(tǒng)性能實(shí)現(xiàn)的關(guān)鍵。本文采用中斷觸發(fā)、DMA傳輸,開辟了大片環(huán)形緩沖內(nèi)存的數(shù)據(jù)總線接口設(shè)計(jì)方法,開發(fā)了Linux下的驅(qū)動(dòng)程序,實(shí)現(xiàn)了高速數(shù)據(jù)的實(shí)時(shí)可靠傳輸。
1P2020的特點(diǎn)及Local Bus接口
1.1P2020的特點(diǎn)
P2020處理器的特點(diǎn)如下:
① 雙核高性能Power Architecture e500核心,36位物理尋址,支持雙精度浮點(diǎn),每核心32 KB一級(jí)指令高速緩存以及32 KB一級(jí)數(shù)據(jù)緩存,高達(dá)1.33 GHz時(shí)鐘頻率,具有ECC功能的512 KB二級(jí)高速緩存,還可配置為SRAM以及緩沖存儲(chǔ)器。
② 3個(gè)10/100/1000 Mbps增強(qiáng)型三速以太網(wǎng)控制器(eTSEC),TCP/IP加速、服務(wù)質(zhì)量以及分類功能,支持IEEE1588,無損耗流量控制,支持R/G/MII、R/TBI、SGMII多種網(wǎng)絡(luò)物理層芯片接口。
③ 豐富的外設(shè)接口,包括4個(gè)SerDes 至 3.125 GHz控制器多路復(fù)用,3個(gè)PCI Express接口,2個(gè)串行RapidIO接口,2個(gè)SGMII接口,高速USB控制器(USB 2.0),增強(qiáng)型主機(jī)控制器接口(EHCI),ULPI連接至PHY、SD/MMC接口,2個(gè)I2C控制器、DUART,定時(shí)器,增強(qiáng)型Local Bus控制器(eLBC),16個(gè)通用I/O信號(hào),以及2個(gè)4通道DMA控制器。
④ 內(nèi)置安全引擎,支持的協(xié)議包括SNOW、ARC4、3DES、AES、RSA/ECC、RNG、單通SSL/TLS、Kasumi、XOR加速。
⑤ 支持ECC的64位DDR2/DDR3 SDRAM存儲(chǔ)器控制器。
⑥ 可編程中斷控制器(PIC),符合OpenPIC標(biāo)準(zhǔn)。
1.2P2020的Local Bus接口與FPGA的連接
P2020的增強(qiáng)型Local Bus控制器(eLBC)支持GPCM、 FCM和UPM 三種控制模式,該嵌入式平臺(tái)的eLBC采用GPCM控制模式,其功能框圖如圖1所示。
圖1 增強(qiáng)型Local Bus控制器功能框圖
eLBC內(nèi)部的存儲(chǔ)控制部件提供適應(yīng)各種設(shè)備及外設(shè)的16位無縫連接,并負(fù)責(zé)控制可工作在GPCM、FCM和UPM三種模式的Local Bus的8片尋址片區(qū),支持的設(shè)備包括SRAM、EPROM、NOR Flash EEPROM、NAND Flash EEPROM、突發(fā) RAM、DRAM等。通過地址鎖存信號(hào)(LALE)實(shí)現(xiàn)地址及數(shù)據(jù)信號(hào)引腳復(fù)用,以減少設(shè)備連接的引腳數(shù),eLBC還具備數(shù)據(jù)奇偶校驗(yàn)、寫保護(hù)、總線監(jiān)視等數(shù)據(jù)檢查及保護(hù)功能[1]。
該嵌入式平臺(tái)FPGA采用Xilinx公司Spartan-6系列的XC6SLX100芯片,其內(nèi)部含101 261個(gè)邏輯單元,4 824 Kb Block RAM[2]。P2020與XC6SLX100通過Local Bus接口進(jìn)行數(shù)據(jù)傳輸,并增加XC6SLX100到P2020的I/O中斷信號(hào),用于觸發(fā)CPU端的實(shí)時(shí)接收數(shù)據(jù),74ALVT16373用于鎖存高16位地址信號(hào),具體連接如圖2所示。
圖2 P2020與XC6SLX100的連接
2高速數(shù)據(jù)總線接口設(shè)計(jì)
P2020與XC6SLX100的數(shù)據(jù)傳輸分為自定義數(shù)據(jù)幀的接收及發(fā)送。由于XC6SLX100無數(shù)據(jù)緩沖,而經(jīng)過其進(jìn)行信號(hào)處理并解析的數(shù)據(jù)幀不允許有任何丟包現(xiàn)象,P2020通過Local Bus實(shí)時(shí)無誤接收數(shù)據(jù)幀對(duì)寬帶設(shè)備功能實(shí)現(xiàn)尤為重要。
采用的接收策略是,由XC6SLX100通過P2020的IRQ0引腳觸發(fā)高優(yōu)先級(jí)的I/O下降沿中斷,當(dāng)P2020接收到此中斷信號(hào)后觸發(fā)Local Bus,通過DMA傳輸接收不大于4 KB數(shù)據(jù)幀到系統(tǒng)內(nèi)存的環(huán)形緩沖區(qū),開辟24 MB地址連續(xù)的環(huán)形緩沖區(qū)作為接收緩沖數(shù)據(jù)池,即提供6 000幀的數(shù)據(jù)緩沖,足以保證系統(tǒng)峰值數(shù)據(jù)傳輸。另外開辟一塊內(nèi)存用于編排當(dāng)前接收的數(shù)據(jù)幀的幀號(hào),便于應(yīng)用程序查詢當(dāng)前數(shù)據(jù)幀幀號(hào),當(dāng)應(yīng)用程序的當(dāng)前幀號(hào)與驅(qū)動(dòng)程序接收到的數(shù)據(jù)幀幀號(hào)不一致時(shí),應(yīng)用程序讀取數(shù)據(jù)幀。當(dāng)應(yīng)用程序及驅(qū)動(dòng)程序的數(shù)據(jù)幀號(hào)達(dá)到最大值6 000時(shí),應(yīng)用程序則歸0重新排號(hào),從而實(shí)現(xiàn)應(yīng)用程序追趕驅(qū)動(dòng)程序數(shù)據(jù)幀號(hào)的數(shù)據(jù)實(shí)時(shí)提取功能。
P2020對(duì)XC6SLX100的數(shù)據(jù)發(fā)送傳輸為設(shè)備主動(dòng)發(fā)起事件,并且傳輸速率與接收不對(duì)稱,故將XC6SLX100通過映射Local Bus到對(duì)應(yīng)的寫地址空間,通過查詢寫允許標(biāo)志寄存器,直接操作XC6SLX100內(nèi)部的發(fā)送數(shù)據(jù)RAM,從而完成數(shù)據(jù)幀的發(fā)送傳輸。
圖3 Local Bus的接收及發(fā)送數(shù)據(jù)流程圖
Local Bus的接收及發(fā)送數(shù)據(jù)工作流程如圖3所示。DMA的環(huán)形緩沖內(nèi)存示意圖如圖4所示。
圖4 DMA環(huán)形緩沖內(nèi)存示意圖
3基于Liunx3.0內(nèi)核的驅(qū)動(dòng)開發(fā)及實(shí)現(xiàn)
在該嵌入式平臺(tái)上Local Bus驅(qū)動(dòng)的應(yīng)用本質(zhì)上屬于字符設(shè)備驅(qū)動(dòng),驅(qū)動(dòng)程序除了提供常規(guī)的Linux驅(qū)動(dòng)程序接口函數(shù)實(shí)現(xiàn)外,還需要實(shí)現(xiàn)IRQ0的I/O中斷驅(qū)動(dòng)程序、DMA觸發(fā)及完成中斷驅(qū)動(dòng)程序。采用高效的mmap接口函數(shù)實(shí)現(xiàn)內(nèi)核空間的大片DMA緩沖數(shù)據(jù)直接映射到應(yīng)用程序的用戶空間的操作方法,避免常規(guī)的read接口函數(shù)在用戶空間與內(nèi)核空間傳輸數(shù)據(jù)的拷貝,大大提高了程序的運(yùn)行效率及操作實(shí)時(shí)性。
Local Bus的時(shí)序配置關(guān)系到通信速率的設(shè)置及與FPGA交換數(shù)據(jù)的穩(wěn)定性,涉及的增強(qiáng)型Local Bus控制器、控制寄存器及訪問控制寄存器如表1所列。
表1 Local Bus時(shí)序配置及訪問控制寄存器
Local Bus在GPCM模式下的讀寫時(shí)序如圖5所示。
針對(duì)Liunx3.0內(nèi)核的Local Bus高速數(shù)據(jù)總線接口驅(qū)動(dòng)設(shè)計(jì),程序主體為各個(gè)文件操作函數(shù)的具體實(shí)現(xiàn)[2],文件操作結(jié)構(gòu)體hs_local_bus_fops中的成員函數(shù)定義如下:
static const struct file_operationshs_local_bus_fops ={
.owner = THIS_MODULE,
.llseek = hs_local_bus_llseek,
.read = hs_local_bus_read,
.write = hs_local_bus_write,
.unlocked_ioctl = hs_local_bus_ioctl,
.open = hs_local_bus_open,
.release = hs_local_bus _release,
.mmap = hs_local_bus_mmap,
.fasync = hs_local_bus_fasync,
};
驅(qū)動(dòng)程序加載及卸載時(shí)執(zhí)行hs_local_bus_init及hs_local_bus_exit函數(shù),其中hs_local_bus_init完成物理地址到虛擬地址映射、Local Bus的時(shí)序配置、中斷號(hào)申請(qǐng)及與中斷服務(wù)函數(shù)的關(guān)聯(lián)等初始化工作,其執(zhí)行流程圖如圖6所示。
圖5 Local Bus在GPCM模式讀寫時(shí)序圖
圖6 驅(qū)動(dòng)程序加載初始化函數(shù)hs_local_bus_init流程圖
P2020雙核工作在1 GHz頻率,平臺(tái)時(shí)鐘為500 MHz,通過對(duì)LCRR控制寄存器設(shè)置四分頻,得到的Local Bus時(shí)鐘為125 MHz,通過對(duì)BR3、OR3及LBCR控制寄存器的配置,實(shí)現(xiàn)與FPGA相連的Local Bus的LCS3片區(qū)在8個(gè)Local Bus時(shí)鐘內(nèi)完成一次16位的讀或?qū)憽?/p>
首先IRQ0中斷服務(wù)函數(shù)完成自定義通信協(xié)議的查詢,并按協(xié)議查詢結(jié)果觸發(fā)DMA傳輸變長的數(shù)據(jù)幀到DMA緩沖內(nèi)存,然后DMA中斷服務(wù)函數(shù)完成DMA緩存同步、當(dāng)前幀號(hào)編號(hào)、按自定義通信協(xié)議對(duì)FPGA指定狀態(tài)寄存器寫傳輸完成標(biāo)志,最后清空DMA傳輸完成中斷標(biāo)志。
文件操作函數(shù)hs_local_bus_mmap能夠?qū)崿F(xiàn)內(nèi)存物理地址空間直接映射到應(yīng)用程序的用戶空間。hs_local_bus_mmap將DMA數(shù)據(jù)緩沖內(nèi)存、當(dāng)前幀號(hào)記錄內(nèi)存、Local Bus的物理地址空間都映射到應(yīng)用程序的用戶空間,以供應(yīng)用程序高效調(diào)用。hs_local_bus_mmap里面調(diào)用的關(guān)鍵函數(shù)為io_remap_pfn_range,實(shí)際調(diào)用的是remap_pfn_range函數(shù),其位于kernel/mm/memory.c,定義如下:
int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,unsigned long pfn, unsigned long size, pgprot_t prot){
pgd_t *pgd;
unsigned long next;
unsigned long end = addr + PAGE_ALIGN(size);
struct mm_struct *mm = vma->vm_mm;
int err;
if (addr == vma->vm_start && end == vma->vm_end) {
vma->vm_pgoff = pfn;
vma->vm_flags |= VM_PFN_AT_MMAP;
} else if (is_cow_mapping(vma->vm_flags))
return -EINVAL;
vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
err = track_pfn_vma_new(vma, &prot, pfn, PAGE_ALIGN(size));
if (err) {
vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
vma->vm_flags &= ~VM_PFN_AT_MMAP;
return -EINVAL;
}
BUG_ON(addr >= end);
pfn -= addr >> PAGE_SHIFT;
pgd = pgd_offset(mm, addr);
flush_cache_range(vma, addr, end);
do {
next = pgd_addr_end(addr, end);
err = remap_pud_range(mm, pgd, addr, next,pfn + (addr >> PAGE_SHIFT), prot);
if (err)
break;
} while (pgd++, addr = next, addr != end);
if (err)
untrack_pfn_vma(vma, pfn, PAGE_ALIGN(size));
return err;
}
結(jié)語
本文詳細(xì)介紹了基于P2020處理器的Local Bus與FPGA的高速總線接口設(shè)計(jì)及驅(qū)動(dòng)程序?qū)崿F(xiàn),該接口設(shè)計(jì)在嵌入式平臺(tái)上的通信速率可達(dá)到160 Mbps以上的無誤碼實(shí)時(shí)傳輸,有效解決了Linux系統(tǒng)下實(shí)時(shí)數(shù)據(jù)通信問題,其在苛刻的環(huán)境條件下使用仍然表現(xiàn)出良好的穩(wěn)定性,可用于網(wǎng)絡(luò)路由、通信線路卡等領(lǐng)域,對(duì)PowerPC+FPGA嵌入式系統(tǒng)開發(fā)具有較高的參考價(jià)值。
參考文獻(xiàn)
[1] Freescale Semiconductor.P2020 QorIQ Integrated Processor Reference Manual,2011.
[2] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,2008.
陳崇森(中級(jí)工程師),主要從事嵌入式系統(tǒng)及驅(qū)動(dòng)程序開發(fā)。
High-speed Data Bus Interface Based on P2020※
Chen Chongsen
(Guangzhou Haige Communications Group Incorporated Company,Guangzhou 510663,China)
Abstract:Taking the embedded platform using Freescale P2020 dual-core processor as the example,the high-speed data bus interface design based on the local bus between CPU and FPGA is introduced,which has DMA transfer function and the ring buffer.The implementation method of the driver for the interface based on Linux3.0 kernel is also introduced.The technology has been applied in a wide band high speed device.The test results show that the stability,data throughput and link stability all meet the design requirements.The design has reference significance to the same type of embedded platform.
Key words:P2020;Local Bus;DMA;ring buffer
收稿日期:(責(zé)任編輯:薛士然2015-08-04)
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)識(shí)碼:A