陸欣云,陳 巍,張 軍
(南京工程學院 創新學院,江蘇 南京 211167)
隨著LED技術的不斷發展,LED顯示屏以其可靠性高、使用壽命長、亮度高、色彩豐富、大小定制方便等優越性被廣泛應用于車站、商場、銀行、醫院等場所。由于LED顯示屏的形狀和應用場合的不同使它的種類極其豐富,因此對不同屏體的控制方式會有廣泛而深入的設計與研究需求。FPGA是高速數字系統設計與實現的一大利器,以其為核心實現的點陣控制器具有數據處理量大、實時性高、控制更加靈活、運行更加穩定等優點[1]。本文介紹了一種基于FPGA器件以FSM方式實現的控制方法,所控制的LED顯示屏可應用于銀行和醫院的叫號系統中。
LED點陣系統主要由LED點陣模塊及其驅動電路、基于FPGA的LED點陣控制器、PC機監控終端及應用軟件三大部分構成。
圖1是一個LED點陣系統的總體結構,其中控制器負責接收、轉換和處理點陣顯示數據,并將顯示數據以特定的時序傳輸給驅動電路,是LED點陣系統的核心部分[2]。它的性能直接決定了顯示屏的顯示效果以及整個系統的穩定性。

圖1 LED點陣系統的總體結構Fig.1 Gross structure of the LED matrix system
本控制器將完成一個分辨率為128×64的雙基色LED顯示屏的控制,其中單元板為64×32顯示像素,1/16掃描方式。設計可以完成4行16×16的漢字或16×8的字符的顯示任務。控制器整體采用頂層原理圖輸入設計方式[3]。根據控制器所應完成的功能將由FPGA完成的部分劃分成串口通信模塊、雙口RAM模塊、顯示數據處理與傳輸模塊、工作時鐘發生器模塊等四大模塊。雙口RAM模塊由可參數化宏功能模塊定制而成,其他模塊以Verilog語言描述內部邏輯。FPGA內部結構及模塊之間的連接關系如圖1所示。FPGA內部頂層設計原理圖如圖2所示。

圖2 FPGA內部頂層設計原理圖Fig.2 Top-level schematic of internal FPGA
控制器中的串口通信模塊負責接收PC機發送給它的速率為9600bps的顯示數據。輸入信號包括串行數據輸入端rs232_rx,50MHz系統時鐘clk,復位信號rst。輸出信號有串轉并之后的8位字節數據rx_data[7..0]以及存儲地址數據addr_ram[7..0],模塊根據接收到的控制字節將接收到的數據在不同的數據端口輸出以提供給相應的雙口RAM模塊[4]。
串口通信模塊通過接收波特率時鐘位clk_bps_r在高電平期間來讀取串行數據,因此clk_bps_r必須與接收到的串行數據速率同步,設計中在一位串行數據的中間時刻產生一個時鐘周期的clk_bps_r的高電平用來讀取這一位數據以確保數據在穩定期間的可靠接收。
通過接收位數計數器rx_bit_cnt來指示一個字節串行數據的接收進度,當串口通信參數設置為8位數據位、1位停止位、無奇偶校驗位的情況時,當rx_bit_cnt變為10之后的下一個clk脈沖,一個字節數據接收已結束,若該字節是一幀數據的第一個字節,它屬于這幀數據的控制字節,它決定了后續顯示數據的存儲位置或顯示方式的要求。對于4個RAM模塊通過標志位flag從1到4變化來決定將數據存入RAM1~RAM4.串口接收的一幀數據包括第一個字節的控制字節以及后續256字節的顯示數據,串口接收每一個字節的信號時序如圖3所示。

圖3 串口接收每一個字節的信號時序Fig.3 Timing diagram of serial port receive a Byte data
接收波特率啟動位bps_start_r在高電平時期表示串口正處于接收階段,它的下降沿意味著一個字節數據接收的結束,因此將它的下降沿取反作為寫RAM的時鐘信號wclk。
在控制器中,運用可參數化宏功能模塊定制了4個容量分別為256個字節雙口RAM模塊用來存儲從串口通信模塊中接收到的點陣字模數據,每一個RAM模塊可以提供點陣一行漢字顯示的字模數據,這種對應點陣屏的不同區域配置不同的RAM模塊給控制的靈活性帶來了很大的方便。將每一個顯示區域稱為一個顯示塊,4個RAM與對應的顯示塊的分配劃分情況如圖4所示。雙口RAM器件擁有兩套獨立的數據和時鐘端口,可以同時進行讀寫操作[5],雙口RAM器件一方面在存儲串口通信模塊接收的數據,另一方面同時提供數據給數據處理與傳輸模塊讀取。

