李富國,寧 凱,徐安俊
(長春大學 機械與車輛工程學院,長春130022)
進入21 世紀,集成電路技術飛速發展,推動了FPGA 的發展。FPGA 集成度高,編程靈活,適用于較大規模的電路設計中,其設計開發周期短,制造成本低,質量穩定,被廣泛運用在產品生產中[1-4]。 隨著以FPGA 為核心的產品不斷上線, 產品的質量問題又成為人們關注的焦點, 而所設計的基于FPGA 的硬件測試電路正是在這一背景下應運而生。 該測試電路可用于實現對各類產品設計過程中可能會出現的問題進行及時調試、檢測,從而大大提高生產效率,同時還能滿足對不同使用環境的需要,在當下具有廣闊的應用前景。
整個硬件測試過程在上位機(PC)控制下完成,并由FPGA 實現邏輯控制測試。 硬件測試電路主要包括觸發器、數碼管、計數器和寄存器等元器件。 其中,觸發器按照觸發方式的不同進行區分,分為脈沖觸發、電平觸發、以及邊沿觸發,且其可以按照控制方式或者邏輯功能的不同來進行分類[5-6];數碼管廣泛應用于日常的生產和生活中,其分類主要依據其段數;計數器可以用來分頻、定時、對時鐘脈沖計數、數字運算等,是一種在時序邏輯電路中應用十分廣泛的元器件[7];寄存器是集成電路中非常重要的一種存儲單元,可用來暫存指令、數據和地址[8]。
經過對比分析過往硬件電路測試平臺的優缺,結合自身設計要求并依據設計目標,制定了總體設計方案。 硬件測試電路總體設計流程如圖1 所示。

圖1 硬件測試電路總體設計流程Fig.1 Hardware test circuit general design flow chart
硬件測試電路設計以FPGA 為核心, 其硬件部分主要由4 個模塊組成:鎖相環模塊、計數器模塊、防抖電路設計、譯碼器模塊。
鎖相環即鎖定相位的環路,FPGA 中自帶高性能的嵌入式模擬鎖相環,其最突出的優點就是能夠輸出多個同步倍頻或分頻的片內時鐘[9-10]。該片內時鐘可大大降低時鐘延時對輸入輸出信號的影響,避免對其它時鐘信號產生干擾;還可以通過改善時鐘建立時間和保持時間, 以保證系統穩定工作。 Cyclone/Ⅱ/Ⅲ系列和Statix/Ⅱ/Ⅲ/Ⅳ系列器件中的鎖相環能直接輸入所需要輸出的頻率,并提供任意相移和輸出信號占空比。 鎖相環模塊如圖2 所示。

圖2 鎖相環模塊Fig.2 Phase-locked loop module
計數器模塊包括2 個計數器模塊,其工作原理一致。 在此以CNT16 模塊為例,介紹計數器模塊的工作原理。 當輸入信號CLK 有效時, 計數器模塊CNT16 進行加法計數。輸入信號CLK 定義為標準邏輯位STD_LOGIC,輸出信號DOUT 的數據類型明確定義為32 位標準邏輯位矢量STD_LOGIC_VECTOR(31 DOWNTO 0)。 計數器內部先定義1 個信號SIGNAL Q1。Q1 為內部的信號,流動不受方向限制,Q1 不斷累加。 當滿足要求時,將Q1 的值向端口DOUT 輸出。 計數器模塊如圖3 所示。

圖3 計數器模塊Fig.3 Counter module
防抖電路由4 個D 觸發器和1 個4 輸入與門構成。4 個D 觸發器的時鐘輸入端都連在一起,工作時與時鐘同步工作,輸入信號以移位串行方式向前傳遞。 按鍵K1 的信號經過非門后成為輸入信號,ck是防抖電路自身的工作時鐘。 該電路“濾波”功能的關鍵在于:當信號被串入電路后,能在輸出端輸出脈沖信號的條件是,必須在4 個D 觸發器的輸出端Q 都同時為1,從而4 輸入與門才能輸出高電平。 正因為干擾抖動信號都是一群寬度狹窄的隨機信號,在串入時,不可能使與門的輸出都為1,因此只有正常信號才有足夠的寬度通過此電路,從而起到“濾波”的功能。 防抖電路如圖4 所示。
譯碼模塊設有七段數碼管,并采用動態顯示方式。 其中,輸出信號LED7S 的7 位分別接數碼管的7 個段,高位在左,低位在右。 ,模塊的輸入信號為4位,輸出信號為7 位,最終決定著數碼管上顯示的結果。

