SOPC(System On Programmable Chip)即可編程片上系統(tǒng),或者說是基于大規(guī)模FPGA的單片系統(tǒng),是美國Altera公司于2000年提出的。它將處理器、存儲器、I/O口、LVDS、CDR等系統(tǒng)設(shè)計需要的功能模塊集成到一個PLD器件上,將其構(gòu)建成一個可編程的片上系統(tǒng);具有靈活的設(shè)計方式,可裁減、可擴充、可升級,并具備軟硬件在系統(tǒng)可編程的功能。由于SOPC系統(tǒng)具有靈活的設(shè)計方式、高效的開發(fā)手段、廉價的設(shè)計成本,可以實現(xiàn)過去不可能實現(xiàn)的更高的系統(tǒng)性能,因此它在通信和工業(yè)控制等領(lǐng)域正得到日益廣泛的應(yīng)用。NiosII嵌入式處理器是FPGA生產(chǎn)廠商Altera公司推出的軟核CPU,是一種面向用戶的,可以靈活定制的通用精簡指令集架構(gòu)(RISC)32位嵌入式CPU。NiosII以軟核的方式提供給用戶,并專門在Altera公司的FPGA上實現(xiàn)了優(yōu)化,用于SOPC集成,最后在FPGA上實現(xiàn)。本文將以VOD視頻點播系統(tǒng)為例,介紹采用NiosII構(gòu)建可編程片上系統(tǒng)SOPC的過程,以及雙CPU及其同步通信技術(shù)實現(xiàn)的視頻點播系統(tǒng)主機部分的設(shè)計思想和工作原理。
1 工程應(yīng)用
1.1 VOD相關(guān)內(nèi)容及雙CPU使用的必要性
視頻點播是一種交互式多媒體信息點播系統(tǒng)。其本質(zhì)是,信息使用者可根據(jù)自己的需求主動獲取多媒體信息,打破目前用戶收看節(jié)目的被動方式,使用戶從“播什么節(jié)目看什么節(jié)目”變成“想看什么節(jié)目就播什么節(jié)目”,從而按照自己的意愿通過網(wǎng)絡(luò)點播視頻服務(wù)器中的視頻節(jié)目。視頻點播以電視技術(shù)、計算機技術(shù)、通信技術(shù)為基礎(chǔ),它區(qū)別于信息發(fā)布的最大不同是用戶具有主動性與選擇性。
VOD系統(tǒng)主要由3部分構(gòu)成:視頻點播服務(wù)器、傳輸網(wǎng)絡(luò)和視頻點播終端。當(dāng)點播終端發(fā)出點播請求時,點播服務(wù)器就會根據(jù)點播信息,將存放在節(jié)目庫中的影視信息檢索出來,并將視頻數(shù)據(jù)流通過高速傳輸網(wǎng)絡(luò)傳送到各個點播終端。點播終端接收到數(shù)據(jù)流后,將其解碼送到顯示器播放。
本設(shè)計采用一塊大容量硬盤作為VOD系統(tǒng)的點播數(shù)據(jù)源,將MPEG-1格式的影音文件按照FAT 32標(biāo)準(zhǔn)存放在硬盤上。由于視頻點播系統(tǒng)對硬盤訪問的速度要求非常高,采用操作系統(tǒng)已無法滿足要求,所以利用SOPC技術(shù)將Altera公司的第2代嵌入式處理器NioslI嵌入到FPGA中,并通過DMA控制器直接對硬盤進行最底層的操作,完成對影音文件的管理、檢索和數(shù)據(jù)讀取,充分發(fā)揮了FPGA的高速優(yōu)勢。本視頻點播服務(wù)器可以驅(qū)動多達64個完全獨立的視頻終端。
為實現(xiàn)64路終端實時播放影片,必須對視頻數(shù)據(jù)流的傳輸速率嚴(yán)格規(guī)定,由于所有終端播放的文件均為MPEG-1格式,此格式下影片連續(xù)播放所需的數(shù)據(jù)流速率為1.416 Mb/s。本系統(tǒng)采用的數(shù)據(jù)收發(fā)器AM7968/7969的傳輸率為80 Mb/s,因此只要邏輯電路設(shè)計得當(dāng)且處理器定時發(fā)送數(shù)據(jù),就可達到視頻不間斷播放的設(shè)計要求。但點播系統(tǒng)在滿足視頻數(shù)據(jù)定時發(fā)送的條件下還應(yīng)當(dāng)實現(xiàn)讀取硬盤中存放MPEG-1數(shù)據(jù)的功能,對終端作出的點播信息作出及時響應(yīng)的功能,對USB中影音文件錄入的功能以及顯示屏的刷新與按鍵的處理功能。如果只采用一個處理器,則無法對每個環(huán)節(jié)作出及時響應(yīng),無法保證數(shù)據(jù)的定時發(fā)送和硬盤數(shù)據(jù)的按時讀取,所以采取在Altera公司的高性能FPGA中嵌入雙NiosII軟核的方式達到系統(tǒng)設(shè)計目的。
1.2 系統(tǒng)原理框圖及架構(gòu)
點播服務(wù)器主要由主控制器部分和外圍接口電路兩大部分組成,硬件系統(tǒng)框圖如圖1所示。主控制器單元主要由FPGA、存儲器電路、電源電路、時鐘、復(fù)位電路和配置芯片電路組成。外圍接口主要有:OLED顯示屏、動態(tài)掃描鍵盤、數(shù)據(jù)緩沖區(qū)、SD卡、USB控制器、IDE接口、CAN總線接口、光纖接口等。

