郑州轻工业学院课程设计说明书题目:基于FPGA的UART设计姓名:王鹏飞院(系):电子信息工程学院专业班级:电子信息工程13-01学号:541301030135指导教师:杜海明成绩:时间:2016年6月21日至2016年6月28日郑州轻工业学院课程设计任务书题目基于FPGA的UART设计专业、班级电子信息工程13-01学号35姓名王鹏飞主要内容、基本要求、主要参考资料等:主要内容:要求学生使用硬件描述语言描述硬件功能,利用FPGA并采用模块化设计方法设计UART(通用异步收发器)的各个模块。其中包括波特发生器,程序控制器,UART数据接收器和UART数据发送器,本文采用的外部时钟为48MHZ,波特率为9600。在软件上进行设计、编译和仿真。基本要求:1、掌握FPGA的程序设计方法。2、掌握硬件描述语言语法。3、程序设计完成后要求在软件中实现功能仿真。主要参考资料:1、夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,20032、潘松,王国栋.VHDL实用教程「M].成都:电子科技大学出版社,2003.完成期限:2016.6.21—2016.6.28指导教师签名:课程负责人签名:2016年6月18日基于FPGA的UART设计摘要UART作为RS232协议的控制接口得到了广泛的应用,将UART的功能集成到FPGA芯片中,可使整个系统更为灵活、紧凑,减小整个电路的体积,提高系统的可靠性和稳定性。提出了一种基于FPGA的UART的实现方法,具体描述了发送、接收等模块的设计,恰当使用了有限状态机,实现了FPGA上的UART的设计,给出仿真结果。关键词FPGAUART模块化有限状态机I目录1FPGA与UART简介...................................................................................................................11.1FPGA介绍............................................................................................................................11.2UART简介.............................................................................................................................12UART工作原理及功能设计....................................................................................................32.1UART工作原理....................................................................................................................32.2UART功能设计....................................................................................................................32.2.1波特率发生器设计......................................................................................................42.2.2发送器设计....................................................................................................................52.2.3接收器设计....................................................................................................................53.仿真........................................................................................................................................................84总结........................................................................................................................................................9参考文献...............................................................................................................................................10011FPGA与UART简介1.1FPGA介绍FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA主要特点:1)采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。2)FPGA可做其它全定制或半定制ASIC电路的中试样片。3)FPGA内部有丰富的触发器和I/O引脚。4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。5)FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。1.2UART简介通用异步收发器(UART)是一种短距离串行通信接口,主要用于计算机、微处理器与小型通信网络之间的短距离通信。目前通信接口技术已发展成为硬件和软件相结合的综合性技术,在嵌入式系统设计中,异步串行通信接口已成为必不可少的一部分。随着FPGA技术和嵌入式系统的发展,在单芯片上可以实现多种功能,虽然目前许多器件已经把UART集成在内,但是要求用单一芯片实现处理器和控制器等复杂功能,同时需要串行通信场合,采用高密度、大容量FPGA器件来设计UART具有很高的实用价值。计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(FirstInputFirstOutput,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数2据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550UART。32UART工作原理及功能设计2.1UART工作原理UART是一种串行数据总线,用于异步通信,并且双向通信,可实现全双工发送和接收。基本的UART只需要两条信号线(TXD,RXD)和一条地线就可以完成数据的互相通信,接收和发送互不干扰,这样就大大节省了传输费用。由于UART是异步通信,所以需要对数据进行同步。UART发送/接收数据的传输格式如图1所示,一个字符单位由开始位、数据位、校验位、停止位组成(其中校验位可供选)。发送或接收一个完整的字节信息,首先是一个作为起始位的逻辑“o”位,接着是8个数据位,然后是停止位逻辑“1”位,数据线空闲时为高或“1”状态。在字符的8位数据部分,先发送数据的最低位,最后发送最高位。每位持续时间是固定的,由发送器本地时钟控制,每秒发送的数据位个数,即为“波特率”。起始位和停止位起着很重要的作用。显然,它们标志每个字符的开始和结束,但更重要的是他们使接收器能把他的局部时钟与每个新开始接收的字符再同步。异步通信没有可参照的时钟信号,发送器随时都可能发送数据,任何时刻串行数据到来时,接收器必须准确地发现起始位下降沿的出现时间,从而正确地采样紧接着的io或者m位(包括开始位、数据位和停止位),接收器的时钟和发送器的时钟不是同一个,因此,接收器所确定的采样点的间隔和发送器所确定的位间隔时间不同,这点要特别注意。2.2UART功能设计异步通信的一帧传输经历以下步骤:1)空闲状态。发送方连续发送信号,处于信息“1”状态。2)开始传输。发送方在任何时刻将传号变成空号,即“1”跳变到“0”,并持续1位时间表明发送方开始传输数据。而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。3)奇偶传输。数据传输之后是可供选择的奇偶位发送或接收。4)停止传输。最后是发送或接收的停止位,其状态恒为“1”。设计的基本原则是保留最主要的功能,基于FPGA的UART系统由波特率时钟发生器、接收器和发送器3个子模块组成,如图2所示。4图2UART功能框图2.2.1波特率发生器设计波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。在系统中用一个计数器来完成这个功能,分频系数N决定了波特率的数值。该计数器一般工作在一个频率较高的系统时钟下,当计数到N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。如系统时钟频率是6.4MHz,要求波特率是9600,则16倍波特率时钟的周期约等于42个系统时钟周期,则计数器取42/2=21时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。使用VHDL来描述波特率发生器的完整代码如下:Process(rst,clk6_4M)ifrst=’0’thencount=0;bclkr=’0’;elsifrising_edge(clk6_4M)th