圖4 防抖電路Fig.4 Stabilization circuit
例如,當LED7S 輸出為“1001111”時,數碼管的7 個段為g,f,e,d,c,b,a 分別接于1,0,0,1,1,1,1;接有高電平的段發亮,于是數碼管顯示“3”。 與此同時,從CNT16 輸出的32 位數據中任取8 位,這8 位信號作為輸入信號用來測試數碼管A 和B。 由于數碼管B 在外部電路已經設置了16 進制7 段譯碼器,所以當信號輸入時可直接顯示計數值。 譯碼模塊如圖5 所示。

圖5 譯碼模塊Fig.5 Decoding module
利用ALTERA 綜合布線工具Quartus Ⅱ,對各主要功能模塊以及整體電路進行編譯、仿真測試,并使用EP3C5E144C8 芯片對硬件測試電路進行調試。
鎖相環模塊仿真首先對鎖相環模塊進行仿真。 模塊參數設置如下:時序仿真開始時間為0 ps,結束時間為1.0 ms,輸入激勵inclk0 周期為10.0 ns。單擊“start simulation”按鈕,即可得到輸出波形。 仿真起始延遲時間為559.301 ns, 程序運行過程中無錯誤警告,仿真成功。 其仿真結果如圖6 所示。

圖6 鎖相環模塊仿真Fig.6 PLL module simulation
計數器模塊仿真對計數器模塊進行仿真,模塊參數設置如下:時序仿真開始時間為0 ps,結束時間為1.0 μs,輸入激勵CLK 周期為10.0 ns。單擊“start simulation”按鈕,即可得到輸出DOUT 的波形圖(用十六進制表示)。 仿真起始延遲時間為13.526 ns,程序運行過程中無錯誤警告,仿真成功。 其仿真結果如圖7 所示。

圖7 計數器模塊仿真Fig.7 Counter module simulation
譯碼器模塊仿真對譯碼器模塊進行仿真,模塊參數設置如下:時序仿真開始時間為0 ps,結束時間為50.0 μs,輸入激勵A 周期為10.0 ns。單擊“start simulation”按鈕,即可得到輸出LED7S 的波形圖(用十六進制表示)。 仿真起始延遲時間為109.363 ns,程序運行過程中無錯誤警告,仿真成功。 其仿真結果如圖8 所示。

圖8 譯碼器模塊仿真Fig.8 Decoding module simulation
整體電路仿真整體電路仿真模塊參數設置如下:時序仿真開始時間為0 ps,結束時間為1.0 ms,輸入激勵CLK 周期為50.0 ns,按鍵K8 隨機選擇一段時間并置為1。 單擊“start simulation”按鈕,即可得到輸出CKK,L,LA,LED,PP 以及spk 的波形圖。仿真起始延遲時間為10.175 μs,程序運行過程中無錯誤警告,仿真成功。 其仿真結果如圖9 所示。

圖9 整體電路仿真Fig.9 Overall circuit simulation
仿真測試后,還需要進行硬件測試以進一步驗證系統性能。 引腳鎖定并下載程序后方可進行硬件電路測試。 硬件電路測試有2 個輸入信號, 一個是內部時鐘信號,另一個是通過外部手動按壓K1 按鍵產生的信號。 其中內部時鐘信號頻率為20 MHz,通過鎖相環來減少時鐘延時、時鐘變形和片外干擾,改善時鐘的建立時間和保持時間。 隨著內部時鐘不斷輸入信號,計數器持續計數,當計數器滿足要求時,開發板最上面一排的LED 小燈便會依次亮起。 并且,2 個并排的數碼管會顯示數字, 左邊的數碼管顯示數據高4位,右邊的數碼管顯示數據低4 位,同時蜂鳴器也會響起。 接著,從右到左依次按動按鍵讓最下方的數碼管顯示數字。 由于非門的作用,當不按動按鍵時小數點是亮著的;反之,小數點不亮。 PCB 板測試如圖10 所示。

圖10 PCB 板測試Fig.10 Test pattern of PCB board
通過硬件測試電路原理、總體方案設計、硬件模塊化設計、仿真測試以及PCB 板實測,完成了基于FPGA 的硬件測試電路的設計, 實現了設計的預期功能,仿真中的實現時間達到了ns 級別。此外,所設計操作界面簡單,操作易學易用,具有良好的抗干擾性能,能夠適應不同的生產環境,為順利完成生產任務提供及時的檢測、調試功能,在市場推廣中備受青睞。