<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > UART 16倍頻采樣的VHDL實(shí)現

UART 16倍頻采樣的VHDL實(shí)現

作者: 時(shí)間:2016-10-18 來(lái)源:網(wǎng)絡(luò ) 收藏

概述

本文引用地址:http://dyxdggzs.com/article/201610/308518.htm

隨著(zhù)電子設計自動(dòng)化(EDA)技術(shù)的發(fā)展,可編程邏輯器件FPGA/CPLD已經(jīng)在許多方面得到了廣泛應用,而UART(通用異步收發(fā)器) 是在數字通信和控制系統中廣泛使用的串行數據傳輸協(xié)議。因此越來(lái)越多用戶(hù)根據自己的需要,以EDA技術(shù)作為開(kāi)發(fā)手段,用一塊FPGA/CPLD設計出符合自己需要的UART芯片?;贔PGA/ CPLD的UART設計在諸多文獻中都有論述,在此不再對UART整個(gè)功能模塊實(shí)現做太多的論述。本文著(zhù)重分析UART接收器起始位的檢測。

的缺陷

首先,串行異步通信規定了字符數據的傳送格式。每一幀數據由起始位、數據位、奇偶校驗位、停止位和線(xiàn)路空閑狀態(tài)組成,格式如圖1所示。一般情況起始位為1 位,數據位為5、6、7或8位、奇偶校驗位為1位,停止位為1、1.5或2位。其中的起始位和停止位就是用來(lái)實(shí)現字符的同步。在空閑狀態(tài),傳送線(xiàn)為邏輯 “1”狀態(tài)。數據的傳送總是以一個(gè)“起始位”開(kāi)始的,接著(zhù)是要傳送的若干數據位,低位先行,最后是一個(gè)“1”狀態(tài)的“停止位”;那么,當接收器檢測到一個(gè) “1”向“0”的跳變時(shí),便視為可能的起始位。起始位被確認后,就知道發(fā)送器已開(kāi)始發(fā)送,當接收了已協(xié)議好的位數后并接收到字符幀中停止位就是一幀字符數據已發(fā)送完畢。這樣,接收器就知道發(fā)送器何時(shí)開(kāi)始發(fā)送數據和何時(shí)結束發(fā)送數據。

要提高接收器的接收準確性,減少誤碼率,必須要用比數據波特率高n 倍(n≥1)的速率對數據進(jìn)行采樣。文獻2中采用了非常規的方法:用3倍頻的波特率對每一位數據進(jìn)行采樣(如圖2所示),然后對3次采樣結果進(jìn)行判決。如果3次采樣中至少有2次為高電平,則接收這一位數據被判決為高電平,否則,為低電平。

此方法剛開(kāi)始給人感覺(jué)比常規的準確性高,因為每一位數據都進(jìn)行3取2的判決,而對每位數據只進(jìn)行一次中間采樣。然而筆者在實(shí)際應用中發(fā)現了其存在抗干擾性差,移植性差等不足。筆者在應用中自定義的異步數據幀長(cháng)達21位,應用環(huán)境是渦輪工作間。在這樣條件下,比在良好的實(shí)驗室環(huán)境性能差了很多,誤碼率很高。

經(jīng)分析代碼,發(fā)現3倍頻采樣方法在檢測異步數據起始位沒(méi)有任何的抗干擾處理。如果在接收線(xiàn)上存在干擾信號,即使是一個(gè)很窄負脈沖干擾,接收器也會(huì )誤判為是數據幀的起始位,從而產(chǎn)生采樣時(shí)鐘進(jìn)行后續的數據采樣。圖3所示為存在干擾信號時(shí),檢測起始位信號時(shí)序仿真波形。圖中COLCK3-IN是3倍頻采樣時(shí)鐘,CLOCK1-IN是數據波特率,DATAIN是接收線(xiàn)上的數據。從圖中看出,干擾信號后,COLCK3-IN時(shí)鐘產(chǎn)生,接收器接收數據??梢?jiàn)接收到的數據都是錯誤數據。簡(jiǎn)單說(shuō),文獻2中所論述方法不能識別真假數據起始位。再從程序可移植性來(lái)說(shuō),3倍頻采樣時(shí)鐘是用三個(gè)數值進(jìn)行計數判斷而得,當波特率改變,其數值都要做相應改變,這就增加了程序的修改難度。

