我如何使用“if语句”?
我有一个9位数字。我需要检查MSB。如果MSB为“1”,那么我必须使用“100101”(缩减多项式)进行XOR运算。
如果MSB为零,则我跳过该位。
我的主要目标是将9位数字减少到5位。
例如: 这里m = 5
循环1(2m-2 = 8) 101010100(MSB是第9位)
x01111100
MSB = 1(真),具有归约多项式的XOR。 结果:01111100(8位结果,删除第9位)
循环2(7) 01111100(MSB是第8位)
MSB = 0(false),跳过并结束循环。 结果:01111100(仍为8位结果,但我们没有将MSB用于下一个循环)
循环3(6) 1111100(MSB是第7位)
x110110
MSB = 1(真),具有归约多项式的XOR。 结果:0110110(7位结果)
循环4(m = 5) 110110(MSB是第6位)
x10011(最终结果)
MSB = 1(真),具有归约多项式的XOR。 最终结果:010011(结果为6位,但我们可以丢弃MSB)
你能告诉我一些关于它的想法吗?非常感谢!
答案 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