问题标签 [digital-design]

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 回答
95 浏览

verilog - verilog 模块中加法器输出的错误值

我在 Verilog 中为加法器编写了门级代码。加法器的输出如下所示。如您所见, sum 和 cout 始终在 z 中。我不知道为什么。你能检查一下我错过了什么吗?谢谢你的时间。

输出:

a = x, b = x, cin = x, summ = z, cout = z 在时间 = 0

a = 0, b = 0, cin = 0, summ = z, cout = z 在时间 = 10

a = 0, b = 1, cin = 0, summ = z, cout = z 在时间 = 20

a = 1, b = 0, cin = 0, summ = z, cout = z 在时间 = 30

a = 1, b = 1, cin = 0, summ = z, cout = z 在时间 = 40

a = 0, b = 0, cin = 1, summ = z, cout = z 在时间 = 50

a = 0, b = 1, cin = 1, summ = z, cout = z 在时间 = 60

a = 1, b = 0, cin = 1, summ = z, cout = z 在时间 = 70

a = 1, b = 1, cin = 1, summ = z, cout = z 在时间 = 80

.

.

.

0 投票
1 回答
85 浏览

memory - 将位向量存储在触发器中而不是内存中 - Chisel

我想知道ChiselRegMemChisel 在用法上的区别,以及如何决定在常见场景中选择哪一个。我认为Mem在存储大量数据时这是最好的主意,因为它将数据存储到 SRAM 而不是使用 FPGA 片内的触发器,对吗?

如果我想实现一个大的寄存器文件(通常大小的 10 倍),最好使用Memthen 而不是Reg?

0 投票
1 回答
139 浏览

scheduling - SystemVerilog 寄存器设计避免竞争

在 systemverilog 中进行数字设计时,我遇到了有关赛车条件的问题。

驱动我的设计的测试台(我无法修改)以这样一种方式驱动输入,即设计中的某些寄存器由于竞争条件而无法正常工作。

这是一个 eda-playground 示例,它说明了正在发生的事情(输入在时钟“之前”发生变化,时间为 15ns):

http://www.edaplayground.com/x/rWJ

有没有办法让设计(在这种情况下是一个简单的寄存器)抵抗这个特定的问题?我需要的是像“out_data <= preponed(in_data);”这样的语句 或类似的东西会使输入信号的顺序变化无关紧要。

我已经阅读了 SystemVerilog LRM 中的#1step,但我不确定如何使用它,也不确定它是否可以帮助我解决这个特定问题。

0 投票
2 回答
1301 浏览

logic - 同步与异步逻辑 - SR-触发器

我遇到了一个逻辑设计,我有一些问题。第一个问题是这个设计中是否有两个独立的 SR 触发器?第二个问题是时钟是否通常用于在设计中传播输入,或者这是否可以称为组合?因为我很难理解将输入传播到输出需要多少时钟周期。如果我理解正确,它将首先需要一个时钟周期来传播设计的第一部分(第一个触发器?),然后第二个时钟周期会将新输入传播到设计的第二部分(第二个拖鞋?)。

逻辑设计

我正在尝试在 VHDL 中实现这个设计,但不完全确定我是否可以做这样的事情:

另外,有没有应用这种设计的例子。我已经读过,在使用开关和按钮时,如果没有正确理解这如何有助于避免弹跳,这是很常见的谴责。

0 投票
0 回答
279 浏览

fpga - 将数据从慢时钟域发送到快时钟域

假设我想将数据流从慢时钟域发送到快域,延迟很重要。有什么方法可以确定延迟的下限吗?

标准解决方案是 FIFO,其延迟将提供严格的上限。很明显,数据需要在两个域中注册,并且需要一些时间来解决跨域路径和亚稳态问题。我可能可以实现一个没有任何开销的 FIFO,尽管它的时序约束很难指定(并且可能会满足)。如果在接收域中有一个额外的周期,我当然可以安全地做到这一点。

然而,“似乎很清楚”并不是一个铁板钉钉的论点。也许有一个不明显的实现不涉及将两个同步电路连接在一起。这似乎是一个长镜头,所以也许有一些严格的论据可以提供一个严格的延迟下限?非常感谢。

编辑:当我说下限时,我指的是任何正确解决问题所必须花费的最少时间,而不是任何特定实现的延迟。打个比方:波纹进位加法器有延迟 O(n),这是两个二进制数相加成本的上限(因为我们知道如何以这种速度完成,所以问题不会比这更难)。我们还知道二进制加法必须花费 Omega(log(n)) 时间,因为最高位将取决于 2n 个输入(并且在叶子上构建具有这些输入的树是我们可能做的最好的)。

