问题标签 [register-transfer-level]

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 投票
1 回答
37494 浏览

verilog - Verilog中的XOR信号

例如,我有一个这样的信号:
wire [18:0] A;

我需要使用具有多达 4 个输入的多个 XOR 门对其自身进行 XOR。所以这个信号会被分解成这样:

我如何像这样将信号与自身进行异或?另外,最好的方法是什么?

0 投票
1 回答
3278 浏览

verilog - Verilog:内存块实例化

我使用以下代码在 verilog 中实例化二维内存

该实例化在模拟中运行良好,但在实际合成和 RTL 分析完成时无法运行

谁能向我详细说明这怎么可能?

0 投票
1 回答
1508 浏览

verilog - 如何编写一个可以计算信号上升和下降的可综合 RTL

我想测量信号的上升转换和下降转换的数量。我将信号用作时钟并实现了 2 个计数器。一个计数器在每个上升沿递增,另一个在每个下降沿递增。我将这两个计数器的结果相加以获得最终计数值。

有没有更好的方法来实现这个逻辑?什么是最稳健的方法?

0 投票
1 回答
4182 浏览

verilog - 在生成内生成verilog +错误附近生成(veri - 1137)

写了好几天的verilog代码,我有一个问题是'我们可以在生成块中编写生成块'吗?我正在写一个类似这样的 RTL:

在编译上面的代码时,我得到:

不知道为什么。此 RTL 的目的是在设计的输出端创建一个包含“n”个触发器的管道。

假设 n 为 2,则电路应变为:

flop1 和 flop2 是新创建的触发器。

0 投票
1 回答
1600 浏览

hardware - 从另一个进程重置 SystemC 中的 SC_THREAD 的正确方法

如果我在 SystemC 中有两个线程,A 和 B(都是 SC_THREAD),并且如果 B 中的变量或事件被断言,我希望线程 A 停止执行(被重置),那么完成此操作的正确方法是什么。

这是一个更具说明性的示例:

所以,我希望线程 A 在线程 B 中触发事件或信号后立即停止它正在执行的操作。如果在 AI 中每次等待相关事件和常规 clk.pos() 时,这可能会实现,然后像这样执行 if-else:

我不喜欢这个解决方案,希望有一个我不熟悉的更好的方法。也许我应该在 SC_THREAD 中使用 async_reset_signal_is(),如下所示:

无论 rx_tx_transfer 函数的当前执行状态如何(即,它还没有到达下一个 wait()),这是否会在 sig_form_b 被资产时停止线程 A 的执行并进入重置状态?

如果有更好或更合适的方法来做到这一点,请分享。

0 投票
3 回答
895 浏览

verilog - RTL 设计中的时钟门控如何工作?

我试图了解时钟门控在 RTL 设计中是如何工作的。

我在这里有一个示例波:

在此处输入图像描述

描述:

所以这个波中有 3 个周期(比如说周期 0,1,2)。在第 0 周期,clock_enable 为低电平,gated_clock 关闭。在周期 1 中,clock_enable 变为高电平,在下一个周期(周期 2)中,gated_clock 开启。

现在,在模拟过程中,我看到了一些情况,其中在周期 1 接收到的传入数据被正确注册到由时钟门控的模块中(使用gated_clock)。这对我来说有点奇怪,我不太明白这怎么可能。

逻辑是这样的:

所以我看到如果in_validin_readycycle 1那么some_val将注册传入的in_val数据,它将在cycle 2. 然而,在 中cycle 1gated_clock为零。那么 in_val 是如何在这里采样的呢?据我了解,gated_clock如果我们想要 flopin_val的话,posedge 必须是 1 cycle 1

我可能会遗漏一些核心电路级数字设计概念。我真的很感激任何帮助。

更新波: 在此处输入图像描述

所以在这里你会看到cycle 0,gated_clock关闭但in_val很高in_ready。输入数据in_val也很高。在下一个周期some_val变高。因此,即使关闭,它看起来也像是in_val被捕获了。cycle 0gated_clock

0 投票
2 回答
2232 浏览

verilog - 使用 generate 将断言绑定到模块实例

我正在尝试为使用generate for statment 生成的模块实例绑定我的断言。

下面是我的绑定断言模块中的绑定语句:

在这里,RTL 在 u_blk_gen[gen_var] 的 gen 块下,我试图将我的断言绑定到生成实例的每个实例。使用 generate 块生成的 RTL 的路径实例是:

  • top.u_dut.u_blk_gen[0].u_blk
  • 顶部.u_dut.u_blk_gen 1 .u_blk
  • top.u_dut.u_blk_gen[2].u_blk
  • top.u_dut.u_blk_gen[3].u_blk

使用 bind 语句,我得到以下编译错误:

需要摆脱这个问题。

这是有效的陈述吗?

如果没有,是否有解决这种情况的方法?

EDA Playground 上的代码

0 投票
1 回答
336 浏览

vhdl - 我可以创建一个新的 Jfrog Artifactory 包类型插件吗?

我想在 Artifactory 中存储 RTL 模块(主要是 VHDL 文件 - .vhd),并能够使用 Xray 和其他 Jfrog 服务跟踪这些包的依赖关系。

我已经有了一个非常干净的“包”格式,我只想让 Artifactory 在上传时解析我的元数据文件,这些文件是该包的一部分,就像它控制 debian 包中的文件一样。

这可能吗?我该从哪里开始?

0 投票
3 回答
3496 浏览

verilog - 为什么 $urandom_range 返回相同的值?

我正在使用 UVM 运行测试台。在组件的run_phase()一项任务中,我执行fork...join_none以下循环,该循环贯穿整个模拟:

问题是信号ace被强制为相同的值。bde相同。

如果稍后有新的触发器构成,新值确实会被随机化和强制,但我再次得到a == c == eand b == d == e

似乎$urandom_range每个参数的选择(0 到 FF,0 到 F)只被调用一次,并且返回值被重新用于三个force命令。


编辑:我能够在最小的 TB 上重现该问题:http ://www.edaplayground.com/x/4_ph

我正在使用的供应商似乎存在问题,选择其他工具问题就消失了。


编辑 2:我还没有弄清楚为什么会发生这种情况,但这似乎与force语句就像一个连续赋值的事实有关(即,如果 RHS 信号在未来发生变化,强制 LHS 将跟随它直到forcerelease d,它不像 '=' 赋值)。

所以我的猜测是问题在于将函数的返回值用作RHS。(我不知道这个返回值有哪个生命周期)

在我的情况下,解决方案是将 $urandom 值保存到具有静态生命周期的变量中,然后将该变量强制到 RTL(如 J Reid 建议的那样)

0 投票
2 回答
1136 浏览

verilog - Verilog 总是在生成块内抛出错误

我正在尝试通过使用 for 循环使用波纹进位加法器来执行加法,并且我希望该操作仅在时钟的位置执行。为此,我使用了一个生成块并在生成块内使用了 for 循环。如果我不使用 always 语句,它会正常工作,但是当我添加 always 块时,它会在模拟时导致错误。下面是代码:

这里 fulladd 是一个不同的模块。

以下是我在模拟时遇到的错误:

add32.v 是设计模块名称。我用过概要 vcs。我是verilog编程的新手,请解释我错误的基本概念。提前致谢