6-禁止属性not,蕴含操作符(交叠蕴含与非交叠蕴含)(包含在蕴含中使用if...else结构)
资料来源
(1)硅芯思见:【95】SVA中的基本元素sequence和蕴含操作 (qq.com)
(2)SVA中的与或非(and_or_not) (qq.com)
1.禁止属性
当期望属性为假时,可以采用关键词not,用来表示属性永远不为真.
2.蕴含/implication
(1) 蕴含等效于if-then结构,蕴含左边的叫做"先行算子",右边叫做"后续算子";
(2) 先行算子是约束条件;当先行算子成功时,后续算子才会被计算;如果先行算子不成功,那么整个属性就默认地认为成功,这叫做"空成功";
(3) 蕴含结构只能被用在属性定义中,不能在序列中使用(注意:蕴含也能用在assert property中,此时相当于将property展开放到了assert property()中,不推荐这种写法);
(4) 补充:为什么使用蕴含?
(1)上图中p7在每一个时钟上升沿寻找序列的有效开始,即在每个时钟上升沿检查信号a是否为高;如果a在给定的任何时钟上升沿不为高,检验器将产生一个错误信息;但这并不是一个有效的错误信息,因为并不关心只检查信号a的电平; 这个错误表明在这个时钟周期没有得到检验器的有效起始点;
(2)为了避免上图中写法引入的大量错误信息,属性需要被定义为在检查的起始点无效时忽略这次检查,这时需要采用蕴含;
2.1交叠蕴含/overlapped implication/|->
交叠蕴含用符号“|->”表示。如果先行算子匹配,在同一个时钟周期计算后续算子表达式。
2.2非交叠蕴含/non-overlapped implication/|=>
非交叠蕴含用符号“|=>”表示。如果先行算子匹配,在下一个时钟周期计算后续算子表达式。后续算子表达式的计算总是有一个时钟周期的延迟。
3.蕴含的扩展
3.1 后续算子带固定延迟的蕴含
3.2 使用序列作为先行算子的蕴含
下图中,1s,2s,3s表示属性的有效开始;
3.3 嵌套的蕴含
3.4 在蕴含中使用if/else(if/else不能用于sequence表达式中,只能出现在蕴含操作的后续算子中)
注1:在if前不能出现类似"##1"等时序表征的语句使其成为子序列的语句的一部分,但是可以在if/else结构中使用各种序列表达式;
注2:属性中的表达式最后要以";"结束,所以作为属性中表达式一部分的if/else结构中的任何分支的描述结束时不能使用";";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?