0

如何使用“if 语句”?

我有一个 9 位数字。我需要检查 MSB。如果 MSB 为“1”,那么我必须使用“100101”(归约多项式)进行 XOR 运算。

如果 MSB 为零,则我已跳过该位。

我的主要目标是将 9 位数字减少到 5 位。

例如:这里 m = 5

循环 1 (2m-2 = 8) 101010100 (MSB 是第 9 位)

100101

x01111100

MSB = 1(真),与归约多项式进行异或。结果:01111100(8位结果,删除第9位)

循环 2 (7) 01111100(MSB 为第 8 位)

100101

MSB = 0(假),跳过并结束循环。结果:01111100(仍然是 8 位结果,但我们没有将 MSB 用于下一个循环)

循环 3 (6) 1111100(MSB 为第 7 位)

100101

x110110

MSB = 1(真),与归约多项式进行异或。结果:0110110(7 位结果)

循环 4 (m = 5) 110110 (MSB 是第 6 位)

100101

x10011(最终结果)

MSB = 1(真),与归约多项式进行异或。最终结果:010011(6位结果,但我们可以丢弃MSB)

你能给我一些想法吗?

非常感谢!

4

2 回答 2

1

我对 VHDL 几乎一无所知,但看起来您正在尝试实现诸如Galois LFSR之类的东西,或者更一般地说,在 GF(2 n )中以多项式为模的归约

如果是这样,您不需要为此使用“if 语句”。相反,只需提取您的数字的 MSB 并将其与您的归约多项式中设置的其余数字中的每个位进行异或。

如果设置了 MSB,这相当于用约简多项式对您的数字进行异或运算;如果未设置,则什么也不会发生,因为与 0 进行一点异或什么都不做。

于 2013-07-26T00:11:17.363 回答
1

如果您有一个std_logic_vector(我们称之为v),您可以使用以下方法检查它的任何特定位:

if v(5) = '1' then

end if;

要检查 MSB 和 LSB,您可以使用内置属性'left'right. 例如:

if v'left = '1' then -- check the MSB
于 2013-07-26T09:24:13.303 回答