问题标签 [digital-logic]

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

compiler-errors - VHDL 错误(需要简单的表达式)

我是 VHDL 新手,我的代码有问题,我似乎无法修复。我们应该使用选定的信号分配或表格查找来做到这一点。我的是两者的结合,因为我们应该使用不关心不会发生的输入。

该代码基本上应该为 2 的补码输入或偏移二进制提供相同的输出。因此,例如,十进制数 7 在偏移二进制中是“1111”,在 2 的补码中是“0111”。两种形式都应根据开关 oe 的值生成“1111100000”的输出('1' 表示偏移二进制,'0' 表示 2 的补码)。

我已经在这个级别尽可能多地调试了我的代码,但我不明白我做错了什么。

Active-HDL 目前在第 48 行和第 55 行出现错误。我收到两个“预期的简单表达式”错误。

我的代码位于下面的 pastebin URL,因为它允许更好的可读性和语法突出显示(另外,我不喜欢摆弄 Stack Exchange 发布代码的奇怪方式)。此外,如果您对如何在维护分配说明的同时改进代码有任何提示,请随时提出任何建议。

http://pastebin.com/aAJAs6KQ

0 投票
1 回答
14817 浏览

verilog - 在始终块内使用电线?

我可以在 always 块内使用电线吗?例如:

它被编译而没有抛出任何错误。为什么?

0 投票
6 回答
18740 浏览

c - 为什么按位运算比旧微处理器上的加法/减法运算略快?

我今天看到了这段摘录:

在大多数较旧的微处理器上,按位运算比加法和减法运算稍快,通常比乘法和除法运算快得多。在现代架构中,情况并非如此:按位运算的速度通常与加法相同(尽管仍比乘法快)。

我很好奇为什么按位运算比旧微处理器上的加法/减法运算要快一些。

我能想到的所有会导致延迟的是,实现加法/减法的电路取决于几个级别的逻辑门(并行加法器等),而按位运算的电路实现要简单得多。这是原因吗?

我知道算术和按位运算都在现代处理器上的一个时钟周期内执行,但纯粹谈谈电路的传播时间,理论上现代处理器中的延迟是否仍然存在?

最后,我有一个关于按位移位操作执行的概念性 C 问题:

两者xy都应该保持 value 32,但是否需要5次单独的左移才能x达到该值(如通过管道实现的按位移位)?为了澄清,我纯粹是在询问电路行为而不是时钟周期数。

0 投票
0 回答
3221 浏览

assembly - MIPS 存储字节和存储半字实现

我目前正在实现一个单周期 MIPS 处理器,并且正在实现 SB 和 SH 指令。我已经使用这个线程的想法成功地实现了 LB/LBU 和 LH/LHU 指令:Load half word and load byte in a single cycle datapath

我在概念化如何实施 SB/SH 指令时遇到了麻烦。我目前的想法是有一个 4:1 MUX,其中每个输入都是当前字的掩码,其字节将被写入。例如,假设我要将字节 0x2E 写入地址 0x10010002,例如当前包含值:[0x10010000] 0xABCD1234。所以写入内存后会是:[0x10010000] 0xAB2E1234。(字节对齐寻址)

所以我要做的是使用 4 个与以下值 0xFFFFFF00、0xFFFF00FF、0xFF00FFFF、0x00FFFFFF 来屏蔽地址 0x10010000 处的单词。MUX 的选择位将来自地址的低两位。

与此同时,我们获取字节,对其进行零扩展,然后对其执行一些不同的移位以将其放置在掩码的正确位置。这些不同的移位值将再次进入具有相同相应选择位的 MUX。例如,如果地址的低两位为 0,则无需移位,如果为 01,则左移一个字节。如果是 10,我们左移 2 个字节。如果为 11,则左移 3 个字节(或循环右移 1 个字节)

然后,我们将 MUX 和 OR 中的值放在一起以获得要存储的最终值。所以对于上面的例子:

低两位是 10,所以 MUX 选择 0xFF00FFFF 与 0xABCD1234 相乘,得到 0xAB001234 的输出值。字节左移 4 变为 0x002E0000,然后与 0xAB001234 进行 OR 运算以变为 0xAB2E1234,然后被存储。

当然,这扩展到具有相同想法的 SH 指令。我希望我的例子有意义。我可能会以这种方式实现它,除非有一种我没有看到的更简单的方法来做到这一点。我一直在盯着硬件设计这么久,我可能会错过一些更简单的实现。

谢谢。

0 投票
1 回答
1225 浏览

algorithm - 如何减少具有大量输入变量的真值表

减少输入变量数量大于 6 的真值表生成的表达式的算法。


更通用的问题是:减少由具有输入变量数量 n 的真值表生成的表达式的算法:其中 n > 6

0 投票
1 回答
129 浏览

processor - 是否有必要让“控制单元下一个状态寄存器”触发下降沿?

中央处理器

每个模块可以被认为具有以下功能: [1] 它可以存储数据。[2] 可以对数据进行运算。(算术运算)

模块的一些属性(仅列出,我现在关心的。) [1] 模块中的所有寄存器/内存元素都是上升沿触发的。

现在这种架构可以用来创建计算机处理器的模型。

真正的交易:是否有必要让“控制单元下一个状态寄存器”被触发下降?(下面我解释为什么我这么认为)

该控制信号只是输入和电流状态的组合结果。所以这意味着随着当前状态的变化,控制信号会发生变化,这意味着状态应该在下降沿发生变化[1]。所以状态变化只是发生在时钟下降沿的“控制单元状态寄存器”的变化。这就是为什么我认为“是否有必要让“控制单元下一个状态寄存器”被触发下降沿”......我在想/考虑正确吗?

如果是,那么在实际处理器中也应该发生相同的情况(控制单元状态寄存器的下降沿触发)。

我正在学习东西,所以请原谅+纠正我的错误

0 投票
2 回答
375 浏览

hardware - 是否可以避免指定默认值以便在 Chisel 中获得 X?

以下Chisel代码按预期工作。

但是,如果我不指定,则会出现编译时错误io.rdData := UInt(0),因为需要默认值。有没有办法在默认情况下明确指定X或让模块没有默认输出 X,erm?

您可能想要这样做的一些原因是,如果ren未断言,则任何内容都不应依赖于输出,并且 Xs 允许您指定它,并且指定 X 可以告诉综合工具它是无关紧要的,用于优化目的。

0 投票
1 回答
2449 浏览

verilog - Verilog:在断言复位时存储计数器值

我有以下verilog代码。想法是在复位时存储计数器的值。但是,我不确定它是否可以合成(内存需要同步重置)。我得到了 DRC violatins,内存、bufreadaddr、bufreadval 都被优化了。还有什么其他方法可以写这个?

0 投票
1 回答
381 浏览

scala - 测试工具中的凿子运行时错误

这个凿子代码工作正常:

然而,这个 - 一个小的变化 - 会产生运行时错误:

0 投票
1 回答
5828 浏览

boolean - 一个组合电路,它接受一个 4 位数字并生成一个接近数字平方根的 3 位二进制数输出

设计一个组合电路,它接受一个 4 位数字并生成一个接近数字平方根的 3 位二进制数字输出。例如,如果平方根为 3.5 或更大,则结果为 4。如果平方根 < 3.5 且 ≥ 2.5,则结果为 3。

我的输入真值表是这样的吗?(我使用 A、B、C、D 作为输入)

我在生成输出表时遇到问题,“生成一个近似于数字平方根的 3 位二进制数输出”有人可以帮我处理输出吗?谢谢你。