趙曉海
(北京思比科微電子技術股份有限公司數字部 北京 100085)
當前,實現圖像采集、處理和壓縮等功能的數字集成電路產品得到了廣泛應用[1]。但是隨著消費者對圖像質量的要求越來越高、多媒體芯片實現的功能越來越豐富,該領域集成電路的時鐘方案也變得越來越復雜。
同步方法除了必須保證數據正確傳輸外,還應注意以下兩方面:所用存儲器的容量和EDA(Electronic Design Automation)工具的干預程度。首先應使所用存儲器的容量盡量小,因為其不僅占用較大的芯片面積,而且還有較多功耗。其次,要盡量減少和避免使用EDA工具對跨時鐘域信號做時序檢查和校正。因為,如果源和目標時鐘沒有確定的相位關系,EDA工具就無法檢查前后兩級觸發器的路徑延時與目標時鐘的關系;另外即使兩時鐘有確定的相位關系,EDA工具也可能在信號路徑中插入大量的Buffer,從而浪費芯片面積。
這里結合一個CMOS圖像傳感器的設計實例,總結并提出了幾種對跨時鐘域信號做同步處理的方法。這些方法既可以保證數據的正確傳送,又可以盡量減少對芯片面積的占用。
首先介紹一種輸出分辨率為1 280×720的CMOS圖像傳感器的設計。其CMOS圖像陣列的數據端口為4通道,幀率為60幀/s。
該CMOS圖像傳感器的模塊構成如圖1(a)所示。
CMOS像素陣列為圖像傳感器的感光器件。采用Bayer pattern[2]模式,分為4種顏色:G1、R、G2、B。
CMOS圖像陣列模塊輸出信號的時序關系如圖1(b)所示。
vsync_pix為幀同步信號,其為1表示幀有效期,為0表示幀消隱期;hsync_pix為行同步信號,相當于輸出數據的使能信號,其為1表示行有效期,為0表示行消隱期;data_g1、data_r、data_b、data_g2為4個數據輸出端口,每個端口只輸出一種顏色的數據。

圖1 CMOS圖像傳感器系統結構Fig.1 System structure diagram of CMOS image sensor
由圖1(b)所示,在每個時鐘周期,同時輸出4個像素的數值,這4個像素為相鄰的兩行兩列像素且處于一個矩形當中。
列拼接模塊用于把圖像陣列送出的4通道數據按列拼接為雙通道數據。即把每行的2個數據合并至一個通道中。這樣做的結果是每個輸出通道的數據頻率提高一倍。
行拼接模塊用于把列拼接模塊送出的2通道數據合并為單通道數據。當2通道數據輸入時,其首先將其中一行送出,然后在一定時間后再送出另一行數據。其輸出數據的頻率也為輸入數據的兩倍。
輸出頻率轉換模塊是把頻率為96 MHz的輸入數據轉換為以64 MHz頻率送出。數據輸出模塊被用于從不同模塊選擇輸入數據,并完成輸出數據的時鐘同步工作。CMOS像素陣列控制器用于控制對所有像素的曝光和讀出。時鐘管理模塊用于產生各個模塊所需的時鐘及復位信號。
該CMOS圖像傳感器最重要的功能是輸出分辨率為1 280×720的圖像,且60幀/s。為了達到這個幀率,像素陣列控制器的時鐘頻率應為109÷((732/2)×(400+1 284/2+16)×60)≈23.2 MHz,所以像素陣列和像素陣列控制器的工作頻率定為24 MHz。而4個通道數據合并為一個通道后,數據頻率將變為96 MHz,所以讓數字邏輯各模塊工作在96 MHz時鐘上。在此基礎上該圖像傳感器有3種工作模式:單通道輸出96 MHz頻率的數據、單通道輸出64 MHz頻率的數據、雙通道輸出48 MHz頻率的數據。
1)單通道輸出96 MHz頻率數據(模式1)
在該模式下,像素陣列以4通道送出數據,每個通道的數據頻率均為24 MHz。此4通道數據首先進入列拼接模塊,從此模塊輸出時變為2通道、每通道頻率為48 MHz的數據。之后進入行拼接模塊,此模塊輸出單通道且頻率為96 MHz的數據。最后,經數據輸出模塊,圖像傳感器以單通道輸出96 MHz頻率的數據,且幀率為60幀/s。
2)單通道輸出64 MHz頻率數據(模式2)
在此模式下,行拼接模塊輸出的單通道且頻率為96 MHz的數據被送入輸出頻率轉換模塊。該模塊將數據的傳輸頻率從96 MHz降為64 MHz。最后經數據輸出模塊,圖像傳感器以單通道輸出64 MHz頻率的數據,幀率仍為60幀/s。
3)雙通道輸出48 MHz頻率數據(模式3)
在該模式下,列拼接模塊輸出的2通道、頻率分別為48 MHz的數據被直接送入數據輸出模塊。圖像傳感器以2通道輸出頻率分別為48 MHz的數據。
根據該CMOS圖像傳感器功能要求,其時鐘方案如圖2所示。

