基于FPGA的UART模块设计_第1页
基于FPGA的UART模块设计_第2页
基于FPGA的UART模块设计_第3页
基于FPGA的UART模块设计_第4页
基于FPGA的UART模块设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编号 基于FPGA的UART模块设计与实现Design and Realization of UART based on FPGA学 生 姓 名周大勇专 业控制科学与工程学 号S120400525指 导 教 师杨晓慧学 院电子信息工程学院二一三年六月 摘 要UART因其可靠性高,传输距离远,线路简单,同时UART作为RS232协议的控制接口,从而成为比较广泛的串行数据通信电路,而现在大部分集成电路通信用的UART芯片,存在成本高,电路复杂,移植性较差等缺点,本文提出了一种将UART的功能集成在FPGA芯片中,可使整个系统更为灵活、紧凑,减小整个电路的体积,提高系统的可靠性和稳定性。本模块功能全

2、部基于verilogHDL硬件描述语言。关键词:FPGA, UART ,verilogHDL ,RS232 ABSTRACTUART, because of its high reliability, long transmission distance and the simple line, moreover mainly used in communication between device with RS232 interface. Thus it is becoming more extensive serial data communication circuit. But no

3、w most of the integrated UART chips used in communications, have faults of high cost and poor portability. The circuit of the chip is complex. This paper presents a method that UART function will be integrated in FPGA chip, It can makesystem more compact, flexible, reliable and stable. All functions

4、 of module are based on verilogHDL hardware description language.Keywords: FPGA, UART, verilogHDL, RS232目 录摘 要IABSTRACTII目 录II第一章 绪 论2第二章 UART 简介2第三章UART功能设计23.1 波特率发生模块23.2 波特率接收模块23.3 UART发送模块2第四章 顶层电路及实验数据2第五章 结 论2致 谢2参考文献2第一章 绪 论通用异步收发器(universal asynchronous receiver transmitter, UART)尽管自20世纪70

5、年代就已出现,但因其简单可靠,目前仍是一种使用广泛的串行通信接口。各种微处理器,不论是单片机,还是DSP、ARM,UART都是基本外围模块。一般UART由专用芯片来实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。本文提出一种基于FPGA的UART模块设,本文设计的UART符合RS232串行通信标准。当我们不需要用到完整的的UART功能和一些辅助功能时,就可以将需要的UART功能集成用FPGA来实现,然而,FPGA内部并不拥有CPU控制单元,无法处理由UART控制器产生的中断,所以FPGA不能利用现成的UART控制

6、器构成异步串行接口,必须将UART控制器的功能集成到FPGA内部。从而可以大大的减少了体积、简化了电路,也提高了系统的灵活性。第二章 UART 简介UART是广泛使用的串行数据传输协议2。基本的UART通信只需要2根信号线(RXD、TXD)就可以完成数据的相互通信,接收与发送都是全双工形式。RXD是UART接收端,为输入;TXD为UART发送端,为输出。UART的基本特点是在其信号线上共有2种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线保持在逻辑高电平状态。当发送器要发送字符时,起始位使数据线处于逻辑0状态,提示接收器数据传输即将开始。波特率和数据帧格式是UA

7、RT通信中的2个重要指标,波特率表示每秒钟传输二进制数据的位数,表征了数据传输的速率。国际上规定了一系列标准的波特率,如9600 b/s、19200 b/s、115200 b/s、等。数据帧格式定义了所发数据每位的意义,UART的帧格式如图1所示。一般情况每一数据帧,依次由起始位(位)、数据位(位),奇偶校验位(可选的位)以及停止位(位)组成。其中数据位部分是从最低位先开始传送的;奇偶校验位是对帧数据中的数据部分和校验位计算,使的个数满足奇数个或偶数个。当空闲时,收发引脚与均是高电平。一旦需要发送数据,则首先向引脚输出低电平作为起始位,表示帧数据的开始。而在接收数据时,检测到起始位将启动一次数

