今天在工作中遇到一个问题,concept答应release的mbist的svf格式改了,原来那个用来将svf转成xml格式的测试用例的方法不再试用,没辙只能自己写脚本了,首先把思路理清楚,我需要做的是从输入的svf中抓出相应的pin的方向和名字,以及每一条指令中给各个pin所设置的值,然后把整个文件中所有这种给激励的命令根据pin切分开,比如第一条指令给的是hlhlhl...lll第二条指令给的是lhll...hhh,我想要的是跟第一个pin输入hl给第二个pin输入lh,最后把所有指令中关于每个pin的每次ioc的操作命令都打出来。开始的想法是把io的名字和方向分别放到一个数组里面,然后把每条指令根据io的顺序把相应比特取出来,把每个io对应的激励值全部push到一个数组里面,然后声明一个hash,将pad方向名字以及存放激励名字的数组丢进这个hash,看上去很高大上,但是不用data dumper打印这个哈希来辅助的话,很难通过循环来解构并且取到想要的值!这就是复杂的数据结构所带来的问题,声明这种二维以上的数据结构,特别是哈希和数组的嵌套结构,很容易搞晕,还不如直接声明一个标量和一个数组,每次读取到相应的行,标量这个标量数据取每个io所在位置的那个bit,然后再声明一个标量把所有第一个标量的内容.=到一块,第二个标量就是我们想要的,通过一个二级哈希就可以把所有io的这三组信息都存好,说了这么多都有些晕了,我想表达的是有时候用perl没有必要一开始就把数据结构整的太过复杂,想清楚我们想要什么,如果能直接用标量和数组得到,那就用这两个,最后再把通过这两个简单数据得到的东西放到哈希中,而且尽量用我们想要的某一个信息来做键,这样可以节省声明的变量数目,我们有时候只需要一个水龙头而不是水桶,另外一个体会就是脚本这种东西真的要多写多思考,看了这么多不自己动手写的话终究还是不会的,其他东西也是如此。