FPGA_ASIC-基于FPGA的数据缓存与转发系统设计

基于FPGA的数据缓存与转发系统设计
The Design of Data Storage Bufferring and Transmission
System Based on FPGA
(1.中国科学院研究生院;2.中国科学院空间科学与应用研究中心)薛国凤1,2张健2
XUE GUOFENG ZHANGJIAN 摘要:本文主要论述在设计某主板测试系统数据缓存和转发过程中所遇到的问题以及相应的解决的方法。提出了分割较大的状态机为若干个相对较小状态机的方法,以简化状态机个数,使得状态机能够稳定工作。结合实例分析了乒乓操作能够很好地解决异步时钟域带来的问题,并且能够较好地完成数据的无缝缓冲和处理。
关键词: FPGA;状态机;乒乓操作;ST16C2552
Abstract: This paper focuses on the problems and their solutions during the design of Data Storage Bufferring and Transmission System Based on FPGA. It gives a method of dividing the larger state ma
chine into several smaller ones, which can simplify the whole state machine and make it work steadily. Also, the Ping Pang Operation which can be used as a pipeline is analyzed through an example in this paper.
Key words: FPGA;  State Machine;  Pipeline;  ST16C2552
中图分类号:TP302  文献标识码:B
1 引言
在基于FPGA的数字设计中,有限状态机是使用最为广泛的逻辑结构,它使得控制更加灵活,高效。因而有限状态机的稳定性成为能够发挥其作用的关键。在文献[1],[2],[3]中详细论述了关于有限状态机的分类以及优化的方法。本文着重结合实例提出分割大的状态机为较小状态机的方法以及共享状态来简化有限状态机的状态数目,为其稳定工作奠定基础。
本文涉及到串口扩展芯片ST16C2552(以下简称2552)的使用。该芯片是EXAR公司生产的异步通信扩展芯片,可扩展两路串口,其最高速率可达4Mbps。文献[5],[6]中详细介绍了该类芯片的工作原理及工作模式,可作为参考。
2 系统工作原理
该设计作为本实验室某项目的地面检测设备。要求模拟时序控制板产生主板所需中断信号并实时转发主机传输的数据。主机向地检设备FIFO中写入两路帧头数据(前视帧头和后视帧头),每一路帧头数据的速率分别为2K frame/s,每帧96bits。地检设备使用FPGA实现并控制接收数据,存入FIFO中,再通过低速通信口RS232发送至PC机,最终在PC机上对数据进行分析处理。系统原理如图1所示。其中接口控制逻辑,FIFO A,FIFO B,发送控制状态机全部使用FPGA实现。发送控制状态机部分负责从FPGA的FIFO中读取主机写入的两路数据,处理后送入串口发送出去。它是本设计的关键部分。
3 遇到的主要问题
(1)状态机工作不稳定,容易进入无效状态。
(2)数据传输不正确。表现为间隔传输几组数据后部分数据丢失。
(3)异步时钟域问题。数据被写入和读出所用的时钟不同步,也可能导致数据丢失。
图1 系统原理框图
4 系统的实现与问题的解决
(1) 状态机的实现
发送控制状态机首先完成对2552的配置(设置14个寄存器的值),然后读取两路FIFO
中的数据并写入2552进行发送。初次划分后总计30个状态。由于状态繁多,使得整个状态机在编码过程中存在太多无效状态,为状态机进入无效状态留下隐患,状态机工作不稳定。
为了使其稳定工作采取以下措施:1)使用“one-hot”编码;2)采用三段式描述方法;2)精简状态的个数。而简化状态的数目具体表现为两方面。首先是分割大的状态机为相对独立的若干个较小状态机。
仔细分析发现,配置2552仅在上电复位后执行。即,上电后只执行一次配置工作。那
么就可以将整个状态机分割为两个相互独立的状态机,达到简化状态机的目的。简化后的状态转移图如图2所示。其中配置状态机由16个状态组成。两个状态机之间通过信号INITIAL 连接。上电复位后,配置状态机开始运行时INITIAL为‘0’。发送状态机停留在idle状态。
电子鱼竿
配置完毕后信号INITIAL被置为’1’。当处于idle状态的发送状态机检测到INITIAL为’1’后
才开始下一步动作。在这里INITIAL具有使能发送状态机的作用。通过将较大的状态机分
割为两个相对较小的状态机后,大大简化了状态机的数目,为状态机稳定运行奠定了基础。
图2 发送状态机状态转移图
其次是使用共享状态。
本设计中,配置状态机产生配置2552内部寄存器所需的读写、地址和数据信号。例如写数据时将iown置为‘0’,在下一个状态则需要将其重新设置为‘1’。如图3a中的md_w x状态,负责修改iown为‘1’。考虑到这些状态所完成的功能相同,都是将iown置为‘1’,只是进入前的状态不同,所以可以将这些状态合并为一个状态md_w,如图3b所示。具体实现中除了current_state和next_state外又增加两个状态类型变量ns和ns_c。它们分别用于标记对iown修正后所要进入状态的现态和次态。状态转移部分代码如下所示:
图3a  合并前的状态转移示意图图3b 合并后的状态转移示意图
p1: process(clk,RESET)        --时序进程
begin
if(reset='0')then
current_state<= cfg_FCR[7];
ns_c<= cfg_FCR[7];
elsif(clk'event and clk='1')then
current_state<=next_state;
烟囱脱硫
ns_c<=ns;
end if;
end process;
p2:process(reset,current_state,ns_c)    --组合进程
……
case current_state is
when cfg_FCR[7]=> --配置A通道
ns<= cfg_AFR[0] ;
next_state<=md_w;
……
when md_w =>
next_state<=ns_c;
……
end process;
(2) FIFO(first_in_first_out)实现
采用FIFO作为缓冲可以很好地解决异步时钟域所引起的问题,但并不能彻底解决本文问题。本设计中主机响应中断并按照2K frame/s(每帧96bits)的速率向FPGA 的FIFO中
写入两路数据。最初设计为:状态机等待主机写完一帧后才开始发送数据。串口发送一帧数
据最少需要261us(921.6kbps发送192bits,采用ASCII发送带宽增加一倍)。而主机每隔
0.5ms就写入96bits数据,且写入数据的时刻可能在0.5ms内任意时刻。所以就出现了状态机还未通过串口将上一组数据发送完毕就被下一组数据所覆盖,导致数据的丢失。
针对这一问题,采用乒乓操作最终得以解决。
乒乓操作是一种用于数据流控制的处理技巧。典型的乒乓操作方法如图4所示。 图中的DPRAM 表示双端口RAM 。
图4 典型的乒乓操作框图
乒乓操作的处理流程描述如下:输入数据流通过输入数据选择单元等时地将数据流分配到两个数据缓冲区。在第1个缓冲周期,将输入的数据流缓存到数据缓冲模块1,在第2个缓冲周期,通过输入数据选择单元的切换,将输入的数据流缓存到数据缓冲模块2,同时,将数据缓冲模块1缓存的第1个周期的数据通过输出数据选择单元的选择,送到运算处理单元进行处理。在第3个缓冲周期,再次切换数据的进入与输出缓冲模块。依次循环。乒乓操作的最大特点是,通过输入数据选择单元和输出数据选择单元按节拍相互配合切换,
将经过缓冲的数据流没有时间停顿地送到运算处理单元
,进行运算和处理【4】。
包塑轴承
图5  FIFO 组织结构图
三脚电感
按照上述思想,本设计的FIFO 组织结构如图5所示。FIFOA1,FIFOA2为前视帧头数据乒乓操作的缓冲存储器。FIFOB1,FIFOB2为后视帧头数据乒乓操作的缓冲存储器。用中断信号的二分频作为缓冲区的选择信号fifo_cs 。其中wblkba1,wblkba2为fifo 的块使能信号。
在缓冲周期1中,主机写FIFOA1,FIFOB1,相应地状态机则读取FIFOA2,FIFOB2中的数据进行发送。状态机拥有0.5ms 的时间,足以发送192bits 数据。
采用上述乒乓操作后,状态机定时读取FIFO 中的数据,通过串口转发。通过该方法,还可以检测主机是否按时响应中断。若主机因某种原因没有及时响应中断,而没有向FPGA 的FIFO 中写入数据,则状态机通过串口转发出来的数据将是全’F’。达到一举两得的功效。 5 结束语
本文通过分割状态机的方法,极大地简化了状态个数,使其稳定运行;采用乒乓操作解
家用水果榨汁机
决了异步时钟域所引起的问题,并解决了由于低速串口发送数据时间不够而引起的数据丢失问题,并且实现了对主机是否及时响应中断的监控。
另外,由于本设计中使用的串口数据速率较大(最高921.6Kbps),一般的串口调试助手不能满足。故本设计使用超级终端作为串口数据的接收软件。但在调试中发现使用16进制发送数据时,18h之后传输的一个字节数据会被重复一次,且00h后若紧接着传输大于80h 的数据,超级终端会自动将其删除。这可能与超级终端软件所使用的编解码方法有关。所以最终采用将所有数据转化为其对应的ASCII进行发送,付出的代价是速率需提高一倍。
通过采取上述几项措施后,整个系统正常工作,正确传输数据,达到预期目的。
然而,当重新查看原来的设计时,发现配置状态机可以被简化为5个状态。这需要增加一个模16的计数器,以及三个相关的数组。不过在同样能够稳定工作的前提下,前者较之后者更直观一些。
本文作者创新点:区别于一般有限状态机优化的方法,本文提出了分割大型状态机为若干相对较小状态机的方法,简化状态机设计,达到优化的目的,使其稳定运行。
6 参考文献
[1] 周越文,付新华,冯明德.基于状态机的并行测试实现.微计算机信息.2009,4-3:279-281
[2] 洪国玺,李海波,董辉.有限状态机的VHDL优化设计.林区教学.2008年第1期:
88-90
[3] 唐亚平,王学梅.基于VHDL的有限状态机的优化设计.电子元器件应用.2005,8:
59-61
[4] 王智, 罗新民.基于乒乓操作的异步FIFO设计及VHDL实现.电子工程师.第31卷第6
期,2005,6:13-16
[5] 高翔,陈志辉.利用ST16C2552实现DSP高速串行通信扩展.国外电子元器件.2007
年第8期.2007,8:45-49
[6] EXAR Corporation . ST16C2552 datasheet . ar
[7] ATMEL Corportation . TSC695F datasheet. www.atmel
作者简介:
薛国凤(1984.6—),女,陕西蓝田,中国科学院空间科学与应用研究中心,硕士研究生,主要研究方向:嵌入式系统,E-mail:lanxiangdreaming@126;
张健(1971.6—),男,吉林长春,副研究员,中国科学院空间科学与应用研究中心,主要研究方向:航天计算机系统。
Biography:XUE Guofeng(1984.6—)Female,Shaanxi Province, Center for Space Science and Applied Research Chinese Academy of Sciences, Master candidate, research on embedded system. (100190北京中国科学院研究生院) 薛国凤
(100190北京中国科学院空间科学与应用研究中心)薛国凤张健
(Graduate University of Chinese Academy of Sciences , 100190, Beijing, China)XUE Guofeng Center for Space Science and Applied Research Chinese Academy of Sciences, 100190, Beijing, China)XUE Guofeng ZHANG Jian
新型环保包装材料通信地址:(100190 北京市8701信箱综合电子室)薛国凤

本文发布于:2024-09-23 11:23:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/127669.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:状态机   数据   状态   设计   发送
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议