圖4 雙口RAM模塊與點陣顯示器區域分配圖Fig.4 Dual-port RAM modules and LED matrix display area allocation diagram
模塊中data[7..0]為8位的數據輸入端口,wraddress[7..0]為8位的地址數據輸入端口,wren為寫使能端,rdaddress[7..0]為8位的讀數據地址端口,wrclock為寫時鐘信號,rdclock為讀時鐘信號。q[7..0]為8位的數據輸出端口。
顯示數據處理與傳輸模塊是控制器的核心模塊,它一方面讀取雙口RAM的顯示數據,另一方面要產生直接控制點陣屏的時序信號。
模塊中輸入信號包括讀取RAM的數據輸入端data1[7..0]~ data4[7..0],工作時鐘輸入端clk1以及復位信號輸入端Rst,輸出信號包括送給點陣屏四行紅色數據R1~R4,四行綠色數據G1~G4,上半屏的行驅動碼 DCBA[3..0],串行移位時鐘信號SH,輸出數據鎖存信號ST,顯示數據輸出使能信號OE,與其相并列的還有下半屏的行驅動碼 DCBA1[3..0],SH1、ST1、OE1,可見點陣屏上半部分和下半部分是并行獨立運行的。
由于LED顯示屏是一個多掃描線系統,在多個掃描線選中對應區域的某一行時,可以通過FPGA將各行顯示數據同時串行送出,而每一行送出的串行數據的工作時序是一致的,每一個掃描周期的時序非常適合用有限狀態機(FSM)來描述[1]。
在用狀態機描述某一行所有列數據輸入信號時序時,可以根據點陣屏所需輸入控制信號時序來對狀態機進行狀態編碼,即采取直接輸出型狀態編碼方式,將狀態編碼的每一位直接作為一個控制信號,因此可以根據驅動電路信號時序要求列出控制信號狀態編碼表如表1。

表1 控制信號狀態編碼表Tab.1 State coding list of the control signal
狀態位直接輸出型編碼方式的狀態機的優點是輸出速度快,不大可能出現毛刺現象,描述狀態轉換過程清晰。缺點是可能會比其他方式耗費多一些的邏輯單元[6]。由表1可見完成一場數據的傳送由11個狀態構成,將系統時鐘分頻后得到1的工作時鐘clk1提供給狀態機作為主控時鐘,當進入某一行列數據傳送的狀態機工作過程是一個時間長度確定的循環過程。每一輪的狀態循環過程通過clk2時鐘的上升沿作為一個起始信號,同時也是行掃描信號ScanCode轉換的觸發信號,而clk2的周期作為每一行的掃描時間。在狀態機的一次循環過程中起始和結束狀態都處于idle狀態,若所預設的行掃描時間大于一行數據的傳送時間,數據傳送結束后就會有一段時間的idle狀態。用clk2的高電平表示數據處于傳輸過程中,低電平表示一行數據傳輸結束,那么idle狀態的下一個次態取決于clk2的邏輯電平。這樣就可以確保狀態之間的正常轉換,避免出現在行掃描信號未轉換之前就提前傳送了下一行的數據而造成時序混亂。這種狀態轉換機制可以方便調節掃描周期的長短和傳送數據量的變化[7]。
一行字模數據的每一個字節的第一位數據傳送是通過idle~S3狀態來完成,后續的7位通過S4~S7的7次循環來完成。一個字節傳送結束后S7狀態會根據是否需要傳送下一個字節選擇轉移到idle狀態或S8狀態,根據一行列數據所需要傳送的字節數來決定從S7到idle的循環次數。設計中用到的點陣屏一行有128個LED,因此大循環需要有16次。計數器變量byte_cnt計到最大值15時說明列數據已傳送結束。在隨后的S8~S10狀態是一段消隱區,通過計數器s_cnt來控制消隱周期的長短,從而實現對像點的灰度控制,并且控制模塊在這一段送出鎖存信號將前端送出的數據鎖存到列驅動芯片的管腳上[8]。

