《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 一種基于FPGA的AD9945驅(qū)動(dòng)設(shè)計(jì)
一種基于FPGA的AD9945驅(qū)動(dòng)設(shè)計(jì)
來(lái)源:微型機(jī)與應(yīng)用2011年第18期
洪冰心, 鄭力新
(華僑大學(xué) 信息科學(xué)與工程學(xué)院, 福建 廈門361021)
摘要: 介紹了AD9945高速CCD信號(hào)處理芯片,并對(duì)其工作流程進(jìn)行了研究。分析了AD9945芯片內(nèi)部各個(gè)驅(qū)動(dòng)信號(hào)的作用及其時(shí)序關(guān)系,提出了結(jié)合FPGA運(yùn)用VHDL硬件語(yǔ)言對(duì)該芯片的驅(qū)動(dòng)信號(hào)進(jìn)行編程的思想,最后通過(guò)QUARTUS II軟件對(duì)程序進(jìn)行時(shí)序仿真,并得到正確的仿真時(shí)序圖,從而驗(yàn)證了這種編程思想的正確性。
關(guān)鍵詞: FPGA AD9945 VHDL 驅(qū)動(dòng)
Abstract:
Key words :

摘  要: 介紹了AD9945高速CCD信號(hào)處理芯片,并對(duì)其工作流程進(jìn)行了研究。分析了AD9945芯片內(nèi)部各個(gè)驅(qū)動(dòng)信號(hào)的作用及其時(shí)序關(guān)系,提出了結(jié)合FPGA運(yùn)用VHDL硬件語(yǔ)言對(duì)該芯片的驅(qū)動(dòng)信號(hào)進(jìn)行編程的思想,最后通過(guò)QUARTUS II軟件對(duì)程序進(jìn)行時(shí)序仿真,并得到正確的仿真時(shí)序圖,從而驗(yàn)證了這種編程思想的正確性。
關(guān)鍵詞: AD9945; FPGA; VHDL; 驅(qū)動(dòng)

    隨著計(jì)算機(jī)和通信技術(shù)的發(fā)展,機(jī)器視覺(jué)的應(yīng)用更加廣泛,而FPGA因具有高性能、高靈活性、低開(kāi)發(fā)成本、低成本的結(jié)構(gòu)化ASIC移植等優(yōu)點(diǎn),在機(jī)器視覺(jué)中發(fā)揮著越來(lái)越重要的作用。AD9945是一款12 bit的高速CCD信號(hào)處理芯片,最高頻率可達(dá)到40 MHz,非常適用于處理高速CCD信號(hào)。
1 AD9945芯片簡(jiǎn)介[1]
    AD9945是一款高速CCD模擬信號(hào)處理芯片,最高頻率可處理40 MHz的面陣CCD模擬信號(hào)。其信號(hào)鏈主要由相關(guān)雙采樣(CDS)、數(shù)控可變?cè)鲆娣糯笃?VGA)、黑色電平鉗位、12位A/D轉(zhuǎn)換器組成。
1.1 AD9945內(nèi)部寄存器
    AD9945有4個(gè)內(nèi)部寄存器,分別為工作寄存器、控制寄存器、暗電平鉗制水平寄存器、VGA增益寄存器。4個(gè)寄存器可通過(guò)3線串行數(shù)字接口(SCK、SDATA、SL)進(jìn)行編程。通過(guò)編程可改變?cè)鲆?、黑電平校正、輸入時(shí)鐘極性及掉電模式等。各個(gè)內(nèi)部寄存器詳細(xì)設(shè)置見(jiàn)其芯片手冊(cè)[1]。
    對(duì)單個(gè)寄存器的賦值應(yīng)滿足其芯片時(shí)序圖,并且注意4個(gè)寄存器應(yīng)被連續(xù)寫(xiě)入,第一個(gè)寄存器的地址(最低的地址)被寫(xiě)入后,跟著寫(xiě)入一個(gè)測(cè)試位(置0)和4個(gè)12 bit的數(shù)據(jù)(不足12 bit的補(bǔ)0),其中地址位將跟著每一個(gè)12 bit的數(shù)據(jù)而自動(dòng)增加。每一位SDATA的數(shù)據(jù)在SCK的上升沿被寫(xiě)入。在所有的寄存器的值寫(xiě)入期間,SL保持低電平,并且系統(tǒng)在SL上升沿后對(duì)寄存器的值進(jìn)行更新。
