当下,最火的学识莫过于《大数据》,大数据的中心思维便是经过科学计算,完结关于社会、企业、个人的看似无规律可循的行为进行更深化和直观的了解。FPGA的可测性也可以对FPGA内部“小数据”的计算查询,来完结对FPGA内部BUG的探查。
可测性规划关于FPGA规划来说,并不是什么高神莫测的学识。FPGA的可测性规划的意图在规划一开始,就考虑后续问题调试,问题定位等问题。要了解FPGA可测性规划,只不过要回答几个问题,那便是:
(1) 规划完结怎么进行测验?
(2) 规划呈现问题,怎么敏捷定位?
(3) 怎么在规划之初就能区分毛病的层次,进行问题阻隔?
一般情况下,在规划的调试阶段,假设呈现BUG,则需求经过嵌入式逻辑剖析仪(chipscope/signaltap)对或许呈现问题的信号进行抓取。这种方法,关于较大型的规划调试速度较慢(其编译时刻较长,迭代速度较慢,可是也是一种很有用的手法和FPGA的必备技术)。那么关于大型工程的可测验性,有什么行之有用的手法?
(1)计算计数。
FPGA规划中的计算计数不是不是什么《大数据》,只不过是些“小数据”,例如,关于网络接口来说,收到多少包,发送多少包,收到多少字节,发送多少字节。 关于一个模块来说,收到多少次调用,或许建议多少次操作。关于读取FIFO的数据流操作,从FIFO中读取多少frame(帧),向后级FIFO写入多少帧。
这些计数,毫无疑问都是需求占用资源的,可是占用这些资源是有价值的。经过这些计数,规划可以经过总线接口供外部处理器读出。所以一张FPGA内部规划的“大数据”图形就显现出来了”。
从上图可得,经过外部CPU可将各处理模块中的计数,别离读出,所以得到其内部的一张数据流图。咱们可以简化规划为(计数A->计数B->计数C->计数D->计数E)。实际运用中可依据占用的资源和实际需求的观测点来确认。
假定,咱们在调试过程中发现,有输入忽然没有输出,这是不需求再去内嵌逻辑剖析仪来抓取信号,经过CPU的软件,可以打印出一切计数,在有输入驱动的情况下,假规划数C有改变,而计数D没有改变,则直接定位处理模块3,此刻处理有问题,简略直接而有用。
令一种景象也可以敏捷定位,输入多,可是输出少,比方正常输入的码流,可是输出到显现上确实缺帧少帧,彻底不流通。经过计数剖析,本来帧计数C和D应该相同多,可是D却计数较C少许多,阐明此刻处理模块3功能不行,或许规划有缺点。这样就把整个规划的要害点定位到处理模块3.
经过FPGA内部各模块的要害计数剖析,来定位剖析问题,在规划上没有任何难度。不过需求外部CPU或许FPGA嵌入式CPU的合作运用。
凡事有利就有弊,添加多的计数,会添加资源的运用量,那么怎么平衡?对这种剖析计数进行独自位宽设定,在大局一致的宏界说中定位`define REG_WIDTH N 。此刻N的设定可以灵敏多样,8位/16位/32位等等。可以依据项目中资源的剩余量,灵敏添加所需的逻辑,究竟这些计数的值供给剖析试用。
(2)状况输出。
假设向上述问题相同,咱们定位到某个模块,那么怎么再定位到模块中那个逻辑的问题?
处理这个问题的要害,便是状况机,向输出计数相同,一般的规划中,都会以状况机为中心进行规划,将状况机的CS(当时状况)信号引出,假设没有外部输出的情况下,当时状况应该为IDLE。比方上文中,咱们定位到模块3此刻死机,等候不再输入外部信号时,此刻模块3中的状况机信号如不为IDLE,假设此刻正处于状况 B_CS,则阐明此刻模块的过错呈现在状况B。而B跳转必须由信号X起效。因而可以直接定位到信号X的问题。剩余便是要定位信号X为什么不起效。(或许你看看代码就能知道**不离十,是不是一秒钟变高手! 开个打趣!)
(3)逻辑复位。
区分FPGA的问题或许模块问题的另一种方法便是逻辑复位,上文讲复位时(架构规划闲谈),逻辑复位,假设A模块本身有逻辑复位,假设规划没有输出(浅显叫做“FPGA死了”),假设置疑某个模块,该模块逻辑复位后,规划又正常作业,则需求定位的则是可以是该模块、或许该模块影响的与其衔接模块(该模块的非正常输出导致下一级模块犯错)。
本文将的FPGA可测性规划,非ASIC讲的经过插JTAG/BIST进行的测验。其意图仍是经过重视怎么测验的规划,来定位问题,进步FPGA的可测性。除此之外,逻辑探针也是可以一个处理测验问题的方向(专题另述)。可测性的进步,意味着调试手法的添加,调试速度加速,而不是一味的依靠嵌入式逻辑剖析仪。可以到达快速问题定位才能,是FPGA研制才能一个重要的表现,而可测性规划则是提高这一才能有力的帮手。