圖5 狀態機的狀態轉移圖Fig.5 State transition diagram of the state machine
整個狀態機的狀態轉移圖如圖5所示。
點陣控制器讀取RAM一行列數據的第一個字節工作時序如圖6(a)所示,以clk2的上升沿到來作為一行掃描的起始信號,行掃描碼ScanCode會加1,讀RAM的地址信號Raddress[7∶0]={ScanCode[3∶0],byte_cnt[3∶0]}也隨之改變,即準備好了讀取RAM的地址信號。接著在S1狀態,Load裝載信號的下降沿就會到來,Load信號通過取反作為讀RAM的時鐘信號,4個RAM的數據輸出口即刻就有對應地址的數據輸出到相應的data1至data4端口。在隨后的S2狀態,clk3上升沿的來臨將data1至data4端口的數據裝載到寄存器reg1至reg4。根據狀態機的設計,clk3上升沿的產生總要比Load的下降沿到來延遲一個狀態周期,這樣,讀時鐘信號會比地址信號延遲一個狀態周期,而數據裝載信號又比數據從端口輸出延遲一個狀態周期,因此電路不會產生競爭冒險現象[5]。
點陣控制器讀取RAM一行列數據的后15個字節數據的其中一個工作時序如圖6(b)所示。在一行列數據后續的15個字節讀取過程中,當上一個字節傳送至最后一位的S4~S7狀態過程中,在進入S7狀態時,由于b_cnt已計數到7,但整個一行列數據還未傳送結束,即byte_cnt!=15;因此S7的下一個狀態會進入idle,同時byte_cnt會加1,會導致讀RAM的地址Raddress隨之改變。在S7之后的idle狀態clk3會歸零,在隨后的S1狀態會出現Load的下降沿將對應地址的數據從RAM數據端口輸出,接著在S2狀態出現clk3的上升沿,將RAM數據裝載到相應的寄存器[9]。

圖6 讀RAM數據的工作時序圖Fig.6 Read operation timing diagram of the RAM
工作時鐘發生器模塊主要是對系統時鐘進行分頻得到給顯示數據處理與傳輸模塊的工作時鐘clk1,系統時鐘的頻率是50MHz,顯示數據處理與傳輸模塊的工作時鐘有1MHz已足以滿足控制器的速度要求,因此設計中對系統時鐘進行50分頻得到了1MHz的工作時鐘clk1提供給顯示數據處理與傳輸模塊[10]。
在Quartus II集成開發平臺上可以對所設計的電路進行功能仿真,譯碼器的四位輸入信號由行驅動碼DCBA[3..0]提供,而行掃描信號Scan-Code[3..0]負責在行驅動碼送出之前先將下一行將要顯示的列數據送到列驅動芯片的寄存器內,直到一行數據傳送結束后由ST信號的上升沿將列驅動芯片寄存器內的數據鎖存到管腳上輸出。一行點陣掃描顯示的仿真波形前端部分如圖7所示。從圖中可以看到基準線標在clk2上升沿即數據傳輸時刻的開始,行掃描信號由0001轉換到0010,控制器進入第三行列數據的傳送過程,此時送給點陣屏的行驅動碼DCBA還停留在0001階段。在下一行列數據未傳送結束鎖存到管腳輸出之前,點陣屏應保持上一行的選通狀態[11]。
仿真波形后端部分如圖8所示,基準線標在clk2下降沿即數據傳輸結束的位置,隨后信號OE跳變為高電平進入顯示數據的消隱時期,隨后的ST上升沿信號將74HC595移位寄存器中的數據鎖存到引腳上,待數據穩定后消隱結束,立刻啟動行驅動碼DCBA轉成0010,將剛剛得到的數據在下一行顯示。

圖7 一行掃描的狀態轉換仿真波形前端部分Fig.7 Front part local magnify simulation waveforms

圖8 一行掃描的狀態轉換仿真波形后端部分Fig.8 End part local magnify simulation waveforms
LED點陣控制器總體工作仿真波形如圖9所示。

