当前位置:首页 > 工作总结 > 【基于串行通讯的FPGA片上RAM数据下载与系统调试】 串行通讯数据传送方式
 

【基于串行通讯的FPGA片上RAM数据下载与系统调试】 串行通讯数据传送方式

发布时间:2019-02-16 04:41:34 影响了:

  摘要:本文开发了一种内嵌2 kB RAM的UART控制模块,可实现从PC机发送代码至控制模块内部的RAM中,再将代码读取至需要进行功能验证的系统,可以进行RAM数据下载与系统调试。控制模块利用开源的MC8051 IP核进行系统的功能验证,并成功进行了Modelsim下的仿真和FPGA与PC机的实际通信测试,效果良好。
  关键词:UART接口;FPGA;功能验证;RAM
  
  Data Download and System Debug Based on On-chip RAM
  of FPGA using Serial Communication
  
  TANG Kai, ZHOU Jian-yang
  (Department of Electronic Engineering, Xiamen University, Xiamen 361005)
  
  Abstract:This paper presents a 2 kB RAM embedded in the UART control module, can be send code from PC to the internal RAM of the control module, then the code read to the systems which need functional verification, this module can download data to the RAM and do system debugging. Control module using the open source MC8051 IP core for testing, and the result was good.
  Keywords:UART Interface; FPGA; functional verification; RAM
  
  1前言
  
  伴随FPGA功能的日益强大,需要进行功能验证与系统调试的代码量也随之越来越大,早期的验证方法早已经不再满足我们的设计要求。早期的方法是将代码固化在ROM或者写在FLASH中下载进行验证,这种方法每调试一次需要将代码重新综合下载一遍,费时费力,若考虑将调试引脚悉数引出,再外接Flash或者RAM的方法,虽然可以减少综合下载的次数,但这种方法不仅浪费宝贵的FPGA I/O资源,而且也占用大量的PCB空间。
  Lee Hansen和Brent Przybus提出了一种更为简便的方法,采用ChipScope Pro进行FPGA调试[1]。ChipScope Pro是XILINX公司推出的集逻辑分析、总线分析和虚拟输入输出为一体的虚拟分析和调试软件。ChipScope Pro通过在FPGA设计中插入ICON(控制核)和ILA(逻辑分析核),把需要分析的FPGA内部信号的采样点写入FPGA内部的块RAM中,计算机软件通过JTAG接口和FPGA相连,读出块RAM中的值并把信号的波形实时显示出来,从而实现逻辑分析的功能,采用ChipScope Pro的调试方法能够大大减少验证过程中所花费的时间,可以对FPGA进行实时地分析和调试而无需额外的逻辑分析设备,并且只需将一根JTAG接口的下载电缆连接到要调试的FPGA器件。但是采用这种方法,不仅增加了系统的复杂程度,同时占用了大量的FPGA内部的RAM资源,这在系统代码量越来越大、占用资源越来越多的现实下也不可采用。针对现今调试方法的弊端,我们设计出了一种基于UART串行通讯的FPGA功能验证模块,模块内嵌2 kB RAM,可以从PC机端接收指令代码并存储至控制模块内部的RAM中,再将指令代码读取至系统当中进行功能验证。
  我们以MC8051为例,MC8051是与MCS-5l系列微处理器指令集完全兼容的8位嵌入式微处理器,在进行功能验证时,只需将定制MC8051的IP Core和本文设计出的UART控制器进行一次综合下载进入FPGA中,就可以进行各种8051的指令测试,每次只需将51代码发送至控制模块中即可,大大提高了验证的速度,并且UART模块易于实现,方便移植,且占用FPGA资源较少。
  
  2总体设计思想
  
  系统总体设计结构图如图1所示,主要包括两大部分,分别是UART接口部分和RAM控制部分,UART接口部分包括接收模块和发送模块,接收模块主要负责接收从PC机端发送来的数据,发送模块则主要负责将数据发送到PC机。接收模块接收到PC机端发送来的数据之后,首先进行串并转换,再将数据传送到RAM读写控制模块。发送模块将RAM读写控制模块发送来的数据进行并串转换之后发送到PC机。
   RAM控制模块控制RAM数据的写入与读出和地址的产生,当外部控制开关we为高电平时,系统从PC机端接收指令数据。此时8051 IP核处于停止状态,RAM控制模块从UART接收模块中提取接收到的指令数据,RAM地址由RAM控制模块产生,接收到的第一个数据所对应得地址空间为0,每接收一个数据,地址自动累加,一直到数据发送完毕,确保指令数据正确写入对应的地址空间。当外部控制开关为低电平时,8051 IP核正常工作,RAM读取地址由8051 IP核给出,IP核向RAM发送指令地址,读取对应的指令数据,按照程序执行指令。
  
  3UART模块的设计与实现
  
   3.1 UART基本原理
  一个完整的UART接口包括由发送锁存器、发送移位寄存器和逻辑控制组成的发送模块,以及由接收锁存器、接收移位寄存器和逻辑控制组成的接收模块。发送模块和接收模块除共用复位信号、时钟信号和并行数据线外,各自分别有输入输出和逻辑控制单元。
  帧是UART发送与接收的基本单元。每一帧包括线路空闲状态位(idle,高电平)、起始位(start bit,低电平)、5~8位数据位(data bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1位、1.5位、2位)。这种格式是由起始位和停止位来实现字符的同步,UART内部一般有配置寄存器,可以配置数据位数(5~8位)、是否有校验位和校验的类型、停止位的位数(1位、1.5位、2位)等设置。
  由于数字量接口、工作模式选择、实时监测接口的波特率都不同,UART模块中包含一个可编程的波特率发生器,可灵活配置波特率。波特率发送器给发送模块和接收模块提供发送数据和接收数据的基准时钟,波特率发生器产生的时候clk16x是串行数据波特率的16倍,它对系统时钟n分频,n=系统时钟/波特率×16,针对不同波特率设定相应数值可得到所期望的波特率时钟。
  
   3.2 发送模块设计[2]
  发送模块的状态机如图2所示,发送过程经历开始、移位、校验和停止4个状态。当并行8位数据从总线写入发送模块后,发送模块将并行数据装入锁存器tbr中,然后在移位寄存器tsr中将数据移位,产生完整的发送序列(包括起始位,数据位,奇偶校验位和停止位)。模块内部将时钟16分频后得到波特率时钟clk1x。串行发送器包含有8 bit的tbr和tsr,当tsr为空时,tsre的标志位为1。只有当tsr为空的时候,一个写操作才可以将数据从CPU传送到tsr而不用清空以前的数据。当数据装载到tsr以后,tsr的空标志位tsre置0。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文   数据装载到tsr后,串行数据传输将自动开始。第一个比特位为开始位(逻辑0),tbr里的数据装载到tsr,之后在tsr里的数据将会按照LCR的约定串行移出并加上奇偶校验位(如果奇偶校验位使能),停止位将在帧的最后加上。串行数据帧(开始位+数据位+奇偶校验位+停止位)以内部时钟clk16x的1/16的速率送出。
  
   3.3 接收模块设计
  接收模块的状态机如图3所示,接收过程包括空闲、移位、校验和停止4个状态。串行接收器包含一个8 bit的接收缓冲寄存器(rbr)和一个移位寄存器(rsr)。因为串行帧不同步于接收时钟,从rxd管脚的输入由高到低的电平变化被认为是帧的开始位。然而为了避免由于rxd噪声的影响而造成错误接收数据,在本设计中错误开始位检测的机制在时钟波特率50%之前为低。由于内部时钟clk16x是16倍的发送接收波特率,开始位至少在8个clk16x内检测到开始位为低则认为开始位是有效的。
  接收的过程为:首先捕捉起始位,在clkl6x时钟下不断检测从rxd端输入数据的起始位,当检测到起始位后,接收模块由空闲模式转换为移位模式,并且16分频clkl6x产生clk1x波特率时钟。此时clk1x时钟的上升沿位于串行数据每一位的中间。这样接下来的数据在每一位的中点采样。然后由clk1x控制在上升沿将数据位写入移位寄存器rsr的rsr[7]位,并且rsr右移l位,依次将8位数据全部写入rsr,并且停止产生clk1x波特率时钟。判断奇偶校验、帧结构和溢出标志正确后,rsr寄存器中的数据写入rbr数据锁存寄存器中。最后产生data_ready信号,以便地址产生器累加地址所用,然后由8位数据总线输出转换完成的数据。
  
  4RAM控制模块的设计与实现
  
  RAM控制模块包括两个模块,一个是地址发生器模块,一个是RAM读写控制模块,地址发生器根据接收模块接收到的数据产生地址,每接收到一个数据,地址自动累加进入下一个地址,指令数据将写到对应的地址空间。RAM读写控制模块根据外部控制开关we来判断此时是写入指令数据还是读出指令数据,并以此来切换对应的地址总线。
   RAM地址的控制权由外部控制信号we来决定,当外部控制信号we为高电平时,8051 IP核停止工作,系统从PC机端接收指令数据并存入RAM中,地址总线的地址空间由地址发生器来产生,同时控制RAM写使能。此时地址发生器类似于计数器,从零开始计数,如图4所示,在UART接收器模块中,每次接收到一个数据之后会在data_ready信号产生一个脉冲,表明一次数据接收完毕,地址累加进入下一个地址,以保证指令数据的正确写入,在没有接收到数据时,地址则保持不变。当外部控制信号we为低电平时,RAM读使能,8051 IP核正常工作,从RAM中读取指令数据,地址总线的控制权切换至8051 IP核控制,8051 IP核根据读取的指令数据,调整PC指针,按照指令执行程序。
  
  5仿真验证
  
  对整个模块的测试方法采用发送一个8051程序至控制器的RAM,再利用接入的MC8051 IP核来读出指令数据,以检验模块的正确性。测试的程序采取简单的P0口输出数据的方式进行检验,编译程序产生HEX文件,再将HEX文件转换为BIN文件,将BIN文件的代码发送至RAM中,由8051 IP核进行读取测试程序。
  模块仿真结果如图5所示,代码发送完毕之后,将外部控制开关we变为低电平,此时为读指令操作,当外部读写控制指令变为低电平之后,51_PC_addr从0开始读取地址,此时,RAM的地址总线控制权回到51 IP核手中,RAM的地址变为51 IP核读取指令的地址51_PC_addr,同时读出操作数给51 IP Core,使其按照指令运行,在P0口输出立即数55h。
   实际测试的结果如图6所示,P0口绑定右下角的8个LED灯,从左至右依次对应P0.0-P0.7,右下角从右向左数第二个开关为外部控制读写开关,发送完成后,开关拨至上方(为低电平),系统读取指令,P0口输出55,从对应LED的亮灭可以看出,设计完全正确。
  
  6结论
  
  仿真成功之后,使用PC机进行调试时,分别采用115200、9600、1200的波特率,结果证明使用本控制模块进行功能验证的效果良好,效率较高,进行功能验证时只需一次代码编译下载就可以进行数次功能验证,有着极高的使用价值。作为计算机串行通信子系统和通信领域广泛使用的接口,UART在高效地进行FPGA的功能验证中有着极大的作用。
  
  参考文献
  [1] Lee Hansen and Brent Przybus. Debug Your Design With the ChipScope Pro System.[J]. Xcell Journal, 2005.6: 23-27.
  [2] 徐立文,戴跃伟,王执铨.基于VHDL的UART IP核设计.电脑开发与应用.[J].2003.3:12-14.
  [3] 李金力,刘文怡,彭旭峰.基于FPGA的RS232异步串行口IP核设计.[J].2009.8:31-35.
  [4] 贾子申,李淑清,王冠雅.基于FPGA的UART控制器设计.[J].2008.3:82-83
  [5] VHDL design representation and synthesis, Second Edition, James R. Armstrong, F. Gail Gray, Upper Saddle River, NJ : Prentice Hall PTR, c2000, copyright 2003.
  [6] Xilinx, Spartan-3E FPGA Starter Kit Board User Guide, June 20, 2008.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3