1.2 AD9945工作流程
    對(duì)于來(lái)自CCD的輸入信號(hào), AD9945通過(guò)一個(gè)由0.1 μF的外部耦合隔直電容以及內(nèi)置的高精度直流電平恢復(fù)電路,使CCD信號(hào)的直流分量保持在1.5 V左右,從而與3 V單電源輸入的 AD9945相匹配。接著AD9945對(duì)CCD信號(hào)進(jìn)行相關(guān)雙采樣處理,即對(duì)CCD信號(hào)采樣兩次以提取視頻信息,這有效地防止了低頻噪音。相關(guān)雙采樣發(fā)生在SHP(復(fù)位電平)和SHD(像元信號(hào)電平)的上升沿,這兩個(gè)時(shí)鐘信號(hào)是完成采樣、發(fā)揮CCD性能的關(guān)鍵。然后AD9945可以通過(guò)10 bit的串行數(shù)字接口編程設(shè)置對(duì)CCD信號(hào)的增益進(jìn)行調(diào)整,增益范圍從6 dB~40 dB。其增益調(diào)整的公式為:VGA增益(dB)=(VGA代碼值×0.035 dB)+5.3 dB。為了清除CCD信號(hào)鏈中殘留的偏置并跟蹤暗電平低頻的變化,AD9945還設(shè)置了一個(gè)光學(xué)暗電平鉗制反饋環(huán)。通過(guò)內(nèi)部寄存器設(shè)置暗電平的參考值,并與ADC輸出的實(shí)際暗電平的值進(jìn)行比較。產(chǎn)生的誤差信號(hào)經(jīng)過(guò)數(shù)字濾波,通過(guò)一個(gè)D/A轉(zhuǎn)換器反饋到ADC的輸入。暗電平鉗制脈沖CLPOB應(yīng)處于有效的CCD光學(xué)暗電平期間。最后CCD信號(hào)通過(guò)一個(gè)12 bit的AD轉(zhuǎn)換器輸出,并且輸出時(shí)延遲10像素時(shí)鐘。
2 AD9945驅(qū)動(dòng)設(shè)計(jì)
2.1 AD9945時(shí)序分析[1-2]

    AD9945要正常工作必須由時(shí)序發(fā)生器提供各種脈沖信號(hào),以保證其內(nèi)部寄存器能夠正確賦值,雙相關(guān)采樣信號(hào)SHP和SHD時(shí)序應(yīng)滿足CCD信號(hào)要求以及CLPOB脈沖應(yīng)處于有效的CCD光學(xué)暗電平期間。AD9945時(shí)序脈沖信號(hào)是一組周期性、關(guān)系較復(fù)雜的脈沖信號(hào),它直接影響了對(duì)CCD信號(hào)的處理性能。本文設(shè)計(jì)的AD9945的時(shí)序包括三個(gè)部分:(1)3線串行數(shù)字接口(SCK、SDATA、SL),保證內(nèi)部寄存器被正確賦值;(2)相關(guān)雙采樣信號(hào)SHP、SHD,確保采樣的準(zhǔn)確性;(3)光學(xué)暗電平鉗制,減少鉗制噪聲。
    預(yù)設(shè)當(dāng)CCD數(shù)據(jù)頻率為40 MHz時(shí),各個(gè)驅(qū)動(dòng)信號(hào)的相位關(guān)系如表1所示。通過(guò)觀察各驅(qū)動(dòng)信號(hào)的相位表和時(shí)序圖[1]可以得到:如果設(shè)t=T/8(T是驅(qū)動(dòng)信號(hào)的周期),則SHP、SHD、DATACLK的脈沖寬度分別為2 t、2 t、4 t,并且SHP、SHD之間相位差為2 t。由于DATACLK上升沿必須處于SHD的上升沿與下一個(gè)SHP的下降沿之間,因此設(shè)DATACLK上升沿到SHP下降沿的相位為t。所以如果基準(zhǔn)時(shí)鐘信號(hào)的周期為t,根據(jù)上述分析的結(jié)果可以得到各個(gè)驅(qū)動(dòng)信號(hào)。
    需要注意的是,表1中的各個(gè)驅(qū)動(dòng)信號(hào)的相位關(guān)系是在CCD信號(hào)頻率為40 MHz時(shí)的,如果CCD信號(hào)頻率發(fā)生變化,各個(gè)驅(qū)動(dòng)信號(hào)的頻率也應(yīng)該跟著變化。