圖2 時鐘方案Fig.2 Clock scheme
該CMOS圖像傳感器的輸入時鐘的頻率為24 MHz,由PLL(Phase Locked Loop)對其8倍頻,輸出頻率為192 MHz時鐘,之后將192 MHz時鐘分別做2分頻和3分頻。2分頻產生的96 MHz時鐘作為數字部分的主要工作時鐘,列拼接模塊、行拼接模塊、輸出頻率轉換模塊均工作在此時鐘域中。3分頻產生的64 MHz時鐘被送入輸出頻率轉換模塊,用于將數據頻率從96 MHz降為64 MHz。
96 MHz時鐘被2分頻后產生48 MHz時鐘,當圖像傳感器工作在模式3時,該48 MHz時鐘被作為輸出數據的同步時鐘。
48 MHz時鐘被2分頻后產生24 MHz,其被送入CMOS像素陣列控制器模塊。該模塊和CMOS像素陣列均工作在24 MHz時鐘域中。
在圖像傳感器輸出圖像數據時,其會送出與輸出數據同步的時鐘,即Pclk,后級芯片必須首先用此時鐘采集圖像數據。當圖像傳感器工作在模式1時,Pclk為96 MHz時鐘;當其工作在模式2時,Pclk為64 MHz時鐘;其工作在模式3時,Pclk為48 MHz時鐘。
在CMOS像素陣列控制器的控制下,像素陣列以4通道、每通道24 MHz的頻率輸出數據。而列拼接模塊工作在96 MHz的時鐘域內,所以數據進入列拼接模塊后,首先必須實現從24 MHz到96 MHz的時鐘域切換。
從圖2中可以看到,像素陣列所處的24 MHz時鐘是由96 MHz時鐘4分頻后得到的,所以此96 MHz時鐘與24 MHz時鐘有確定的相位關系。此關系如圖3所示。

圖3 96 MHz時鐘與24 MHz時鐘的相位關系Fig.3 Phase relation between 96 MHz clock and 24 MHz clock
當數據從24 MHz時鐘的上升沿輸出后,其距離下一個96 MHz時鐘的上升沿有將近一個96 MHz時鐘周期的延時。所以在這種情況下可以直接用目標時鐘的上升沿去采源時鐘上升沿送出的數據。
另外,在邏輯綜合(synthesize)時,必須設置此96 MHz時鐘和24 MHz時鐘為同步關系,即用synthesize工具去檢查所有跨此兩個時鐘邊界的路徑是否滿足時序要求。
應注意,所有從24 MHz時鐘域進入96 MHz時鐘域的信號必須首先被96 MHz時鐘至少采一拍。這樣做的原因是保證跨時鐘域信號第一次被目標時鐘采集時,此offset能夠盡量大。
當該CMOS圖像傳感器工作在模式2時,輸出頻率轉換模塊將把輸入頻率為96 MHz的數據變為以64 MHz頻率輸出。
從圖2中可以看到,96 MHz時鐘和64 MHz時鐘均由192 MHz時鐘分頻得到,但兩者之間沒有固定的相位關系,所以不能使用2.1所述的方法實現跨時鐘域信號的同步。此時可以通過雙端口存儲器實現跨時鐘域信號的同步。
1)輸出頻率轉換模塊內部結構
輸出頻率轉換模塊的內部結構如圖4所示。
該模塊的核心為一個雙端口存儲器,其的一個端口用于96 MHz數據寫入,另一端口用于以64 MHz頻率將數據讀出。
Vsync_in為該模塊的幀同步輸入信號;Hsync_in為行同步輸入信號;Data_in為數據輸入端口;Vsync_out,hsync_out為該模塊輸出的幀同步信號和行同步信號;Data_out為數據輸出端口。
2)同步流程

