1 引言 FPGA從實(shí)現粘合邏輯逐步發(fā)展成為設計平臺的核心,在電子、通信以及航空航天等領(lǐng)域得到了廣泛應用。本人最近實(shí)現的中頻軟件無(wú)線(xiàn)電硬件平臺,就以FPGA為核心,實(shí)現上變頻、下變頻等中頻數字信號處理,并且構成A/D/A、DSP和ARM模塊之間的通信中心。這種以FPGA為核心的架構使得硬件平臺結構靈活,具有可重構性,為軟件無(wú)線(xiàn)電的各種算法分配方案提供了有力支撐。 除了和TMS320C6416之間的數據流采用EMIF接口外,FPGA的其它接口均采用UART。為了軟件開(kāi)發(fā)和移植的便利,UART設計要做到兼容ST16C550的功能。穩定可靠則是作為軟件無(wú)線(xiàn)電硬件平臺關(guān)鍵接口的基本要求?紤]到嵌入式系統的特點(diǎn),在設計中應盡量降低功耗。本文圍繞這些目標,介紹了在UART實(shí)用化設計中所遇到的一些重要問(wèn)題、解決方案以及最終結果。 2 UART及ST16C550概述 UART是廣泛使用的串行數據傳輸協(xié)議,它在收發(fā)分離的串行鏈路上進(jìn)行全雙工異步通信。發(fā)送過(guò)程接收來(lái)自數據總線(xiàn)上的并行數據,按照低位序方式并串轉換,然后根據控制寄存器的設置生成串行數據流;相應的,接收過(guò)程把串行數據流轉換成并行數據,產(chǎn)生中斷以及狀態(tài)信息,并對數據傳輸過(guò)程中的異常進(jìn)行處理。 ST16C550是廣泛使用的一款UART接口芯片,是NS16C550的改進(jìn)版本。它收發(fā)均帶有16字節的FIFO,可以通過(guò)設定波特率設置寄存器來(lái)進(jìn)行收發(fā)時(shí)鐘的分頻控制,傳輸速率從50bps到1.5Mbps。具體內容可參見(jiàn)數據手冊。 3 實(shí)用化設計的主要問(wèn)題和解決方案 3.1 框架設計 根據UART的功能和數據流特點(diǎn),系統劃分為5個(gè)模塊:時(shí)鐘生成模塊,完成時(shí)鐘分頻和時(shí)鐘分配;界面模塊,完成UART其它模塊和數據總線(xiàn)的交互;發(fā)送模塊,緩沖接收到的數據并按照設置生成串行信號;接收模塊,按照設置將接收信號串并變換并將數據送到FIFO中;Modem模塊完成與Modem信息交互和控制,功能相對簡(jiǎn)單獨立。 3.2 時(shí)鐘域的劃分 在同步電路設計中,減小時(shí)鐘數量可簡(jiǎn)化設計,提高系統的穩定性。不相關(guān)的時(shí)鐘域之間的數據傳遞不可避免的存在亞穩態(tài)問(wèn)題,帶來(lái)穩定性能的下降。時(shí)鐘速率與功耗呈線(xiàn)性關(guān)系,當工藝一定時(shí),低功耗設計要求我們降低時(shí)鐘頻率和信號翻轉次數。下面從這些設計策略和通信效率來(lái)分析不同時(shí)鐘域劃分方案。 方案一:低速時(shí)鐘方案。首先根據控制寄存器的設置對外部提供的時(shí)鐘進(jìn)行分頻,生成全局唯一的時(shí)鐘。這種方案的優(yōu)點(diǎn)是系統實(shí)現簡(jiǎn)單、面積最小、功耗最低。缺點(diǎn)也很明顯,CPU時(shí)鐘遠遠高于芯片的工作時(shí)鐘,與UART傳遞數據時(shí)將占用CPU過(guò)多的時(shí)間。 方案二:高速時(shí)鐘方案。系統直接采用外部提供的時(shí)鐘為唯一時(shí)鐘,根據控制寄存器的設置生成收發(fā)模塊的同步時(shí)鐘使能信號,來(lái)達到分頻的目的。這種方案全局只有一個(gè)時(shí)鐘,設計簡(jiǎn)單。唯一缺點(diǎn)是功耗較大。 在實(shí)際設計中,綜合考慮效率和功耗的要求,采用了兩個(gè)關(guān)聯(lián)時(shí)鐘的方案。與CPU的接口界面直接采用外部提供的最高時(shí)鐘信號,而其它模塊采用由波特率設置寄存器控制的分頻時(shí)鐘。這樣在系統中存在兩個(gè)關(guān)聯(lián)的時(shí)鐘域,設計時(shí)需要對兩個(gè)時(shí)鐘域邊界的邏輯進(jìn)行分析和處理。 3.3 時(shí)鐘分頻 同步數字電路設計中,時(shí)鐘是整個(gè)電路中最重要的信號。時(shí)鐘信號上的毛刺會(huì )引起系統的邏輯混亂,大規模的數字芯片還對時(shí)鐘歪斜(Clock skew)和負載提出了要求。為了適應這些需求,FPGA內部一般設有數量不等的全局時(shí)鐘網(wǎng)絡(luò )。 使用同步計數器或狀態(tài)機進(jìn)行時(shí)鐘分頻是一種較好的方案。在設計中計數器或狀態(tài)機應直接產(chǎn)生分頻時(shí)鐘信號,而不應該對計數器或狀態(tài)機進(jìn)行譯碼來(lái)產(chǎn)生時(shí)鐘信號,因為譯碼等組合邏輯可能給時(shí)鐘帶來(lái)毛刺,引起系統不穩定。UART當波特率設置寄存器為0或1時(shí),時(shí)鐘信號不需要分頻,故分頻電路中使用了一個(gè)多路選擇器。 3.4 異步時(shí)鐘與亞穩態(tài) UART使用獨立的時(shí)鐘信號,使得CPU與UART以及UART之間的信號都處在不同的時(shí)鐘域。為了減少時(shí)序上的沖突,跨時(shí)鐘域的數據傳遞首先需要同步處理。但由于時(shí)鐘頻率和相位的差異,就不可避免存在亞穩態(tài)問(wèn)題。所謂亞穩態(tài),是指觸發(fā)器/鎖存器的輸入信號時(shí)序不能滿(mǎn)足設置時(shí)間和保持時(shí)間的要求,將有可能使得觸發(fā)器/鎖存器的輸出沒(méi)有正確的鎖定到邏輯0或邏輯1,處在一個(gè)未知的狀態(tài),如滯留在中間狀態(tài),或者震蕩。這里以SN74ABT7819的參數為例來(lái)分析亞穩態(tài)、說(shuō)明提高系統穩定性的方法。 亞穩態(tài)滯留時(shí)間是隨機的,服從參量為?的負指數分布。T0表示器件進(jìn)入亞穩態(tài)可能性的孔徑時(shí)間。SN74ABT7819在室溫、5V電壓時(shí),t=0.30ns,T0=7ps,輸入信號建立時(shí)間TSU1=5ns,傳播延時(shí)TPD1=9ns,芯片內部觸發(fā)器建立時(shí)間以及傳播延時(shí)約TPD2+TSU2=1.3ns。設定觸發(fā)器異步輸入信號邊沿頻率FD=10MHz,芯片工作頻率即觸發(fā)器時(shí)鐘FC=50MHZ。則每個(gè)接收外界輸入信號的觸發(fā)器平均失效時(shí)間MTBF(the Mean Time Between Failures)為: 系統中有多路并行信號跨越不同的時(shí)鐘域,這樣系統總的MTBF會(huì )很小,將以小時(shí)或分鐘計?梢(jiàn)單觸發(fā)器同步電路不能滿(mǎn)足穩定性的要求。為了減小亞穩態(tài)的影響,將亞穩態(tài)控制在時(shí)鐘域邊界,可以采用傳統的握手通訊方式[4]或者雙觸發(fā)器同步電路,前一方案在通信速率較低時(shí)有效,后者則在實(shí)踐中廣泛使用,這里僅對后者進(jìn)一步說(shuō)明。三級觸發(fā)器同步電路一般是不必要的。 異步輸入經(jīng)過(guò)兩級觸發(fā)器同步生成同步輸出。即使第一個(gè)觸發(fā)器輸出存在亞穩態(tài),經(jīng)過(guò)一個(gè)時(shí)鐘周期后,第二個(gè)觸發(fā)器輸出仍處于亞穩態(tài)的概率非常小,此電路的平均失效時(shí)間MTBF已經(jīng)是一個(gè)無(wú)限長(cháng)的時(shí)間: Xilinx未給出Virtex II系列的亞穩態(tài)描述參數,它能工作在更高的時(shí)鐘頻率上,亞穩態(tài)的參數會(huì )比SN74ABT7819優(yōu)秀。但以上分析和設計規則依然適用。 3.5 同步FIFO的設計 設計中根據收發(fā)模塊對狀態(tài)標志要求的不同,分別進(jìn)行同步FIFO的設計以節約邏輯資源。其中,發(fā)送模塊的FIFO只需要全空/全滿(mǎn)標志,采用地址相等不相等的比較邏輯和地址繞回指示位來(lái)產(chǎn)生。具體過(guò)程為:地址隨著(zhù)相應的操作遞增,寫(xiě)指針由內存的最后位置返回到初始位置時(shí)將地址繞回指示位置1,讀指針?lè )祷貢r(shí)則置0。因此,當讀寫(xiě)指針地址相同時(shí),若地址繞回指示位為0,則讀寫(xiě)指針經(jīng)歷了相同次數的循環(huán)移動(dòng), FIFO處于空狀態(tài)(圖4a);若地址繞回指示位為1,則寫(xiě)指針比讀指針多循環(huán)一次,FIFO處于滿(mǎn)狀態(tài)。 接收模塊需要在FIFO中數據量達到一個(gè)設定的數值時(shí)產(chǎn)生一個(gè)中斷,由于設定的數值是任意的,這樣空/滿(mǎn)標記的產(chǎn)生必須使用減法器,消耗的邏輯資源稍大。綜合后的邏輯資源使用情況也說(shuō)明了這點(diǎn)。 3.6 鎖存器的使用 使電路復雜化的常見(jiàn)原因之一是設計中存在許多不必要的鎖存器,使得電路復雜,工作速度降低,系統可靠性變差。綜合時(shí)應該仔細檢查是否合理使用了鎖存器。由于UART接口的功能特點(diǎn),設計中共使用了4個(gè)鎖存器,用來(lái)鎖存A(2:0)和CSn信號。當UART和CPU總線(xiàn)處在同一個(gè)芯片中時(shí),這些鎖存器可以用寄存器取代。 4 綜合結果 整個(gè)設計以VHDL語(yǔ)言來(lái)實(shí)現。在SYNOPSYS Design Compiler中使用LSI_10K庫,設定系統工作頻率為25MHz,其他使用預定的選項,綜合后最大路徑延時(shí)為10.66ns,預期工作頻率大于90MHz。資源使用情況如表1所示。 在XC2V1000-6芯片中,以Synplify為綜合工具,則使用了188個(gè)寄存器,占用了1%的邏輯資源。最大路徑延遲預期9.043ns,預期工作頻率110MHz。 5 仿真與驗證 設計中對UART各模塊分別撰寫(xiě)了相應的測試程序,驗證了各模塊的正確性。然后把這些模塊裝配在一起,在系統級上再進(jìn)行了接收、發(fā)送和中斷功能的門(mén)級驗證。這種模塊化分層次的驗證過(guò)程在調試中有效地縮小了查找錯誤的范圍,提高了調試效率并保證了代碼的健壯性。 6 結束語(yǔ) 穩定性和低功耗是嵌入式通信系統的重要設計目標。實(shí)現需要的功能有時(shí)并不困難,難的是提高系統穩定性和有效降低功耗。時(shí)鐘的規劃和亞穩態(tài)的處理與這兩個(gè)目標有著(zhù)非常密切的關(guān)系,是實(shí)用化設計關(guān)注的重點(diǎn)之一。通過(guò)穩定性、功耗與資源等方面的綜合考慮,該設計在所實(shí)現的軟件無(wú)線(xiàn)電硬件平臺上得到了成功應用,達到了實(shí)用化設計的目標。 |