问题标签 [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 回答
1847 浏览

bit-manipulation - Verilog中的Pythonesque位切片?

在 Python 中,我可以像这样选择偶数位或奇数位:

如果我可以在 Verilog 中执行此操作将非常实用,这样我就不必扩展表达式并手动执行。扩展(即{a[0], a[2]}{a[1], a[3]}),它显然不适用于我的其他参数化线组。

0 投票
1 回答
1189 浏览

verilog - 如何构建模块链?

我在构建模块链时遇到了麻烦。我可以手动连接模型列出所有模块,但需要更简洁的表示。以下代码已尝试但不起作用?如何更正代码?

这里,pe(输入,输出,输入,输出,时钟,复位)。

0 投票
2 回答
7897 浏览

system-verilog - 系统 Verilog fork 混淆,fork 和 begin 之间执行的语句

在此处查看简化的示例代码:

我的困惑是对的调用arr_obj1s[j].run()永远不会返回(它们永远循环运行),而且我不太理解该调用在开始/结束块之外放置的含义。哪个进程是永远执行的,如果某个进程正在运行一个不会返回的进程run(),那么每次调用怎么会返回?await()run()

编辑:这里有更多信息。发布完整的代码将是页面和页面,但我希望这额外的一点帮助。

obj1 的run()函数如下所示:

作为一个例子,run_a看起来基本上是这样的(它们都是相似的):

但是obj2的run()函数看起来基本上是这样的:

例如,run_d()如下所示:

0 投票
0 回答
472 浏览

system-verilog - 移植 SystemVerilog 风格的时钟分频并驱动到 SystemC

我正在将 System Verilog 模型移植到 SystemC,但我不确定对这种锁相环时钟驱动方案进行建模的最佳方法。在我看来,在 SV 中驱动时钟是一个手动过程,其中 SystemC 为内核提供了一种方法来为你做这件事。但我不知道 SystemC 如何支持在我正在查看的 SV 模型中手动完成的那种时钟划分。

考虑这个简化的 System Verilog 模型。

然后,在测试台中:

所以我的 SystemC 相当于测试台基本上看起来像

但是现在我有点坚持如何正确地模拟从参考时钟驱动的内部时钟。我想我可以尝试像 SV 代码这样的手动方法,但这似乎不像 SystemC 方式。我的另一个想法是尝试直接从 驱动所有时钟sc_main,而不是示例中的 PLL 样式,但我没有经验可以确定它是否会工作。在 SystemC 中做这样的事情有什么约定吗?

0 投票
1 回答
14285 浏览

verilog - 算术移位充当逻辑移位,与有符号变量无关

我有一个这样声明的寄存器:

当我将 2 的补码数放入数组并算术移位该数字时,它会进行逻辑移位:

显然,如果数字没有符号,系统将进行逻辑移位而不是算术移位。但是,您可以清楚地看到,“寄存器”肯定是签名的。

有人知道我在这里可能会错过什么吗?

谢谢!

0 投票
1 回答
206 浏览

hardware - 卷积编码器的终止与状态寄存器复位

通常,在为发送器设计卷积编码器时,会应用某种终止机制来在发送消息后将编码器驱动回其零状态。这通常通过将尾序列附加到传输的消息来完成,例如,在没有反馈的卷积编码器的情况下,一定数量 (n) 的零。这样,编码器需要 n 个时钟周期才能将编码器返回到全零状态。
另一方面,例如,当在 HDL 中实现卷积编码器时,也可以通过简单地复位编码器的所有(移位)寄存器来实现这种复位为零状态。这样,只需一个时钟周期就可以达到零状态。
在文献中,我从未见过有人提到第二种方法,我想知道这可能是什么原因?

0 投票
3 回答
46828 浏览

verification - 在 systemverilog 中正确使用“禁用分叉”

我有类似于以下伪代码的东西:

从代码:只有输入的应用程序才能打破分叉,因为其他2个线程正在工作,而(1)我想在每次迭代之间禁用所有线程,即一旦应用输入流-禁用所有产生的线程,直到下一次迭代开始(新配置)

所以我将上面的代码修改为

然而,这似乎也禁用了 for 循环/或类似的东西,我不明白但效果是测试被挂起。有人可以解释一下原因和解决方案吗?

0 投票
1 回答
8027 浏览

interface - 使用接口宽度和 $size 的自动 SystemVerilog 可变大小?

我正在尝试在 SystemVerilog 中制作具有标准化内存接口的模块(在我的情况下为 DSP),并希望模块中的变量根据附加接口中的总线宽度自动调整大小。我的理由:通过允许代码自动调整到任何连接的接口,这使得代码更便携,而不是要求 HDL 编码器传入参数来告诉模块将连接到它的所有接口总线的宽度(不是那个这会很糟糕,没有参数它看起来更干净)。

然而,我似乎无法让它发挥作用。这是一个说明问题的示例;Quartus II 12.1 中的以下综合:

请注意,width2最终会得到正确的值 (9) - 为时已晚,无法正确设置auto_sized2. 我最初认为这$size只是在所有变量都分配了宽度之后才进行评估,但这似乎也不是这种情况,因为$size(data_in)对于设置auto_sized1.

有什么想法吗?同样,这对项目的成功并不重要,我现在主要是好奇!

谢谢 -

0 投票
2 回答
8025 浏览

verification - systemverilog中结构、包和类的区别

class 和 struct 之间的区别很简单,但是 package 在整个方案中的位置。我看到的大多数包都从库文件中导入,并在目录中包含其他 sv 文件。更具体地说,什么时候包通常用于最佳编码方案,如果没有在该级别添加特定变量,使用头文件是否是更好的做法?谢谢

0 投票
2 回答
7553 浏览

interface - SystemVerilog:将接口传递给函数/任务(用于综合!)

是否有任何可综合的方式将接口传递给函数或任务?我的用例如下:我有一个包含多个功能的包(尽管我可以将它们转换为任务,如果有帮助的话:)),所有这些都可能在模块中使用并且可能需要访问模块的端口。现在,通常我只是将所有端口分组interface,将其添加到模块中,然后将其传递virtual给函数。但是,我的综合工具手册中提到virtual不支持。

我错过了什么吗?必须有一种方法为综合任务提供端口,类似于 VHDL 的signal论点?

一些示例代码:

理想情况下,任务mypack::do_something将能够将端口用作端口,即等待它们的更改、向它们写入值等;signal基本上,通过将它们作为参数传递(与variable或参数相反)在 VHDL 中实现的效果相同constant