基于FPGA的UART控制器的设计和实现_第1页
基于FPGA的UART控制器的设计和实现_第2页
基于FPGA的UART控制器的设计和实现_第3页
基于FPGA的UART控制器的设计和实现_第4页
基于FPGA的UART控制器的设计和实现_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、基于FPGA的UART控制器的设计和实现Design and Realization of UART Controller Based on FPGA(江苏大学) 邹杰 杨建宁Zou,Jie Yang,Jianning摘要:文章介绍了一种在现场可编程门阵列(FPGA)上实现UART的方法。UART的波特率可设置调整,工作状态可读取。系统结构进行了模块化分解,使之适应自顶向下(Top-Down)的设计方法。核心部分采用有限状态机(FSM)实现,使控制逻辑直观简单,大幅度提高了设计效率。最后给出功能仿真结果,验证了整个设计的正确性和可靠性。 关键词:UART 有限状态机 FPGA中图分类号:TP3

2、32 文献标识码:BAbstract:This paper introduces a method to implement UART based on Field Programmable Gate Array(FPGA).Its baud rate can be set and the states can be read.The structure of this system is divided in modularization so that can fit the method Top-Down.The hard core of this system is implement

3、ed with finite state machine(FSM).It makes the logic of control more intuitionistic and more briefness.The efficiency of the design is improved in a wide range.Simulating experiments,present at last to proved the validity and reliability in the whole design.Key Word: UART FSM FPGA引言异步串行通信要求的传输线少,可靠性

4、高,传输距离远,被广泛应用于微机和外设的数据交换。通常都由通用异步收发器UART(Universal Asynchronous Receiver-Transmitter)来实现该功能,如IBM PC机中作为串行接口芯片的National INS 8250。在实际应用中,往往只需要UART的几个主要功能,专用的接口芯片会造成资源浪费和成本提高,特别是近来电子设计领域中日趋成熟的SOC技术,由于要在单块或极少数的几块芯片中实现整个系统的功能,设计者就必须将类似的功能模块集成到FPGA中。本文提出了一种采用FPGA实现UART功能的方法,可以有效地解决上述问题。1 功能简介该UART控制器所传输的一

5、帧串行数据包括1位起始位,8位数据位和1位停止位。传输时,低位在前,高位在后。接收端检测并确认起始位后,接收8位数据位。停止位接收完毕后,向CPU发出中断信号,同时将数据送到计算机的8位数据总线上。发送数据时,先由CPU设置波特率,然后将8位并行数据加上起始位和停止位发送给外设。停止位发送完毕后,向CPU发出中断信号。在数据发送和接收过程中,CPU可以加载控制信号来读取UART的工作状态,以便进行实时处理。2 功能实现2.1 系统总体结构在大规模电路的设计中,广泛采用层次化,结构化的设计方法。它将一个完整的硬件设计任务从系统级开始,划分为若干个可操作的模块,编制出相应的模型并进行仿真验证,最后

6、在系统级上进行组合。这样在提高设计效率的同时又提高了设计质量,是目前复杂数字系统实现的主要手段,也是本文设计思想的基础。系统的结构划分如图1所示,其中:clk为系统时钟,RESET为全局异步复位信号,C为控制信号,CS和WR分别为片选和读写信号,RXD和TXD分别为串行输出和输入,D_IN和D_OUT为并行输入和输出,INT_RXD和INT_TXD为接收完成中断和发送完成中断信号。图12.2 分频模块UART的波特率和有效采样位置由该模块确定。实现原理是对系统时钟clk进行分频,分频系数N由CPU设置。分频功能由一个16位计数器完成,计数值每计到N/2时,分频输出信号(sample)为高电平,

7、计数溢出后变为低电平。其频率为时钟频率的1/N,即为UART的波特率。接收数据时,系统时钟clk作为采样信号,即采样频率为波特率的N倍。通过串行接口模块的设计,可以使有效采样位置处于数据位的中间。由于D_IN是8位数据线,故要在外部控制信号C0和内部使能信号的作用下分2次将分频系数写入计数器中。 2.3 CPU控制模块该模块对CPU的控制信号C进行译码,产生相应的内部信号。(1)中断清除:清除INT_RXD和INT_TXD上的中断信号。(2)发送使能:启动TXD端口发送数据。(3)内部数据选择,改变D_OUT的输出为接收到的数据或UART的当前工作状态。(4)分频使能:允许分频模块工作。 2.

8、4 串行接口模块UART通过该模块与外设交互,也是整个控制器的核心部分。如图2所示,划分为4个子模块:(1)发送接收控制模块,实现数据的串并转换,同时产生相应的状态信号。(2)状态寄存器模块,产生中断信号和当前工作状态信息供CPU读取。(3)数据选择模块,改变D_IN上的输出。(4)数据转换模块,保存串行数据到数据接收寄存器。图2发送接收控制模块是一个较复杂的时序逻辑电路,设计主要集中在控制逻辑上,这非常适合用有限状态机来实现。由于发送部分和接收部分的状态机实现方法类似,在这里仅着重介绍接收部分的实现方法。图3是接收部分的状态转换图。图3这里共定义了8个工作状态,采用了更适合FPGA实现的独热