圖9 LED點陣控制器總體工作仿真波形Fig.9 Global simulation waveforms of the LED matrix controller
從時序波形可以看出滿足設計要求。在Quartus II 9.1環境下采用 Altera公司 Cyclone II系列的FPGA芯片EP2C5T144C8N進行綜合驗證,控制器能可靠地實現文字和位圖的顯示功能,通過一幀數據的控制字節來控制不同的顯示模式以實現文字或位圖的移動變換顯示。
LED點陣系統有著廣泛的應用領域,在其應用的早期階段往往采用單片機對其控制。隨著LED點陣技術的不斷發展,大尺寸全彩同步LED顯示屏已經應用于我們的生活,對于這種多掃描線、大數據量轉換處理的場合使用FPGA器件無疑會帶來很大的優勢。本文根據不同應用場合對LED顯示屏的需求,提出了基于FPGA以有限狀態機的設計方法來構建的點陣控制器對不同的顯示區域配置獨立的雙口RAM,因此能方便通過配置RAM的容量與數量來實現控制不同尺寸的屏體。控制器對消隱區周期計數器的調節能方便調節像點的不同灰度。控制器的設計結構簡單、控制邏輯清晰、可擴展性強。在很多場合有一定的實用價值。
[1]靳梔,鄔芝權,李騏,等.基于51系列單片機的LED顯示屏開發技術[M].北京:北京航空航天大學出版社,2009:223-339.Jin W,Wu Z Q,Li Q,et al.LED Display Development Technique based on 51 MCU [M].Beijing:Beihang University Press,2009.(in Chinese)
[2]郭寶增,鄧淳苗.基于FPGA的LED顯示屏控制系統設計[J].液晶與顯示.2010,25(3):424-428.Guo B Z,Deng C M.Design of LED display control system based on FPGA [J].Chinese Journal of Liquid Crystals and Displays,2010,25(3):424-428.(in Chinese)
[3]郭利文,鄧月明.CPLD/FPGA設計與應用高級教程[M].北京:北京航空航天大學出版社,2011:89-119.Guo L W,Deng Y M.Design and Application of CPLD/FPGA Advanced Course [M].Beijing:Beihang University Press,2011:89-119.(in Chinese)
[4]Boris R.LED matrix control system with Field Programmable Gate Arrays:United States,US 6,489,937B1[P].2002-12-03.
[5]Qin S H,Li H H.The research of LED display screen based on embedded technology and FPGA technology[C].2010 International Conference on Electrical and Control Engineering,2010:2411-2413.
[6]吳繼華,蔡海寧,王誠.Altera FPGA/CPLD設計 [M].2版.北京:人民郵電出版社,2011:69-74.Wu J H,Cai H N,Wang C.Design of Altera FPGA/CPLD [M].2nd Ed.Beijing:People's Telecom Publishing House,2011.(in Chinese)
[7]向健勇,戚勇,茍超.分時驅動式LED顯示屏圖像串擾的解決方法[J].液晶與顯示,2013,28(3):398-402.Xiang J Y,Qie Y,Gou C.Solution of image crosstalk time-sharing driver LED display [J].Chinese Journal of Liquid Crystals and Displays,2013,28 (3):398-402.(in Chinese)
[8]孫偉,龔兆崗,楊忠根.基于 NiosⅡ的LED顯示屏控制系統 [J].上海海事大學學報,2005,26(2):74-77.Sun W,Gong Z G,Yang Z G.LED display control system based on Nios II[J].Journal of Shanghai Maritime University,2005,26(2):74-77.(in Chinese)
[9]張齊,鄭金輝,李登,等.基于FPGA的LED顯示屏逐點檢測系統的設計與實現[J].液晶與顯示.2008,23(5):605-610.Zhang Q,Zheng J H,Li D,et al.Design and implementation of LED display point-by-point detection system based on FPGA [J].Chinese Journal of Liquid Crystals and Displays,2008,23(5):605-610.(in Chinese)
[10]郝亞茹,王瑞光,陳宇,等.基于高效動態內存的LED顯示系統設計[J].液晶與顯示,2008,23(5):582-588.Hao Y R,Wang R G,Chen Y,et al.Design of LED display system based on efficient dynamic memory[J].Chinese Journal of Liquid Crystals and Displays,2008,23(5):582-588.(in Chinese)
[11]吳永,涂用軍.基于移動數據的LED顯示屏設計與仿真[J].電子技術應用,2009,35(11):22-25.Wu Y,Tu Y J.Design and simulation of LED display based on mobile data[J].Application of Electronic Technique,2009,35(11):22-25.(in Chinese)