2.2 AD9945驅(qū)動(dòng)的程序設(shè)計(jì)[3]
    主控芯片選用現(xiàn)場(chǎng)可編程門陣列。FPGA可以通過(guò)QuartusII軟件編程對(duì)其硬件結(jié)構(gòu)和工作方式進(jìn)行重構(gòu),從而使得硬件設(shè)計(jì)如同軟件設(shè)計(jì)方便快捷。本設(shè)計(jì)主要使用VHDL語(yǔ)言來(lái)編寫(xiě)驅(qū)動(dòng)程序。
    AD9945最高工作頻率可以達(dá)到40 MHz,但是為了配合前端CCD提供的圖像數(shù)據(jù)信號(hào)(CCD信號(hào)為10 MHz),把AD9945的工作頻率設(shè)定為10 MHz(即SHP、SHD、DATACLK頻率=10 MHz),這樣與前端CCD信號(hào)達(dá)到同步。通過(guò)觀察SHP、SHD、DATACLK之間的相位關(guān)系以及上文的時(shí)序分析,發(fā)現(xiàn)需要一個(gè)80 MHz的基準(zhǔn)時(shí)鐘(1/t=8/T),然后對(duì)基準(zhǔn)時(shí)鐘進(jìn)行8分頻,得到10 MHz的信號(hào)。然而FPGA的基準(zhǔn)時(shí)鐘信號(hào)是由一塊50 MHz的有源晶振產(chǎn)生,要想得到需要的80 MHz的信號(hào),就必須進(jìn)行小數(shù)分頻處理。選擇利用FPGA內(nèi)部的鎖相環(huán)PLL完成8/5的小數(shù)分頻[3-4]。
2.2.1 AD9945內(nèi)部寄存器程序設(shè)計(jì)
    在AD9945對(duì)CCD信號(hào)進(jìn)行采集之前,需要對(duì)其內(nèi)部寄存器進(jìn)行設(shè)置,使其工作在需要的狀態(tài)下。此步驟需要對(duì)3線串行數(shù)字接口(SCK、SDATA、SL)進(jìn)行編程。
    首先定義一個(gè)串行數(shù)據(jù)類型SPI=RAM_ARRAY,并賦初值,即是預(yù)計(jì)要向各個(gè)寄存器寫(xiě)入的值,總共52位(3位地址位+1位測(cè)試位+每個(gè)寄存器12位×4個(gè)寄存器=52位)。通過(guò)SPI對(duì)串行數(shù)據(jù)接口SDATA進(jìn)行賦值,實(shí)現(xiàn)對(duì)內(nèi)部寄存器的設(shè)置。
    然后編寫(xiě)程序產(chǎn)生串行數(shù)據(jù)輸入時(shí)鐘SCK,因?yàn)镾CK是頻率為10 MHz,占空比為1:1的方波,所以對(duì)80 MHz的基準(zhǔn)時(shí)鐘進(jìn)行8進(jìn)制計(jì)數(shù)div8=(0,1,2,3,4,5,6,7),當(dāng)div8=0、1、2、3時(shí),SCK為低電平。最后需要產(chǎn)生內(nèi)部寄存器載入脈沖SL。定義一個(gè)52位的計(jì)數(shù)器CNT52,對(duì)SCK的脈沖計(jì)數(shù)52次(用于串行數(shù)據(jù)的寫(xiě)入)。計(jì)數(shù)期間SL置0,結(jié)束后置1,并且在此期間當(dāng)每一個(gè)SCK上升沿到來(lái)時(shí)通過(guò)SPI對(duì)SDATA進(jìn)行串行寫(xiě)入(共52次)。
