亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于FPGA的串口實現(xiàn)

        2018-12-20 08:12:08孫列鵬楊化路程宇峰
        軟件 2018年11期
        關鍵詞:處理程序計數(shù)器串口

        張 誠,孫列鵬,肖 薇,楊化路,程宇峰

        ?

        基于FPGA的串口實現(xiàn)

        張 誠1,孫列鵬2,肖 薇1,楊化路1,程宇峰1

        (1. 北廣科技股份有限公司,北京 101312;2. 北京航空航天大學,北京 100082)

        串口作為一個簡單可靠的通訊方式,廣泛的應用于現(xiàn)代電子工業(yè)中。目前產品中定時控制分系統(tǒng)與其它的分系統(tǒng)的通信都是由串口來完成的,實現(xiàn)串口的方法大部分是由TI公司的DSP來實現(xiàn)的。本文先對串口協(xié)議進行研究,然后介紹串口設計中需要注意的幾個問題,最后根據(jù)目前的項目對基于FPGA的串口設計做詳細的說明。

        串口;協(xié)議;FPGA;VHDL

        0 引言

        通常提起串口我們都會想到計算機的串口,在工業(yè)控制和通信當中串口通信應用也很廣泛。這些領域的串口都是按照計算機的串口標準來做的,這樣極大的方便了用計算機來調試設備。

        1 串口協(xié)議

        目前我們做的串口,都是按照或者參考計算機的串口協(xié)議來做的。用于計算機的串口協(xié)議有兩種:一種是RS-232,它是是IBM-PC及其兼容機上的串行連接標準。我們見到的計算機大部分都是采用的這種標準,它的外圍電路是由專用芯片(如8251)和電平驅動芯片(如MAX232)來組成的。串口通信的邏輯主要由專用芯片來完成(包括信息的發(fā)送和接收和主板總線的通信),電平驅動芯片主要完成電平的轉換。另一種標準是RS-422,它是Apple的Macintosh計算機的串口連接標準,它的組成和RS-232類似,有區(qū)別的是RS-422采用了差分線進行傳輸,這使得傳輸?shù)目垢蓴_性和傳輸距離大大的提高了。還有一種標準是RS-485,它是RS-422的改進,如圖1所示。

        圖1 串口通信的物理層組成

        如圖1所示,物理層由物理介質和物理代碼組成,物理介質由驅動芯片以及外圍電路和傳輸電纜等用于物理信號傳輸?shù)慕橘|組成,而物理代碼完成了通信的邏輯,它可以是8251這樣的專用芯片,也可以是單片機,DSP,F(xiàn)PGA這樣的可編程器件。我們通常所看到的MAX488,MAX232等驅動芯片和傳輸線都是物理介質。一般計算機是RS-232標準,而我們所設計的電路板都采用了RS-422的標準,所以我們在和計算機通信的時候都會采用一個轉接頭;而物理代碼則通常用DSP,CPLD/FPGA來實現(xiàn)的,這樣DSP,CPLD/FPGA還能完成其他的功能,增加了設計的集成度。

        串口通信分為同步通信和異步通信。同步通信比異步通信傳輸信息的質量要好,但是同步通信的硬件電路比異步通信的電路電路要復雜的多,需要硬件連線數(shù)增多。如果設計的系統(tǒng)比較復雜,所需要的連線數(shù)會成倍的增加。終端定時控制分系統(tǒng)和其他分系統(tǒng)的串口有10-20多個,如果每個串口增加了兩根握手信號,我們需要的連線就會有20-40多個。這大大的增加了連線的困難。所以在一般應用中都會采用異步串口通信,因為異步通信只需要三根線(收,發(fā),地),雖然異步通信比同步通信傳輸?shù)男畔⑸倭?0%,但是由于其硬件結構比較簡單所以在很多設計中都用了異步通信的方式。本文所討論以及實現(xiàn)的都是異步串口通信。

        2 異步串口通信

        2.1 監(jiān)聽機制

        異步通信的時候,通信雙方都不知道什么時候通信開始,什么時候通信結束。這樣就需要在傳輸線上有信號位來標志通信的發(fā)起和結束。串口通信中所采用的是在發(fā)送信息前先發(fā)送一個起始位,在信息結束的時候發(fā)送一個結束位。這樣本來傳送8位的信息就會傳送10位,這樣信息的傳送率為80%。因為串口通信本來就是慢速的通信,所以這種損失是允許的。在具體的信號線上,當沒有信息發(fā)送的時候,信號線上的信號是‘1’,當有信號發(fā)送的時候有一位‘0’;當接收信息結束的時候,在結束位會出現(xiàn)信號‘1’,如圖2所示。

        圖2 異步通信的傳送位關系

        2.2 時鐘與定時

        異步通信是相對于同步通信來說的,異步通信之間數(shù)據(jù)的傳輸率是相同的,由通信雙方規(guī)定好。也就是說數(shù)據(jù)位的速率是相同的,異步接收的時候通過監(jiān)聽機制監(jiān)聽到起始位后開始定時接收,如圖3所示。為了保證通信的可靠性,系統(tǒng)工作的時鐘要高于數(shù)據(jù)率的時鐘。8251要求系統(tǒng)的工作時鐘為數(shù)據(jù)率的4-6倍,如果數(shù)據(jù)時鐘是9600,那么系統(tǒng)的工作時鐘就是38.4 k-57.6 k1。圖3是以數(shù)據(jù)位的五倍時鐘來說明的,當開始定時接收的時候,定時器開始循環(huán)計數(shù),當計到三的時候,把數(shù)據(jù)鎖存起來,這樣保證鎖存的數(shù)據(jù)前后有一定的時間間隔,比較穩(wěn)定。當遇到停止位的時候,計數(shù)停止。系統(tǒng)工作的時鐘也可以高于數(shù)據(jù)率的4-6倍,比如16倍,這樣計數(shù)器就是模16計數(shù),鎖存的時候可以在計數(shù)器為8的時候鎖存,也可以在4的時候鎖存,所以很多串口通信中可以設置結束位為四分之一,或者二分之一位。

        圖3 異步通信的接收定時時序

        異步通信所傳送的數(shù)據(jù)位數(shù)也是事先規(guī)定好的,至少為10位(8位信息加上一位起始位和一位結束位),如果還有奇偶校驗位,那就11位了。具體的位數(shù)要看實際中的應用,但是一定要保證通信雙方一致[3]。

        2.3 糾錯機制

        在通信中糾錯是重要的指標之一,一個好的通信系統(tǒng)不僅要知道傳輸?shù)臄?shù)據(jù)錯誤,而且還要對傳輸?shù)臄?shù)據(jù)進行糾錯[4]。在異步串口通信當中,在傳輸?shù)氖且粋€字節(jié)時,一般采用奇偶校驗的方法,在8個數(shù)據(jù)位后多一個奇偶校驗位,在接收的時候對其進行檢驗,如果正確則存儲,如果錯誤,則采用相應的機制來糾錯。當異步傳輸?shù)氖呛芏嘧止?jié)組成的數(shù)據(jù)包時,會在數(shù)據(jù)包后面加上冗余碼,一般為CRC碼,這種碼是固定的多項式,通過計算可以對錯誤的數(shù)據(jù)進行糾錯[1]。

        采用的檢測方法是將數(shù)據(jù)包里的數(shù)據(jù)進行累加,發(fā)送的時候將累加的值放在數(shù)據(jù)包相應的位置,接收的時候對傳輸?shù)臄?shù)據(jù)包的數(shù)據(jù)也進行累加,兩者進行比較后,向發(fā)送端反饋相應的數(shù)據(jù)包。發(fā)送端檢測數(shù)據(jù)包,如果是正確的數(shù)據(jù)包則不作處理,如果是錯誤的則重新發(fā)送相應的數(shù)據(jù)包。

        這種檢測方法要求通信的基本單位是數(shù)據(jù)包,糾錯的手段是重發(fā)機制。因為產品中串口所發(fā)送的都是命令協(xié)議,時間多為一秒以上,所以這種糾錯機制是很適用的[5]。

        FPGA作為一種可編程器件已經為大家所熟悉了,這里就VHDL語言編寫的收發(fā)程序給大家介紹一下。[6-7]這部分主要包括發(fā)送程序(物理層),接收程序(物理層),以及發(fā)送處理(頂層,主要對反饋后的數(shù)據(jù)包進行處理),接收處理(頂層,對接收的數(shù)據(jù)包進行處理)[2]。

        3 程序設計

        3.1 發(fā)送程序

        發(fā)送的過程如下:發(fā)送器檢測到發(fā)送處理程序發(fā)送有效標號后,發(fā)送計數(shù)器和分頻計數(shù)器開始計數(shù),同時根據(jù)發(fā)送的數(shù)據(jù)產生奇偶校驗位,根據(jù)發(fā)送計數(shù)器的狀態(tài),進行串并轉換,進行發(fā)送。[8]

        PROCESS(CLK48K,T_CO)

        BEGIN

        IF(CLK48K'EVENT AND CLK48K='1')THEN

        CASE T_ST IS--狀態(tài)表,S0表示無發(fā)送;S1表示發(fā)送狀態(tài)。

        WHEN S0=>

        T_COUNT<="000";

        IF(T_CO='1')THEN

        T_COU<="0110";

        T_ST<=S1;

        T_TEMP1(7 DOWNTO 0)<= T_TEMP;--T_TEMP1

        ELSE

        T_COU<="0000";

        END IF;

        WHEN S1=>

        IF(T_COUNT="100")THEN T_COUNT<="000";

        ELSE

        T_ST<=S1;

        END IF;

        END CASE;

        END IF;

        END PROCESS;

        3.2 接收程序

        接收過程如下:接收器探測到起始位,定時計數(shù)器和分頻計數(shù)器開始工作,當分頻計數(shù)器等于2的時候,將接收的數(shù)據(jù)進行串并轉換,當接收滿8位并且探測到停止位的時候,接收停止,并將接收的結果發(fā)送到接收處理程序中去。

        PROCESS(CLK48K)

        BEGIN

        IF(CLK48K'EVENT AND CLK48K='1')THEN

        CASE R_ST IS

        WHEN S0=>

        R_DOUT<=(OTHERS=>'1'); R_TEMP<=(OTHERS=>'1');

        R_EN<='0';

        IF(R_DATA='0')THEN

        R_COUNT<="0110000";

        R_ST<=S1;

        ELSE

        R_ST<=S0;

        R_COUNT<=(OTHERS=>'0');

        END IF;

        IF (R_COUNT(6 DOWNTO 3)>= "0110" AND R_COUNT(2 DOWNTO 0)="010")THEN

        END IF;

        END PROCESS;

        3.3 接收處理

        接收處理的過程如下:接收處理程序接收到接收程序發(fā)送的有效信號和數(shù)據(jù)后,對數(shù)據(jù)進行存儲,并對存儲的數(shù)據(jù)進行檢驗,將檢驗后的結果發(fā)送到發(fā)送處理程序中去。

        PROCESS(RE_STEN,R_EN)

        VARIABLE RE_ST : STD_LOGIC_ VECTOR (2 DOWNTO 0);

        BEGIN

        IF(RE_STEN='1')THEN

        RE_ST:="000";

        ELSIF(R_EN'EVENT AND R_EN='1')THEN

        CASE RE_ST IS

        WHEN "000"=>

        RE_ST:="001"; RE_ST:="001";

        RE_FLAG<='0';

        WHEN "001"=> RE_ST:="010";

        RE_FLAG<='0';

        WHEN "010"=> RE_ST:="011";

        RE_FLAG<='0';

        WHEN "011"=> RE_TEMP1<=RE_TEMP; RE_ST:="100";

        RE_FLAG<='0';

        WHEN "100"=> RE_ST:="101";

        RE_FLAG<='1';

        WHEN "101"=>

        RE_TEMP2<=RE_TEMP; RE_ST:="110";

        RE_FLAG<='0';

        WHEN "110"=>

        RE_TEMP3<=RE_TEMP;

        RE_ST:="000";

        RE_FLAG<='0'; WHEN OTHERS=>

        RE_FLAG<='0'; RE_ST:="000";

        END CASE;

        END IF;

        END PROCESS;

        PROCESS(RE_TEMP1,RE_TEMP2,RE_TEMP3)

        —檢測數(shù)據(jù)偵的結果正確發(fā)送正確標志,錯誤發(fā)送錯誤標志

        BEGIN

        IF(RE_TEMP1+RE_TEMP2+X"76"=RE_TEMP3)THEN

        RE_ERROR_FLAG<='0';

        RE_RIGHT_FLAG<='1';

        ELSE

        RE_ERROR_FLAG<='1';

        RE_RIGHT_FLAG<='0';

        END IF;

        END PROCESS;

        3.4 發(fā)送處理

        發(fā)送處理的過程如下:發(fā)送處理程序接收到接收處理程序的檢驗結果,根據(jù)結果,發(fā)送處理程序向發(fā)送程序發(fā)送有效標志和數(shù)據(jù)包(按字節(jié)發(fā)送),并且在數(shù)據(jù)包相應的位置加入正確或錯誤字節(jié)。[9-10]

        PROCESS(RE_FLAG,CLK48K,RESET)

        VARIABLE TR_COUNT : INTE-GER R-A-N-GE 0 TO 100;

        VARIABLE TR_ST : STD_LOGIC_ VECTOR(4 DOWNTO 0);

        BEGIN

        IF(RESET='0')THEN

        TR_ST:="01011";

        ELSIF(RE_FLAG='1')THEN

        TR_ST:="00000";

        TR_COUNT:=0;

        ELSIF(CLK48K'EVENT AND CLK-48K='1')THEN

        IF(TR_COUNT=450)THEN

        TR_COUNT:=0;

        TR_EN<='0';

        TR_DATA<=X"FF";

        ELSIF(TR_COUNT=2)THEN

        CASE TR_ST IS

        WHEN "00000"=>

        TR_EN<='0';

        TR_DATA<=X"FF";

        TR_ST:="00001";

        WHEN "00001"=>

        TR_EN<='0'; TR_DATA<=X"FF";

        TR_ST:="00010";

        WHEN "00010"=>

        TR_EN<='0'; TR_DATA<=X"FF";

        IF(RE_EN='1' AND RE_RIGHT= '0')THEN

        TR_ST:="00011";

        ELSIF(RE_EN='0' AND RE_ RIGHT='1')THEN

        TR_ST:="10001";

        ELSE TR_ST:="00010";

        END IF;

        WHEN "00011"=>-- 發(fā)送反饋正確數(shù)據(jù)包

        TR_EN<='1';

        TR_ST:="00100"; TR_DATA<=X"7E";

        WHEN "00100"=>

        TR_EN<='1';

        TR_ST:="00101";

        TR_DATA<=X"15";

        WHEN "00101"=>

        TR_EN<='1';

        TR_ST:="00110";

        TR_DATA<=X"61";

        WHEN "00110"=>

        TR_EN<='1';

        TR_ST:="00111";

        TR_DATA<=X"9E";

        WHEN "00111"=>

        TR_EN<='1';

        TR_ST:="01000";

        TR_DATA<=X"04";

        WHEN "01000"=>

        TR_EN<='1';

        TR_ST:="01001";

        TR_DATA<=TR_TEMP;

        WHEN "01001"=>

        TR_EN<='1';

        TR_ST:="01010"; TR_DATA<=X"14"+TR_TEMP;

        WHEN "01010"=>

        TR_EN<='1';

        TR_ST:="01011";

        TR_DATA<=X"7E";

        WHEN "01011"=>

        TR_EN<='0';

        TR_ST:="01011";

        TR_DATA<=X"FF"; WHEN "10001"=>-- 發(fā)送反饋錯誤數(shù)據(jù)包

        TR_EN<='1';

        4 結論

        本文重點討論了串口通信的物理層協(xié)議,給出了基于FPGA的實現(xiàn)方法。本文的程序將光纖接收單元和終端定時與控制單元的串口通信中。本程序已經在試驗階段通過。

        [1] 鄔寬明《單片機外圍器件實用手冊數(shù)據(jù)傳輸接口器件分冊》, 北京航天航空大學出版社. 2001: 100-113.

        [2] 李新兵《兼容ARM9的軟核處理器設計基于FPGA》, 機械工業(yè)出版社. 20012: 20-30.

        [3] 謝顯中, 王新梅. 第三代移動通信系統(tǒng)的空中接口方案[J]. 移動通信. 1999(01).

        [4] 謝顯中, 苗洪雷, 李穎, 王新梅. 分層空時碼的模型、譯碼接收及其性能仿真[J]. 通信學報. 2001(08).

        [5] 葛利嘉, 路鳴. 蜂窩通信的空分多址: 概念、算法和性能[J]. 通信學報. 1999(08).

        [6] 王蕾, 韓立峰. 基于Artix-7 FPGA的異步高速串行通信IP設計[J]. 現(xiàn)代電子技術, 2018, 41(19): 6-10.

        [7] 王蕾, 李淑婧. 一種基于FPGA+DSP的高速串口通信設計[J]. 現(xiàn)代電子技術, 2018, 41(15): 22-25+30.

        [8] 徐巧玉, 周新穩(wěn), 王軍委, 朱佩. 一種ARM+FPGA的可裁剪以太網串口服務器設計[J]. 河南科技大學學報(自然科學版), 2018, 39(06): 24-29+34+5.

        [9] 甘康, 蔡錦達, 鄒億, 劉倩. 基于ARM和FPGA的LED標準光源電路設計[J]. 光學儀器, 2018, 40(03): 38-45.

        [10] 白曉. 基于FPGA的狀態(tài)采集與快保護系統(tǒng)子板設計[D]. 中國科學院大學(中國科學院近代物理研究所), 2018.

        Implementation of Serial Port Based on FPGA

        ZHANG Cheng1, SUN Lie-peng2, XIAO Wei1, YANG Hua-lu1, CHENG Yu-feng1

        (1. Beijing BBEF Science & Technology Co., Ltd, Beijing 101312, China; 2. Beihang University Beijing 100082, China)

        As a simple and reliable communication method, serial port is widely used in modern electronics industry. At present, the product communication between the timing control subsystem and other subsystems is completed by serial ports. Most of the methods for serial ports are implemented by the DSP of TI company. Firstly, this paper studies the serial port protocol, then introduces several problems that need attention in the serial port design. Finally, according to the current project, the FPGA-based serial port design is described in detail.

        Serial port; Protocol; FPGA; VHDL

        TN79

        B

        10.3969/j.issn.1003-6970.2018.11.046

        張誠(1980-),男,碩士,高級工程師,研究方向:為射頻微波系統(tǒng)設計、電子技術;程宇峰(1970-),男,本科,高級工程師,研究方向:高頻系統(tǒng)設計開發(fā)技術方向;孫列鵬(1979-),男,博士,職稱:高級工程師,研究方向:高頻系統(tǒng)設計開發(fā)技術方向;楊化路(1965-),男,碩士,職稱:高級工程師,研究方向:高頻系統(tǒng)設計開發(fā)技術方向;肖薇(1971-),男,碩士,職稱:高級工程師,研究方向:結構系統(tǒng)設計與工藝。

        張誠,孫列鵬,肖薇,等. 基于FPGA的串口實現(xiàn)[J]. 軟件,2018,39(11):219-223

        猜你喜歡
        處理程序計數(shù)器串口
        采用虛擬計數(shù)器的電子式膜式燃氣表
        煤氣與熱力(2022年2期)2022-03-09 06:29:30
        高速公路工程變更與計量支付處理程序的優(yōu)化方法
        淺談AB PLC串口跟RFID傳感器的通訊應用
        基于C++的數(shù)控加工通用后處理程序的開發(fā)應用研究
        企業(yè)危機公關管理問題分析
        USB接口的多串口數(shù)據(jù)并行接收方法探索
        計數(shù)器競爭冒險及其處理的仿真分析
        基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
        地礦測繪(2015年3期)2015-12-22 06:27:26
        基于并行控制的FPGA多串口拓展實現(xiàn)
        任意N進制計數(shù)器的設計方法
        河南科技(2014年10期)2014-02-27 14:09:30
        精品久久久无码中文字幕| 亚洲熟女乱一区二区三区| 老女老肥熟女一区二区| 国产亚洲真人做受在线观看| 亚洲自拍另类制服在线| 一本久久精品久久综合桃色| 亚洲av毛片在线免费看| 亚洲愉拍99热成人精品热久久| 一群黑人大战亚裔女在线播放| 国产人禽杂交18禁网站| 少妇人妻无奈的跪趴翘起| 无码人妻一区二区三区兔费| 亚洲av无码一区二区三区在线| 青榴社区国产精品| 久久老熟女一区二区三区福利| 男人女人做爽爽18禁网站| 窝窝影院午夜看片| 亚洲乱色视频在线观看| 亚洲无精品一区二区在线观看| 巨大巨粗巨长 黑人长吊| 国产成人亚洲精品91专区手机| 人妻少妇久久精品一区二区| 邻居美少妇张开腿让我爽了一夜| 无码任你躁久久久久久老妇| 国产a级午夜毛片| 少妇激情一区二区三区| 丰满人妻熟妇乱又仑精品| 久久男人av资源网站无码| 国产传媒在线视频| 午夜亚洲精品视频在线| 一区二区三区av波多野结衣| 久久99欧美| 求网址日韩精品在线你懂的| 五月色丁香婷婷网蜜臀av | 麻豆久久久国内精品| 久久伊人亚洲精品视频 | 国产一区二区三区在线观看完整版 | 男女动态91白浆视频| 中文字幕人成乱码中文| 日日噜噜夜夜狠狠视频| 老湿机香蕉久久久久久|