问题标签 [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.
verilog - Verilog中的XOR信号
例如,我有一个这样的信号:
wire [18:0] A;
我需要使用具有多达 4 个输入的多个 XOR 门对其自身进行 XOR。所以这个信号会被分解成这样:
我如何像这样将信号与自身进行异或?另外,最好的方法是什么?
verilog - Verilog:内存块实例化
我使用以下代码在 verilog 中实例化二维内存
该实例化在模拟中运行良好,但在实际合成和 RTL 分析完成时无法运行
谁能向我详细说明这怎么可能?
verilog - 如何编写一个可以计算信号上升和下降的可综合 RTL
我想测量信号的上升转换和下降转换的数量。我将信号用作时钟并实现了 2 个计数器。一个计数器在每个上升沿递增,另一个在每个下降沿递增。我将这两个计数器的结果相加以获得最终计数值。
有没有更好的方法来实现这个逻辑?什么是最稳健的方法?
verilog - 在生成内生成verilog +错误附近生成(veri - 1137)
写了好几天的verilog代码,我有一个问题是'我们可以在生成块中编写生成块'吗?我正在写一个类似这样的 RTL:
在编译上面的代码时,我得到:
不知道为什么。此 RTL 的目的是在设计的输出端创建一个包含“n”个触发器的管道。
假设 n 为 2,则电路应变为:
flop1 和 flop2 是新创建的触发器。
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 的执行并进入重置状态?
如果有更好或更合适的方法来做到这一点,请分享。
verilog - RTL 设计中的时钟门控如何工作?
我试图了解时钟门控在 RTL 设计中是如何工作的。
我在这里有一个示例波:
描述:
所以这个波中有 3 个周期(比如说周期 0,1,2)。在第 0 周期,clock_enable 为低电平,gated_clock 关闭。在周期 1 中,clock_enable 变为高电平,在下一个周期(周期 2)中,gated_clock 开启。
现在,在模拟过程中,我看到了一些情况,其中在周期 1 接收到的传入数据被正确注册到由时钟门控的模块中(使用gated_clock)。这对我来说有点奇怪,我不太明白这怎么可能。
逻辑是这样的:
所以我看到如果in_valid
和in_ready
高cycle 1
那么some_val
将注册传入的in_val
数据,它将在cycle 2
. 然而,在 中cycle 1
,gated_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 0
gated_clock
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 语句,我得到以下编译错误:
需要摆脱这个问题。
这是有效的陈述吗?
如果没有,是否有解决这种情况的方法?
vhdl - 我可以创建一个新的 Jfrog Artifactory 包类型插件吗?
我想在 Artifactory 中存储 RTL 模块(主要是 VHDL 文件 - .vhd),并能够使用 Xray 和其他 Jfrog 服务跟踪这些包的依赖关系。
我已经有了一个非常干净的“包”格式,我只想让 Artifactory 在上传时解析我的元数据文件,这些文件是该包的一部分,就像它控制 debian 包中的文件一样。
这可能吗?我该从哪里开始?
verilog - 为什么 $urandom_range 返回相同的值?
我正在使用 UVM 运行测试台。在组件的run_phase()
一项任务中,我执行fork...join_none
以下循环,该循环贯穿整个模拟:
问题是信号a,c和e被强制为相同的值。b,d和e相同。
如果稍后有新的触发器构成,新值确实会被随机化和强制,但我再次得到a == c == e
and b == d == e
。
似乎$urandom_range
每个参数的选择(0 到 FF,0 到 F)只被调用一次,并且返回值被重新用于三个force
命令。
编辑:我能够在最小的 TB 上重现该问题:http ://www.edaplayground.com/x/4_ph
我正在使用的供应商似乎存在问题,选择其他工具问题就消失了。
编辑 2:我还没有弄清楚为什么会发生这种情况,但这似乎与force语句就像一个连续赋值的事实有关(即,如果 RHS 信号在未来发生变化,强制 LHS 将跟随它直到force是release d,它不像 '=' 赋值)。
所以我的猜测是问题在于将函数的返回值用作RHS。(我不知道这个返回值有哪个生命周期)
在我的情况下,解决方案是将 $urandom 值保存到具有静态生命周期的变量中,然后将该变量强制到 RTL(如 J Reid 建议的那样)
verilog - Verilog 总是在生成块内抛出错误
我正在尝试通过使用 for 循环使用波纹进位加法器来执行加法,并且我希望该操作仅在时钟的位置执行。为此,我使用了一个生成块并在生成块内使用了 for 循环。如果我不使用 always 语句,它会正常工作,但是当我添加 always 块时,它会在模拟时导致错误。下面是代码:
这里 fulladd 是一个不同的模块。
以下是我在模拟时遇到的错误:
add32.v 是设计模块名称。我用过概要 vcs。我是verilog编程的新手,请解释我错误的基本概念。提前致谢