8、据接收流程。本设计为了简化电路设计,减少电路面积,这里省略了UART系统中的奇偶检验模块。 图1 UART的帧格式第三章UART功能设计 计算机与FPGA之间进行通信!是通过计算机的串行接口实现的。为了实现RS232接口通信,系统整体结构如图2所示。RS232连接方式采用了9芯的连接座与计算机进行连接,FPGA与RS232连接座之间采用电平转换芯片MAX232以实现TTL/COMS电平之间的转换FPGA实现UART的核心功能。UART电路由波特率发生器、发送模块和接收模块3部分组成。波特率发生器为发送模块和接收模块提供时钟信号,以实现数据的异步可靠传输。RXD和TXD分别是接收模块数据线和发送

9、模块数据线。本方案设计的UART数据格式为数据位为8位,波特率可选,不设奇偶校验位,1位起始位,1位停止位。异步通信的过程如下:计算机产生发送串行数据!由RS232连接座的TXD端输入,经过MAX232进行电平转换由FPGA串口接收模块的RXD端进入,进行串并转换得到8位位宽数据总线,该数据由FPGA的其他模块进行处理;FPGA产生发送8位并行数据,数据由8位数据线进入FPGA串口发送模块,进行并串转换后由FPGA串口发送模块的TXD输出到MAX232的T1IN管脚,经过MAX232电平转换由RS232连接座的RXD端输出给计算。 图2 UART整体结构3.1 波特率发生模块波特率发生器实际上

10、就是一个简单的分频器,波特率发生器的功能是产生和 RS- 232 通信所采用的波特率同步的时钟,这样才能按照 RS- 232 串行通信的时序要求进行数据接收或发送。实现波特率时钟的基本思路就是设计一个计数器,该计数器工作在速度很高的系统时钟下,当计数到某数值时将输出置为高电平,再计数一定数值后将输出置为低电平,如此反复就能得到所需的波特率时。本设计采用系统时钟频率50Mhz,目的是为了在接收时进行精确的采样,以提取异步的串行数据。本设计波特率选择的是115200b/s,既每秒传输115200bit数据。为实现此波特率,应计数为50M/115200=434个数。为精确采样,防止上升沿或下降沿出现

11、斜坡现象。本设计选择在就数值中间采样,既采样点为216。波特率发生模块和时序仿真波形如图3和图4所示。图3 波特率发生模块图4 波特率时序仿真波形使用verilogHDL 硬件语言描述波特率发生器的完整代码如下:module bps_generate(clk,clr,bps,bps_start);output bps;input clk,clr;input bps_start;parameter baud_115200=13'd433;parameter baud_115200_h=13'd216;reg 12:0 cnt;always (posedge clk or nege

12、dge clr)if(!clr) cnt<=13'b0;else if(cnt=baud_115200)|!bps_start) cnt<=13'b0;else cnt<=cnt+1'b1;reg bps_r; always (posedge clk or negedge clr)if(!clr) bps_r<=1'b0;else if(cnt=baud_115200_h&&bps_start) bps_r<=1'b1; else bps_r<=1'b0;assign bps=bps_r;end

13、module3.2 波特率接收模块接收模块是整个UART的设计的重点,其主要功能是检测数据帧的起始位,然后对接收的数据进行串行到并行的转换,并将接收好的数据储存在寄存器内等待机处理接收器的接受时钟与每个接收字符同步是接收功能实现的关键,但是串行数据帧与数据接收时钟是异步的,所以必须有效地控制采集通信线路上的电平信号的时机,以保证异步通信的双方准确无误地交换信息。UART接受模块和时序仿真波形如图5和图6所示。图5 UART接受模块图6 UART接收模块时序仿真波形接收模块时序仿真波形如图6所示,测试的串行发送数据为“0111011101”,接收模块输出数据为0x77,其中1位开始位,8位数据,

