如何解决此问题? reg变量定义为:
signal reg:STD_LOGIC_VECTOR(7 downto 0):="00000001";
以下代码中的ror操作存在问题。错误消息是:
Line 109: Syntax error near "ror".
Line 108: found '0' definitions of operator "=", cannot determine exact overloaded matching definition for "="
-
process(clk1,up_down,enable,reset)
begin
if up_down="1" then
reg ror 1;
end if;
end process;
答案 0 :(得分:4)
您的问题是ror
的{{1}}运算符未定义。
VHDL表现出一种称为重载的计算机(和硬件描述)语言。重载是对不同类型的运算符,函数或过程进行多次定义的地方。编译器会在使用运算符(etc)时查看类型的组合(称为 signature ),并尝试使其与已声明的各种版本相匹配。仅在完全匹配时才起作用。再也没有了,代码也变得模棱两可,因为编译器不知道要使用哪个版本。少得多,没有供编译器使用的版本。这是您的问题-没有使用std_logic_vector
的{{1}}运算符的版本。
您有两种解决方案:
(i)推荐:使用 concatenation 运算符和 slicing 手动实现您的向右旋转行为:
ror
(ii)不推荐:将std_logic_vector
转换为确实定义了 if up_down="1" then
reg <= reg(0) & reg(7 downto 1);
end if;
运算符版本的其他类型,例如std_logic_vector
。为什么“不推荐”?因为我不建议您再使用以下任何运算符,因为它们的行为可能会很奇怪(并且在不同的EDA工具之间其行为似乎不一致);
ror
顺便说一句,即使为unsigned
定义了ror rol sla sra sll srl
,这一行也是错误的:
ror
你不能只说一遍
std_logic_vector
在两种情况下,您都需要将运算结果分配给某个对象。我假设您在两种情况下都希望将其分配给reg ror 1;
。