圖4 輸出頻率轉換模塊的結構Fig.4 Structure diagram of synchronization module
在每一行數據輸入時,hsync_in均變為1,此時地址計數器1開始計數。其的計數值將作為寫地址信號被送到雙端口存儲器的wadder端口。hsync_in也作為寫信號被送到write端口。此時該行數據被串行寫入此存儲器中。
hsync_in信號同時也被送入同步器,同步器利用64 MHz時鐘將其采兩拍后產生信號hsync_sync,其被送入地址計數器2中。地址計數器2將以此信號的上升沿為計數開始的標志,直至計到1280后回到初始值0。該計數值被作為讀地址送到雙端口存儲器的radder端口。此時雙端口存儲器中的數據被以64 MHz的頻率讀出。
在地址計數器2從0到1 280的計數過程中,將產生寬度為1 280個64 MHz時鐘周期的信號hsync_out,其作為雙端口存儲器輸出數據的使能信號被輸出。
Vsync_in信號直接被送入同步器,在被64 MHz時鐘同步2拍后,被輸出至后級模塊。同時,為了提高系統的穩定性,其還被送至地址計數器2中,其的上升沿標志信號將把地址計數器2清零。
據此,數據被逐行逐幀完成跨時鐘域處理。
3)存儲器容量計算及synthesize設置
從2.2的2)中對該方法的闡述可以看到,將數據寫入雙端口存儲器的頻率為96 MHz,而讀出頻率為64 MHz,有可能出現該行還沒有被讀完,下一行數據又將被寫入FIFO的情況。
另一方面,因為像素陣列模塊周而復始的一幀又一幀的輸出數據,即使雙端口存儲器中的數據出現被覆蓋的現象,其也不可能停止輸出數據。所以對FIFO覆蓋現象的避免并不能依靠full或empty[4]這些指示信號。
從以上論述可知,在跨時鐘域信號的同步處理中,必須保證FIFO中的數據在被讀出前不被覆蓋,另一方面還必須使用盡量少的存儲器。如果讀時鐘的頻率快于寫時鐘,那么FIFO的深度可以只用幾個字節就可以了。如果讀時鐘的頻率慢于寫時鐘,雙端口存儲器的深度與寫時鐘和讀時鐘頻率的比值有關。在該設計中,寫時鐘頻率為96 MHz,讀時鐘頻率為64 MHz,兩者的比值為3:2。也就是說,在向FIFO寫入3 Byte數據的同時,只能從FIFO中讀出2 Byte數據,且還需要行有效期至少一半的時間用于讀出最后1 Byte數據。據此,FIFO的深度至少應為一行圖像數據的1/3,行消隱期不能少于一行有效時間的1/2。由此可以進一步推知,如果寫時鐘與讀時鐘的頻率最簡比值為m/n,則FIFO的深度至少為一行有效數據的1/m,行消隱期的寬度至少為一行有效時間的1/n。
根據此計算方法,該圖像傳感器的行有效期的時間長度為642周期(24 MHz時鐘),而行消隱期為416周期,416/642>0.5所以該設計在時間上可以滿足數據頻率從96 MHz到64 MHz的轉換。而雙端口存儲器的深度應為1 280/3≈428 Byte。這樣FIFO中的數據在讀出前不會被覆蓋。
如前所述,此96 MHz時鐘與64 MHz時鐘沒有固定的相位關系。所以此時synthesize工具無法計算跨這兩個時鐘邊界的路徑是否符合時序要求。因此該設計在synthesize時,必須設置此兩時鐘域的路徑為false path。
4)控制信號的同步方法
如2.2的2)中所述,該同步方法不僅對數據做了同步,還涉及對控制信號vsync_in和hsync_in做相應處理。此兩信號的同步方法是直接用64 MHz時鐘采兩拍,生成64 MHz時鐘域的信號hsync_sync和vsync_out[5]。
控制信號的同步取決于兩方面的因素,其一為此信號的寬度,其二為各控制信號間的時序關系。
如果一個控制信號直接被另一個時鐘采集,那么其時間寬度至少為目標時鐘周期的兩倍,否則目標時鐘可能采不到這個信號。另一方面,如果多個控制信號同時進入另一時鐘域,而且這幾個信號又必須有確定的先后順序時,就必須注意它們進入同步器前的時間間隔,否則會出現如圖5所示的錯誤。

