2

我正在尝试使用 Altera 10.2 在 VHDL 中编译这段代码,但出现此错误:

不支持的功能错误:不支持非本地静态属性名称

我就这个错误信息向我的导师请教了一些帮助,但他说我的源代码在他看来很好,应该可以正确编译。

if ((ina'event AND ilvla=ilvlb) AND (ilvla=NOT ilvlc)) then
    if (ilvla=lvla AND ilvlb=lvlb AND ilvlc=lvlc) then
        ilvla <= '0';
        ilvlb <= '0';
        ilvlc <= '0';
        clk   <= '1';
    else
        ilvla <= (ilvlc AND ilvlb AND NOT ilvla) OR (ilvla AND NOT ilvlc) OR (ilvla AND NOT ilvlb);
        ilvlb <= ilvlb XOR ilvlc;
        ilvlc <= NOT ilvlc;
    end if;
else
    rst <= '1';
end if;

错误发生在if语句的第一行。

4

1 回答 1

1

你对“事件”的意图是什么?您是否正在尝试创建触发器?如果没有,你不应该使用'event. 如果是这样,您就错过了寻找上升沿的基础知识。它们是以下三种之一:

if Clk = '1' and Clk'event then
if Clk'event and Clk = '1' then 
if rising_edge(Clk) then  -- *** Preferred for readability.

确实没有任何表格可以让您检查某些信号的事件以及您是否匹配和/或不匹配其他信号。

此外,您使用的结构不适合触发器。您正在时钟的 else 分支中分配一个值,这将使工具不开心。此外,如果时钟仅在最外面的分支中,则综合工具是最快乐的。触发器常见的有以下两种:

SimpleFF : process(Clk) 
begin
  if rising_edge(Clk) then
    -- other stuff
  end if ; 
end process SimpleFF ; 

  AsyncResetFF : process(Clk, nReset) 
  begin
    if nReset = '0' then 
      -- reset stuff
    elsif rising_edge(Clk) then
      -- other stuff
    end if ; 
  end process SimpleFF ; 

在编写代码时,您正在创建硬件。永远不要忘记这一点。第一步是始终为你想要的东西画一张粗略的图画。特别是识别硬件元素,例如触发器、组合逻辑和算术逻辑。然后编写代码来捕捉图片中的内容。

于 2014-01-20T04:43:57.567 回答