《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的串行通信控制系統(tǒng)的設(shè)計(jì)
基于FPGA的串行通信控制系統(tǒng)的設(shè)計(jì)
來源:微型機(jī)與應(yīng)用2011年第5期
王媛媛,,劉樹林,,劉寧莊,童 軍
(西安科技大學(xué) 電氣與控制工程學(xué)院,,陜西 西安 710054)
摘要: 在Altera Cyclone II平臺上采用“自頂向下”的模塊化設(shè)計(jì)思想及VHDL硬件描述語言,設(shè)計(jì)了串行通信控制系統(tǒng),。在Quartus II軟件上編譯,、仿真后下載到FPGA芯片EP2C5Q208上,進(jìn)行在線編程調(diào)試,,實(shí)現(xiàn)了串行通信控制功能,。基于FPGA的系統(tǒng)設(shè)計(jì)調(diào)試維護(hù)方便,、可靠性高,,而且設(shè)計(jì)具有靈活性,可以方便地進(jìn)行擴(kuò)展和移植,。
Abstract:
Key words :

摘  要: 在Altera Cyclone II平臺上采用“自頂向下”的模塊化設(shè)計(jì)思想及VHDL硬件描述語言,,設(shè)計(jì)了串行通信控制系統(tǒng)。在Quartus II軟件上編譯,、仿真后下載到FPGA芯片EP2C5Q208上,,進(jìn)行在線編程調(diào)試,實(shí)現(xiàn)了串行通信控制功能,?;贔PGA的系統(tǒng)設(shè)計(jì)調(diào)試維護(hù)方便、可靠性高,,而且設(shè)計(jì)具有靈活性,,可以方便地進(jìn)行擴(kuò)展和移植。
關(guān)鍵詞: FPGA,;通信控制系統(tǒng),;模塊化;VHDL

 基于現(xiàn)場可編程門陣列FPGA的系統(tǒng)開發(fā)可以廣泛應(yīng)用于各行各業(yè),,ASIC設(shè)計(jì),、通信、控制,、電力電子等,。其主要優(yōu)點(diǎn)有:設(shè)計(jì)周期短、功耗低,,可實(shí)現(xiàn)更高集成度的數(shù)字系統(tǒng)和嵌入式系統(tǒng)等。用戶可對FPGA內(nèi)部的邏輯模塊和I/O模塊重新進(jìn)行配置,,以實(shí)現(xiàn)數(shù)字邏輯電路以及基于FPGA的SRAM,、查找表(LUT)等。FPGA還具有靜態(tài)可重復(fù)編程和動態(tài)在系統(tǒng)重構(gòu)的特性,使得硬件的功能可以像軟件一樣通過編程來修改,,從而提高設(shè)計(jì)的可靠性,、穩(wěn)定性和靈活性。傳統(tǒng)的設(shè)計(jì)中,,F(xiàn)PGA的功能僅局限于集成電路的應(yīng)用和驗(yàn)證,,然而隨著電子技術(shù)的迅猛發(fā)展,集成度更高,,功耗更低,,基于FPGA的電路設(shè)計(jì)將發(fā)揮出更大的優(yōu)勢,使得在一片F(xiàn)PGA中實(shí)現(xiàn)一個完備的數(shù)字處理系統(tǒng)成為可能[1-3],。本文提出的基于FPGA的串行通信控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),,是在Altera公司的FPGA Cyclone II芯片EP2C5的基礎(chǔ)上實(shí)現(xiàn)的,運(yùn)用VHDL語言編程,,在Quartus II軟件上進(jìn)行編譯,、仿真,最終在FPGA開發(fā)板上成功實(shí)現(xiàn)下載和調(diào)試驗(yàn)證,。
