论文部分内容阅读
摘要:在USB协议分析仪中,CPLD利用自身硬件的优点,快速处理USB信号,把USB数据流转换成MCU数据包以供单片机接收,进行下一步的工作。
关键词:CPLD;信号;数据包
中图分类号:TP212文献标识码:A 文章编号:1009-3044(2008)34-1853-02
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产之中。
CPLD是整个系统中非常关键的一个部件,它直接决定系统实现的成功与失败。如果CPLD设计有任何缺陷,就有可能导致整个系统性能变差,甚至完全失败。所以,CPLD这一部分必须认真分析需求,周密设计代码,合理仿真功能,力求最大限度地有效利用CPLD的功能。
CPLD的工作流程如下:打开集成开发软件(Xilinx的ISE)→画原理图、写硬件描述语言(Verilog)→编译→给出逻辑电路的输入激励信号,进行仿真,查看逻辑输出结果是否正确→进行管脚输入、输出锁定→生成代码→通过下载电缆将代码传送并存储在CPLD芯片中。
1 功能分析
CPLD接收从USB收发器收到的数据流,构建MCU数据包,然后输出MCU数据包至FIFO存储器,可以说CPLD就是一个成帧器。
为了能够准确地接收USB的数据流,CPLD中设置了一套去噪声模块。即使接收的数据中混入了一定的噪声,接收器也能正常工作。
要正确获得数据,首先要正确恢复时钟。低速USB的发送时钟为1.5MHz,全速USB的发送时钟为12MHz,CPLD也必须生成相应的接收时钟信号。为此,CPLD中设置了一个数字锁相环电路(DPLL),该电路监视输入信号的变化,一旦发现信号出现了边沿,立即调整接收时钟的相位,确保与发送时钟同步,这实际上也就是保证了读取数据的准确性。
DPLL电路还输出一个数据抽样点,这个抽样点总是处于一个数据位的中心,在这个抽样点获得的数据是最准确的。
在抽样点处获得的数据送至串并转换器,当接收8个数据位后形成一个字节。这个字节将被保存在输出队列中准备发送到外部FIFO缓存。为了消除“位插入”产生的额外数据,CPLD中有一个“位计数器”,如果发现6个连续的“1”,自动消除其后的数据位。
在CPLD中,有一个有限状态机FSM,它指示用户USB总线的当前状态。该状态机共有4个状态,分别对应初始状态、SE0、空闲状态和接收状态。通过状态机,可以得知一个USB数据包的开始与结束,也可以得知USB数据包的传输速率,还可以知道每一个状态出现的绝对时间,通过换算,能够知道数据包的持续时间,还能够知道SE0是处于EOP中还是复位中。当发现USB数据包的开始(SOP),立即把STX送入输出队列。STX是MCU数据包的开始,与SOP对应。一旦发现USB数据包结束,则把ETX 送入输出队列。ETX是MCU数据包的结束,与EOP对应。
在输出USB数据包的数据时,如果某一字节的数值正好等于STX、ETX或者Byte_Stuff,则在它们前面插入一个Byte Stuff。这也是一种插入技术,但它是面向字节的。
输出队列按照顺序保存要输出的数据,输出电路从输出队列中一个字节一个字节地读出数据,然后向外输出,每输出一个字节,就产生一个写入信号。
以上所有这些电路在复位信号有效时(Rst=0)都停止工作,设置为预置的值,如WR=1、 FSM=0。
对于输出电路来说,还有一个输出使能信号(OE)。当OE=0时,输出信号正常输出;当OE=1时,输出信号呈现高阻态。
CPLD中的所有电路都是同步的,都按照48MHz主振荡器的节拍工作。
2 功能实现
2.1 相位跟踪电路(DPLL)
DPLL(Digit Phase Lock Loop)是一种使得输出信号相位与输入信号相位保持一致的电路,也就是相位跟踪电路。当输入信号的相位发生变化时,输出信号的相位也跟着变化。DPLL根据用户USB总线的速率产生1.5MHz或12MHz数据接收时钟,接收时钟的相位跟踪输入信号的相位,二者始终保持一致,这就是数据时钟的恢复。根据数据接收时钟的相位,CPLD产生一个数据抽样信号,该信号指示在何处抽样,才能读取到正确的数据。
2.2 有限状态机(FSM)
FSM(Finite State Machine)称为有限状态机,是CPLD中最常用的部件之一。通常,用FSM实现各种各样的状态转换图。在USB协议分析仪中,FSM有四个状态,用来表示用户USB总线的活动。这四个状态覆盖了所有用户USB总线状态和用户USB总线事件,低速和全速也都支持。
1) 初始状态:复位结束后的状态
2) SE0状态:用户USB总线处于SE0
3) 空闲状态:用户USB总线处于空闲状态
4) 接收状态:用户USB总线正在传输数据包
2.3 MCU数据包装配
CPLD的输入信号是获取的USB总线信号,输出的则是单片机应接收的MCU数据包。在说明CPLD的这部分功能以前,先简单说明一下MCU数据包的构成形式。
2.3.1 数据包的格式
MCU数据包是对USB数据包的再次封装,其一般格式为:STX USB数据包 ETX
STX是MCU数据包的开始,其值为0F;ETX是MCU数据包的结束,其值为04。为了避免USB数据包中的STX、ETX被误认为MCU数据包的开始结束,特别增加了“字节插入”。 “字节插入”符为ByteStuff,其值为05 。当USB数据包中出现了STX,ETX或ByteStuff时,在其前面都要插入一个ByteStuff。例如:
USB数据包为:80 C3 03 04 05 06
对应的MCU数据包为:0F 80 C3 03 05 04 05 05 06 04
2.3.2 输出STX
STX是MCU数据包的开始,应该在USB数据包的开始处(SOP)输出,即一旦发现SOP,就要立即输出STX。
那么,在CPLD中如何识别SOP?在FSM中,如果当前状态为空闲状态,同时输入信号K有效,此时就是SOP,应该立即输出STX。
2.3.3 输出ETX
ETX是MCU数据包的结束,应该在USB数据包的结束处(EOP)输出,即一旦发现EOP,就要立即输出ETX。
当FSM的当前状态为接收状态,同时输入信号SE0有效,则认为此时就是EOP,应该立即输出ETX。
2.3.4 “字节插入”
当FSM为接收状态时,如果从用户USB总线接收到了一个字节,首先要判断其值是否为STX、ETX或Byte_Stuff。如果是其中之一,要先输出Byte_Stuff,然后再输出该字节。
经过“字节插入”处理过的MCU数据包在应用程序中要做相反的字节消除,以恢复原始USB数据包。
2.4 数据输出
数据输出部分包括输出队列的管理、输出总线和写入信号管理两部分。输出队列的管理包括取数据和指针移动。由于选择的CPLD容量有限,原来设计的4字节输出队列无法实现综合,最后只好放弃原来的设计思想,改为输出队列只存放标志位,这实际上也是4字节的输出队列,但需要的存储空间大大减少。
之所以采用4字节输出队列,是基于这样的情况:在USB数据包结束处,如果最后一个数据正好是STX、ETX或Byte_Stuff之一,则输出顺序应该是Byte_Stuff、数据、ETX。这三个字节在同一时钟周期出现,但输出一个字节要用两个时钟周期,并且输出时一次只能输出一个字节。这时,把同时出现的数据按照既定的Byte_Stuff、数据、ETX的顺序把标志位存放在输出队列中等待输出。
3 仿真
CPLD设计离不开仿真,因为仿真是CPLD功能和性能的验证工具,也是CPLD的排错工具。没有仿真,就无法了解CPLD的工作情况,设计中的错误也无法找到根源。
在USB协议分析仪设计过程中,仿真一直发挥着重要作用。有两点特别需要说明:
1) 仿真为CPLD提供激励信号。
CPLD只是一个模块,它的正常工作依赖正确的输入信号,为此,设计了一个TESTBENCH文件,用于生成激励信号。而激励信号则由一个信号定义文件决定。
2) 仿真自动判断CPLD的输出信号是否正确。
要知道CPLD是否正常工作,必须有一套判断逻辑以鉴别输出结果正确与否。在TESTBENCH文件中,在生成激励信号的同时,也把预期的输出结果保存到判断队列,当接收到CPLD的输出以后,仿真自动对比二者并得出正确与否的结论。如果存在错误,则错误计数器进行计数。
仿真的内容包括不同速率的仿真、固定数据包的仿真、随机数据包的仿真、抗干扰能力的仿真、各种时间延迟仿真。
4 小结
本文介绍了CPLD的特点和工作流程,详细说明了CPLD在USB协议分析仪中的功能,最后说明了CPLD的功能仿真。在本文中,完成了USB协议分析仪最重要的工作,就是把从USB收发器收到的数据流转换成MCU数据包,等待单片机转发给分析软件进行分析。
参考文献:
[1] Compaq,Intel,Microsoft,NEC.Universal Serial Bus Specification 1.1[S].USB-IF,1998.
[2] Janet L.Axelson.USB Complete[S].Lakeview Research LLC, 5310 Chinook Ln,Madison WI 53704,2005.
[3] 姚鸿强.基于FPGA的USB设备接口设计[J].江南大学学报:自然科学版,2004(1).
[4] XilinxInc.ISEWebPACK[EB/OL].[2008-09-27].http://toolbox.xilinx.com/docsan/xilinx10/books/manuals.pdf.
[5] 郇晓辉,郇晓斌,田金文.USB FPGA系统测试设备开发[J].计算机与数字工程,2005(6).
关键词:CPLD;信号;数据包
中图分类号:TP212文献标识码:A 文章编号:1009-3044(2008)34-1853-02
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产之中。
CPLD是整个系统中非常关键的一个部件,它直接决定系统实现的成功与失败。如果CPLD设计有任何缺陷,就有可能导致整个系统性能变差,甚至完全失败。所以,CPLD这一部分必须认真分析需求,周密设计代码,合理仿真功能,力求最大限度地有效利用CPLD的功能。
CPLD的工作流程如下:打开集成开发软件(Xilinx的ISE)→画原理图、写硬件描述语言(Verilog)→编译→给出逻辑电路的输入激励信号,进行仿真,查看逻辑输出结果是否正确→进行管脚输入、输出锁定→生成代码→通过下载电缆将代码传送并存储在CPLD芯片中。
1 功能分析
CPLD接收从USB收发器收到的数据流,构建MCU数据包,然后输出MCU数据包至FIFO存储器,可以说CPLD就是一个成帧器。
为了能够准确地接收USB的数据流,CPLD中设置了一套去噪声模块。即使接收的数据中混入了一定的噪声,接收器也能正常工作。
要正确获得数据,首先要正确恢复时钟。低速USB的发送时钟为1.5MHz,全速USB的发送时钟为12MHz,CPLD也必须生成相应的接收时钟信号。为此,CPLD中设置了一个数字锁相环电路(DPLL),该电路监视输入信号的变化,一旦发现信号出现了边沿,立即调整接收时钟的相位,确保与发送时钟同步,这实际上也就是保证了读取数据的准确性。
DPLL电路还输出一个数据抽样点,这个抽样点总是处于一个数据位的中心,在这个抽样点获得的数据是最准确的。
在抽样点处获得的数据送至串并转换器,当接收8个数据位后形成一个字节。这个字节将被保存在输出队列中准备发送到外部FIFO缓存。为了消除“位插入”产生的额外数据,CPLD中有一个“位计数器”,如果发现6个连续的“1”,自动消除其后的数据位。
在CPLD中,有一个有限状态机FSM,它指示用户USB总线的当前状态。该状态机共有4个状态,分别对应初始状态、SE0、空闲状态和接收状态。通过状态机,可以得知一个USB数据包的开始与结束,也可以得知USB数据包的传输速率,还可以知道每一个状态出现的绝对时间,通过换算,能够知道数据包的持续时间,还能够知道SE0是处于EOP中还是复位中。当发现USB数据包的开始(SOP),立即把STX送入输出队列。STX是MCU数据包的开始,与SOP对应。一旦发现USB数据包结束,则把ETX 送入输出队列。ETX是MCU数据包的结束,与EOP对应。
在输出USB数据包的数据时,如果某一字节的数值正好等于STX、ETX或者Byte_Stuff,则在它们前面插入一个Byte Stuff。这也是一种插入技术,但它是面向字节的。
输出队列按照顺序保存要输出的数据,输出电路从输出队列中一个字节一个字节地读出数据,然后向外输出,每输出一个字节,就产生一个写入信号。
以上所有这些电路在复位信号有效时(Rst=0)都停止工作,设置为预置的值,如WR=1、 FSM=0。
对于输出电路来说,还有一个输出使能信号(OE)。当OE=0时,输出信号正常输出;当OE=1时,输出信号呈现高阻态。
CPLD中的所有电路都是同步的,都按照48MHz主振荡器的节拍工作。
2 功能实现
2.1 相位跟踪电路(DPLL)
DPLL(Digit Phase Lock Loop)是一种使得输出信号相位与输入信号相位保持一致的电路,也就是相位跟踪电路。当输入信号的相位发生变化时,输出信号的相位也跟着变化。DPLL根据用户USB总线的速率产生1.5MHz或12MHz数据接收时钟,接收时钟的相位跟踪输入信号的相位,二者始终保持一致,这就是数据时钟的恢复。根据数据接收时钟的相位,CPLD产生一个数据抽样信号,该信号指示在何处抽样,才能读取到正确的数据。
2.2 有限状态机(FSM)
FSM(Finite State Machine)称为有限状态机,是CPLD中最常用的部件之一。通常,用FSM实现各种各样的状态转换图。在USB协议分析仪中,FSM有四个状态,用来表示用户USB总线的活动。这四个状态覆盖了所有用户USB总线状态和用户USB总线事件,低速和全速也都支持。
1) 初始状态:复位结束后的状态
2) SE0状态:用户USB总线处于SE0
3) 空闲状态:用户USB总线处于空闲状态
4) 接收状态:用户USB总线正在传输数据包
2.3 MCU数据包装配
CPLD的输入信号是获取的USB总线信号,输出的则是单片机应接收的MCU数据包。在说明CPLD的这部分功能以前,先简单说明一下MCU数据包的构成形式。
2.3.1 数据包的格式
MCU数据包是对USB数据包的再次封装,其一般格式为:STX USB数据包 ETX
STX是MCU数据包的开始,其值为0F;ETX是MCU数据包的结束,其值为04。为了避免USB数据包中的STX、ETX被误认为MCU数据包的开始结束,特别增加了“字节插入”。 “字节插入”符为ByteStuff,其值为05 。当USB数据包中出现了STX,ETX或ByteStuff时,在其前面都要插入一个ByteStuff。例如:
USB数据包为:80 C3 03 04 05 06
对应的MCU数据包为:0F 80 C3 03 05 04 05 05 06 04
2.3.2 输出STX
STX是MCU数据包的开始,应该在USB数据包的开始处(SOP)输出,即一旦发现SOP,就要立即输出STX。
那么,在CPLD中如何识别SOP?在FSM中,如果当前状态为空闲状态,同时输入信号K有效,此时就是SOP,应该立即输出STX。
2.3.3 输出ETX
ETX是MCU数据包的结束,应该在USB数据包的结束处(EOP)输出,即一旦发现EOP,就要立即输出ETX。
当FSM的当前状态为接收状态,同时输入信号SE0有效,则认为此时就是EOP,应该立即输出ETX。
2.3.4 “字节插入”
当FSM为接收状态时,如果从用户USB总线接收到了一个字节,首先要判断其值是否为STX、ETX或Byte_Stuff。如果是其中之一,要先输出Byte_Stuff,然后再输出该字节。
经过“字节插入”处理过的MCU数据包在应用程序中要做相反的字节消除,以恢复原始USB数据包。
2.4 数据输出
数据输出部分包括输出队列的管理、输出总线和写入信号管理两部分。输出队列的管理包括取数据和指针移动。由于选择的CPLD容量有限,原来设计的4字节输出队列无法实现综合,最后只好放弃原来的设计思想,改为输出队列只存放标志位,这实际上也是4字节的输出队列,但需要的存储空间大大减少。
之所以采用4字节输出队列,是基于这样的情况:在USB数据包结束处,如果最后一个数据正好是STX、ETX或Byte_Stuff之一,则输出顺序应该是Byte_Stuff、数据、ETX。这三个字节在同一时钟周期出现,但输出一个字节要用两个时钟周期,并且输出时一次只能输出一个字节。这时,把同时出现的数据按照既定的Byte_Stuff、数据、ETX的顺序把标志位存放在输出队列中等待输出。
3 仿真
CPLD设计离不开仿真,因为仿真是CPLD功能和性能的验证工具,也是CPLD的排错工具。没有仿真,就无法了解CPLD的工作情况,设计中的错误也无法找到根源。
在USB协议分析仪设计过程中,仿真一直发挥着重要作用。有两点特别需要说明:
1) 仿真为CPLD提供激励信号。
CPLD只是一个模块,它的正常工作依赖正确的输入信号,为此,设计了一个TESTBENCH文件,用于生成激励信号。而激励信号则由一个信号定义文件决定。
2) 仿真自动判断CPLD的输出信号是否正确。
要知道CPLD是否正常工作,必须有一套判断逻辑以鉴别输出结果正确与否。在TESTBENCH文件中,在生成激励信号的同时,也把预期的输出结果保存到判断队列,当接收到CPLD的输出以后,仿真自动对比二者并得出正确与否的结论。如果存在错误,则错误计数器进行计数。
仿真的内容包括不同速率的仿真、固定数据包的仿真、随机数据包的仿真、抗干扰能力的仿真、各种时间延迟仿真。
4 小结
本文介绍了CPLD的特点和工作流程,详细说明了CPLD在USB协议分析仪中的功能,最后说明了CPLD的功能仿真。在本文中,完成了USB协议分析仪最重要的工作,就是把从USB收发器收到的数据流转换成MCU数据包,等待单片机转发给分析软件进行分析。
参考文献:
[1] Compaq,Intel,Microsoft,NEC.Universal Serial Bus Specification 1.1[S].USB-IF,1998.
[2] Janet L.Axelson.USB Complete[S].Lakeview Research LLC, 5310 Chinook Ln,Madison WI 53704,2005.
[3] 姚鸿强.基于FPGA的USB设备接口设计[J].江南大学学报:自然科学版,2004(1).
[4] XilinxInc.ISEWebPACK[EB/OL].[2008-09-27].http://toolbox.xilinx.com/docsan/xilinx10/books/manuals.pdf.
[5] 郇晓辉,郇晓斌,田金文.USB FPGA系统测试设备开发[J].计算机与数字工程,2005(6).