【问题标题】:Unsupported feature error不支持的功能错误
【发布时间】:2014-01-19 22:27:41
【问题描述】:

我正在尝试使用 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 语句的第一行。

【问题讨论】:

  • 编译是为了模拟,还是为了综合?第一行肯定不会合成!
  • 我不知道...我即将进行模拟但altera的菜单中只有一个编译选项...

标签: vhdl intel-fpga


【解决方案1】:

您对 'event 的意图是什么?您是否正在尝试创建触发器?如果没有,你不应该使用'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 ; 

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

【讨论】:

  • 我做了你说的改变,但是现在出现了一个新的错误:'[%DLS-F-NullArg, Null owner node argument to FindAttibute.]' 但是这里没有突出显示的行.有什么想法吗?
  • 分而治之!意思是设置一个项目只是为了编译有问题的文件。删除一半的代码。错误消失了吗?如果不是,则错误不在这部分代码中 - 继续另一半代码。如果是,则再次将代码分成两半并重复。早期的 EDA 工具不如今天的好,但调试技术不时出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2011-02-20
  • 1970-01-01
  • 2019-08-01
  • 2012-04-18
  • 1970-01-01
相关资源
最近更新 更多