首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于VHDL的串口RS232电路设计-3

基于VHDL的串口RS232电路设计-3

4 串行接收电路的设计

接收电路比发送电路要复杂,接收电路要时实检测起始位的到来,一旦检测到起始位到,就要将这一帧数据接收下来。为提高接收的准确性,减少误码率,每一位数据都用3倍频的波特率对数据进行采样(如图3所示),然后对3次采样结果进行判决:如果3次采样中至少有2次为高电平,则接收这一位数据被判决为高电平,否者,为低电平。

4.1 波特率发生器和采样时钟的设计

为完成3次采样,除了频率为9600Hz的接收时钟外,还要有一个3倍频的采样时钟。下面是实现上述功能的VHDL源程序:


Library Ieee;

Use Ieee.Std_logic_1164.All;


Entity Count625 Is

Port(Clk,En:in Std_logic; Clock1,Clock3:Out Std_logic);

End Count625;

Architecture Count625_arc Of Count625 Is

Begin

Process(Clk,En)

Variable Count:integer Range 0 To 625 :=0;

Begin

If En=''0'' Then

NUll;

Elsif (Rising_edge(Clk)) Then

Count:=Count+1;

If Count=625 Then

Clock1<=''1''; Count:=0;

Else

Clock1<=''0'';

End If;

If (Count=100 Or Count=300 Or Count=500 ) Then

Clock3<=''1'';

Else

Clock3<=''0'';

End If;

End If;

End Process;

End Count625_arc;

其中Clk为6MHz的时钟;En控制波形的产生; Clock1为9600Hz的接收时钟; Clock3为3倍频的采样时钟。

4.2 接收电路的设计

串行接收电路首先要能判断接收数据的到来,即每一帧的开始,然后对数据进行3次采样,最后判决输出。为简化设计,帧格式仍然采用1位开始位+8位数据位+1位停止位。下面是设计的接收电路VHDL程序:


Library Ieee;

Use Ieee.Std_logic_1164.All;

Entity Com_receive10 Is



Port(Com,Clr,Clk1,Clk3:In Std_logic;Qut Std_logic_vector(0 To 9);Validut Std_logic);

End Com_receive10;


Architecture Com_receive10_arc Of Com_receive10 Is

Signal Enable:std_logic :=''1'';

Signal Hold:std_logic :=''0'';

Signal N:std_logic_vector(0 To 2) :="000";

Begin

Valid<=Enable And Hold;

Process(Clk1,Clr)

Variable Num:integer Range 0 To 9 :=0;

Begin

If Clr=''0'' Then

Enable<=''1''  Num:=0; Q<="0000000000";

Elsif (Rising_edge(Clk1)) Then

Q(Num)<=(N(0) And N(1)) Or (N(1) And N(2)) Or (N(0) And N(2));

If Num=9 Then

Enable<=''0''; Num:=0;

Else

Num:=Num+1;

End If;

End If;

End Process;

Process(Clk3,Clr)

Variable M:integer Range 0 To 2 :=0;

Begin

If Clr=''0'' Then

M:=0;

Elsif(Rising_edge(Clk3)) Then

N(M)<=Com;

If M=2 Then

M:=0;

Else

M:=M+1;

End If;

End If;

End Process;

Process(Clr,Com)

Begin



If Clr=''0'' Then

Hold<=''0'';


Elsif Falling_edge(Com) Then

Hold<=''1'';

End If;

End Process;

End Com_receive10_arc;

其中,N(M)<=Com 用来对波形采样;Q(Num)<=(N(0) And N(1)) Or (N(1) And N(2)) Or (N(0) And N(2))是对其中1位数据的3次采样结果判决;Num用来记录接收的数据位数;Falling_edge(Com)是用来时实检测每一帧的起始位(即下降沿)的到来;Valid<=Enable And Hold用来输出到波特率发生器电路单元控制时钟的产生,最后将一帧的10位数据输出。

用MAX+Plus II 9.3 Baseline将上面两个VHDL文件制成库器件,然后在电路图上调出来,最后做成的串行接收电路图如图4所示。



4.3 时序仿真

时序仿真如图5所示,Receive为接收到的序


列波形,最后结果:接收到的数据位为6D,起始位为0,停止位为1。

5 结束语

VHDL 语言设计的出现从根本上改变了以往数字电路的设计模式,使电路设计由硬件设计转变为软件设计,这样提高了设计的灵活性,降低了电路的复杂程度,修改起来也很方便。利用VHDL设计的灵活性,根据串行通信协议的要求,可以在实验室利用先进的EDA工具,用VHDL设计出符合自己实际需求的异步串行通信电路。

本文设计出的基于VHDL异步串行通信电路,在实验室已经与计算机串口RS-232进行了通信实验(注意:TTL和RS-232逻辑电平的转换)。实验证明,0至255的所有数据都能被正确收、发。
返回列表