gpt4 book ai didi

Verilog 实现 a
转载 作者:行者123 更新时间:2023-12-04 01:50:19 26 4
gpt4 key购买 nike

我试图理解这段代码,但我无法理解它

// upper bits are always zero
assign slt[31:1] = 0;

xor (condition, a[31], b[31]);
yArith slt_arith (tmp, cout, a, b, 1);
yMux #(.SIZE(1)) slt_mux(slt[0], tmp[31], a[31], condition);

ab是一些 32 位数字

代码正在尝试执行 (a < b) ? 1 : 0;在 mips 中称为 slt

yArith部分正在执行 (a-b) 并将结果放入 tmp , 1 是减法的标志。

yMux部分是 2x1 mux,它需要一些条件(0 或 1)来选择 tmp[31]如果条件为 0 或 a[31]如果条件为 1。

为什么这段代码可以实现 set on less 而不是 Verilog?

最佳答案

如果ab符号相反,那么a只能小于b,如果a 是否定的。

用伪代码表示:

if (a[31] XOR b[31]) {
result = a[31]
}

如果ab有相同的符号,那么显然我们不能只看其中一个操作数的符号位。相反,我们检查 a-b 是否为负数。

if (!(a[31] XOR b[31])) {
result = (a-b)[31]
}

如果我们将这两者结合起来:

if (a[31] XOR b[31]) {
result = a[31]
} else {
result = (a-b)[31]
}

如果您想知道为什么我们不总是使用 (a-b)[31],请考虑 a = -2147483648 (0x80000000) 和 b = 1。显然 -2147483648 小于 1,但是 (0x80000000-1)[31] == (0x7FFFFFFF)[31] 为 0。所以那行不通.

关于Verilog 实现 a<b ? 1 : 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419259/

26 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com