Mentor-dft 学习笔记 day41-ASCII File Format(1)

Tcl Vector Set Format
A vector_set is a a Tcl dictionary.
vector_set is ‘{‘ ‘vector_list’ ‘{‘ <vector_statement> <vector_statement>
… ‘}’ ‘}’
vector_statement is <vector> | <timeplate_statement> | <repeat_statement>
vector is ‘{‘ [ ‘annotation’ <ann_string> ] [ ‘type’ <type_string> ]
[ ‘port_values’ <value_string> ] ‘}’
timeplate_statement is ‘{‘ ‘timeplate’ <tp_string> ‘}’
repeat_statement is ‘{‘ ‘repeat’ <repeat_num> ‘{‘ <vector_statement> … ‘}’
‘}’
ann_string is any string including new lines, quotes, and curly braces
type_string is one of ‘shift’, ‘load_unload’, ‘test_setup’, ‘test_end’,
‘shadow_control’, ‘master_observe’, ‘shadow_observe’, ‘ijtag_shift’,
‘ijtag_update’, ‘ijtag_hold’, ‘ijtag_reset’, and ‘capture’. tp_string is
the name of a valid timeplate to use for this vector and all subsequent
vectors in this vector_set, unless another timeplate_statement is used.
value_string is any sequence of the characters 0 1 N Z P L H X T without
spaces or newlines.

vector_list是一个Tcl项目字典,其中每个项目都包含更多字典的列表。从语法上看,它是这样的:

'{' 'vector_list' '{' ( '{' 'timeplate' string '}'
| '{' 'annotation' string '}'
| '{' 'type' string 'port_values' string '}'
| '{' 'repeat' string '{' ... '}' '}' )*
'}'
'}'
vector_list后面跟着它的项是唯一的顶级字典条目。从Tcl处理的角度来看,以下代码片段显示了如何访问和修改received_vector_set中的每个port_value条目:
proc my_callback {received_vector_set } {
foreach vector [dict get $received_vector_set vector_list] {
if {[dict exists $vector port_values]} {
dict set vector port_values [//some modification of port values]
}
lappend vector_list $vector
}
return [list vector_list $vector_list]
}

vector_set repeat语句可用于重复单个向量或一组向量语句。repeat_num字符串指定向量重复一定次数。value_string中的字符数等于使用的端口数。注释的字符串对和ann_string以及port_values和value_string都是可选的。可以有一个完全为空的向量和一个仅由空向量或完全为空向量组成的向量集。与回调proc一起使用时,如果在声明回调proc时未指定可选端口列表,则向量port_values应具有足够的数据,以完整端口列表的顺序显示完整端口列表。如果在添加回调进程时指定了端口列表,那么向量集中的port_values将仅包含端口列表中指定顺序的端口的值。传递给回调进程和从回调进程返回的向量集都具有相同的格式,但可能包含基于received_port和returned_port列表的不同端口值.端口值的每个字符串只能包含以下字符:

0 1 N Z — Force low, force high, force unknown, force Z input values
P — Pulse clock using pulse timing in timeplate
L H X T — Measure low, measure high, measure unknown (no measure), and measure
Z output values
当与其他向量组合时,输入引脚上的未知值(N)变为先前值的force。注释关键字用于包含与向量关联的注释。这些注释可以来自测试过程中的“注释”语句、从IJTAG iNotes和IJTAG解算器语句生成的注释,以及在编写pattern时创建的隐式注释,例如“pattern”或“链pattern”注释。对于这些隐式注释,由于它们通常是由模式格式编写器生成的,并且并不总是一致的,因此会创建一个新的一致注释,并将其传递给相应的向量回调。这些注释采用“MGC:链pattern”和“MGC:pattern”的形式,分别表示链测试pattern的开始和扫描测试pattern的启动。如果这些注释是从向量回调过程返回的,那么在传递给模式格式编写器之前,它们将被删除,因为pattern格式编写程序仍将插入其隐式注释。type关键字用于将向量类型附加到向量。用于标识类型的字符串对应于生成向量的过程,如果“捕获”是类型字符串,则这对应于所有启动和捕获向量,而不管它们是如何生成的。在IJTAG流中,矢量类型也可以对应于求解模式集中的IJTAG寄存器状态。这些向量类型将位于从工具传递给向量回调进程的向量中,回调进程可以使用这些向量类型来确定要返回的向量值。回调过程不必返回具有这些类型的向量,任何未类型化的向量都将保持之前发生的向量的类型。timeplate关键字用于更改用于下一个向量以及此向量集的所有后续向量的timeplate,除非遇到另一个timeplate语句。在vector_set结束时,所使用的时间牌将恢复到vector_se设置之前有效的timeplate。例如,如果为IJTAG模式集指定的时间牌是“tp1”,并且如果回调过程返回一个具有三个向量的vector_set,其中timeplate语句将时间牌更改为第二个向量之前的“tp2”,那么最终的向量列表将时间牌“tp1“用于第一个向量,时间牌“tp2”用于第二个和第三个向量,之后的任何向量都将返回到使用时间板“tp1”,除非后续回调过程另有更改。repeat关键字可用于将vector_set中的一个或多个向量重复N次,如repeat_num所指定的。vector_set中的所有条目都是可选的,因此回调可以返回一个空的向量集来删除向量。矢量中的所有条目也是可选的,因此可以有一个具有空矢量的矢量集。对于空向量,假设端口上的值为N或输入引脚的先前强制值,X为输出引脚,Z为双向引脚。例如,如果回调过程传递了一个vector_set,其中包含一个向量,而回调过程返回一个空的vector_set(仅{}),这意味着回调过程已删除了传递给它的vector_set中的向量。另一方面,如果回调过程返回一个包含空向量({vector_list{}})的向量集,则这是一个空向量,意味着所有内容与前一个向量保持不变,类似于过程文件过程中的空循环。不返回任何内容的回调过程可用于仅内省向量数据,因为它不会以任何方式修改正在写入的向量数据。
Here is an example of a vector set:
vector_list { { annotation “my annotation” port_values 000 }
{ timeplate tp1 }
{ type load_unload port_values 101 }
{ repeat 200 { port_values 100 } } // repeat this 200 times
{ port_values 110 }
{ repeat 1000 { {port_values 100 } // start of loop for 1000 times
{ port_values 101 }
{ port_values 100 } } // end of loop for 1000 times
}
当写入pattern时将
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值