【发布时间】:2023-01-23 22:46:45
【问题描述】:
我有一部分寄存器看起来像这样
register CC {
field CSS @ [6:4] is write {
method write(uint64 value) {
if (CC.EN.val == 0b1) {
log spec_viol: "Command set selection should not " +
"occur when controller has been enabled.";
return;
}
default(value);
}
}
field EN @ [0];
}
如何通过设置寄存器CC的值来确保CC.EN被设置为1(第一次)时,CC.CSS中的spec-viol不会发生?
我第一次尝试写入寄存器并触发了 spec-viol
【问题讨论】:
-
根据文档,“[read_register] 的实现按从最低到最高有效位的顺序调用所有子字段 [..] 的
read_field方法”,所以假设 little-endian bitorder 我认为 EN应该写在CSS.write之前? -
哦,没关系,从我身边草率阅读。您想要的语义是 EN 值来自前写入应适用于当前写入的 CSS。所以在你的代码中,字段顺序意味着 EN 在 CSS 读取它之前被覆盖,这不是你想要的。
标签: dml-lang