圖5 多控制信號同步錯誤Fig.5 Error from synchronizing multi-control signals
從圖5可以看到,在某種特殊情況下,前級模塊可能會在同一個源時鐘沿送出vsync_in和hsync_in。因為這兩個信號至下一級觸發器的路徑延時不同,極有可能出現hsync_in延時較小,而vsync_in延時較大的情況。所以目標時鐘可能先采到hsync_in,后采到vsync_in。這樣同步兩拍后,會出現hsync_sync信號比vsync_out信號早一個時鐘周期的情況,從而引起后級操作的錯誤。
當該圖像傳感器工作在模式3時,其以48 MHz頻率輸出雙通道數據。此時,從列拼接模塊輸出的數據被直接送至數據輸出模塊。因為列拼接模塊工作在96 MHz時鐘域中,所以其輸出數據的時間寬度均為2個96 MHz時鐘周期。pclk在此模式下頻率被設為48 MHz,而48 MHz時鐘是由96 MHz時鐘分頻得到,所以pclk與96 MHz時鐘送出的信號沒有確定的時序關系,其直接去采96 MHz的數據會有問題。
為使數據能夠被正確傳送,必須保證數據變化的時刻與pclk的上升沿之間有足夠的setup time和hold time[6]。為此采用如圖6(a)和圖6(b)所示的方法。

