如果语句用于减少9位到5位二进制数

时间:2013-07-25 22:37:02

标签: vhdl

我如何使用“if语句”?

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

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

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

例如: 这里m = 5

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

100101

x01111100

MSB = 1(真),具有归约多项式的XOR。 结果:01111100(8位结果,删除第9位)

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

100101

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

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

100101

x110110

MSB = 1(真),具有归约多项式的XOR。 结果:0110110(7位结果)

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

100101

x10011(最终结果)

MSB = 1(真),具有归约多项式的XOR。 最终结果:010011(结果为6位,但我们可以丢弃MSB)

你能告诉我一些关于它的想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

我对VHDL几乎一无所知,但看起来你正试图实现像Galois LFSR或更常见的reduction modulo a polynomial in GF(2n)这样的东西。

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

如果设置了MSB,这相当于使用缩减多项式对数字进行异或运算;如果它没有设置,那么没有任何反应,因为与0进行异或运算无效。

答案 1 :(得分:1)

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

if v(5) = '1' then

end if;

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

if v'left = '1' then -- check the MSB