陳文藝, 雷武亮, 楊 輝
(1. 西安郵電大學(xué) 物聯(lián)網(wǎng)與兩化融合研究院,陜西 西安 710061; 2 西安郵電大學(xué) 通信與信息工程學(xué)院,陜西 西安 710121)
基于Nios II的線陣圖像傳感器驅(qū)動(dòng)設(shè)計(jì)
陳文藝1, 雷武亮2, 楊輝1
(1. 西安郵電大學(xué) 物聯(lián)網(wǎng)與兩化融合研究院,陜西 西安 710061; 2 西安郵電大學(xué) 通信與信息工程學(xué)院,陜西 西安 710121)
摘要:針對(duì)線陣圖像傳感器DLIS-2K,設(shè)計(jì)一個(gè)基于FPGA/Nios II的串口通信驅(qū)動(dòng)系統(tǒng)。選用Altera Cyclone IV系列FPGA芯片EP4CE10E22C8N作為硬件設(shè)計(jì)平臺(tái),在SOPC(可編程片上系統(tǒng))中采用Nios II軟核處理器實(shí)現(xiàn)傳感器串口通信方案,給出了SOPC及傳感器串口模塊的硬件驅(qū)動(dòng)電路,使用Verilog HDL語言進(jìn)行描述,并對(duì)設(shè)計(jì)的驅(qū)動(dòng)電路進(jìn)行了仿真。結(jié)果表明,設(shè)計(jì)的驅(qū)動(dòng)系統(tǒng)能使傳感器串口正常工作。
關(guān)鍵詞:現(xiàn)場可編程門陣列;線陣;時(shí)序控制;串口通信;Nios II
互補(bǔ)金屬氧化物半導(dǎo)體(Complementary Metal Oxide Semiconductor,CMOS)圖像傳感器的研究開始于20世紀(jì)80年代早期[1],隨著超大規(guī)模集成電路工藝在近年來的飛速發(fā)展,線陣CMOS圖像傳感器集成度不斷提高,性能不斷完善,可應(yīng)用于多種場合,如條形碼、機(jī)器視覺、邊沿檢測、接觸成像、指紋印和編碼定位[2]。
Nios II系統(tǒng)開發(fā)與傳統(tǒng)現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)開發(fā)相比,增加了一個(gè)中央處理器(Central Processing Unit,CPU),從而簡化了復(fù)雜的設(shè)計(jì)[3]。Nios II處理器是一種面向用戶的可以靈活定制的通用精簡指令集架構(gòu)嵌入式CPU。它將硬件設(shè)計(jì)軟件化,降低了設(shè)計(jì)難度,縮短了開發(fā)周期[4]。目前,國內(nèi)外設(shè)計(jì)圖像傳感器驅(qū)動(dòng)較多采用硬件語言描述出驅(qū)動(dòng)電路或者設(shè)計(jì)硬核來為傳感器芯片提供驅(qū)動(dòng)時(shí)序[5-7],使用該方法須將傳感器內(nèi)部寄存器地址都寫入硬件設(shè)計(jì)中,當(dāng)改變寄存器設(shè)計(jì)時(shí),須在硬件源代碼中進(jìn)行修改,使系統(tǒng)不易于升級(jí)。為了在驅(qū)動(dòng)系統(tǒng)硬件核不變的情況下實(shí)現(xiàn)傳感器寄存器配置,設(shè)計(jì)一個(gè)采用Nios II處理器結(jié)合片上可編程系統(tǒng)[8](System On a Programmable Chip,SOPC)的串口通信驅(qū)動(dòng)系統(tǒng),來實(shí)現(xiàn)線陣CMOS圖像傳感器的內(nèi)部寄存器配置。該系統(tǒng)將硬核模塊掛載到avalon總線上,只需軟件通過Nios II處理器向傳感器寫入寄存器地址值便可對(duì)寄存器進(jìn)行配置。
1DLIS-2K線陣圖像傳感器
DLIS-2K是一個(gè)具有用戶可編程的時(shí)序引擎的多模式線陣圖像傳感器[9],其工作原理如圖1。傳感器在單電源3.3 V供電正常工作時(shí),加入主時(shí)鐘以及開始信號(hào),三線串口讀寫正常,此時(shí)串口可進(jìn)行讀寫操作,串口時(shí)鐘范圍最大值為20 MHz。
傳感器內(nèi)部共有42個(gè)寄存器,其中定義了33個(gè)寄存器,這33個(gè)寄存器定義了傳感器工作所需的參數(shù)以及工作模式[10]。傳感器的設(shè)置和控制信息發(fā)送到設(shè)備內(nèi)部寄存器的通信通過一個(gè)三線串行接口來實(shí)現(xiàn),這三線分別為:串行使能引腳(SENB),用于使能串行接口;串行數(shù)據(jù)接口(SDATA),用于發(fā)送或接收寄存器的地址或寄存器的值,其建立時(shí)間至少為10 ns;串行時(shí)鐘接口(SCLK)。
圖1 傳感器工作原理
傳感器串口通信由36個(gè)時(shí)鐘周期來完成,完整的寫時(shí)序配置在串口使能信號(hào)被拉高時(shí)開始,持續(xù)32個(gè)時(shí)鐘周期,每個(gè)時(shí)鐘周期發(fā)送1位數(shù)據(jù),前15位為地址信號(hào),第16位為讀寫控制位,其中0為寫。第17至32位為寄存器寫入值,在配置完成后,需要4個(gè)時(shí)鐘周期來對(duì)寄存器進(jìn)行值的更改。傳感器的一個(gè)完整讀時(shí)序與寫時(shí)序差別在于第16位讀寫控制位的值為1(邏輯高電平)。
2系統(tǒng)設(shè)計(jì)
2.1系統(tǒng)結(jié)構(gòu)
系統(tǒng)整體包括線陣CMOS圖像傳感器圖像采集、FPGA邏輯控制以及PC機(jī)的軟件設(shè)計(jì)3個(gè)部分,系統(tǒng)結(jié)構(gòu)如圖2所示。硬件部分是用Verilog HDL硬件描述語言實(shí)現(xiàn)的傳感器串口驅(qū)動(dòng)系統(tǒng),軟件部分在Nios II IDE中完成的一個(gè)需要硬件系統(tǒng)支撐的在線調(diào)試系統(tǒng)。
圖2 系統(tǒng)設(shè)計(jì)框圖
2.2軟件系統(tǒng)設(shè)計(jì)
Nios II的軟件開發(fā)部分以硬件開發(fā)部分為基礎(chǔ),軟件平臺(tái)采用一個(gè)基于Eclipse IDE架構(gòu)的集成開發(fā)環(huán)境Nios II IDE來進(jìn)行設(shè)計(jì)。硬件設(shè)計(jì)完成之后,軟件將硬件代碼重新編譯,產(chǎn)生系統(tǒng)頭文件system.h,其內(nèi)部描述為一些宏定義,需要關(guān)注的是基地址的值。硬件系統(tǒng)中的每個(gè)外設(shè)都有基地址,軟件設(shè)計(jì)中通過每個(gè)外設(shè)的基地址對(duì)Nios II軟核進(jìn)行寄存器操作。
2.3Nios II下的傳感器IP核設(shè)計(jì)
FPGA型號(hào)采用Cyclone IV系列EP4CE10E22C8N,該芯片有10 320個(gè)邏輯單元(LE),有42萬個(gè)存儲(chǔ)位(memory bit),兩個(gè)PLL(鎖相環(huán)),并且支持Nios處理器。硬件系統(tǒng)主要完成用戶自定義外設(shè)IP核[11]并添加到Avalon總線上,構(gòu)建了Nios II系統(tǒng)下的串行通信接口。
FPGA核心板的時(shí)鐘為100 MHz,SOPC系統(tǒng)采用鎖相環(huán)(PLL)將系統(tǒng)時(shí)鐘的五分頻(20 MHz)作為模塊的時(shí)鐘輸入。系統(tǒng)采用自頂向下的設(shè)計(jì)方法[12],在Quartus II 11.0硬件設(shè)計(jì)平臺(tái)下采用Verilog HDL硬件描述語言來對(duì)整個(gè)硬件系統(tǒng)進(jìn)行設(shè)計(jì)。將整個(gè)時(shí)序控制部分分為Avalon接口模塊、發(fā)送模塊、接收模塊和控制模塊4個(gè)模塊。4個(gè)模塊之間有嚴(yán)格的依賴關(guān)系,其內(nèi)部框圖如圖3。
Avalon接口模塊內(nèi)部有發(fā)送數(shù)據(jù)寄存器、讀寫控制寄存器、接收數(shù)據(jù)寄存器和開始配置寄存器4個(gè)寄存器。軟件可以通過Nios II系統(tǒng)對(duì)這4個(gè)寄存器進(jìn)行讀寫訪問,所有其他模塊都通過接口模塊與Avalon總線結(jié)構(gòu)進(jìn)行交互,這4個(gè)內(nèi)部寄存器的尋址方式與片選信號(hào),偏移地址信號(hào),讀寫信號(hào)有關(guān),當(dāng)片選以及讀或?qū)懶盘?hào)有效時(shí),偏移地址指向的寄存器將執(zhí)行讀或?qū)懖僮鳌?/p>
發(fā)送模塊中設(shè)計(jì)了一個(gè)32位的循環(huán)移位器[13],該模塊由控制模塊產(chǎn)生的控制信號(hào)來讀取接口模塊中發(fā)送寄存器中的值,并且循環(huán)移位發(fā)送最高位的值(高位在前,低位在后),接收模塊用于接收在讀狀態(tài)下的傳感器DLIS-2K發(fā)送來的16位值,并存儲(chǔ)于接收寄存器??刂颇K產(chǎn)生串口使能信號(hào)以及各模塊所需要的控制信號(hào)。
圖3模塊內(nèi)部框圖
硬件算法流程如圖4所示,上電開始后,由軟件通過Avalon總線向模塊內(nèi)部的發(fā)送數(shù)據(jù)寄存器寫入32 bit數(shù)據(jù),隨之判斷開始配置的信號(hào)是否來到,若來到,則開始配置。首先,讓串口使能信號(hào)SEN拉高,同時(shí)計(jì)數(shù)器清零,然后,開始計(jì)數(shù),每次計(jì)數(shù)都將發(fā)送數(shù)據(jù)寄存器中的最高位發(fā)送到雙向信號(hào)SDATA上,最后,對(duì)該寄存器的32bit數(shù)據(jù)進(jìn)行循環(huán)左移操作,以保證每次發(fā)送的最高位的正確性。當(dāng)計(jì)數(shù)到15時(shí),將根據(jù)讀寫控制寄存器判斷本次配置操作的類型,讀或者寫操作。若為讀操作,則此時(shí)在時(shí)鐘下降沿到來時(shí),SDATA為輸入狀態(tài),讀取傳感器內(nèi)部寄存器數(shù)據(jù),同時(shí)繼續(xù)計(jì)數(shù),當(dāng)計(jì)數(shù)到31時(shí),將讀取到的16位數(shù)據(jù)發(fā)送至接收數(shù)據(jù)寄存器,讀操作完成。若為寫操作,則繼續(xù)發(fā)送移位寄存器的最高位,繼續(xù)循環(huán)左移1位,直到計(jì)數(shù)值到31時(shí),本次配置完成,將串口使能信號(hào)SEN置0,結(jié)束配置,然后繼續(xù)計(jì)數(shù)到35之后計(jì)數(shù)器清零,本次寫操作完成??梢赃M(jìn)行下一次配置。
圖4 算法流程
3仿真及試驗(yàn)
為檢驗(yàn)各個(gè)模塊功能的正確性,利用Modelsim仿真工具編寫測試向量來模擬Avalon接口信號(hào),并對(duì)模塊的讀寫進(jìn)行了功能仿真。
在讀操作時(shí)序中,與寫操作不同的地方在于在最后16 bit,串口數(shù)據(jù)SDATA的方向?yàn)檩斎?寫操作為輸出),在測試向量中設(shè)計(jì)了三態(tài)門仿真方法,待測模塊及其核心測試代碼為
sdata=(write_read==0)?sdata_write:1'bz
該代碼描述了一個(gè)三態(tài)門,在測試向量中,sdata為最終寫入信號(hào),其信號(hào)值由write_read和sdata_write共同提供,在發(fā)送前16bit時(shí),write_read為高電平,禁止賦值給sdata,在后16bit時(shí),需要將write_read置為0,通過改變sdata_write的值來對(duì)sdata賦值。通過此方法,測試模塊便可通過改變sdata_write和write_read的值來對(duì)sdata的輸入功能進(jìn)行仿真,讀仿真完成之后,查看接收數(shù)據(jù)寄存器與sdata接收到的16bit值是否一致。
自定義IP核的代碼編寫完成之后,在SOPC Builder中生成了SOPC系統(tǒng)。利用Component Editor生成自定義IP核作為系統(tǒng)一部分,結(jié)合Nios II處理器模塊,系統(tǒng)ID模塊,JTAG_UART片上調(diào)試模塊,以及onchipmemory片上FLASH模塊生成了一個(gè)圖像傳感器串口通信嵌入式系統(tǒng)。SOPC系統(tǒng)驗(yàn)證在NIOS II IDE中完成,其核心代碼為
IORD(DLIS_2K_BASE,1)
IOWR(DLIS_2K_BASE,1,DATA)
在軟件中首先指向SOPC系統(tǒng)中IP核的基地址(DLIS_2K_BASE),其偏移量為定義的寄存器。DATA為向寄存器寫入的數(shù)據(jù)。
仿真結(jié)果及SOPC系統(tǒng)如圖5。
圖5 仿真結(jié)果及SOPC系統(tǒng)
由仿真結(jié)果可以看出,在模塊執(zhí)行一次寫操作時(shí)序中,偏移地址信號(hào)address為00,片選信號(hào)chipselect為1,寫使能信號(hào)write為1,輸入的數(shù)據(jù)信號(hào)值writedata為0x55151515,在時(shí)鐘上升沿來到時(shí)存進(jìn)發(fā)送寄存器send_reg,然后又將0x0000000e寫入讀寫控制寄存器,0x3f3f3f3f寫入接收寄存器,0x00000001寫入開始寄存器,寫入完畢,系統(tǒng)開始配置,控制模塊產(chǎn)生一系列信號(hào)生成了串口使能信號(hào)sen,將send_reg的32位值循環(huán)移位發(fā)送到了雙向信號(hào)sdata上,然后緩沖4個(gè)周期,等待圖像傳感器端的寄存器寫入。
Nios IDE與FPGA開發(fā)板聯(lián)合仿真測試中,寄存器通過系統(tǒng)函數(shù)寫入與讀取如圖6,引腳輸出的波形如圖7。通過IOWR函數(shù)向發(fā)送數(shù)據(jù)寄存器send_reg,讀寫控制寄存器rw_ctl,開始配置寄存器start_reg寫入預(yù)置值,然后通過IORD讀取該值,由結(jié)果可看出通過Avalon接口讀取模塊配置信息正確。由示波器雙通道的局限性,通過兩次實(shí)際測量可驗(yàn)證出所設(shè)計(jì)的驅(qū)動(dòng)系統(tǒng)輸出信號(hào)。圖7中從上至下,信號(hào)分別為串口使能sen、串口數(shù)據(jù)sdata、串口數(shù)據(jù)sdata和串口時(shí)鐘sclk。在Nios II IDE軟件中向發(fā)送寄存器寫入的值為0x53541525(十六進(jìn)制),串口使能先在此期間為高電平,串口時(shí)鐘為20 MHz。輸出波形符合數(shù)據(jù)手冊中的理論波形,從而驗(yàn)證了所設(shè)計(jì)的驅(qū)動(dòng)系統(tǒng)正確性。
圖6 寄存器讀寫
圖7 實(shí)際測試
4結(jié)束語
在分析線陣CMOS圖像傳感器DLIS-2K的內(nèi)部寄存器工作時(shí)序基礎(chǔ)上,設(shè)計(jì)了一個(gè)傳感器驅(qū)動(dòng)的嵌入式系統(tǒng),仿真驗(yàn)證結(jié)果表明,該系統(tǒng)實(shí)現(xiàn)了在Nios II系統(tǒng)下寄存器的配置,自定義IP核具有較好的可重用性,滿足了圖像傳感器的驅(qū)動(dòng)要求。
參考文獻(xiàn)
[1]晉孝峰,岳素格,劉麗艷,等.CMOS圖像傳感器的硬復(fù)位電路研究[J].電子學(xué)報(bào),2014(1):182-186.DOI:10.3969/j.issn.0372-2112.2014.01.029.
[2]孫佳帝.基于SOPC的圖像采集及傳輸系統(tǒng)設(shè)計(jì)[J].電子器件,2014,37(6):1116-1120.DOI:10.3969/j.issn.1005-9490.2014.06.022.
[3]江志東,高太長,孫海洋,等.線陣CMOS圖像采集及編碼傳輸?shù)膶?shí)現(xiàn)[J].傳感技術(shù)學(xué)報(bào),2012,24(4):554-558.DOI:10.3969/j.issn.1004-1699.2011.04.017.
[4]郭燕波,于曉洲,周軍.組合導(dǎo)航高性能Nios II軟核處理器研究[J].計(jì)算機(jī)測量與控制,2013,21(10):2868-2871.
[5]CHENG K W, YIN C, HSIEH C C, et al. Time-Delay In-Tegration Readout with Adjacent Pixel Signal Transfer for CMOS Image Sensor[C]//2012 International Symposium on VLSI Design, Automation, and Test(VLSI-DAT),Hsinchu:IEEE, 2012:1-4.DOI:10.1109/VLSI.DAT.2012.6212600.
[6]YASVTOM K, ITOH S, KAWAHITO S. A Two-Stage Charge Transfer Active Pixel CMOS Image Sensor With Low-Noise Global Shuttering and a Dual-Shuttering mode[J]. IEEE Transaction on Electron Devices, 2011, 58(3): 740-747.DOI:10.1109/TED.2010.2095856.
[7]潘越,宋萍,李科杰.基于PowerPC和FPGA的小型無人直升機(jī)飛行控制器計(jì)算機(jī)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2013(1):112-115.DOI:10.1109/VLSI.DAT.2012.6212600.
[8]戴迎珺.基于SOPC的USB設(shè)備控制器IP核設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(20):5234-5236.
[9]李繼軍,杜云剛,張麗華,等.CMOS圖像傳感器的研究進(jìn)展[J].激光與光電子學(xué)進(jìn)展,2009(4):45-52.DOI:10.3788/LOP 20094604.0045.
[10]楊波,陳文藝.基于FPGA的高速CCD驅(qū)動(dòng)電路的設(shè)計(jì)與實(shí)現(xiàn)[J].西安郵電學(xué)院學(xué)報(bào),2010,15(1):93-97.
[11]樊宏.基于Nios II的視頻采集及系統(tǒng)分析[J].西安郵電學(xué)院學(xué)報(bào),2010,15(3):85-88.
[12]何鑫,周健,聶曉明,等.基于線陣圖像傳感器的新型空間濾波測速儀[J].紅外與激光工程,2014,43(12):4117-4122.DOI:10.3969/j.issn.1007-2276.2014.12.049.
[13]袁興,王林林,王桂海,等.基于Nios II的視頻采集及網(wǎng)絡(luò)傳輸系統(tǒng)的實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34(2):485-489,506.
[責(zé)任編輯:祝劍]
Driving design of linear image sensor based on Nios II
CHEN Wenyi1,LEI Wuliang2,YANG Hui1
(1. Institute of Internet of Things and IT-based Industrialization, Xi’an University of Posts and Telecommunications, Xi’an 710061,China;2. School of Communication and Information Engineering, Xi’an University of Posts and Telecommunications, Xi’an 710121,China)
Abstract:A drive system of serial communication based on FPGA/Nios II is designed for the linear cmos image sensor DLIS-2K. The Cyclone IV FPGA chip of EP4CE10E22C8N of Altera is chose as the hardware design platform, and the DLIS-2K serial communication is designed by using the FPGA scheme of embedded soft core processor Nios II. Simulations are carried out for this circuit design. Experiments show that the designed drive circuit can achieve the serial work.
Keywords:FPGA, linear, timing control, serial communication, Nios II
doi:10.13682/j.issn.2095-6533.2016.01.017
收稿日期:2015-06-09
基金項(xiàng)目:陜西省科技廳工業(yè)攻關(guān)計(jì)劃資助項(xiàng)目(Z013K06-14)。
作者簡介:陳文藝(1964-),男,教授,從事數(shù)字圖像處理及傳輸研究。E-mail:chenwy@xupt.edu.cn 雷武亮(1988-),男,碩士研究生,研究方向?yàn)閿?shù)字圖像處理。E-mail:leiwuliang@163.com
中圖分類號(hào):TP391
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):2095-6533(2016)01-0084-05