基于FPGA 的UART 扩展总线设计和应用

发布者:创客1992最新更新时间:2011-11-19 关键字:FPGA  的UART  扩展总线 手机看文章 扫描二维码
随时随地手机看文章

  1 引言

  在嵌入式领域,由于UART 具有操作简单、工作可靠、抗干扰强、传输距离远(组成 485 网络可以传输1,200 米以上),设计人员普遍认为UART 是从CPU 或微控制器向系统的 其他部分传输数据的最佳方式,因此它们被大量地应用在工业、通信和家电控制等嵌入式领 域。而通常处理器都会自带一个UART 串口,实际应用中一个串口往往不够用,需要进行 UART 串口扩展。而本文在分析了片内总线技术和UART 的工作原理的基础上了实现UART 总线设备的设计,使主控芯片可以控制4~6 个外围设备。

  本文中的嵌入式系统由AT91ARM9200 处理器、Linux 操作系统和ALTERA 公司的 ACEX 系列的EP1K 所组成。

  2 EP1K 的逻辑设计

  设计所要实现的功能是 AT91ARM9200 处理器通过EP1K 控制多个带有UART 接口的 外设。EP1K 中包含了多个逻辑模块如图1 所示,为了实现多个模块间的互联就需要片内总 线的支持,而本文采用的是WISHBONE 片内总线规范。


  2.1 WISHBONE 总线设计

  WISHBONE采用主从结构,也称之为SLAVE/MASTER 结构。主单元MASTER 是发起 与从单元SLAVE 之间的数据传输,MASTER 和SLAVE 通过握手协议来实现可靠通信的。

  WISHBONE 总线架构提供了四种不同的互联方式:点对点(Point-to-point)、数据流(Data flow)、共享总线(Shared bus)和交叉开关(Crossbar switch)。为了实现单个MASTER 和多个SLAVE 的设计要求,同时要求总线结构占用较少的逻辑单元,所以采用了共享总线 的互联方式。

  共享总线应包括 MASTER、SLAVE、INTERCON 和SYSCON 四个部分。MASTER 和 SLAVE 是实现总线信号与IP 核的信号转换,INTERCON 用于MATER 和Slave 的信号互联, 而SYSCON 则提供稳定的时钟信号和复位信号。总线逻辑结构如图2 所示,因为只有一个 MASTER,设计时就省略了对总线使用权的总裁。MASTER 的地址和数据总线分别与四个 SLAVE 相联,其它的控制信号也都是直接相连,而SLAVE 的选通是通过stb 信号实现。 SLAVE 的stb 信号是由地址译码产生SLAVE 选择信号s_sel、m_cyc 和m_stb 三个信号相与 的结果。所选通的SLAVE 将ack 信号置1 表明一个数据传输周期的正常结束并将数据锁存 或发送到总线上,而err 信号置1 表示非正常结束,rty 信号置1 表示要求数据重发。


  图 2 WISHBONE 总线的逻辑结构图

  总线的详细设计过程请参考 WISHBONE SoC Architecture Specification, Revision B.3,而 MASTER 和SLAVE 的设计可以参考OpenCores 的网站上相关设计。

  2.2 UART 的逻辑设计

  UART 的通信协议十分简单,以低电平作为起始位,高电平作为停止位,中间可传输 5~8 比特数据和1 比特奇偶校验位,奇偶校验位的有无和数据比特的长度由通信双方约 定。一帧数据传输完毕后可以继续传输下一帧数据,也可以继续保持为高电平,两帧之间 保持高电平,持续时间可以任意长。

  UART模块由SLAVE接口、波特率控制器、UART接收器和UART发送器构成。SLAVE 接口是为了实现WISHBONE 总线和功能模块之间的数据传输;UART 发送器的用途是将准备输出的并行数据按照基本UART 帧格式转为TXD 信号串行输出;UART 接收器接收RXD 串行信号,并将其转化为并行数据,但串并转换的时钟同发送器一样处理,收发设备间的时 钟是会累计的,会导致接收数据不正确,波特率控制器就是专门产生一个远远高于波特率的 本地时钟信号对输入RXD 不断采样,以不断地让接收器与发送器保持同步。


  波特率控制器实际上就是一个简单的分频器。可以根据给定的系统时钟频率(晶振时 钟)和要求的波特率算出波特率分频因子。已算出的波特率分频因子作为分频器的分频数。 对于波特率发生器中的系数一般在FPGA 实现时往往是固定的,但对于不同的实现,这个 系数需要更改。波特率控制器产生的分频时钟,不是波特率时钟,而是波特率时钟的16 倍,目的是为了在接收事实进行精确地采样,以提出异步的串行数据。

  UART 发送器由16 个字节FIFO 和信号发送器组成。FIFO 主要是起到数据缓存的作用, 信号发送器的核心部分由有限状态机实现的,实现伪代码如下:

  case (状态机状态)

  空闲状态:if ( FIFO 中有数据 )

  状态机跳转到 FIFO 读取状态;

  else

  状态机保持空闲状态;

  FIFO 读取状态:读取FIFO 数据,保存到移位寄存器;状态机跳转到开始位状态;

  开始位状态:时钟计数,发送开始位;计数结束后状态机跳转到数据位状态;

  数据位状态:时钟计数,发送数据,移位寄存器移位;计数结束后

  if(移位寄存器内数据发送完毕)

  状态机跳转到停止位状态;

  else

  状态机跳转到数据位状态;

  停止位状态:时钟计数,发送停止位;计数结束后状态机跳转到 s_idle;

  default:状态机复位到空闲状态;

  endcase

  UART 接收器包括了16 个字节FIFO、信号同步器和信号接收器三个部分。其中信号同 步器则是为了解决串行数据帧和接收时钟是异步问题,其它两部分和UART 发送器的中的 功能相似,只是数据传送的方向相反。

  3 设备接口和驱动设计

  3.1 设备接口设计

  AT91ARM9200 芯片通过其静态存储控制器 (SMC)控制EP1K,而静态存储控制器 (SMC) 是控制外部静态存储器或外设的访问。 SMC 可编程地址达512M 字节。它有8 个 片选及一个26 位地址总线。16 位数据总线能配置与8 位或16 位外部器件连接。独立的读写控制信号允许存储器与外设直接连接。SMC 支持不同的允许单时钟周期存储器访问的访 问协议。它还提供外部等待请求能力。

  因为 EP1K 内部设计使用的是8 位数据总线和8 位地址总线,所以AT91ARM9200 芯片与EP1K 相连的I/O 端口为 A[7:0],D[7:0],NRD 和NWR0。然而EP1K 内部采用 的WISHBONE 总线规范,其读写信号wb_we_o,高电平表示为写操作,低电平表示为 读操作。所以需要将NRD 和NWR0 进行相应的信号转换。而D[7:0]为双向端口IO, 所以在EP1K 的设计中采用三态门的设计。

  3.2 设备驱动设计

  AT91ARM9200 上运行的是Linux 操作系统,EP1K 作为一个外接设备正常运行,就需 要相应的linux 驱动程序。我们将EP1K 的看作一个普通的字符设备,其关键是如何实现两 个不同工作频率的设备正确通信。而静态存储控制器 (SMC)提供的多等待状态管理,只要 根据具体时序对SMC 片选寄存器进行设置就可以了。此例中的SMC 同时还控制flash 存储 器、LCD 液晶显示器和其它外设,所以使用片选寄存器7,EP1K 的内部工作频率是6MHz, 为了使读写同步,设置插入36 个等待周期。具体代码如下:


  其中at91_sys_write( )函数在include/arch/hardware.h 中,而且是在linux2.6 内核中才出现的。

  Linux 的字符设备驱动分为设备初始化函数和设备卸载函数,并由内核宏module_init() 和module_exit()行进管理。

  设备初始化函数首先要做的事情就是获取一个或多个设备编号。linux2.6 内核中提供了 静态和动态分配。如果在已知所需设备编号情况下,静态分配不失为一种较好的工作方式, 但是所选定的设备号若已分配给其它设备,就会造成冲突和麻烦。因此,建议采用动态分配 方式获取设备号。

  同时使用 udev 在/dev/下动态生成设备文件,这样就避免使用命令或脚本创建设备文 件。管理类和类设备的相关内核函数:

  struct class * class_create (struct module * owner, const char * name);

  void class_destroy (struct class * cls );

  struct class_device* class_device_create(structclass * cls, struct

  class_device* parent, dev_t devt, struct device * device, const char * fmt, ...);

  void class_device_destroy (struct class * cls, dev_t devt);

  注意,以上函数是2.6.13 开始有的,在2.6.13 之前,应当使用class_simple 接口。

  设备初始化函数随后的工作是建立字符设备,并将与具体字符设备的相关数据结构注册 的设备中,如字符设备的文件操作接口file_operations。还有就是调用at91_sys_write( )函数 完成静态存储控制器 (SMC)的寄存器配置和ioremap()函数完成设备地址到用户内存的映 射。设备卸载函数的工作就恰恰相反,它包括了管理类,类设备和字符设备的销毁,映射内 存和设备号的释放。

  4 结束语

  本文的设计应用于一个远程自动抄表系统,该系统由用户电能表和抄表基站以及 GSM 模块等部分组成。抄表基站的核心AT91ARM9200 处理器以静态存储控制器(SMC)与EP1K 相连,通过EP1K 实现的UART 扩展总线设备对用户电能计量表进行管理,最后抄表数据 由GSM 模块传给远端主机。此设计采用以FPGA 为实现方式试整个系统具有以下优点:1、 系统设计具有灵活性,可以根据实际情况添加UART 模块;2、有效的保证了系统的知识产 权;3、在EP1K 内部还可以添加其他通信模块,增强了系统的可扩展性。