1  串行通信控制系統(tǒng)的基本原理
 基本的通信方式可分為并行通信和串行通信兩種,。并行通信就是數(shù)據(jù)以成組的方式在多個并行信道上同時傳輸;而串行通信則是在傳輸過程中,,二進(jìn)制數(shù)據(jù)一位一位的通過一條通信信道,,并且按照規(guī)定的規(guī)程依次傳輸,實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)或計(jì)算機(jī)與外部設(shè)備之間的通信(數(shù)據(jù)交換),。由于串行通信的收發(fā)方都只需要一條數(shù)據(jù)線,,比較容易實(shí)現(xiàn),而且長距離傳輸時也更加可靠,,因此其應(yīng)用十分廣泛[4],。
 串行通信控制系統(tǒng)的模型如圖1所示,其基本原理是:信息源將待傳輸?shù)南⑥D(zhuǎn)換成原始電信號(如電話系統(tǒng)中的電話機(jī)就可看成是信息源),;發(fā)送設(shè)備對原始電信號進(jìn)行某種變換或處理,,使電信號符合信道的傳輸特性要求;信道是信息傳輸?shù)耐ǖ?,在串行通信時,,代表信息的數(shù)字信號序列按時間順序一個接一個地在信道中傳輸;接收端從收到的信號中恢復(fù)出相應(yīng)的原始信號,;受信者則將復(fù)原的原始信號轉(zhuǎn)變成相應(yīng)的消息(如電話機(jī)將對方傳來的電信號還原成了聲音),;噪聲源是信道中的所有噪聲及通信系統(tǒng)中噪聲的集合[5]。

2 系統(tǒng)整體設(shè)計(jì)方案
2.1 系統(tǒng)功能

 (1)通過4×4鍵盤輸入0~F數(shù)據(jù),,并將此輸入數(shù)據(jù)發(fā)送給上位機(jī),,上位機(jī)可以準(zhǔn)確接收所發(fā)送的數(shù)據(jù),。
 (2)通過LED準(zhǔn)確接收上位機(jī)串口調(diào)試助手發(fā)送的數(shù)據(jù)。
 (3)波特率可分為2 400 b/s,、4 800 b/s,、9 600 b/s、19 200 b/s,、38 400 b/s,,并且可以隨意修改。
2.2 設(shè)計(jì)方案
 整個設(shè)計(jì)在Altera Cyclone II平臺上采用了“自頂向下”的模塊化設(shè)計(jì)思想,,并使用硬件描述語言VHDL對電路進(jìn)行描述,。
 根據(jù)功能要求,系統(tǒng)可分為4×4鍵盤掃描輸入模塊,、LED顯示模塊,、接收模塊、發(fā)送模塊和波特率產(chǎn)生模塊5個功能模塊,,系統(tǒng)原理框圖如圖2所示,。

 設(shè)計(jì)原理為:4×4鍵盤掃描輸入模塊將所輸入的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制代碼傳輸給發(fā)送模塊,發(fā)送模塊再將此數(shù)據(jù)通過串口TXD發(fā)送到PC機(jī),;接收模塊通過串口RXD接收由上位機(jī)或串口調(diào)試助手發(fā)送的數(shù)據(jù),,并且顯示在數(shù)碼管上;數(shù)據(jù)傳輸速率由波特率產(chǎn)生模塊的輸出頻率決定,,可以根據(jù)需要進(jìn)行設(shè)置,,如可設(shè)置為2 400 b/s、4 800 b/s等,。
3 功能子模塊的設(shè)計(jì)與實(shí)現(xiàn)
3.1 接收模塊的設(shè)計(jì)

 接收模塊的主要功能為接收PC機(jī)發(fā)送8 bit二進(jìn)制數(shù),。根據(jù)功能要求,采用VHDL硬件描述語言對其功能進(jìn)行描述,,模塊頂層設(shè)計(jì)文件如圖3所示,,各端口分別為:bclkr(傳輸速率控制端,輸入波特率產(chǎn)生模塊的輸出頻率),、resetr(復(fù)位端),、rxd(接收端口,串行輸入),、r_ready(接收就緒),、rbuf(接收寄存器)。該模塊采用有限狀態(tài)機(jī)設(shè)計(jì),。