其中數(shù)據(jù)緩沖區(qū)由2個容量各為32 MB的SDRAM組成,用于暫時存放DMA控制器從硬盤讀出的視頻數(shù)據(jù);USB接口用于節(jié)目源的錄入;IDE接口用于與磁盤陣列連接;各終端的點播信息通過CAN總線送到點播服務(wù)器;視頻數(shù)據(jù)流通過4根光纖傳送到各個終端,每16個終端共用1根光纖,4根光纖可以驅(qū)動64個終端。其中FPGA中,雙NiosII邏輯設(shè)計架構(gòu)實現(xiàn)如圖2所示。

NiosII Exectltion Core 1為主CPU,在這個處理器系統(tǒng)里面,DMA控制器負(fù)責(zé)將視頻數(shù)據(jù)從硬盤讀到緩沖區(qū)中;USB驅(qū)動器負(fù)責(zé)從其他移動存儲設(shè)備中錄入節(jié)目源到硬盤陣列;CAN BUS驅(qū)動器負(fù)責(zé)接收終端的點播信息;Tristate Bridge用來連接外部程序存儲器SDRAM和Flash;OLED驅(qū)動器用來控制OLED顯示屏;Uart核為RS232接口。Nios II Execution Core 2為從CPU,專門用于向終端傳輸視頻數(shù)據(jù)流。最為關(guān)鍵的部分為Transmit BUSDriver,它負(fù)責(zé)將DMA控制器寫入緩沖區(qū)的數(shù)據(jù)讀出來,并送給光纖發(fā)送模塊向終端發(fā)送。此外,還必須有一個握手模塊(handshake module),負(fù)責(zé)2個CPU之間的信息傳遞,使2個CPU協(xié)調(diào)工作。
1.3 相關(guān)設(shè)置及添加過程
(1)NiosII CPU定制
根據(jù)不同設(shè)計的要求,有3種不同的內(nèi)核類型可供選擇——快速型、經(jīng)濟型和標(biāo)準(zhǔn)型??焖傩蛢?nèi)核具有最高的處理性能,經(jīng)濟型內(nèi)核具有最低的資源占用,而標(biāo)準(zhǔn)型在性能和資源之間作了個平衡。本設(shè)計中,CPU1需要實現(xiàn)硬盤數(shù)據(jù)讀取、顯示屏控制、總線請求、鍵盤處理等各種功能,因此選用標(biāo)準(zhǔn)型內(nèi)核;而CPU2只要定時讀取數(shù)據(jù)并發(fā)送至輸出模塊,功能單一,因此選取快速型內(nèi)核便可勝任。
(2)NiosII外圍設(shè)備定制
Altera公司推出SOPC設(shè)計技術(shù)的同時也為用戶提供了一些可以選用的存儲、接口和功能模塊的IP核。這些核可以直接添加到用戶的設(shè)計中。啟動SOPC Builder后,在GUI界面中左邊是可供用戶選擇的模塊資源池,包括處理器和各種外設(shè)(其中有自己開發(fā)的模塊),也包括第3方開發(fā)的模塊。用戶模塊也可以放入資源池,用戶邏輯在第一次定義后,就可以將其放人模塊資源池,以后使用時當(dāng)成普通模塊一樣使用。
(3)自定義控制組件設(shè)計
Altera公司提供了使用第3方核的簡單接口。只要符合這些接口規(guī)范,就可以使用各種IP核進行SOPC設(shè)計。 由于Altera公司并未直接提供硬盤、CAN控制器、USB及2個CPU握手模塊等接口,因此必須自己設(shè)計接口連接各種器件和處理器。這些接口既要符合Avalon總線規(guī)范,又要滿足各種器件的工作時序。圖3為點播服務(wù)器系統(tǒng)在SOPC Builder工作窗口中的截取圖。