圖6 從96MHz時鐘到48MHz時鐘的同步方法Fig.6 Synchronous method from 96MHz clock to 48MHz clock
1)信號說明
phase_flag為相位判斷信號,其由96 MHz時鐘分頻產生,但與48 MHz時鐘不同的是,該信號在96 MHz時鐘的下降沿變化,所以當96 MHz時鐘的復位信號在該時鐘的上升沿失效后,phase_flag將先于48 MHz時鐘半個周期翻轉為1。其與48 MHz時鐘有如圖6所示的確定相位關系;
vsync_g,hsync_g為列拼接模塊輸出的幀有效信號和行有效信號;
datain_1,datain_2為列拼接模塊輸出的兩通道數據信號;
hsync_g_pos為hsync_g的上升沿標志信號,其處于96 MHz時鐘域中;
phase_g_flag0和phase_g_flag1為輸入數據與48 MHz時鐘相位關系的標志信號,均在96 MHz時鐘域中產生,且phase_g_flag0將進入48 MHz時鐘域;
hsync_g_dly2和hsync_g_dly3為hsync_g在96 MHz時鐘域中延時2個周期和3個周期的信號;
datain_1_dly2、datain_1_dly3、datain_2_dly2和datain_2_dly3分別為datain_1和datain_2在96 MHz時鐘域中延時2個周期和3個周期的信號;
hsync_pclk,data_1_pclk和data_2_pclk為48 MHz時鐘第一拍輸出的信號。
2)phase 0情況
當96 MHz時鐘域的信號進入數據輸出模塊后,首先產生hsync_g_pos信號。當該信號為1且phase_flag為0時,phase_g_flag0將變為1且phase_g_flag1將變為0,表示此時輸入數據與48MHz時鐘的相位關系為phase0,即datain_1和datain_2在48 MHz時鐘的上升沿附近變化,此時用48 MHz時鐘采這兩通道數據將有時序問題。
在phase0情況下,phase_g_flag0在48 MHz時鐘的下降沿附近變化,所以48 MHz時鐘的上升沿可以穩定地采到其的值。此時,根據phase_g_flag0的極性,48 MHz時鐘域中的第一級觸發器將選擇hsync_g_dly3、datain_1_dly3和datain_2_dly3作為輸入信號。從圖6(a)中可看到,此時這3個信號均在48 MHz時鐘下降沿附近發生變化,所以沒有時序問題,可以使信號正確無誤地進入48 MHz時鐘域中。
3)phase 1情況
當hsync_g_pos為1時, 如果phase_flag為1則phase_g_flag1將變為1,表示此時為phase1情況。即96 MHz數據在48 MHz時鐘的下降沿附近變化。當phase_flag為0且phase_g_flag1為1時,phase_g_flag0將變為0。這樣是保證phase_g_flag0信號的極性始終在48 MHz時鐘的下降沿附近變化,從而使其進入48 MHz時鐘域時,沒有時序問題。其為0后,48 MHz時鐘域中的第一級觸發器將據此選擇hsync_g_dly2、datain_1_dly2和datain_2_dly2作為輸入信號。從圖6(b)可以看到,此3個信號均在48 MHz時鐘的下降沿附件變化,所以用48 MHz時鐘的上升沿能夠準確采集它們的狀態。
此96 MHz時鐘域與48 MHz時鐘域雖然有確定的時序關系,但是96 MHz時鐘送出的信號與48MHz時鐘之間卻沒有確定關系。因此在synthesize的設置當中,跨此兩個時鐘的路徑應設為false path,這些路徑的時序只能在邏輯設計中被保證。
綜合2中所述,在對跨時鐘域信號進行同步處理時,應根據以下情況采用相應的處理方法。
如果兩時鐘間有確定的相位關系,可以直接用目標時鐘采集跨時鐘域信號。但應保證采集時,能夠有盡量大的時序余量。比如2.1和2.3中所述方法。
如果兩時鐘沒有確定的相位關系,數據同步必須借助FIFO來實現跨時鐘域處理,但應根據具體的設計環境使用容量較小的FIFO以節省芯片面積,并且能夠保證FIFO中的數據安全。如2.2中所述方法。
為使目標時鐘能夠穩定采到跨時鐘域的信號,該信號的時間寬度一般至少應為目標時鐘周期的2倍。特別是源時鐘頻率高于目標時鐘時更應注意這個問題。如2.2中,對hsync_in和vsync_in的處理就是如此。
當源時鐘與目標時鐘沒有確定相位關系時,跨時鐘域信號并不能保證在目標時鐘的哪個時鐘沿翻轉。所以,當多個相關信號進入另一個時鐘域時,應注意這些信號之間的時序關系。即有時會要求在目標時鐘域中,一個信號先有效,而另一個信號必須后有效,比如2.2中所述方法的vsync_in與hsync_in的關系。對于這種情況,應使這些信號在源時鐘域中保持足夠寬度的間隔。
該CMOS圖像傳感器設計基于0.18 μm工藝,經邏輯綜合、時鐘樹綜合、布局布線、物理版圖驗證等前、后端處理后,面積為2 mm×2 mm。
經RTL(Register Transfer Level)仿真、門級仿真和實際芯片的系統驗證,當輸入時鐘為24 MHz時,該CMOS圖像傳感器能夠在3種模式下以指定頻率正確輸出數據。并可以在96MHz、64 MHz、48 MHz和24 MHz時鐘之間正確完成控制信號和數據的同步處理。
隨著多媒體芯片實現的功能日益增多,其的設計明顯向時鐘頻率更高、時鐘方案更復雜的方向發展。在此背景下,對跨時鐘域信號做同步處理的方法變得越來越重要。這里以一個CMOS圖像傳感器的設計為實例,介紹了幾種跨時鐘域信號的同步方法。同時,對這些方法在使用過程中應注意的問題做了重點闡述。進而,對跨時鐘域信號的處理方法做了系統總結。經仿真及芯片系統驗證,在此所述同步方法均可正確完成跨時鐘域信號的同步工作。
[1]Gonzalez R C,Woods R E.數字圖像處理[M].阮秋琦,阮宇智,等,譯.2版.北京:電子工業出版社,2007.
[2]Junichi Nakamura.Image Sensors and signal processing for Digital Still Camera[M].Tokyo:CRC Press,2005.
[3]彭莉,秦建業,付宇卓.異步FIFO的設計與驗證[J].計算機工程與應用,2005,41(3):98-101.
PENG Li,QIN Jian-ye,FU Yu-zhuo.Asynchronous FIFO design and verification[J].Computer Engineering and Applications,2005,41(3):98-101.
[4]杜旭,王夏泉.ASIC中的異步時序設計[J].微電子學,2004,34(5):528-532.
DU Xu,WANG Xia-quan.Asynchronous Design in ASIC’s[J].Micro Electronics,2004,34(5):528-532.
[5]Clifford E,Cumming S.Synthesis and Scripting Techniques for designingMulti-Asynchronous Clock Dsigns[C]//SNUG San Jose,CA Voted Best Paper 3rd Place,2001:2-4,16-23.
[6]廖艷,王廣君,高楊.FPGA異步時鐘設計中的同步策略[J].自動化技術與應用,2006,25(1):67-79.
LIAO Yan,WANG Guang-jun,GAO Yang.The synchronizationinthe asynchronousclockdesignforFPGA[J].Techniques of Automation and Applications,2006,25(1):67-79.