通用异步收发器设计课程设计报告 UART EDAWord文件下载.docx
《通用异步收发器设计课程设计报告 UART EDAWord文件下载.docx》由会员分享,可在线阅读,更多相关《通用异步收发器设计课程设计报告 UART EDAWord文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
![通用异步收发器设计课程设计报告 UART EDAWord文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/22/2a0b3a23-007b-402b-9c66-e73fedaec7cd/2a0b3a23-007b-402b-9c66-e73fedaec7cd1.gif)
UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。
功能较为简单,但使用方便、占用资源少,可以灵活地嵌入到各种设计之中。
串行外设用到的RS232-C异步串行接口,一般采用专用的集成电路即UART实现。
使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。
1.1UART结构
UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。
1.2UART的帧格式
UART是异步通信方式,发送方和接收方分别有各自独立的时钟,传输的速度由双方约定,使用起止式异步协议。
起止式异步协议的特点是以每一个字符为单位进行传输,字符之间没有固定的时间间隔要求,每个字符都以起始位开始,以停止位结束。
帧的格式如图一所示,每一个字符的前面都有一位起始位(低电平,逻辑值0),字符本身有5到8比特数据位组成,接着是一位校验位(也可以没有校验位),最后是一位(或一位半、二位)停止位,停止位后面是不定长度的空闲位。
停止位和空闲位都规定为高电平,这样就保证了起始位开始处一定有一个下降沿。
从图中可以看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起止式协议。
UART的帧格式的示意图如图一所示:
图一基本UART帧格式
1.3UART的基本原理
基本的UART通信只需要两条信号线:
RXD和TXD,TXD是UART的发送端,RXD是UART的接收端,接收与发送是全双工工作的。
通过在串行端口上使用调制解调器,串行数据可以通过电话线进行长距离的收发(图二)。
用于收发串行数据的串行通信接口通常称为UART(通用异步收发机)。
UART串行数据传输的示意图如图二所示:
图二串行数据传输
发送数据过程:
空闲状态,线路处于高电位,当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束。
接收数据过程:
空闲状态,线路处于高电位,当检测到线路的下降沿(线路电位由高电位变为低电位)说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。
2UART的设计与实现
2.1UART发送器
串行发送数据时每秒钟发送的比特个数称之为波特率,常用串行口波特率有9600、19200、115200等多种。
UART的数据帧的形式分组发送数据,以8位数据位、1位起始位和1位停止位的帧格式为例,每一个数据帧由10位数据构成,首先是一个低电平起始位来标志帧开始,随后由低至高发送8位数据,最后是1位高电平的停止位。
在逻辑结构上,每秒9600次的发送节拍由波特率发生器产生,它是一个参数化、分频比的整数分频器。
这里使用边沿逻辑,对于分频时钟的占空比并没有要求,所以直接用模n计算器进行分频。
9600Hz的时钟信号驱动10bit的一位计数器,将数据总线上载入的8bit数据加上起始位和停止位后由低到高依次移除。
发送逻辑的结构框图如图三所示:
图三发送结构框图
UART发送器的发送流程图如图四所示:
图四UART发送器的发送流程图
2.2UART接收器
UART是异步传输接口,没有时钟信号同步。
所以接收端需要进行过采样来保证数据的接收,RS232标准规定的过采样率是以发送波特率的16倍时钟对数据进行检测。
UART接收逻辑通过检测TxD上起始位的下降沿作为帧同步标准,这样就相当于把每个位分成了16份,为了避免干扰取16份中位于中部的6、7、8三个采样进行判别,以它们中两个或两个以上相同的值作为采样结果。
接收器结构框图如图五所示:
图五接收结构框图
接收器的接收原理流程图如图六所示:
图六接收器的接收原理流程图
2.3数码管动态显示
图八所示的是共阳数码管及其电路,其中每个数码管的8个段:
h、g、f、e、d、c、b、a(h是小数点)都连在一起。
图九是4位数码扫描显示电路,4个数码管分别由4个选通信号k1~k4来选择。
被选通的数码管显示数据。
例如,在某一时刻,k3为低电平,其余选通信号为高电平,这时仅k3对应的数码管显示来自段信号端的数据,就必须使得4个选通信号k1~k4分别被单独选通,与此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
共阳数码管及其电路示意图如图七所示:
图七共阳数码管及其电路
4位数码扫描电路的示意图如图八所示:
图八4位数码扫描电路
2.4波特率发生器
UART的接收和发送是按照相同的波特率进行收发的。
波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。
2.5UART设计总模块
将发送器和接收器模块组装起来,就能较容易地实现通用异步收发器总模块,而且硬件实现不需要很多资源,尤其能较灵活地嵌入到FPGA/CPLD的开发中。
UART设计流程图如图九所示:
图九UART设计流程图
3硬件电路的调试
3.1硬件的测试
图十为硬件的测试程序显示图,测试程序让4为数码管全部亮,蜂鸣器响。
通过测试,硬件正常工作。
部分测试程序代码:
清单1部分测试程序
P7<
=PPPP(0);
P6<
=PPPP
(1);
P5<
=PPPP
(2);
P4<
=PPPP(3);
P3<
=PPPP(4);
P2<
=PPPP(5);
P1<
=PPPP(6);
P0<
=PPPP(7);
KKKK<
=K4&
K3&
K2&
K1;
C4<
=CCCC(0);
C3<
=CCCC
(1);
C2<
=CCCC
(2);
C1<
=CCCC(3);
PROCESS(KKKK)
BEGIN
CASEKKKKIS
WHEN"
1110"
=>
PPPP<
="
00000000"
;
CCCC<
0000"
MING<
='
1'
1101"
1111"
1011"
0'
0111"
WHENOTHERS=>
ENDCASE;
ENDPROCESS;
硬件的测试图如图十所示:
图十硬件的测试图
3.2数码管动态数据
通过动态数码管显示程序使动态扫描数码管实现动态显示。
图十一是数码管动态显示结果图。
动态数码管显示程序代码:
清单2动态数码管显示程序
P2:
PROCESS(T)
BEGIN
CASETIS
WHEN"
00"
C<
A<
=5;
WHEN"
01"
=6;
10"
=7;
11"
=8;
WHENOTHERS=>
NULL;
ENDPROCESSP2;
P3:
PROCESS(A)
CASEAIS
WHEN1=>
L<
="
10011111"
--MING<
--1
WHEN2=>
00100101"
--2
WHEN3=>
00001101"
--3
WHEN4=>
10011001"
--4
WHEN5=>
01001001"
--5
WHEN6=>
01000001"
--6
WHEN7=>
00011111"
--7
WHEN8=>
00000001"
--8
WHEN9=>
00001001"
--9
WHEN0=>
00000011"
--0
WHENOTHERS=>
ENDCASE;
ENDPROCESSP3;
动态数码管显示如图十一所示:
图十一动态数码管显示
3.3通过按键实现数据增减
3.3.1键盘按键消抖
机械式键盘在按下时,由于机械触点的弹性与接触特性,会产生瞬间的电平抖动,在实际应用中如果不对按键进行消抖处理可能会引起控制的逻辑的误触发。
在本下次设计中,采用脉冲采样的方法,即对输入信号进行3次取样,如果取样值均是统一电平,则认为有按键按下且处于稳定状态,如果采样过程中不能发现连续满足3次采样值相同时,认为是误触发。
键盘按键消抖程序部分代码:
清单3键盘按键消抖程序部分代码
p2:
process(clock,key_in)
begin
ifclock'
eventandclock='
then
ifdiv_clk='
then
dout1<
=key_in;
dout2<
=dout1;
dout3<
=dout2;
endif;
endif;
endprocessp2;
p3:
process(clock)
begin
ifclock'
buff<
=dout1ordout2ordout3;
endif;
endprocessp3;
key_edge<
=(not(dout1ordout2ordout3))andbuff;
3.3.2加一减一的程序
按键进行消抖后,按UP键实现加1功能,按DOWN键实现减1功能。
加1减1部分程序代码:
清单4加1减1程序代码
p4:
process(clock,key_edge,tim)
begin
casekey_edgeis
when"
0001"
=>
iftim="
1001"
tim<
else
=tim+1;
0010"
iftim="
tim<
else
=tim-1;
whenothers=>
null;
endcase;
endif;
endprocessp4;
3.3.3仿真图
图十二是用RTLViewer仿真的电路图(用了62个宏模块,22个引脚):
图十二RTL电路图
4总结
通过本次课程设计,系统学习了应用EDA的VHDL语言设计、仿真与实现硬件的方法。
在本次的设计中通过对波特率发生器、发送器和接收器模块的设计与仿真,能实现通用异步收发器总模块。
5参考文献
[1]郑亚民,董晓舟.VHDL与VerilogHDL比较学习及建模指导【M】.北京:
国防工业出版社,2008.6
[2]潘松,黄继业.EDA技术实验教程(第二版)
【M】.北京:
科学出版社,2005
[3]江国强.数字系统的VHDL设计【M】.北京:
机械工业出版社,2008.10
[4]李莉,路而红.电子设计自动化(EDA)课程设计与项目实例【M】.北京:
中国电力出版社,2009