2.2.2 AD9945采樣時(shí)鐘的程序設(shè)計(jì)

 


    通過(guò)對(duì)內(nèi)部寄存器進(jìn)行賦值,規(guī)定了AD9945的工作方式后,就可以編寫(xiě)程序設(shè)計(jì)AD9945的采樣時(shí)鐘SHP、SHD、DATACLK。其中DATACLK是數(shù)據(jù)像素同步時(shí)鐘,必須與前端CCD信號(hào)嚴(yán)格匹配,在這里也是通過(guò)軟件產(chǎn)生,實(shí)際驗(yàn)證過(guò)程中再根據(jù)具體情況進(jìn)行調(diào)整。
    DATACLK占空比為1:1,所以當(dāng)div8=0、1、2、3時(shí)DATACLK為低電平;SHP和SHD占空比都為3:1,但是SHP比SHD超前,所以當(dāng)div8=1、2時(shí),SHP為低電平;當(dāng)div8=5、6時(shí),SHD為低電平。
2.2.3 AD9945行鉗制時(shí)鐘輸入
    通過(guò)觀察CCD輸出信號(hào),發(fā)現(xiàn)CCD信號(hào)的有效像元之間夾雜著一些光學(xué)暗電平和一些空白像素,在此區(qū)間CCD是沒(méi)有輸出的。通過(guò)軟件設(shè)計(jì)PBLK和CLPOB脈沖信號(hào),使AD9945采集的結(jié)果更準(zhǔn)確。
    設(shè)置CLPOB為20個(gè)像素時(shí)間寬度,而PBLK脈沖寬度的設(shè)置需要準(zhǔn)確知道CCD空白像素的寬度,在此也是預(yù)設(shè)20個(gè)像素時(shí)間寬度,針對(duì)實(shí)際情況再進(jìn)行調(diào)整。
2.3 驅(qū)動(dòng)程序及仿真結(jié)果
    由于設(shè)計(jì)需要的頻率較高,擔(dān)心FPGA編程后的管腳輸出達(dá)不到所需電壓,波形也不盡如人意,所以設(shè)計(jì)通過(guò)反向器來(lái)提升FPGA的輸出信號(hào),使其達(dá)到AD9945的輸入要求,同時(shí)可以對(duì)波形進(jìn)行整形,這就要求在編寫(xiě)FPGA程序時(shí),時(shí)序編寫(xiě)要反向設(shè)計(jì),按照上述時(shí)序分析反邏輯編寫(xiě)。
    驅(qū)動(dòng)電路實(shí)體端口定義如下:
entity ad9945 is
port(clk:    in std_logic;
     sck:     out std_logic;
     sdata:   out std_logic;
     sl:       out std_logic;
     shp:     out std_logic;
     shd:     out std_logic;
     dataclk: out std_logic;
     clpob:   out std_logic;     
     pblk:    out std_logic);
end entity ad9945;
    軟件(QuartusII)仿真結(jié)果如圖(圖1~圖3)。

 

    通過(guò)把仿真得到時(shí)序圖與芯片要求的時(shí)序圖進(jìn)行比較,發(fā)現(xiàn)設(shè)計(jì)得到的驅(qū)動(dòng)信號(hào)符合AD9945數(shù)據(jù)手冊(cè)的要求,因此能正常驅(qū)動(dòng)AD9945進(jìn)行工作,完成對(duì)CCD信號(hào)的采集、處理。
參考文獻(xiàn)
[1] ADI公司.AD9945芯片資料,2003.
[2] 常丹華.基于CPLD技術(shù)的CCD驅(qū)動(dòng)時(shí)序產(chǎn)生方法[J].儀器技術(shù)和傳感器,2001(3):26-28.
[3] 潘松,黃繼業(yè).EDA技術(shù)與VHDL(第二版)[M].北京:清華大學(xué)出版社,2007.
[4] 吳繼華,王誠(chéng).Altera FPGA/CPLD設(shè)計(jì)(初級(jí)篇)[M].北京:人民郵電出版社,2010.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。