问题标签 [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 投票
2 回答
2129 浏览

verilog - 在 Verilog 中使用不从零开始的索引声明变量

我在 Verilog 中使用这个电汇声明:

我的代码有效,并且我以前见过这种编码风格,但我不确定实际发生了什么,我只能猜测正在声明一条 9 位宽的线。这就是正在发生的事情吗?我想在网上阅读更多内容,但我不知道这叫什么,所以对这个简单化的问题表示歉意。

0 投票
1 回答
645 浏览

verilog - Shift a number left in verilog and only retain upper bits

I have the following wires in verilog:

I want to shift mywire left by some amount, but only retain the upper 8 bits:

Is there a cleaner way to do this?

Perhaps something like this:

0 投票
1 回答
607 浏览

verilog - 定点/浮点乘法的最佳方法是什么?

一般来说,有两种方法,我知道什么是乘法定点/浮点乘法。我是像 Verilog 这样的硬件工程师。

1.Verilog的一种方式 -浮点乘法

2.另一种方法是左移“<<”然后右移“>>”

我认为上述方法的结果都是一样的。但我不确定,所以我在这里问我想知道哪种方式可以使用和纠正?

更新1。

1.方式一。

2.方式二。3.98 = 几乎'b11_111110101...在这里,我们可以选择适合的深度来计算乘法。8 = 'b1000 11_11111010 * 1000 = (4 int),(0 frac) * (2 int),(8 frac) 11 1111101000 = 8144 然后我们得到 8144*2^-8 = 31.8125

更新 2

我对如何将固定分数应用于整数Verilog - 浮点乘法之间的乘法感到困惑

哪一个是更好的方法?

0 投票
1 回答
389 浏览

system-verilog - 在重置感知 always_ff 块中不重置寄存器的含义是什么?

不在复位感知 always_ff 块内复位触发器的后果是什么?

示例 1:

示例 2:

示例 1 和示例 2 之间的唯一区别是,在示例 2 中,reg_b 没有任何重置条件。这个后端/综合错误的后果是什么?我有前端 RTL 设计背景,在合成方面经验很少。所以,我试图理解为什么上面的示例 2 是一个不好的做法。

一个明显的问题是 - 在示例 2 中重置 reg_b 之后将是 X。因此,如果 reg_b 用于任何控制逻辑,那么它可能会在设计中引入错误。除此之外,这还会产生什么其他问题?

0 投票
3 回答
2599 浏览

verilog - SystemVerilog for 循环具有非阻塞分配的问题?

当我从事基于 SystemVerilog 的 FPGA 设计时,我遇到了一种情况,我必须计算时钟沿上 4 个元素的数组的总和。我能够使用带有非阻塞分配语句的 for 循环来做到这一点。

该设计在 Quartus 15.0 上成功合成,但是当我尝试在 Modelsim Altera 上使用相同的 RTL 运行仿真时,结果出乎意料。我写了一个示例代码来说明这一点。

此图显示了模拟结果。

在此示例代码中,总和是使用非阻塞分配计算的。它的目的是在 clk 的第一个 posedge 上具有 (1+3+5+6)=15 的值;我在原始硬件中观察到。但在模拟中,在 clk(即abc[3])的 posedge 处,结果为 6。由于 systemverilog 模拟器安排了非阻塞语句的分配,我相信创建了 4 个 sum 实例,即。

由于所有计划的分配同时发生,可能是最后一个实例更新的总和,我们的总和 <= 0 + 6 的值。如果我错了,请纠正我。

现在我的问题是如何让模拟器按顺序安排这些分配,以便即使在模拟中也能得到 15 的值?由于在综合中阻止分配不是一个选项,我找不到任何方法来保持 RTL 一致。谢谢。

0 投票
2 回答
1963 浏览

verilog - 带 2 个复位的 D 触发器:合成错误

我正在合成一个数字块,我需要一个带有 2 个异步复位的 D 触发器。(原因是我将使用可用时钟驱动一个复位,我将使用第二个复位我的数字块的所有寄存器)我准备了以下代码:

但我收到以下错误:

我也试过

但我也有错误。

你有想法纠正我的代码吗?非常感谢!

0 投票
1 回答
386 浏览

verilog - 混淆了锁存器和触发器

如果使用基于锁存器和门时钟门控技术,那么下面原理图的锁存器行为将是什么。任何人都可以说出相同的预期行为吗?

由于锁存器没有时钟,但这里的示意图显示了它自己说的方法,以提供反向时钟来锁存。现在如果锁存器有时钟,那么它就不再是锁存器了!它变成了触发器。 在此处输入图像描述

尝试在数字逻辑中详细说明字锁存器和实际锁存器。

0 投票
5 回答
5071 浏览

verilog - 为什么我们在使用 Verilog/Systemverilog 中的 Always Block 设计的组合电路中使用 Blocking 语句?为什么不是非阻塞?

到处都提到它作为指导方针,但经过深思熟虑后,我想知道如果我们在 Always Block for Combinatorial 中也使用 Nonblocking 语句会造成什么危害。我不会把两者混在一起。但是我的感觉是,当我们在 Always Block 中使用 Nonblocking for Combinatorial 语句时,它更准确地代表了硬件。难道不是……?

例如,如果我们采用以下电路: 小样电路图

在此图中,当提供输入 a、b、c 时,输出 x1 和 x 将不会立即可用。会有登机口延迟。第一个 x1 可用,然后 x 可用。如果我们使用阻塞语句,两者都可以立即使用。如果我们使用非阻塞,它更准确地类似于硬件。

例如,如果我们根据上图采取以下代码

这综合为: 非阻塞和阻塞代码的RTL图

两者都被合成为与门,并给出相同的模拟结果,但是当我们检查增量时间输出的变化时,我觉得与阻塞相比,非阻塞更准确地匹配硬件。

我还经历了: IEEE P1364.1 / D1.6 Verilog® 寄存器传输级综合标准草案,它指定了对顺序建模使用非阻塞,但没有具体指定使用 Always Block 的组合建模使用阻塞。它说不要在组合语句中混合两者(阻塞和非阻塞)。

所以,我们不应该在处理纯组合逻辑的总是块中使用非阻塞组合语句(非顺序/不涉及时钟)

0 投票
1 回答
5039 浏览

verilog - 在(系统)verilog 仿真中从命令行定义参数

我有一个“受约束”的模块,其中有几个延迟作为参数。我想模拟模块中所有可能的延迟配置。

由于我有很多配置要测试,我不想在同一个测试台中实例化所有可能的配置。

我的想法是为每个配置启动一个模拟。

我考虑过生成一个模拟脚本,该脚本将为每个延迟配置启动模拟。问题是我无法使用从命令行检索到的值来覆盖模块的参数。

我用$value$plusargs("ARG=%d",val)的和是变量的事实val与后面的不兼容defparam

完美的事情是从命令行参数创建一个定义或 localparam,但我在研究中没有找到任何关于它的信息。

我也愿意接受有关另一种方式进行这些模拟的任何建议,也许更有效,因为我认为这样做会很长。

PS:为了避免为每种配置重新编译和重新启动模拟器,我还考虑过在每种情况下重新实例化测试模块。但是,我认为(系统)verilog 不可能。

0 投票
1 回答
620 浏览

vhdl - 期待更广泛的 RTL 查看器

我合成了我的 VHDL 代码。当我看到 RTL 查看器时,我期待另一个结果。我用 VHDL 代码构建了一个状态机(见下文)并得到了以下结果(见图)。我在这里没有得到的一些东西:

  • 是什么1'h0意思?
  • 是什么state~7意思?
  • 为什么只有一个街区state?其他州在哪里?

VHDL 代码:

RTL 示意图:

RTL 查看器