14、1位停止位。此时产生接收完标志信号rec满足传输数据帧格式,满足发送数据帧格式。使用verilogHDL 硬件语言描述UART接收模块的完整代码如下:module uart_recive(clk,clr,bps,bps_start,RXD,parallel_out,indicate_rec);input clk,clr;input RXD; input bps; output bps_start;output indicate_rec; output 7:0 parallel_out;wire negedge_RXD;reg rxd1,rxd2,rxd3,rxd4;always(posedge

15、 clk or negedge clr)beginif(!clr) beginrxd1<=1'b1;rxd2<=1'b1;rxd3<=1'b1;rxd4<=1'b1;endelse beginrxd1<=RXD;rxd2<=rxd1;rxd3<=rxd2;rxd4<=rxd3;endendassign negedge_RXD = rxd4&rxd3&rxd2&rxd1; reg bps_start_r;reg indicate_rec; reg3:0 num;always(posedge c

16、lk or negedge clr)if(!clr) beginbps_start_r <= 1'bz;indicate_rec<= 1'b0;endelse if(negedge_RXD) begin/接收到串口接收线rs232_rx的下降沿标志信号bps_start_r <= 1'b1;/启动串口准备数据接收indicate_rec <= 1'b1;/接收数据中断信号使能endelse if(num=4'd10) begin/接收完有用数据信息bps_start_r <= 1'b0;/数据接收完毕,释放波特率启动

17、信号indicate_rec <= 1'b0;/接收数据中断信号关闭endassign bps_start = bps_start_r;reg7:0 rx_temp_data;reg7:0 parallel_temp;always (posedge clk or negedge clr) beginif(!clr) beginrx_temp_data <= 8'd0;num <= 4'd0;parallel_temp <= 8'd0;endelse if(indicate_rec) beginif(bps) beginnum<=nu

18、m+1'b1;case(num)4'd1:rx_temp_data0=RXD;4'd2:rx_temp_data1=RXD;4'd3:rx_temp_data2=RXD;4'd4:rx_temp_data3=RXD;4'd5:rx_temp_data4=RXD;4'd6:rx_temp_data5=RXD;4'd7:rx_temp_data6=RXD;4'd8:rx_temp_data7=RXD;default:;endcaseendelse if(num=4'd10) beginnum<=4'b0;

19、parallel_temp <= rx_temp_data;endendendassign parallel_out=parallel_temp;endmodule3.3 UART发送模块发送模块主要实现对并行数据的并串转换,并把串行数据按照既定数据帧格式进行输出。该数据帧格式遵循1位起始位、8位数据位和1位停止位的固定格式。UART发送模块和时序仿真波形如图7和图8所示。图7 UART发送模块图8 UART发送模块时序仿真波形发送模块时序仿真波形如图8所示,测试的并行发送数据为“0111 0111”,发送模块输出数据为0111011101,其中1位开始位,8位数据,1位停止位。满足发送

20、数据帧格式。使用verilogHDL 硬件语言描述UART发送模块的完整代码如下:module uart_send(clk,clr,bps,bps_start,indicate,parallel_in,TXD);output bps_start,TXD;input clk,clr,bps,indicate;input 7:0 parallel_in;reg indicate1,indicate2,indicate3;wire indicate_s;always(posedge clk or negedge clr)beginif(!clr) beginindicate1<=1'b

21、0;indicate2<=1'b0;indicate3<=1'b0;endelse beginindicate1<=indicate;indicate2<=indicate1;indicate3<=indicate2;end endassign indicate_s=indicate2&indicate3; reg indicate_send_r;reg bps_start_r;reg 7:0 temp_data;reg 3:0 counter;always(posedge clk or negedge clr)beginif(!clr)

22、beginindicate_send_r<=1'b0;temp_data<=8'b0;bps_start_r<=1'bz;endelse if(indicate_s) begin bps_start_r<=1'b1; temp_data<=parallel_in; indicate_send_r<=1'b1; endelse if(counter=4'd10) begin bps_start_r<=1'b0; indicate_send_r<=1'b0; endendassign b

23、ps_start=bps_start_r;reg TXD_r;always(posedge clk or negedge clr)beginif(!clr) begin TXD_r<=1'b1; counter<=4'b0; endelse if(indicate_send_r) begin if(bps) begin counter<=counter+1'b1; case(counter) 4'd0:TXD_r=1'b0; 4'd1:TXD_r=temp_data0; 4'd2:TXD_r=temp_data1; 4'd3:TXD_r=temp_data2; 4'd4:TXD_r=temp_data3; 4'd5:TXD_r=temp_data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论