2 程序下載
2.1 方案確定
下面是對2個CPU的寫入探討。
方案一
指導(dǎo)思想:將硬件配置信息和cpu2寫入EPCS中,將CPU的程序?qū)懭隖lash中。具體步驟:
①CFI_FLASH的3個時間改為50、160、50;
②cpul——reset Address CFI_FLASH
Exception Address sdram-3/sl;
③cpu2——reset Address onchip_memory-0
Exception Address onchip_memory-0;
④將整個硬件編譯成功;
⑤將memery-test編譯,進行Flash測試,測試成功轉(zhuǎn)下一步;
⑥分別編譯newniosl和newnios2的工程;
⑦將整個硬件進行二次編譯,此時pof文件中已經(jīng)包含了newnios2的程序;
⑧將pof文件下載到EPCS中去;
⑨將硬件工程換成只有一個CPU的,將newniosl的程序下載到CFI_FLASH中去;
⑩重新上電啟動。
方案二
指導(dǎo)思想:將2個CPU的程序均下載到Flash中,硬件配置在EPCS中。
①CFI_FLASH的3個時間改為50、160、50;
②cpul——reset Address EPCS_CONTROLLER
Exception Address sdram-3/sl
③cpu2——reset Address onchip_memory-0
Exception Address onchip_memory-0
④將整個硬件編譯成功;
⑤將memery_test編譯,進行Flash測試,測試成功轉(zhuǎn)下一步;
⑥分別編譯new-nios1和newnios2的工程;
⑦重新進行硬件的編譯;
⑧將pof文件下載到EPCS中去;
⑨newnios1和new-nios2的程序下載分別指定為0、1或1、2;
⑩重新上電啟動。
方案三
指導(dǎo)思想:將2個CPU的程序均下載到EPCS中,硬件配置在EPCS中。
①首先在SOPCbuilder中將2個作CPU如下配置:
cpu1——reset Address EPCS_CONTROLLER
Exception Address sdram-3/sl
cpu2——reset Address onchip_memory-0
Exception Address onchip_memory-0
這代表將CPU的程序在EPCS中進行存儲,而程序運行在SDRAM中;而CPU_0的存儲和運行都在片上存儲器中。
②先將SOPC進行編譯,成功后選擇“Exit”,硬件提示是否進行升級,選擇“yes”,進行升級,然后將整個硬件全編譯。
③硬件編譯通過后,通過SOPC Builder打開IDE,在IDE下分別編譯newnios1和newnios2的工程,由于第2個CPU的程序在內(nèi)部存儲器,則生成一個以內(nèi)部存儲器為名稱的hex文件。
④重新進行硬件的編譯,會發(fā)現(xiàn)硬件將HEX文件當(dāng)作一個部件,編到整個硬件中了。編輯完畢后,查看SOF和pof的大小,其實都沒什么變化,但時間修改了。
⑤利用命令行指令:
sof2flash--epcs--bbbbb=new.sof--output=my1.flash,
該命令將new.sof轉(zhuǎn)換成EPCS中存儲的格式;將POF文件下載到EPCS中去。
Elf2flash--epcs--after=my1.flash--bbbbb=newniosl.elf--output=my2.flash
⑥下面有2種處理方法都可以下載成功。
第1種方法:將另一個只有CPU的工程(sof)下載到EP2C20中(QuartusII無法在下載過程中識別2個CPU),然后利用以下命令:
Nios2-flash-programmer--epcs--base=0x02900800 my1.flash
Nios2-flash-programmer--epcs--base=0x02900800 my2.flash
重新上電,就可以了
第2種方法:將instance參數(shù)帶上,方法同上,進行Flash文件的轉(zhuǎn)換,然后將整個工程sof下載到硬件中。
利用命令:
Nios2-flash-programmer--epcs--base=0x02900800--instance 1 my1.flash
Nios2-flash-programmer--epcs--base=0x02900800--instance 1 my2.flash
注意,instance后面的參數(shù)為1。如果為0,就會出現(xiàn)錯誤:no EPCS register found。如果是2,則會發(fā)生如下情況:
There are no niosII processors available which match the value specified,please check your PLD……
⑦重新上電啟動即可。
2.2命令行在EPCS中的寫入過程
①將sof文件下載到FPGA中,并將sof文件轉(zhuǎn)換成.flash燒寫中間格式,使用命令:
sof2flash--epcs--bbbbb=./new.sof--output=my1.flash
然后用.flash文件燒寫epcs--base項為nios2工程中epcs在avalon總線中的地址位:
nios2--flash-programmer--epcs--instance=1--base=0x02900800 my1.flash
②將elf文件也轉(zhuǎn)換為.flash格式,并且要加入一些參數(shù)。--after是后來刷寫的內(nèi)容,不會沖掉前面的數(shù)據(jù),使用命令:
elf2flash--epcs--after=my1.flash--bbbbb=newniosl.elf--output=my2.flash
燒寫:nios2-flash-programmer--epcs--instance=1--base=0x02900800 my2.flash
③重新上電啟動。
3 小 結(jié)
本文結(jié)合視頻點播服務(wù)器的設(shè)計,闡述了雙NiosII軟核嵌入到FPGA并通過SOPC技術(shù)將IP核嵌入并構(gòu)建系統(tǒng)的過程及方法,充分發(fā)揮FPGA的高速優(yōu)勢,提供系統(tǒng)性能。其創(chuàng)新點是,將雙NiosII軟核應(yīng)用到嵌入式系統(tǒng)中,通過IP核的設(shè)計實現(xiàn)底層驅(qū)動,提高系統(tǒng)集成度,充分發(fā)揮SOPC技術(shù)的優(yōu)勢。