起始位的檢測

3倍頻采樣方法無(wú)法識別真假數據起始位,導致其抗干擾性差,準確性得不到保證。筆者拋棄非常規3倍頻采樣方法,采用了常規的16倍頻采樣方法:采用數據速率的16倍進(jìn)行采樣,采樣時(shí)鐘連續采樣到8個(gè)低電平信號,可確定該低電平為真正的起始位,從而防止干擾信號產(chǎn)生的假起始位現象的發(fā)生。此后,接收器每隔16個(gè)采樣時(shí)鐘采樣一次,并把采樣到的數據作為輸入數據,以移位方式存入到接收移位寄存器。

起始位檢測8個(gè)連續脈沖的另一個(gè)更重要的原因是,采用16倍頻采樣的時(shí)鐘,第8個(gè)采樣脈沖所對應的數據波形正好是該位數據位波形的正中點(diǎn)(以時(shí)鐘上升沿采樣),在該處讀寫(xiě)數據應該是最安全點(diǎn)。

在設計時(shí),充分抓住異步數據的特征進(jìn)行設計:起始位為低電平、停止位為高電平、每幀數據幀結構相同。根據異步數據這些特征就可設計出以下相應程序:

process(clk16x,start) --產(chǎn)生clk1x時(shí)鐘進(jìn)程

begin

if start=’0’ then

q=0001;

elsif clk16x’event and clk16x=’1’

then

q=q+1;

end if;

end procESS ;

clk1x=q(3);

process(clk16x,i,serialin,rst) --起始位檢測進(jìn)程

begin

if rst=’1’ then

start=’0’;

elsif rising_edge(clk16x) then    if serialin=’0’ then

start=’1’ ;

elsif over=’0’ then

start=’1’;

else start=’0’;

end if;

end if;

end process;

process(clk1x,serialin,i,rst) --讀數據進(jìn)程

begin

if rst=’1’ then

buff= (others => ’1’);

Dout_P= (others => ’1’);

i=0;

over=’1’;

elsif rising_edge(clk1x) then

if i>

buff21=serialin;

i=i+1;

over=’0’;    else

i=0;

over=’1’;

Dout_P=buff;

end if;

end if;

end process ;

本設計采用硬件描述語(yǔ)言來(lái)進(jìn)行描述。clk16x為16倍頻采樣時(shí)鐘,clk1x是檢測到真正起始位后由clk16x時(shí)鐘分頻產(chǎn)生的采樣時(shí)鐘,start為開(kāi)始接收數據信號(接收數據期間為高電平)、serialin為異步數據輸入端口。平常,接收器按clk16x時(shí)鐘上升采樣 serialin。當采樣時(shí)鐘檢測到低電平時(shí)輸出一個(gè)高電平給start信號,clk1x分頻計數器啟動(dòng)。如果連續采集8個(gè)脈沖都為低電平(起始位之半),即確定該低電平為起始位,輸出一個(gè)低電平給接收數據完信號over(接收數據期間為低電平,接收完數據為高電平),over信號在低電平檢測共同作用下保持start為高電平。start長(cháng)時(shí)間保持高電平(8個(gè)clk16周期T)產(chǎn)生clk1x時(shí)鐘。反之判別為假起始位,over仍然為高電平,start卻變?yōu)榈碗娖?,clk1x分頻計數器復位,一直等到下次檢測serialin為低電平才重新啟動(dòng)??梢?jiàn),只有確定了起始位,clk1x時(shí)鐘才會(huì )產(chǎn)生,否則不產(chǎn)生。而clk16x時(shí)鐘始終存在,保證不會(huì )錯過(guò)每次接收線(xiàn)上的數據采樣。

結語(yǔ)

按常規的16倍頻采樣方法接收異步數據,其抗干擾性、移植性等都優(yōu)于3倍頻采樣方法。實(shí)際應用表明,提高采樣倍數,接收準確性相應提高;在一定范圍內,提高數據波特率不會(huì )影響接收準確性。



關(guān)鍵詞: 16倍頻采樣 3倍頻采樣 VHDL

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>