SVA语法:$past结合向量/数组选择的取值规则及实现方法问询
关于SVA中$past结合向量索引的行为与实现技巧
好问题!这在SVA时序断言里是个很容易踩坑的细节,我来给你掰扯清楚:
一、$past(a[a_select])的实际行为
当你写$past(a[a_select])时,SVA会把整个表达式a[a_select]的求值时间移到目标过去周期——也就是说,这里的a_select用的是上一周期的取值,而非当前周期的。
对应你给出的场景:当前周期a_select='2',上一周期a_select='1',这个表达式会取上一周期的a[1],因为索引是用上一周期的a_select来计算的。
二、如何实现“用当前周期的选择值选取上一周期向量对应位”
要达成这个需求,你需要先获取上一周期整个向量a的完整快照,再用当前周期的a_select去索引这个快照,写法如下:
$past(a)[a_select]
举个具体例子加深理解:
假设:
- 上一周期:
a = 4'b1011,a_select = 1 - 当前周期:
a_select = 2
那么:
$past(a[a_select])→ 在上一周期计算a[1],结果是0$past(a)[a_select]→ 先取上一周期的完整a(4'b1011),再用当前的a_select=2索引,结果是1
核心逻辑是:$past(a)会返回上一周期整个a的完整值,此时再用当前周期的索引去访问,就精准实现了“用当前选择值选上一周期对应位”的效果。
内容的提问来源于stack exchange,提问作者O.K.
相关产品推荐
相关产品推荐

