问题标签 [system-verilog]

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.

0 投票
2 回答
4117 浏览

system-verilog - 转换为 System Verilog 结构和引用成员

我想将向量转换为结构并在同一语句中提取成员。这可能吗?否则,我将不得不分配一个临时变量,这很难看。

例如:

^^^^^ 这显然是不允许的!为什么 ?

0 投票
1 回答
25108 浏览

system-verilog - SystemVerilog case 语句不起作用

任何人都知道为什么这个案例陈述不起作用:

我正在使用 VCS。我尝试使用 DVE 调试器运行它,并且在使用调试器运行时代码可以正常工作。此外,此代码嵌套在另一个 case 语句中,此处未显示。

0 投票
2 回答
4103 浏览

verilog - 在 Verilog 中使用阻塞分配来推断触发器

我已阅读“Verilog 综合中的非阻塞分配,致命的编码风格!” 通过克利福德卡明斯。他说以下代码(第 12 页,简化版)是教科书中经常使用的触发器的正确​​实现,即使不是任何人都应该使用的那种。该文件获得了最佳论文奖,因此我认为该声明是正确的。

我想知道如果两个或多个这些触发器串联连接,为什么它会继续正常工作。说

在我看来,tmp 的值可能在被 secondff 使用之前被更新,从而导致一个触发器而不是两个触发器。有人可以告诉我标准的哪一部分说不能发生吗?非常感谢。

[并不是说我会考虑编写这样的代码,我只是想了解阻塞/非阻塞行为,即使在糟糕的编码风格使含义不明显的情况下]

后来补充:

我现在认为这篇论文不太可能是正确的。1364-2201 Verilog 标准的第 5 节“调度语义”解释了会发生什么。特别是,第 68 页的第 5.6.6 节“端口连接”说单向端口就像连续分配一样。反过来,连续分配只是对所有内容都敏感的始终块。所以底线是,在我下面的示例中,ff 的两个实例化等效于具有多个 always 子句的模块,每个人都会同意它被破坏了。

在 Clive Cummings 回答问题后添加:

我感谢 CC 指出,从标准第 5 节中取出的上述陈述仅涉及更新事件的时间,并不意味着某些连续赋值和始终块之间的字面等效性。尽管如此,我认为他们解释了为什么一些模拟器(例如 Icarus Verilog)会在“触发器”中产生不同的模拟结果,其中包含阻塞和非阻塞分配。[在一个更大的例子中,我得到了 2 个带有阻塞分配的明显 ffs,而正确的 5 个带有非阻塞分配。] 其他模拟器(例如具有默认选项的 Modelsim 或 Cver)似乎产生相同的结果,无论哪种形式使用赋值。

0 投票
3 回答
1862 浏览

verilog - 从 Verilog 代码合成的硬件正确意味着什么

我已阅读“Verilog 综合中的非阻塞分配,致命的编码风格!” 通过克利福德卡明斯。他说这个问题底部的代码是“保证”合成成一个三触发器管道,但不能保证正确模拟(例如 pipeb3,第 10 页;“保证”注释在第 12 页)。该文件获得了最佳论文奖,因此我认为该声明是正确的。http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf

我的问题:如果不参考模拟语义,如何定义 Verilog 综合的正确性?非常感谢。

我想加分问题是:假设它不是下面的代码,请给出最简单的 Verilog 程序,它具有明确定义的综合语义并且没有明确定义的模拟语义。再次感谢。

事实上,有人可以给我一段在模拟和合成时定义良好的 Verilog,但两者会产生不同的结果吗?

编码:

PS:万一有人关心,我认为正确合成工具的合理定义可能是“合成硬件将做正确模拟器可以做的事情”。但这与论文不符。

[我现在认为论文是不对的。1364-2001 标准的第 5.2 节明确指出,Verilog 程序的含义是由其模拟定义的,然后标准继续定义(非确定性和所有)。没有提及合成工具必须提供的任何“保证”超过模拟器。

还有另一个标准 1364.1-2002 描述了可综合子集。没有明显提到合成硬件的语义应该与模拟有所不同。第 5.2.2 节“对边缘敏感的存储设备建模”说应该使用非阻塞分配来建模触发器。用标准语言来说,这意味着不支持使用其他任何东西。

作为最后一点,上一段中提到的部分说阻塞分配可用于计算非阻塞分配的 RHS。这似乎违反了卡明斯的建议 #5。

Cliff Cummings 被列为 1364.1-2002 标准工作组的成员。该标准在 IEEE 网站上被列为已替换,但我不知道它是由什么替换的。]

0 投票
2 回答
771 浏览

oop - 系统verilog /oop

下面代码中的对象只被实例化了一次,对吧?所以已经实例化的单个对象应该包含一个值为 2 的整数 i 字段。为什么p.i给出 1 而不是 2?这是 SystemVerilog 特有的吗?还是所有 oop 语言的行为都相似?

谢谢

0 投票
1 回答
3404 浏览

verilog - 如何在 SystemVerilog 程序块中监视信号

我正在尝试使用 SystemVerilog 学习一些关于测试平台的知识。但是我似乎找不到在程序块内监视 DUT 信号的方法

考虑以下示例。信号“虚拟”是 DUT 的输出并输入到程序块。现在我需要监视程序块中的“dummy”以在“dummy”具有特定值时引发标志“test”。

在一般的模块驱动测试平台中,我会简单地写总是@(虚拟),但程序下不允许总是块。我将如何实现这一目标?

0 投票
3 回答
1130 浏览

verilog - 系统verilog/verilog ---事件

上面的代码和下面的代码有什么不同?就像将 posedge 时钟从第 5 行移到第 7 行如何改变代码一样?提前致谢

0 投票
1 回答
1699 浏览

random - SystemVerilog randc 重新初始化

我想知道是否有办法重新初始化 randc 变量。我正在尝试设置几个寄存器,但需要确保它们可以按任意顺序设置。该对象可能会被重新随机化(类中还有一些其他随机值),然后该函数可能会再次被调用。我的代码看起来像这样:

或者,有没有办法在变量上调用 std::randomize() 以使其成为 randc?谢谢,-蒂姆

0 投票
2 回答
3482 浏览

verilog - 为什么 Verilog 函数中不允许非阻塞赋值?

我读过 Verilog 函数中不允许使用非阻塞赋值。任何人都可以为此提出一个合理的解释吗?

0 投票
5 回答
998 浏览

verilog - 是否有支持 SystemVerilog 类的线路覆盖的工具/模拟器?

我的 SystemVerilog 组件有一些自测试代码,我想确保我的测试涵盖所有内容,尤其是我的类中的失败案例。我所需要的只是行/分支覆盖,就像其他面向对象语言(如 Java)通常使用的一样。

我尝试使用 VCS(2012.06 版)覆盖,我发现它仅对 SystemVerilog 的支持有限,并且不支持对 SystemVerilog 类的任何覆盖。是否有任何模拟器或工具具有此支持?