由于vhdl中的输入向量导致的Mod错误

时间:2013-02-11 05:58:28

标签: vhdl

m<=(s-1) mod 2

这里'm'是一个信号,而s是一个输入向量 在尝试实现代码时,我收到一个错误“mod在此上下文中不能有这样的操作数” 错误可能是由于尝试获取矢量值的mod。 有没有办法将向量等同于整数值或通过其他方法纠正错误?

3 个答案:

答案 0 :(得分:3)

由于mod 2基本上只是提取向量的最后一位而-1只是否定了这一点,为什么不做呢:

m <= not s(0);

答案 1 :(得分:0)

我假设's'被定义为'std_logic_vector'。您最好/应该使用'ieee.numeric_std'库中的'unsigned'或'signed'来表示这些运算符。您可以使用类型转换将'std_logic_vector'转换为'signed'或'unsigned'。例如。无符号(一个或多个)。 无论如何:Sonicwave的解决方案更清洁。

答案 2 :(得分:0)

使用integer代替矢量(即更改信号类型)或在integer之前将其转换为mod

use ieee.numeric_std.all;

i := to_integer(unsigned(s));
m := (i-1) mod 2;