VHDL移位操作

时间:2013-11-10 07:01:03

标签: type-conversion vhdl shift

我有2个std_logic_vector输入(Operand1和Operand2),我试图通过Operand2中的值移动Operand1并将其存储在std_logic_vector输出(Output1)中

Output1 <= std_logic_vector(unsigned(Operand1) srl to_integer(unsigned(Operand2)));

Output1 <= std_logic_vector(unsigned(Operand1) sll to_integer(unsigned(Operand2)));

Output1 <= std_logic_vector(unsigned(Operand1) sra to_integer(unsigned(Operand2)));

我能够让前两行工作,但是带有sra的行会返回此错误“sra在此上下文中不能有这样的操作数。”任何人都可以告诉我是否有任何错误。

2 个答案:

答案 0 :(得分:1)

从评论中可以看出,你的一些信号类型为std_logic_vector,有些类型为bit_vector,如果没有发布声明,你就会给我们一个快乐的猜谜游戏。

那有什么不对?

  1. 问题中的信息不足。发布相关声明。

  2. 设计显然是错误的。设计的一个重要部分是使用的数据类型,这些看起来很糟糕。

  3. 我们没有足够的信息透过这个小窗口窥视设计,以便能够修复它;所以这是一个疯狂的猜测:

    使操作数1 Unsigned和操作数2 Integer或更好Natural(如果负值将是一个错误)并且实现将更顺畅,更清晰,更简单,更容易理解。并且更早地捕获更多错误。这些类型是可合成的,如果您愿意,可以用作记录(结构)中的端口或信号或组件。

    并意识到SRA不是VHDL语言的一部分。它是一个函数,在某些库中声明。

    因此,如果您确定Operand1为unsigned且Operand2为natural(整数的子类型),您可以查看numeric_std包并查看是否有{{1的声明接受这些参数类型并返回所需的类型。

    如果没有,那么就没有什么可以阻止你编写自己的了(这可能就像调用你找到的SRA的包装器一样简单,并根据需要转换参数类型)。它将与原始语言一样,是VHDL语言的一部分。

    您编写的一组有用的函数和帮助程序将证明对未来的VHDL项目很有用。

答案 1 :(得分:0)

尝试将最后一行更改为:

Output1 <= std_logic_vector(unsigned(Operand1) sra to_integer(signed(Operand2)));

即。使用signed代替unsigned

相关问题