宽带数据通信芯片检测方法及芯片
技术领域:
本发明涉及芯片领域,尤其涉及一种宽带数掘通信芯片的检测方法,以及可实现上述方法的芯片。
背景技术:
在宽带数据通信中,逻辑设计在通信设备开发中处于核心地位。因为随着现在数据通信对带宽越来越高的需求,无论是低端的二层网络交换机还是高端的太比特骨干路由器,整个设备的转发能力承受着越来越大的需求压力,作为决定转发能力的核心转发模块也越来越受到高带宽的挑战。
由于超大的数据带宽,使得任何进行软件转发的方式都显得力不从心,唯一的选择就是使用芯片进行硬件转发。
而在宽带设备的芯片设计任务中,若按照设计内容分,主要包括两个方面的设计,一个是状态机(STM)的设计,另一个方面就是先进先出存储器(FIFO)的设计,宽带数掘通信芯片基本上都可以分解为若干个FIFO和若干个状态机(如图1所示),也就是说,宽带数据芯片基本上就是由FIFO和状态机组成的。因此可以说,稳定的芯片是由稳定的FIFO、稳定的状态机以及FIFO与状态机之间可靠的配合得到的。
由于FIFO和状态机的重要性,几乎每个工程师都十分重视FIFO和状态机本身的设计,但是往往忽略考虑如何使状态机和FIFO之间有稳定的配合,常常出现由稳定的FIFO和稳定的状态机却组合不成稳定的芯片,并且由于状态机和FIFO之间的的配合失误往往会隐藏很深,即使上板调试也可能是跑上数天才出现一次,通过仿真也就更难发现了。更为致命的是,即使上板出现了问题,表现出来的现象往往是死机或者出错但又马上恢复,若是死机,还能引起工程师的高度重视,若是仅仅出错然后马上又得到恢复,则很可能就被工程师忽略掉了,那么将会导致芯片由于不稳定而失败或者部分预定功能得不到实现。
如何保证FIFO和状态机之间能够可靠配合成为了决定芯片成败的一个关键问题。一方面,我们必须通过特别的设计规则对相互配合的状态机和FIFO进行配合审查;另一方面,我们必须对状态机和FIFO的配合状况进行监视。
状态机和FIFO之所以难以配合好,并非设计非常复杂,而是由于其出错后不易重现,难以定位问题。例如在单板上工作数天才触发一次,这么长的时间,通过仿真来发现错误是无法想像的;而在单板上出现问题时,即使我们很好地保留了现场,要定位问题也非常困难,因为我们看不到芯片的内部波形,靠逻辑分析仪也是无能为力的。
如果能够在芯片一旦出现此类问题时,我们能够马上定位出是哪个状态机和FIFO之间配合失误造成的问题,那么我们再根据前面提到的特别的设计规则进行检察,一般马上就能找出问题的根源。这样,我们就能够很好地解决如何使状态机和FIFO能够可靠配合的问题。如何才能快速定位出是哪个状态机和FIFO之间配合出了问题,以及判断它们之间是否真出了问题。
发明内容:
本发明目的在于提供一种解决如何发现FIFO和状态机之间配合不可靠的芯片检测方法,避免传统方法在准确性、快速性、可操作性等方面的问题,能够在不借助逻辑分析仪等观察仪器的情况下,快速准确判断芯片内部任一状态机和FIFO之间是否发生过配合失误。
本发明的另一目的在于提供一种可实现上述方法的宽带数据通信芯片。
本发明的宽带数据通信芯片检测方法,宽带数据通信芯片包括若干STM和FIFO,FIFO为DATCNT式FIFO,其步骤包括
1)监视宽带数据通信芯片上每一FIFO上的DATCNT值;
2)在任一FIFO的DATCNT值处于无效范围(DATCNT值溢出)时,发出告警信息。
本发明在每一FIFO上设置一DATCNT值监视模块,该监视模块读取并判断DATCNT值,并在DATCNT值处于无效范围时发出告警信息。所述DATCNT值监视模块包括一监视器和一历史状态寄存器,监视器监视DATCNT值,在DATCNT值处于无效范围时触发历史状态寄存器,将历史状态寄存器置高,发出告警信息。
上述历史状态寄存器只在复位的情况下才被清零。
监视器判断条件1:(Datcnt(n)=‘1’and Datcnt(n-1 downto 0)/=0),在条件1满足时判定DATCNT值处于无效范围,将历史状态寄存器置高,发出告警信息。
本发明所有历史状态寄存器由CPU通过CPU接口定时读取。
或任一历史状态寄存器可由CPU读取;在历史状态寄存器不全为零时将中断信号置高,并通知CPU通过CPU接口查询告警的历史状态寄存器。
或将所有历史状态寄存器各位进行或(OR)操作,得到的信号通过管脚送到IO上面进行点灯告警。
本发明所述的历史状态寄存器为一D触发器。
本发明的宽带数据通信芯片,包括若干DATCNT式FIFO和若干状态机,每FIFO上设DATCNT监视模块,在DATCNT值处于无效范围时发送告警信息。DATCNT监视模块包括DATCNT值监视器和与之相连的历史状态寄存器。
历史状态寄存器只有在复位的情况下才被清零。
历史状态寄存器具有CPU接口。也可引出到中断信号。或通过管脚连接到信号灯上。
一般说来,FIFO和状态机机之间的配合失误主要是由于二者之间握手不正确,其最常见的表现是状态机对FIFO的强行操作。强行操作包括两种,一种是强行写操作,即在FIFO已经处于满状态的情况下,状态机仍然对该FIFO进行了写操作;另外一种是强行读操作,即在FIFO中已经没有有效数据的情况下,状态机仍然对该FIFO采取了读操作。强行读写所造成的后果一般是无法预料的,不同的FIFO有不同的结果,有些带防止强行操作的FIFO是可以容忍外部状态机对其任意的强行操作,FIFO本身是不会出错的,于是,很多工程师想通过设计带防强行操作的FIFO来解决FIFO和状态机之间的配合问题,显然是不能达到目的的,因为增加了FIFO的健壮性并没有解决FIFO和状态机之间握手不正确的问题,虽然FIFO还在正常工作,但是其引起的其他问题并没有被解决掉,比如内存泄漏、地址回收等问题,靠治标不治本的方法是肯定解决不了的。
本发明则根据“FIFO和状态机配合失误最常见的表现是状态机对FIFO的强行操作”这一特点,监视强行操作的存在,来判断状态机和FIFO之间的配合是否可靠,若芯片某处发生了强行操作,则证明对应的配合是存在问题的,可帮助我们快速发现和定位问题。
目前FIFO的设计基本上有固定的模式,主要分为两种,第一种通过比较读写地址的来确定当前FIFO的空满状态,第二种是通过记录当前FIFO中剩余数据单元个数(DATCNT)来确定FIFO的空满状态。我们下面以第二种方式(下面称为DATCNT方式)为例说明历史状态寄存器的设计和使用。DATCNT方式的FIFO其内部主要框图如图2所示。主要包括存储数据的双口RAM、写指针控制器WCNTP、读指针控制器RCNTP、当前数据单元记数器DATCNTP、根据DATCNT产生空满标志的状态生成器。其中写指针WCNT是在写使能WEN的控制下每次加一步进;读指针RCNT在读使能的控制下每次加一步进;DATCNT则必须根据WEN和REN二种的组合情况来决定是加一、保持还是减一。DATCNT物理实现上是一加减记数器,物理含义则是当前FIFO中还剩多少个有效数据单元。因此,根据DATCNT就可以判断出当前FIFO的空满状态。
在正常FIFO中,2n个数据单元深的FIFO,DATCNT的数据位宽为(n+1)位宽。但是,其有效值范围为[0,2n],剩余的(2n+1-2n-1)个数据均为无效值。在正常情况下,DATCNT的值是不应该处于无效值的范围内的,除非FIFO受到了外部状态机的强行操作,也就是说出现了FIFO和状态机之间的配合失误。
强行读写的出现说明我们的设计的动作并非按照我们的设计意愿而动作,即设计中存在我们不曾希望的BUG。对于DATCNT方式的FIFO,强行读写所带来的后果主要表现为DATCNT的值超出有效范围处于无效值。因此,我们只要监视DATCNT是否曾经处于无效值的范围,就可以知道该FIFO是否出现过配合失误。因此,我们在原来FIFO的基础上,增加一个对DATCNT的监视模块。该模块的主要功能就是监视DATCNT的取值是否在有效值范围内。
由于每个FIFO都增加了历史状态寄存器,因此只要整个芯片中任何地方发生状态机FIFO配合失误问题,相应的FIFO的历史状态寄存器(ERRLCK)就会马上告警,工程师只要分析与该FIFO相关的读写状态机和该FIFO的配合即可找到问题的根源,快速而准确地定位问题,消除设计隐患。
附图说明:
图1宽带数据芯片结构框图
STM :状态机 EXIMEM :外部扩展存储器
FIFO :先进先出存储器
图2传统DATCNT方式FIFO设计示意图
EF :空标志 FF :满标志
WEN :写使能 REN :读使能
WCNT :写指针 RCNT :读指针
DATAin:输入数据 DATAout:输出数掘
WCNTP :写使能记数进程 RCNTP :读使能记数进程
DATCNT:数据单元记数器 DATCNTP:数据单元记数进程
图3本发明的DATCNT方式FIFO设计示意图
EF :空标志 FF :满标志
WEN :写使能 REN :读使能
WCNT :写指针 RCNT :读指针
DATAin :输入数据 DATAout:输出数据
WCNTP :写使能记数进程 RCNTP :读使能记数进程
DATCNT :数据单元记数器 DATCNTP:数据单元记数进程
Mointor:DATCNT的监视器 ERRLCK :历史状态寄存器
实施方案:
如图3所示,本发明的具体解决步骤是:
1、在DATCNT方式FIFO中增加对DATCNT值进行监视的进程
在2n个数据单元深的FIFO,DATCNT的数据位宽为(n+1)位宽,其有效取值范围为[0,2n],剩余的(2n+1-2n-1)个数据均为无效值。要监视Datcnt[n-1:0]的数据是否处于有效值,只需判断一下条件1是否满足即可(条件1的表述方式为为VHDL语言的语法):
(Datcnt(n)=‘1’and Datcnt(n-1 downto 0)/=0)--条件1
若条件1曾经满足过,即使是仅仅持续过一个时钟周期,则可以认为该FIFO已经被强行操作过了,此时需要将告警用的历史状态机寄存器ERRLCK置为高。为了确保ERRLCK信号不会丢失,该寄存器设计成只有在复位的情况下才能被清零,复位结束后,一直监视DATCNT的值是否处于有效值范围内,若是则保持原值不变,若不是则将寄存器置高,并且将该值一直保持下去,直到下一次复位才重新归零,这样可以保证该寄存器不会因为故障消失又恢复到正常值,从而使工程师误以为芯片从来没有发送过故障,丢失发现问题的机会。
2、在整个芯片中,随时监视历史状态寄存器的信号,及时送出告警
由于每个FIFO都增加了历史状态寄存器,因此只要整个芯片中任何地方发生状态机FIFO配合失误问题,相应的FIFO的ERRLCK就会马上告警,工程师只要分析与该FIFO相关的读写状态机和该FIFO的配合即可找到问题的根源,快速而准确地定位问题,消除设计隐患。
本实施方案可采用三种方式进行告警:
1)CPU读取:将历史状态寄存器作为一个CPU可读取的寄存器,CPU定时通过CPU接口查询该寄存器;
2)中断告警:将历史状态寄存器作为一个CPU可读取的寄存器,并且在历史状态寄存器不为全零时将中断信号置高,通知CPU通过CPU接口查询该寄存器;
3)点灯告警:将所有历史状态寄存器各位进行OR操作,得到的信号经过反相后送出管脚连接到LED信号灯上,若历史状态寄存器任意一位为‘1’,经OR后反相得到的信号为‘0’,送出使LED灯点亮。1、
本发明通过在FIFO上设置监视模块,能够给芯片的可观察性,而且它以极小的代价,解决了其他办法很难解决的问题,不仅大大提高了芯片的可靠性、稳定性,而且为工程师提供了快速定位问题的手段,大大提高了芯片的开发进度。按照本发明的技术方案,在宽带通信数据芯片调试过程中,所有的问题都做到了一天之内定位,这在没有监视模块的项目中是很难想像的。这个实例足以证明该方法的快速性和有效性。