问题标签 [system-verilog-assertions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
verilog - `define 宏的范围
这个问题是关于系统verilog宏的。
我有一个顶级模块、子模块和一个子子模块。在子模块中实例化的子模块在顶层模块中实例化。
如果我在子模块中定义一个宏`define abc
,里面写的代码`ifndef abc
会在顶层模块/子子模块中编译吗
verilog - Verilog 中的可合成延迟
我想合成一个 SystemVerilog 代码,它的延迟写为 ##1 但合成器会给出语法错误,因为延迟是不可合成的。我想知道有什么方法可以给延迟合成吗?例如,这是代码中带有延迟的 SystemVerilog 断言
断言属性 ( ( req1 == 0 ) ##1( req1 == 1 ) ##1 !( req2 == 1 ) || ( gnt1 == 0 ) );
我怎样才能在不丢失其行为的情况下合成它?
delay - 将 SystemVerilog 断言与延迟转换为 invarspec
我想将延迟的 SystemVerilog 断言转换为形式验证器的 invarspec。合成器在下面的代码行中给出 ##1 的语法错误。
有几个属性需要验证并且有延迟。我目前正在尝试使用合成器将它们转换为正式(SMV)模型规范,该合成器适用于不涉及延迟的属性。我可以为这个正式的验证工具建模延迟吗?如果是这样,怎么做?
system-verilog - 对于具有相似序列的系统verilog功能覆盖箱会有问题吗?
- zzzz 是一个计数器寄存器,根据其输入从 0 计数到 3、4、9、17、18 或 19
在对这个功能覆盖进行编码时,想法是如果发生一系列特定的转换,则命中任一 bin,仅命中一个 bin。
因此,例如,如果像在 sequence_2 中那样从 0 到 4 的转换,那也会命中 sequence_1,因为 0 到 3 序列存在于 sequence_1 中
谢谢
arrays - 将整数数组约束在一定范围内
全部,
我正在尝试提出一个 SystemVerilog 约束,例如byte my_array [0:8]
循环遍历数组中的所有元素以将它们的值限制在 1 到 9 的范围内。类似于:
解析器不接受上述内容。请帮忙!我可以在一个循环中生成 9 个约束,但想要更优雅的东西。因此,以下是当前的解决方法。
谢谢!
system-verilog - 如果出现一个序列,则在 System-Verilog 断言中出现一个子序列
我想说:“如果序列A
发生,那么序列就B
出现在该序列中”。我怎样才能做到这一点?
我原以为我可以使用断言:
但这似乎不适用于我的示例。
我读过:
如果第一个布尔表达式在第一个时钟节拍处计算为真,第二个布尔表达式在第二个时钟节拍处计算为真,以此类推,直到并包括最后一个布尔表达式在最后一个时钟滴答时计算为真。
但我怀疑|->
当我希望它成为第一个时钟滴答时,时钟滴答传递到了最后一个时钟滴答的另一侧。
我的特定示例是一个累加器,如果我添加足够多的正数,我希望它会溢出,所以我想要A = (input == 1)[*MAX_SIZE]
and B = (output == 0)
,所以这B
是一个长度为 1 的序列,我不知道这是否会导致问题。
我对 system-verilog 很陌生,所以它可能是我的代码的其他部分出错了,但我没有看到这个例子在任何地方完成。
system-verilog - $past 带有输入信号
我想验证如果事件发生,那么在过去的“num_ticks”处,应该已经断言了一些信号。
例如,我写的属性是:
这里的问题在于num_ticks
. 如果num_ticks
是写入属性的模块的输入信号,则断言失败。如果我声明num_ticks
为 int,并将其分配给常量,则它通过。
$past 仅适用于常量值吗?LRM 中没有提到这一点。
我正在使用 Questasim 10.3
system-verilog - 如何在序列块中使用 $display 语句,在 System Verilog Assertions (SVA) 中显示一些信息?
我希望序列块在执行时显示一些信息。
例如:
我尝试了这段代码,但遇到了以下错误:
任务 $display 在需要函数的地方调用。请更正任务调用并重新编译。
我该如何克服呢?
system-verilog - 系统verilog中连接数组的位宽
我有多个函数可以生成 1 位变量/定义/枚举的串联数组。每次发生连接时,我都想确保最终大小为 32 位宽。如果小于或大于 32 位,则标记错误。我尝试过 $bits、$size,但他们似乎想要一个变量并提供变量宽度而不是连接的宽度。这违背了目的。
任何帮助表示赞赏。
谢谢!
这就是我的想法:-例如。