賈永興,楊 宏,劉文慧,陳 明,滕 杰
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
目前,關(guān)鍵電子元器件“卡脖子”問(wèn)題已嚴(yán)重阻礙我國(guó)電子信息產(chǎn)業(yè)的發(fā)展,因此研發(fā)國(guó)產(chǎn)元器件和系統(tǒng)顯得極為迫切。作為路由器、交換機(jī)以及網(wǎng)關(guān)等通信設(shè)備的核心部件,網(wǎng)絡(luò)平臺(tái)國(guó)產(chǎn)化的重要性顯而易見。作為一種高速可編程邏輯器件,現(xiàn)場(chǎng)可編程邏輯門陣列(Field-Programmable Gate Array,F(xiàn)PGA)器件應(yīng)用領(lǐng)域極為廣泛,國(guó)內(nèi)廠商(如上海安路科技、深圳紫光同創(chuàng))也推出了各種規(guī)格的產(chǎn)品。此外,F(xiàn)PGA 在網(wǎng)絡(luò)平臺(tái)的設(shè)計(jì)中也是不可或缺的核心器件。在網(wǎng)絡(luò)平臺(tái)FPGA 的具體設(shè)計(jì)實(shí)施過(guò)程中,因平臺(tái)的功能要求多、FPGA 外圍芯片多以及工作頻率高等,跨時(shí)鐘域同步問(wèn)題作為其中的一個(gè)關(guān)鍵技術(shù)問(wèn)題被提出。結(jié)合工程實(shí)踐,本文就該問(wèn)題給出合理的解決方法和測(cè)試結(jié)果。
網(wǎng)絡(luò)平臺(tái)的硬件原理如圖1 所示。FPGA 是平臺(tái)的核心器件,采用上海安路科技的PH1 系列芯片,負(fù)責(zé)和外圍各種芯片的連接、接口適配、跨時(shí)鐘域同步、數(shù)據(jù)流調(diào)度等功能;CPU 通過(guò)MII 接口和FPGA 連接,負(fù)責(zé)路由表項(xiàng)配置和平臺(tái)的管理功能;搜索引擎芯片TCAM 通過(guò)數(shù)據(jù)/控制總線和FPGA連接,負(fù)責(zé)路由表項(xiàng)的快速查找,存儲(chǔ)器SRAM 通過(guò)控制/數(shù)據(jù)總線和FPGA 連接,負(fù)責(zé)存儲(chǔ)路由表項(xiàng)的匹配結(jié)果。
圖1 網(wǎng)絡(luò)平臺(tái)硬件原理框圖
從圖1 可以看出,F(xiàn)PGA 和各器件之間存在多種時(shí)鐘信號(hào)連接關(guān)系,同時(shí)FPGA 內(nèi)部也有多種工作時(shí)鐘,各時(shí)鐘的頻率如表1 所示。不論是FPGA外圍器件的數(shù)據(jù)進(jìn)入FPGA,還是FPGA 的數(shù)據(jù)輸出到外圍器件,因?yàn)闀r(shí)鐘頻率不同,需要在FPGA內(nèi)部做時(shí)鐘域同步設(shè)計(jì)。
表1 網(wǎng)絡(luò)平臺(tái)時(shí)鐘表
對(duì)比進(jìn)口FPGA,國(guó)產(chǎn)FPGA 在功能和性能上仍存在一定的差距。因網(wǎng)絡(luò)平臺(tái)數(shù)據(jù)處理功能復(fù)雜,邏輯資源占用多,布局布線復(fù)雜,加上工作頻率較高,跨時(shí)鐘域同步的實(shí)現(xiàn)上就需要更多的關(guān)注,否則會(huì)帶來(lái)功能上的缺陷,甚至不能正常工作。
對(duì)網(wǎng)絡(luò)平臺(tái)FPGA 跨時(shí)鐘域的信號(hào)可以分為兩類:一類是單比特的控制信號(hào),如圖1 中和TCAM連接的ctrl 信號(hào),定義為tcam_ctrl_in;另一類是多比特的并行總線信號(hào),如和TCAM 連接的dbus 信號(hào),定義為tcam_dbus_in。下面就這兩種類型的信號(hào)分別給出跨時(shí)鐘域方法。
各類數(shù)據(jù)通過(guò)IO 口進(jìn)入FPGA 后,在進(jìn)行跨時(shí)鐘域同步之前,先要確保數(shù)據(jù)時(shí)序的正確性,防止數(shù)據(jù)亞穩(wěn)態(tài)的發(fā)生[1]。為此使用FPGA的IOB資源。IOB 是FPGA 內(nèi)部距離IO 口最近的寄存器資源,同時(shí)IOB 的位置相對(duì)固定。使用IOB 能夠保證外部信號(hào)進(jìn)入FPGA 以后到寄存器的布線最短,延遲最低,不同條件下的編譯結(jié)果也不會(huì)出現(xiàn)較大的差異[2]。
IO 口的具體使用方法如下。
(1)在FPGA 約束文件中增加對(duì)輸入信號(hào)的IOB 約束。
(2)在FPGA 設(shè)計(jì)中用時(shí)鐘clk_i 對(duì)輸入信號(hào)打一拍,保證信號(hào)進(jìn)入FPGA 后就進(jìn)入IOB 的觸發(fā)器中。圖2和圖3分別給出了使用IOB前后的布線結(jié)果。
圖2 沒(méi)有使用IOB 的布線結(jié)果
圖3 使用IOB 的布線結(jié)果
可以看出,使用了IOB 以后,外部信號(hào)進(jìn)入FPGA 通過(guò)IBUF 后,直接進(jìn)入離IO 口最近的IOB寄存器,確保這段布線的時(shí)延小、布線結(jié)果相對(duì)固定。同時(shí),因?yàn)樵撔盘?hào)可能在FPGA內(nèi)部有多個(gè)連接關(guān)系,也保證了信號(hào)在FPGA 內(nèi)部時(shí)序的正確性[3]。
對(duì)網(wǎng)絡(luò)平臺(tái)的控制信號(hào)tcam_ctrl_in,在FPGA中跨時(shí)鐘域同步方法如下。
控制信號(hào)tcam_ctrl_in 進(jìn)入FPGA 之后,使FPGA 用內(nèi)部時(shí)鐘通過(guò)五級(jí)觸發(fā)器得到同步信號(hào)tcam_ctrl_f5。在布局上要求觸發(fā)器放置在相同的slice 中,確保觸發(fā)器之間的布線最短,延遲最小。
對(duì)網(wǎng)絡(luò)平臺(tái)的并行總線信號(hào)tcam_dbus_in,在FPGA 中跨時(shí)鐘域同步方法如下[4]。
(1)在clk_i 時(shí)鐘域,將并行總線信號(hào)tcam_dbus_in 轉(zhuǎn)換為格雷碼dbus _gray。
(2)通過(guò)兩級(jí)觸發(fā)器將dbus_gray 同步到clk_f 時(shí)鐘域。
(3)在clk_f 時(shí)鐘域,將總線信號(hào)由格雷碼數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)tcam_dbus _f3。
這里使用了格雷碼。格雷碼是一種錯(cuò)誤最小化編碼,特點(diǎn)是相鄰碼組的碼距為一,也就是任意相鄰碼組之間僅有一位不同,可以有效提高電路的抗干擾能力。因?yàn)榫W(wǎng)絡(luò)平臺(tái)的并行總線信號(hào)多為地址指針,地址指針變化一次,格雷碼只有一位發(fā)生變化,大大降低了數(shù)據(jù)亞穩(wěn)態(tài)的概率。
上面采用多級(jí)觸發(fā)器的方式實(shí)現(xiàn)跨時(shí)鐘域同步,但是這種方法對(duì)于突發(fā)數(shù)據(jù)會(huì)存在一些缺陷。采用異步fifo 作數(shù)據(jù)跨時(shí)鐘域同步是一種更有效的解決方案[5]。異步fifo 即先進(jìn)先出電路,數(shù)據(jù)的讀寫采用不同的時(shí)鐘。它既可用作控制信號(hào),也可用作并行總線信號(hào)的跨時(shí)鐘域同步。
它的具體實(shí)現(xiàn)方法如下:
該方法僅適用于讀時(shí)鐘頻率大于或者等于寫時(shí)鐘頻率的情況。這種情況下不會(huì)有fifo 溢出的情況發(fā)生,采用fifo 的非空信號(hào)作為fifo 的讀信號(hào),很簡(jiǎn)便地完成了數(shù)據(jù)跨時(shí)鐘域同步。對(duì)于讀時(shí)鐘頻率小于時(shí)鐘頻率的情況,則對(duì)fifo 的讀寫控制信號(hào)要做相應(yīng)判定。當(dāng)fifo 滿了的時(shí)候,確保不能有數(shù)據(jù)的寫入,以防止數(shù)據(jù)溢出導(dǎo)致數(shù)據(jù)流程異常。該流程最好采用狀態(tài)機(jī)完成,以確保讀寫信號(hào)的正確性。
針對(duì)以上的設(shè)計(jì)方法開展了實(shí)際應(yīng)用測(cè)試,在PHY 接口注入1 Gb/s 的數(shù)據(jù)流,通過(guò)網(wǎng)絡(luò)平臺(tái)的數(shù)據(jù)查表流程后再次返回到PHY 接口,測(cè)試結(jié)果如圖4 所示。
圖4 測(cè)試結(jié)果
從測(cè)試結(jié)果可以看出,收發(fā)數(shù)據(jù)幀速率Tx Frames Rates 和Tx Frames Rates 的大小一致,表明查表功能正常,沒(méi)有功能缺陷和數(shù)據(jù)丟失問(wèn)題發(fā)生。因?yàn)樵摐y(cè)試結(jié)果是數(shù)據(jù)正在收發(fā)的過(guò)程中獲取的,所以收發(fā)包字節(jié)速率(Tx Bytes Rates 和Tx Bytes Rates)的差異是正常的。
本文基于網(wǎng)絡(luò)平臺(tái)國(guó)產(chǎn)FPGA設(shè)計(jì)的工程實(shí)踐,針對(duì)高頻率情況下的FPGA 設(shè)計(jì),給出了IOB 應(yīng)用、控制信號(hào)跨時(shí)鐘域同步、并行信號(hào)跨時(shí)鐘域同步、異步fifo 時(shí)鐘域同步等方面的設(shè)計(jì)方法,并對(duì)設(shè)計(jì)結(jié)果做了測(cè)試驗(yàn)證,符合設(shè)計(jì)預(yù)期。這些方法對(duì)于網(wǎng)絡(luò)通信設(shè)備的FPGA 設(shè)計(jì)和問(wèn)題排查都有一定的借鑒意義。后續(xù)的工作需要考慮在提高TCAM 芯片工作頻率的情況下,實(shí)現(xiàn)網(wǎng)絡(luò)平臺(tái)更大的數(shù)據(jù)吞吐量,以及這種情況下的FPGA 實(shí)現(xiàn)方法。