卫一然,甄国涌,单彦虎
(中北大学仪器科学与动态测试教育部重点实验室,电子测试技术国家重点实验室,山西 太原 030051)
责任编辑:时 雯
随着大规模和超大规模FPGA/CPLD器件的诞生和发展,以VHDL(硬件描述语言)为工具、FPGA/CPLD器件为载体的EDA技术的应用越来越广泛。在基于FPGA的数字设计中,状态机是使用最为广泛的时序电路模块,它使得控制更加灵活、高效。因此如何提高状态机的稳定性成为目前必须面对的问题。
FPGA的稳定性会因为外界的很多因素(如工作电压、温度)而受到影响,使状态机出现亚稳定状态,造成电路出现异常。本文针对记录器在温度实验中,高温造成FPGA状态机稳定性下降,出现的亚稳定问题,对各种状态编码进行了解研究,比较各种编码方式的特点,修改选定最适合的编码方式,再结合FPGA综合方面的约束,降低了温度对其的影响,使其恢复正常工作。
FPGA状态机的设计中,编码方式的选择是一个重要的部分。方法选择得当,设计的电路可以很简单;反之,电路会占用过多的逻辑或速度降低。下面介绍一下状态机的几种编码方式及其特点。
二进制编码(Sequential)和格雷码(Gray)都属于压缩编码。二进制编码有其最典型的优点,即状态向量最少。但是每次状态转换时,需要同时发生变化的比特位较多。格雷码虽然每次只有一位发生变化,大大降低了产生暂态的可能,但不适合有很多状态跳转的情况。
One-hot编码的典型定义为:在状态机中,每一个状态都使用一个寄存器来表达,并有相对应的唯一寄存器位,每次只有一个称为“hot”的有效位“1”。所以,在编译的时候仅需要获取“1”值的位。状态转移则是由“1”变为“0”,或是由“0”变为“1”的那些位所表示的状态发生了转移。采用这种编码方式需要的组合逻辑少、速度快,但占用触发器多,考虑到FPGA更多的提供触发器资源,所以该编码方式更适合于FPGA的设计。但是One-hot编码的使用将大大增加设计面积,因此在时序可以满足的条件下还是建议尽可能使用二进制编码[1]。
Compact编码尽量减少状态变量和触发器的位数。当试图优化面积时,这种编码方式是一种不错的选择。
Johnson编码方式与格雷码类似,适用于长路径无分支的状态机。Speed1编码是面向速度优化,一个状态寄存器中的位的数量依赖于特定的有限状态机,但一般比有限状态机的数量多。
该记录器用于导引头试验过程中视频回波数据、实时图像数据、控制信号时序数据以及状态检测信号的采集和记录,记录器在出厂前要进行一定的温度试验,确定其能在任务书规定的温度环境范围内正常工作,即记录器能够将导引头试验过程中的数据及信号准确地采集并存储到记录器的Flash芯片中。
记录器温度试验的过程中,在高温60oC的环境下对记录器进行测试,发现采集到的数据有错误。通过利用示波器对采集存储过程中的一些关键信号进行观察研究,将问题定位到了FPGA控制Flash进行存储这一模块:用示波器观察Flash芯片的信号,正常情况下,Flash最先进行无效块校验,信号连续出现一段方波然后拉高(如图1)说明无效块校验完毕,之后程序向下执行擦、写、读。但是60℃环境下,信号一直没有出现拉高,图2是出现异常时的波形。说明程序在执行过程中,无效块校验模块出现了异常并且一直游离在这种异常状态中无法恢复正常,导致无效块校验一直完成不了,程序无法往下执行。
以FPGA为核心控制Flash进行存储的程序设计,主要依靠的是大量的状态机。在对FPGA进行综合后,会生成以触发器为核心的状态寄存电路,其稳定性就是由此决定。时钟信号在FPGA器件内通过连线到达各触发器时,都有一定的延时。延时的长短不仅与pcb走线有关,还受到一些其他因素影响,如器件本身、外界激励、温度变化等[2]。实际的综合布线后,各个触发器的位置不同,连线长短不同,再加上温度等外在条件对器件稳定性的影响,使得在多个触发器在同步触发时,触发不能严格同步,总是出现无法避免的过渡状态。若程序游离于这种过渡状态无法恢复正常就会导致电路异常。图3为记录器异常时,利用逻辑分析仪抓到的状态机波形。
图3 记录器异常情况下状态机运行波形图(截图)
从图中可以看出,状态机运行过程中,在由状态“0001111”向下一个状态跳转时出现了问题,状态机并没有按照程序跳转到“0010000”,而是跳到了一个未被定义的状态(也称为“非法”状态)“1001001”,并且进入了死循环长期无法跳出,造成程序进行不下去,电路出现异常[3]。
在实际的程序设计中是很难做到全编码状态机。该记录器存储程序设计中,状态机的设计属于非全编码,采用的是二进制编码风格。高温60oC环境中器件稳定性有所下降,状态机转换时,由于记录器中使用的状态机数量众多,同时需要跳变的比特位也相应剧增,很容易进入到非法状态。很显然这样的非法状态不属于电路稳态下的逻辑,所以电路会出现异常,输出一些不可预测的错误数据。程序在在进行无效块校验时,进入到非法状态后没有及时返回到正常状态,而是长期游离在这样的异常下就导致了正常程序无法进行下去。要减少这种情况的方法之一就是要尽量降低过渡状态出现的概率。
One-hot编码方式中,每一个状态都使用一个寄存器来表达,每个状态都有它独立的寄存器位,对应于任何给定状态的状态向量各位中仅有一位为1,其他位全为0。例如state0=00000001,state1=00000010,state2=00000100……状态转移时,需要同时发生翻转的比特位数与状态数量无关,只有由“1”变为“0”,和由“0”变为“1”的那两位发生翻转。在比较大型的状态机设计中,与二进制编码相比,采用One-hot编码在很大程度上降低了相邻状态转换时需要同时发生翻转的比特位,从而大大降低进入非法状态的概率。在资源允许的情况下,可以考虑采用这种编码方式。
针对个人的情况选择合适的编码方式可以减少非法状态产生的概率,但并不等于完全将其消除。在编写FPGA控制程序时,如果对非法状态没有进行有效处理,在外界一些不确定因素的干扰下,状态机一旦进入了非法状态,电路会出现短暂的失控,或者一直无法返回正常工作状态。
对于One-hot编码方式来说,有效状态中只可能有一个触发器的状态为“1”,其余触发器的状态全为“0”,即任何状态中只要为“1”的触发器个数大于1就被确定为非法状态[4]。而且在该记录器的FPGA设计中,使用的状态机数量众多,相对应的非法状态数量也剧增。
记录器的系统程序设计中已经利用语句:When others=>next_state<=“初始状态”对非法状态进行转移。考虑到在60oC的环境下还是出现了问题,程序进入非法状态后并没有及时回到正常状态,所以在此基础上,现利用Xilinx XST软件在FPGA综合中添加安全模式约束来实现有限状态机,将添加额外的逻辑将状态机从无效状态调转到有效状态,否则只能复位来实现。
在使用One-hot风格对状态机编码的基础上,添加安全模式约束后进行高低温试验,电路恢复正常,信号的波形也恢复如图1正常状态。
在第一状态编码上改用One-hot,第二综合上添加安全模式加以约束,这两方面做出改变后,温度试验中,记录器正常工作,没有再出现异常情况。图4是状态机稳定工作时的波形图。
图4 状态机稳定工作波形图(截图)
由图可知,One-hot编码方式对降低非法状态发生概率,提高设备稳定性方面较二进制编码方式确实有很大的优势。再加上综合约束的进一步保障,在高温环境下程序运行时,由状态“0001111”向下一个状态跳转时没有出现进入非法状态无法跳出的情况,而是能够顺利地向下执行。
在FPGA的设计中,状态机是使用最为广泛的时序电路模块,一个好的状态机可以使控制更加灵活、高效。实现一个好的状态机关键是好的编码方式,以及对状态机中出现的错误进行很好的转移处理。本文详细分析了在温度实验中,高温造成FPGA状态机稳定性下降,出现的一系列亚稳定问题的原因。并根据分析的结果,对状态机的编码方式和FPGA综合方面进行了相应的改进,消除了高温对其的影响,提高了FPGA在温度方面的稳定性,使其能够正常工作。
[1]魏芳,刘志军,王立华.基于Verilog HDL的可综合有限状态机设计[J].电子工程师,2006(6):6-10.
[2]李雪梅.FPGA设计中由于延迟产生的冒险现象分析及消除[J].微计算机应用,2005,26(2):201-203.
[3]宋烈武,石强.设计CPLD/FPGA状态机的稳定性探究[J].中南民族大学学报:自然科学版,2003(S1):24-25.
[4]龚书涛,吕国强,彭良清.在FPGA中状态机的编码方式[J].电子工程师,2005(11):51-53.