VHDL-角色扮演和角色扮演

时间:2018-11-20 08:56:47

标签: syntax vhdl xilinx

如何解决此问题?  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;

1 个答案:

答案 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;