9、码(one-hot code)编码方式。虽然这样比二进制编码方式(binary-code)和格雷码编码方式(gray-code)要多消耗5个触发器,但减少了组合逻辑的复杂性,通过综合工具综合出来的结果也更加简单,有效的提高了电路的运行速度和工作稳定性,这在触发器资源十分丰富的FPGA中,是一种十分有效的设计方法。以下是描述状态机编码方式的Verilog HDL程序。parameter 7:0 / 独热码编码方式 ,8个状态采用了8个触发器waiting = 8'b00000001 , check = 8'b00000010 , lock = 8'b00000100 ,r

10、ead_wait = 8'b00001000 ,read_data = 8'b00010000 ,read_stop = 8'b00100000 ,read_stop_done = 8'b01000000 ,finish= 8'b10000000 ;状态机各状态和工作过程如下:空闲状态:系统复位进入此状态,等待起始位到来。RXD上的一个电平负跳变使FSM进入起始位检测状态,同时采样使能信号有效,分频模块中的计数器开始工作。起始位检测状态:RXD上的低电平再保持1个clk周期,则被认为是有效的起始位,sample信号变高使FSM转移到读取等待状态,否则将回

11、到空闲状态。读取等待状态:准备接收一个新的数据位。数据位读取状态:输出读取数据信号给数据转换模块,保存1位串行数据到数据寄存器,并使寄存器指针指向下一位。数据位的采样信号使用系统时钟,由于分频模块中计数器的初值设置为1且在起始位检测时就开始计数,故sample信号正跳变时处于数据位第3个时钟信号的上升沿,第4个时钟信号将作为有效采样信号,它的位置正处于数据位的中间,这样采集到的数据可以避免两端的边沿失真,提高了接收的可靠性。之后FSM回到读取等待状态,准备下一位数据的接收。停止位读取状态:当数据寄存器满时,进入该状态。同样在中间位置采样以确定停止位。停止位接收完毕后4个时钟周期,INT_RXD

12、输出中断信号。这样就完成了一个数据帧的接收。在用Verilog HDL语言实现状态机时,可以将状态变化和逻辑输出分2部分描述,即采用2个独立的always组合块。这是因为FSM的状态变化属于时序逻辑,而FSM的输出属于组合逻辑,将其分开描述有利于综合工具优化整个FSM,同时也有利于发现问题,方便调试。上述2个模块的实现也可以不采用有限状态机,而是在数据发送寄存器和数据接收寄存器的两端增加适当的辅助寄存器,并置适当的初值,在发送和接收过程中,通过判断辅助寄存器和数据寄存器的状态组合来确定处于什么工作阶段。由于这种方法需要的控制信号复杂,设计难度大,调试不方便,所以在大规模数字电路设计中显得很不适

13、用。而利用状态机实现正好克服了这些缺点,明显加快了设计流程,是复杂系统设计的重要手段。状态寄存器模块的8位输出中低4位将UART的工作状态提供给CPU读取,从低到高分别表示正在发送、正在接收、发送完成和接收完成。2.5 CPU接口模块该模块是UART与CPU相交互的部分,通过该模块,在CPU的控制信号C和外部读写信号WR以及片选信号CS的共同作用下,向UART发出清除中断信号,写使能信号和开始发送信号。同样也是利用有限状态机来实现。3 仿真结果验证过程中使用了Model Technology公司的Modelsim,对整个UART控制器进行功能仿真。图4 发送一个数据帧的功能仿真波形图5 接收一

14、个数据帧的功能仿真波形通过仿真波形可以看出,设计结果正确地发送和接收一帧数据并产生相应的中断,CPU可以实时读取工作状态,整个设计的正确性和完整性得到验证,各项功能均达到预期的要求,同时也表明本文的设计思想完全可行。结束语用FPGA实现UART功能,可以减小系统的面积,降低系统的功耗,提高设计的稳定性,也充分利用了FPGA的剩余资源,这种硬件软件化的方法已成为当今电子设计领域中的主导趋势。在很多场合下,该UART控制器可以完全代替专用的IC芯片。该设计已下载到ALTERA公司的Cyclone系列器件EP1C6Q240C8中,综合报告显示消耗了195个LE(Logic Element),在中大规

15、模的FPGA中,这只是很小的一部分资源。参考文献1 夏宇闻. Verilog数字系统设计教程M.北京:北京航空航天大学出版社,20032 Bhasker J. Verilog HDL Synthesis A Practical primerM. London, UK: Star Galaxy; 1998.3 Liakot Ali,Roslina Sidek,Ishak Aris,Alauddin Mohd. Ali,Bambang Sunaryo Suparjo.Design of a micro-UART for SoC applicationJ.In: Computers and ElectricalEngineering 30 (2004) 257268.作者简介: 邹杰,男,1980.11.3,江苏苏州人,硕士研究生,控制理论与控制工程专业; 研究方向:数字信号处理的FPGA实现;E-mail:cgpersonAuthor

温馨提示

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

评论

0/150

提交评论