• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 无线通信 > 技术文章 > 异步通信起始位正确检测的VHDL实现

异步通信起始位正确检测的VHDL实现

录入:edatop.com     点击:

在设计时,充分抓住异步数据的特征进行设计:起始位为低电平、停止位为高电平、每帧数据帧结构相同。根据异步数据这些特征就可设计出以下相应程序:

process(clk16x,start) --产生clk1x时钟进程

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) --起始位检测进程

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) --读数据进程

begin

if rst='1' then

buff<= (others => '1');

Dout_P<= (others => '1');

i<=0;

over<='1';

elsif rising_edge(clk1x) then

if i< p>

buff21<=serialin;

i<=i+1;

over<='0';    else

i<=0;

over<='1';

Dout_P<=buff;

end if;

end if;

end process ;

本设计采用VHDL硬件描述语言来进行描述。clk16x为16倍频采样时钟,clk1x是检测到真正起始位后由clk16x时钟分频产生的采样时钟,start为开始接收数据信号(接收数据期间为高电平)、serialin为异步数据输入端口。平常,接收器按clk16x时钟上升采样serialin。当采样时钟检测到低电平时输出一个高电平给start信号,clk1x分频计数器启动。如果连续采集8个脉冲都为低电平(起始位之半),即确定该低电平为起始位,输出一个低电平给接收数据完信号over(接收数据期间为低电平,接收完数据为高电平),over信号在低电平检测共同作用下保持start为高电平。start长时间保持高电平(8个clk16周期T)产生clk1x时钟。反之判别为假起始位,over仍然为高电平,start却变为低电平,clk1x分频计数器复位,一直等到下次检测serialin为低电平才重新启动。可见,只有确定了起始位,clk1x时钟才会产生,否则不产生。而clk16x时钟始终存在,保证不会错过每次接收线上的数据采样。

图5所示为接收信号时序仿真波形。从图中可以清楚看到clk1x的上升沿都对准了每个数据的中间。图6是存在干扰信号起始位检测时序仿真波形。从图中看到干扰信号后,没有产生clk1x时钟,接收器不接收数据。当真正检测到起始位,产生clk1x时钟,接收器开始接收数据。改变数据波特率, clk1x计数值不用改变,只要改变clk16x的分频计数器的计数值就可以了。对于自定义的异步数据,只要是起始位是低电平,停止位是高电平,改变length的值就可以接收不同位数数据。可见以上代码容易移植。笔者在应用中自定义21位异步数据验证了其性能优越:无误码率高,抗干扰性强。

图5 16倍频采样时序图

图6 16倍频采样时序图(有干扰信号)

结语

按常规的16倍频采样方法接收异步数据,其抗干扰性、移植性等都优于3倍频采样方法。实际应用表明,提高采样倍数,接收准确性相应提高;在一定范围内,提高数据波特率不会影响接收准确性。

作者:杨润利,曹伟军,郑莉,雷庆华 电子科技集团公司 来源:电子产品世界

上一篇:详解IP电话的工作流程
下一篇:浅析IP电话的基本原理

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

射频和天线工程师培训课程详情>>

  网站地图