0 投票
1 回答
1383 浏览

verilog - 使用 Altera 板的 Verilog 递增递减计数器

嘿,所以我基本上是 Verilog 的新手,不太确定语法是如何工作的以及类似的事情。

任务如下

使用 Altera 板上的按钮和开关来增加或减少 4 位计数器。计数器的值应使用板载 LED 显示。使用开关控制计数器的方向,使用按钮更改计数器值。

这就是我到目前为止所得到的,我不知道它是否正确,当我到达那一点时,我知道如何在板上分配输入和输出,但就是无法编译代码。我不断得到:

错误 (10043):Lab2pt2.v(11) 中的 Verilog HDL 不支持功能错误:不支持对寄存器的程序连续分配。

下面是代码:

0 投票
1 回答
1261 浏览

binary - VHDL 计数器返回“X”,未知值

我正在尝试使用实例化组件创建一个 4 位计数器,如下所示。当我模拟时,输出在 0 和 X(未知信号)之间切换。我不确定出了什么问题。仿真,电路图和代码如下所示。

4位模数计数器

在此处输入图像描述

位片

结构 VHDL

在这里,我对切片使用了生成命令,但我对其进行了硬编码以消除错误

位片测试台

计数器测试台

当我模拟位片时,输出会正确切换,如下所示。

位片计数器模拟 在此处输入图像描述

当我模拟组合计数器以获得四位计数器时,它会在无符号值之间切换,如下所示。我不明白问题是什么。

计数器模拟 在此处输入图像描述

2

我取出了 control.vhd 中的重置,并消除了 uknown 信号,但它的计数不正确。如下所示。

计数器编辑

0 投票
1 回答
15260 浏览

verilog - 扇出的网络不能被分配多个值

我正在尝试设计一个基于 4 位乘法器的 8 位乘法器。所以这是我的代码:

然后我得到这个错误:

错误 (12014): 扇出到“q[15]”的网络“sum2[11]”不能分配多个值

错误 (12015):网络由“nbit_adder:s3|s[11]”馈送错误 (12015):

网络由“nbit_adder:s4|s[11]”提供

不仅如此。我应该怎么办 ?

0 投票
1 回答
523 浏览

verilog - 流水线化一个由 10 个串联组件组成的 verilog 模块

我正在尝试流水线化一个由 5 个乘法器和 5 个串联连接的加法器组成的模块。该模块是一个多项式计算器。在没有流水线的情况下,该模块到目前为止运行良好。

没有流水线的结构如下所示,

由于它们都是串联的,因此关键路径由 10 个组件组成。

我实施的流水线想法如下,

我有一个错误,“不能由原语或连续赋值驱动。”这是由于 p0,p1,p3 ... 寄存器。将它们转换成线可以解决错误,但它们不再是寄存器。我使用iverilog 作为编译器。

我的问题是,如何进行流水线操作,以便使用尽可能少的时钟周期获得输出并解决错误?

******* 带代码的编辑版本 *******

0 投票
1 回答
779 浏览

system-verilog - Systemverilog 跨层次边界的接口

当和接口遍历分层边界时,我使用 systemverilog 接口遇到了一些后端问题。我试图在附图中勾勒出情况。

上图显示了使用接口的“常规”方法。接口和连接的模块都在同一层次上实例化。这适用于模拟和后端。

中间的图片显示了我的情况。在顶层,我有一个模块和接口实例化。接口接紫色模块,再接2个子模块。在模拟中这是有效的。

然后综合工具抱怨紫色级别的接口应该是modport。所以我补充说。然而,综合工具将线解释为双向并添加逻辑以促进这一点。在我的设计中,所有电线都是单向的。

我能找到解决此问题的唯一解决方法如下图所示。我通过 modport 连接原始接口(标记为 A)。然后我实例化一个新接口(标记为 B),它与接口 A 具有相同的父接口。接口 A 和 B 都连接到一个连接模块,该模块包含许多语句,例如:

分配接口B.rx1 = 接口A.rx1;

分配接口B.rx2 = 接口A.rx2;

分配 interfaceA.statusX = interfaceB.statusX;

ETC

所以它只是接口A和B的“哑”连接。

这种工作方式感觉非常错误,因为这个连接模块会产生大量开销。是否有一种更好/更简单的方法可以在层次边界上使用界面,不仅可以在模拟中工作,而且可以在综合中工作?

谢谢 在此处输入图像描述