0

我有 2 个 std_logic_vector 输入(Operand1 和 Operand2),我试图将 Operand1 移动 Operand2 中的值并将其存储在 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)));

我能够让前 2 行工作,但是带有 sra 的行返回此错误“sra 在这种情况下不能有这样的操作数”。谁能告诉我我做错了什么。

4

2 回答 2

1

从评论看来,您的某些信号是 std_logic_vector 类型,有些是 bit_vector 类型,并且没有发布声明,您正在给我们一个快乐的猜谜游戏,这是哪个。

那么有什么问题呢?

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

  2. 设计显然是错误的。设计的很大一部分是使用的数据类型,而这些看起来选择不当。

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

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

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

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

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

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

于 2013-11-10T10:54:09.337 回答
0

尝试将最后一行更改为:

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

即使用signed而不是unsigned

于 2013-11-10T07:10:40.687 回答