gpt4 book ai didi

syntax - VHDL - ror 和 rol 操作

转载 作者:行者123 更新时间:2023-12-04 01:50:21 25 4
gpt4 key购买 nike

我该如何解决这个问题? 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;

最佳答案

您的问题是 ror 运算符没有为 std_logic_vector 定义。

VHDL 表现出计算机(和硬件描述)语言的行为,称为重载。重载是为不同类型多次定义运算符、函数或过程的地方。编译器在使用运算符(等)时查看类型组合(称为 签名)并尝试将其与已声明的各种版本相匹配。这仅在只有一个匹配项时才有效。任何更多,代码是模棱两可的,因为编译器不知道要使用哪个版本。少了就没有供编译器使用的版本。这是您的问题 - 没有使用 std_logic_vectorror 运算符版本。

您有两个解决方案:

(i) 建议:使用连接运算符和切片手动实现您的向右旋转行为:

    if up_down="1" then
reg <= reg(0) & reg(7 downto 1);
end if;

(ii) 不推荐:将您的 std_logic_vector 转换为具有定义的 ror 运算符版本的不同类型,例如 unsigned .为什么“不推荐”?因为我永远不建议使用以下任何运算符,因为它们的行为可能很奇怪(并且它们的行为在不同的 EDA 工具中似乎并不一致);

ror rol sla sra sll srl

顺便说一句,即使 ror 是为 std_logic_vector 定义的,这一行也是错误的:

reg ror 1;

你不能只说那个,你不能只说

reg + 1;

您需要将两种情况下的操作结果分配给某物。在这两种情况下,我都假设您想将它分配给 reg

关于syntax - VHDL - ror 和 rol 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53389379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com