3.2 發(fā)送模塊的設(shè)計(jì)
 發(fā)送模塊的主要功能是將鍵盤按鍵值以給定的波特率發(fā)送給PC機(jī),。本文的設(shè)計(jì)思想是:當(dāng)不發(fā)送數(shù)據(jù)時,數(shù)據(jù)信號線表現(xiàn)為高電平,,即空閑位,;當(dāng)開始發(fā)送數(shù)據(jù)后,,數(shù)據(jù)信號為低電平,也就是起始位,,為了保證能夠在發(fā)送數(shù)據(jù)時準(zhǔn)確采樣,采用頻率為波特率16倍的輸入時鐘,。輸入時鐘信號由波特率產(chǎn)生模塊的輸出提供,。該模塊采用VHDL硬件描述語言進(jìn)行描述,頂層設(shè)計(jì)文件如圖4所示,,各端口分別為:bclkt(輸入時鐘),、resett(復(fù)位)、xmit_cmd_p(發(fā)送命令端),、txdbuf[7...0](發(fā)送緩沖器輸入端),、txd(發(fā)送數(shù)據(jù)端)、txd_done(發(fā)送完畢),。該模塊采用有限狀態(tài)機(jī)設(shè)計(jì),,根據(jù)功能要求,電路包括空閑,、起始,、等待、移位,、停止5個狀態(tài),。

3.3 波特率產(chǎn)生模塊的設(shè)計(jì)
 波特率產(chǎn)生模塊的主要功能:當(dāng)輸入不同數(shù)據(jù)時,將對輸入的時鐘信號有不同的分頻比,,從而產(chǎn)生不同的波特率,。波特率發(fā)生器采用加法計(jì)數(shù)器來實(shí)現(xiàn)多種分頻。產(chǎn)生38 400 b/s的VHDL程序如下:
process(clk,,bo)
begin
 case bo is
                     when "100"=>clkout<=clk38400,;
                     when others=>clkout<=null;
                  end case,;
end process,;
process(clk,res)
variable cnt5:integer range 39 downto 0,;
begin
if res=′1′ then cnt5:=0,; clk38400<=′0′;  //復(fù)位
elsif rising_edge(clk) then
if cnt5>=39 then cnt5:=0,;clk38400<=not clk38400,;
//設(shè)置分頻系數(shù)38 400波特率
    else cnt5:=cnt5+1;
    end if,;
end if,;
end process,;
 波特率為38 400 b/s的仿真波形如圖5所示。其中,,bo為波特率選擇設(shè)置端口,,將其分配給FPGA開發(fā)板的3個撥動開關(guān),通過撥動開關(guān)輸入相應(yīng)的數(shù)據(jù)實(shí)現(xiàn)波特率設(shè)置,;clk為系統(tǒng)時鐘信號,,頻率為24 MHz;res為復(fù)位端,;clkout為輸出時鐘,,提供給接收和發(fā)送模塊,實(shí)現(xiàn)不同波特率傳輸,。

3.4 鍵盤模塊設(shè)計(jì)
 鍵盤模塊的主要功能是將按鍵轉(zhuǎn)換為8 bit二進(jìn)制數(shù),,該功能的實(shí)現(xiàn)過程為:對于4×4鍵盤,通常連接為4行,、4列,,因此,要識別按鍵,,只需要知道是哪一行和哪一列即可,。為了完成這一按鍵識別過程,本設(shè)計(jì)首先確定行值,,如果讀入的4行均為高電平,,則肯定沒有鍵按下,如果讀入的4行有一位為低電平,,則對應(yīng)的該行肯定有一個鍵被按下,,這樣便可以獲得按鍵的行值;然后通過加法計(jì)數(shù)器進(jìn)行列掃描,,獲得列值,。將獲取到的行值和列值組合成一個8 bit的數(shù)據(jù),根據(jù)實(shí)現(xiàn)不同的編碼對每個按鍵進(jìn)行匹配,。鍵盤模塊仿真波形如圖6所示,。

3.5 數(shù)碼管顯示模塊設(shè)計(jì)
 數(shù)碼管顯示模塊的主要功能是將所接收到的數(shù)據(jù)在8 bit七段數(shù)碼管上進(jìn)行顯示。本設(shè)計(jì)中使用的是兩個4 bit一體,、共陰極型的七段數(shù)碼管,。因此,數(shù)碼管中被輸入高電平的這一段將會被點(diǎn)亮,,反之則不亮,。應(yīng)用數(shù)碼管的這一特點(diǎn),給數(shù)碼管相應(yīng)的段輸入高電平,,從而實(shí)現(xiàn)相應(yīng)數(shù)據(jù)的顯示,。通過位選端口來控制,,被選通的數(shù)碼管顯示數(shù)據(jù),其余關(guān)閉,。實(shí)現(xiàn)數(shù)碼管顯示的VHDL代碼如下[6]:
LIBRARY ieee,;
USE ieee.std_logic_1164.all;
ENTITY led_display IS
        PORT
    (
        ledclk: IN STD_LOGIC,;
        res: IN STD_LOGIC,;
        data: IN STD_LOGIC_VECTOR(7 downto 0);
        ledout: OUT STD_LOGIC_VECTOR(7 downto 0),;
        sel: OUT STD_LOGIC_VECTOR(2 downto 0)
    );    
END led_display,;
ARCHITECTURE led_architecture OF led_display IS
BEGIN
process(ledclk,,res,data)
      begin
        if ledclk′event and ledclk=′1′ then
            if res=′1′ then ledout<="00000000",;
        end if,;
        case data is
            when "00000000" =>ledout<="00111111";
//顯示數(shù)據(jù)0
            when "00000001" =>ledout<="00000110",;
//顯示數(shù)據(jù)1
            when "00000010" =>ledout<="01011011",;
//顯示數(shù)據(jù)2
                                :             :
                                :             :
            when "00001111" =>ledout<="01110001";
 //顯示數(shù)據(jù)F
            when others =>null,;
         end case,;
       end if;
   sel<="000",; end process,;
END led_architecture;
4 系統(tǒng)下載與調(diào)試結(jié)果
 在Quartus II 7.2中建立項(xiàng)目后,,輸入頂層設(shè)計(jì)文件及各個模塊的VHDL程序代碼,,編譯、仿真,、管腳分配之后產(chǎn)生編程文件,,將編程文件下載到FPGA芯片EP2C5Q208上,通過串口線連接實(shí)驗(yàn)箱與PC機(jī)進(jìn)行調(diào)試及驗(yàn)證,。通過FPGA的4×4鍵盤輸入0~F數(shù)據(jù),,并發(fā)送給PC機(jī),PC機(jī)可以正確接收到所發(fā)送的數(shù)據(jù),;同時,,通過PC機(jī)串口調(diào)試助手發(fā)送數(shù)據(jù)給FPGA時,F(xiàn)PGA也可以準(zhǔn)確接收到相應(yīng)數(shù)據(jù),,并且將接收到的數(shù)據(jù)在數(shù)碼管上顯示,;改變波特率時也可以實(shí)現(xiàn)上述功能,。實(shí)驗(yàn)結(jié)果表明,本設(shè)計(jì)滿足設(shè)計(jì)要求,。
 本設(shè)計(jì)運(yùn)用FPGA開發(fā)平臺將串行通信控制系統(tǒng)集成在一片Altera EP2C5芯片中,,提高了系統(tǒng)的質(zhì)量和可靠性。同時,,由于基于FPGA的系統(tǒng)設(shè)計(jì)能夠在現(xiàn)場進(jìn)行編程及調(diào)試,,具有很大的靈活性,可以方便地進(jìn)行修改完善,,用戶可以在不改變電路系統(tǒng)的情況下,,進(jìn)行反復(fù)編程和隨意修改。一旦設(shè)計(jì)成熟,,也可以制成ASIC芯片,,不但大大降低了設(shè)計(jì)風(fēng)險(xiǎn),也可以節(jié)約成本,。
參考文獻(xiàn)
[1] 李迎九,,肖柳明.基于FPGA的數(shù)字通信系統(tǒng)同步電路的設(shè)計(jì)[J].湘潭師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2005,,27(1).
[2] KUNG Yingshieh,, Chen Chiasheng, Wong Kiinging,, et al. Development of a FPGA-based control IC for PMSM drive with adaptive fuzzy control[C]. Proceeding of IEEE Industial Electronics Society,, IEOON 2005, 2005: 1544-1545.
[3] 潘松,,黃繼業(yè).EDA技術(shù)與VHDL[M].北京:清華大學(xué)出版社,,2009.
[4] 宋兵躍,吳軍輝,,黃斌.單片機(jī)的高效串行通信研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,,2010(1):27-29.
[5] 王興亮.通信系統(tǒng)原理教程[M].西安:西安電子科技大學(xué)出版社,2007.
[6] 李晶皎,,李景宏,,曹陽.邏輯與數(shù)字系統(tǒng)設(shè)計(jì)[M].北京:清華大學(xué)出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。