摘要:利用現場可編程門陣列 FPGA實現單片機的外設接口電路可以簡化單片機系統的硬件電路,提高系統的集成度、可靠性和系統設計的靈活性。本文介紹了基于 FPGA的單片機外設接口電路的基本設計方法,分別給出了各個功能模塊的設計思路和實現方法。所有功能的實現全部采用 VHDL進行描述。 0 引言 單片機具有性價比高、功能靈活、易于人機對話、數據處理能力強等特點。單片機應用系統通常由鍵盤、顯示器、通信接口、存儲器、A/D、D/A電路等部分組成。傳統的單片機系統經常要用標準的邏輯電路或專用的接口芯片來組成外圍電路,如地址譯碼、I/O擴展等功能通常由標準的TTL/COMS邏輯電路或各種專用接口芯片實現,這樣就會使系統的芯片數增多,接線復雜,從而使電路板面積增大、可靠性和 EMI性能減低,難以實現設計的小型化、集成化和高可靠性。而可編程門陣列FPGA的LCA結構和它豐富的內部資源可以用來設計各種組合邏輯和時序邏輯電路,因此使用FPGA設計單片機的外圍電路能夠大大簡化系統硬件結構,使系統的設計、修改和擴展都變的十分靈活方便。本文通過對FPGA器件進行功能設計,取代傳統單片機系統中外設接口用的標準邏輯電路和專用的接口芯片,使單片機系統的硬件電路大大簡化并提高其可靠性。當需要改變系統性能時,可以通過對FPGA重新編程而不用改變硬件電路,提高了系統設計的靈活性。 1 系統設計方案 根據一般單片機系統設計的需要,本文所設計的系統具有以下幾個功能模塊,如圖1所示。 1 )通用邏輯模塊:根據具體的情況產生各種不同的邏輯電路及控制信號,代替傳統的標準邏輯芯片。本文將其設計為擴展存儲器時用到的地址鎖存器。 2 )鍵盤接口模塊:代替傳統的單片機與鍵盤的接口電路,用 FPGA編程完成消除抖動及按鍵識別功能。本文將其設計為4×4掃描鍵盤的通用接口。 3 )顯示接口模塊:代替傳統的單片機與顯示器的接口電路,用 FPGA編程完成譯碼、掃描等功能。本文將其設計為4位七段動態 LED接口。 1 )串并行接口模塊:實現單片機與其外設的串行或并行數據通信。本文將其設計為串行通信接口模塊。 2 )其他擴展模塊:實現單片機的一些其他常用功能,如 PWM驅動、A/D、D/A轉換的控制等。 本設計所采用的FPGA器件是 ALTERA公司的Cyclone-TM系列芯片 EP1C6Q240C8,它具有5980個邏輯單元, 92160個比特的嵌入 RAM。系統開發工具為硬件描述語言VHDL,開發平臺為Quartus Ⅱ。 2 系統模塊實現 2.1 通用邏輯模塊 FPGA可以設計成各種組合邏輯和時序邏輯電路,完成鎖存、三態輸出、多路選擇、編譯碼、計數、寄存等功能。在實際應用中可以根據需要選擇相應的功能模塊組成符合設計要求的邏輯功能。 本系統中設計的為擴展存儲器時用的地址鎖存器(功能與帶三態緩沖輸出的8D鎖存器 74LS373相似),其 VHDL描述為: process(oe,enable,d) begin if e='1' then qend process; 其中oe為三態門的使能信號,當 oe為低電平時三態門處于導通狀態,允許q輸出到外部,當 oe為高電平時三態門處于斷開狀態,輸出處于浮空狀態; enable為鎖存控制信號,當做鎖存器用時,應使oe為低電平,這時,當 enable為高電平時,鎖存器輸出狀態與輸入狀態相同,當enable從高電平返回到低電平(即下降沿)時,輸出不變,即輸入端的數據鎖入鎖存器中。 2.2 鍵盤接口模塊鍵盤是單片機應用系統中一個很重要的部件,它能實現向系統輸入數據、傳送命令等功 能,是人工干預系統工作的重要手段。本文所設計的鍵盤接口電路框圖如圖2所示,由分頻電路、鍵盤掃描計數器電路、鍵盤按鍵檢測電路、按鍵抖動消除電路和鍵盤編碼電路等組成。 其中clock為時鐘脈沖, col為鍵盤的列輸入,row為鍵盤的行輸出,scan_f為掃描頻率, key_valid為按鍵確定信號,butt_code為按鍵值。首先,將外部時鐘信號分頻為適合鍵盤的掃描頻率;計數器的計數值輸出到按鍵檢測電路,檢測使用者是否按下鍵盤,同時輸出到鍵盤編碼電路對鍵盤數值編碼;當使用者按下鍵盤時,按鍵檢測電路的 key_pressed將為0,并輸出到計數器使計數停止,同時抖動消除電路在確認使用者正確按鍵后,輸出按鍵確定信號。 2.3 顯示接口模塊 顯示功能是單片機應用系統中實現人機對話的基本功能之一,用戶通過靈活的顯示方式方便的了解系統的工作情況。在簡單的應用系統中常用LED數碼管或LCD顯示器顯示數據或工作狀態。本文設計的為一個4位七段動態 LED數碼管顯示接口電路,電路框圖如圖3所示,它由BCD多路選擇器、BCD對應七段顯示器編碼電路、計數譯碼電路和七段顯示器掃描電路等組成。其中clk為同步時鐘脈沖信號, flk_ena為掃描時鐘脈沖信號, bcd_data為輸入的BCD碼,ledseg為七段顯示器數值輸出, ledcom為七段顯示器輸出使能。 2.4 串并行接口模塊 雖然大多數單片機都帶有通用的串行接口,但自行設計的接口意味著更大的使用靈活性,特別是FPGA的高速特性允許更高的數據傳輸速度,在實用中有重要意義。作為范例, 本文設計了基于RS232-C標準的異步串行通信接口,它主要由數據總線接口、控制邏輯、波特率發生器、發送和接收等部分組成,其功能主要包括微處理器接口,用于數據傳輸的緩沖器(Buffer)、幀產生、奇偶校驗、并轉串,用于數據接收的緩沖器、幀產生、奇偶校驗、串轉并等。 2.4.1 接收模塊 異步串行通信是逐個字符進行傳輸的,并且傳送的每一個字符格式都相同,均以一位起始位開始,中間有若干位數據位,然后是一位校驗位(可選),昀后是停止位,停止位后面是不定長度的空閑位。這樣就保證了起始位開始處一定有一個下跳沿。接收邏輯首先通過檢測數據的下降沿來檢測起始位,產生采樣時鐘,然后利用采樣時鐘來采樣串行輸入數據,在緩沖器中做移位操作,同時產生校驗位,在第 8位處比較校驗位是否正確,在第 9位處比較停止位是否為高,然后產生錯誤指示信號。本文采用狀態機進行設計,其 FSM狀態轉換圖如圖 4所示。 2.4.2 發送模塊 發送部分檢測控制信號,當有數據要發送時只要按順序依次發送 1位起始位、 5-7位數據位、一位校驗位(帶校驗時)和 1位(或 1.5位、2位)停止位即可。其 FSM狀態轉換圖如圖 5所示。 停止位發送完畢 無數據要發送發送停止位 3 結束語 將設計下載到芯片中,綜合報告顯示只消耗了FPGA很少的一部分資源。整個系統的功耗也大為降低。由于FPGA為大規模集成電路,其集成度和工作速度隨著技術進步和產品升級不斷提高,所以用FPGA實現單片機外圍接口電路可以大大改善單片機系統的性能,系統的外圍邏輯越是復雜,FPGA的潛力越能得到更好的發揮。 |