关键字:FPGA  的UART  扩展总线 引用地址:基于FPGA 的UART 扩展总线设计和应用

上一篇:基于FPGA 的ATM SAR 及其接口设计与实现
下一篇:一种基于CAN总线技术的数据采集系统设计

推荐阅读最新更新时间:2024-05-02 21:43

VHDL语言在FPGA/CPLD开发中应用
1 引 言   EDA(电子设计自动化)关键技术之一是采用硬件描述语言(HDL)描述电路系统,包括电路结构、行为方式、逻辑功能以及接口。就FPGA和CPLD(分别是现场可编程门阵列和复杂可编程逻辑器件的简称)开发来说,比较流行的HDL主要有VHDL、ABEL-HDL、AHDL等,其中,VHDL对系统的行为描述能力最强,已被IEEE确定为标准HDL,并得到目前所有流行EDA软件的支持,进而成为系统设计领域最佳的硬件描述语言。用VHDL设计电路系统,可以把任何复杂的电路系统视为一个模块,对应一个设计实体。在VHDL层次化设计中,它所设计的模块既可以是顶层实体,又可以是较低层实体,但对不同层次模块应选择不同的描述方法(如行为描述或
[嵌入式]
VHDL语言在<font color='red'>FPGA</font>/CPLD开发中<font color='red'>的</font>应用
基于FPGA可调信号源设计
传统产品级信号源往往只能产生单一信号,满足不了科研和实际检测的需要。尤其在复杂的航天环境实验中,需要信号源能产生不同种类和参数可调的信号,作为系统自检时的信号输入,以此检测目标设备的工作状态和各项性能指标,为目标设备正常工作提供依据。 现场可编程逻辑阵列器件( FPGA )具有编程方便、高集成度、高可靠性等优点。为了满足科研和实际测试要求,本文设计了一种以 FPGA 、高速D/A为核心,能产生多路频率可调信号的信号源系统。该系统中波形数据、 控制 命令字由上位机发出,通过FPGA 控制 在数据存储器中存储波形数据,并将波形数据读出送入DAC进行数模转换后得到相应的 模拟 信号波形及 开关 量的控制。利用上述方法设计的信号源,信号
[电源管理]
ARM、FPGA和DSP特点和区别是什么?
DSP(digital singnal processor)是一种独特的微处理器,有自己的完整指令系统,是以数字信号来处理大量信息的器件。一个数字信号处理器在一块不大的芯片内包括有控制单元、运算单元、各种寄存器以及一定数量的存储单元等等,在其外围还可以连接若干存储器,并可以与一定数量的外部设备互相通信,有软、硬件的全面功能,本身就是一个微型计算机。DSP采用的是哈佛设计,即数据总线和地址总线分开,使程序和数据分别存储在两个分开的空间,允许取指令和执行指令完全重叠。也就是说在执行上一条指令的同时就可取出下一条指令,并进行译码,这大大的提高了微处理器的速度。另外还允许在程序空间和数据空间之间进行传输,因为增加了器件的灵活性。其工作原理是
[单片机]
扩散炉温度自动控制系统中FPGA设计
1 引言 当前国内外温控设备以单路控制居多,只能控制一路加热没备。在国内,可以对高温设备同时多路温度监控系统的研发还是相对滞后,大多数设备都是通过RS232接口或者其他有线接口与上位机通信,而无线的监控部分很少涉及。这里提出的设计方法在现有技术基础上大胆创新,具有挑战性。硬件电路的设计采用FPGA编程的方式实现,电路更改方便,用FPGA的方式实现整个系统的自动控制,降低成本,提高精度,并利用ZigBee短距离无线传输协议实现无线远程控制。 2 FPGA硬件设计与实现 2.1 概述 FPGA的设计使用的是ACTEL公司的Libero IDE集成开发环境。FPGA的内部电路由A/D转换模块、PWM模块、10路PWM控制信
[工业控制]
扩散炉温度自动控制系统中<font color='red'>的</font><font color='red'>FPGA</font>设计
基于FPGA自动采集控制系统
随着当前工业控制自动化日益普及,对于工作环境中的温度控制也越来越重要。本设计即是针对某些需要持续恒温的特殊环境而设计的自动温度采集控制系统。该系统采用FPGA作为硬件核心部分,有效地利用FPGA在可编程门阵列方面的优点,最大限度的使硬件电路软件化,减少了可视硬件的规模,降低了硬件加工、布线以及元器件采购方面的成本与复杂性,从而降低了故障排查方面的繁杂性。使硬件电路简洁,降低了整体占用的空间。相对于其他的温度控制系统,具有小巧,维护维修方便的优点,大大的提高了可维护性,同时由于采用的元器件都比较常见,整体成本较低。因此很适用于一些小规模同时对温度精度要求不高的场合。 1 系统工作原理 通过传感器实现对外界环境温度的采集,并将采集到
[嵌入式]
采用ARM/FPGA主从处理器嵌入式采集系统设计
随着人们对高空的兴趣发展和研究需要,越来越多的科学实验被科研人员搬到了空中进行,气球探空和无人机实验是比较典型的方法。这些科学实验往往需要在一定的实验条件到达时触发某特定实验现象,从而对发生时间非常短促且不具备可重复再现性的实验目标数据进行高速采集。日前,笔者参与的项目中需要完成的任务是:通过无线通信实现对高空实验设备进行控制,对整个实验过程进行实时观察分析(其中的实验条件数据通过GPS接收机,红外虚拟逻辑分析仪等设备实时采集),待实验到达触发条件时,通过手动(或自动可选)的方法实施触发,再对触发后的实验目标数据进行采集并传回地面PC进行后续的分析处理。该项目采用ARM和FPGA分别作为主从处理器设计嵌入式采集系统,采用多通道A/
[单片机]
采用ARM/<font color='red'>FPGA</font>主从处理器<font color='red'>的</font>嵌入式采集系统设计
FPGA助力高端存储器接口设计
高性能系统设计师在满足关键时序余量的同时要力争获得更高性能,而存储器接口设计则是一项艰巨挑战。双倍数据速率SDRAM和4倍数据速率SDRAM都采用源同步接口来把数据和时钟(或选通脉冲)由发射器传送到接收器。接收器接口内部利用时钟来锁存数据,此举可消除接口控制问题(例如在存储器和FPGA间的信号传递时间),但也为设计师带来了必须解决的新挑战。 关键问题之一就是如何满足各种读取数据捕捉需求以实现高速接口。随着数据有效窗越来越小,该问题也益发重要;同时,更具挑战性的问题是,如何让接收到的时钟与数据中心对准。 基于FPGA、ASIC和ASSP控制器的设计所采用的传统方法是使用锁相环或延迟锁定环电路,以保证在源时钟和用于捕捉数据的时钟间具
[嵌入式]
用于密集型在轨边缘计算 微处理器和FPGA
Rajan Bedi博士是Spacechips公司的首席执行官和创始人。该公司设计和制造L到k波段的一系列先进超高吞吐量星载处理器、应答机和OBC,用于电信、地球观测、导航、互联网和M2M/物联网卫星。该公司还提供空间电子设计咨询、航空电子测试、技术营销、商业情报和培训服务。 Spacechips的设计咨询服务开发定制卫星和航天器子系统,为客户提供如何使用和选择正确的组件,如何设计、测试、组装和制造空间电子产品等方面的建议。我们在空间应用FPGA培训课程中讲授半导体存储器。 背景和引言 随着卫星运营商在轨获取的数据越来越多,他们更愿意在载荷上处理这些数据并提取有价值的信息,而不是将大量数据下行传送到地面的云上进行
[嵌入式]
用于密集型在轨边缘计算 <font color='red'>的</font>微处理器和<font color='red'>FPGA</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved