期望类型为void,带有传输延迟代码的“进程”附近的语法错误 - vhdl错误传输

时间:2018-01-12 17:21:09

标签: syntax vhdl

我是FPGA的新手,我正在尝试编写一个带传输延迟的简单演示。但是我得到了以下错误:

1.ERROR:HDLCompiler:806 - "../PGAND2.vhd" Line 54: Syntax error near "process".
2.ERROR:HDLCompiler:841 - "../PGAND2.vhd" Line 55: Expecting type  void for <behavioral>.

我对此感到困惑,我无法解决这个问题。能不能给我一些解决这个问题的技巧,非常感谢!这是我的代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity PGAND2 is
    generic( trise : TIME := 1ns ;
            tfall : TIME := 1ns ) ;
    port(   a0 : in std_logic ;
        a1 : in std_logic ;
        z0 : out std_logic ) ;
end PGAND2;

architecture Behavioral of PGAND2 is

begin
process ( a1, a0) 
    variable zdf :std_logic ;
    begin 
        zdf := a1 AND a0 ;
        if zdf = '1' then
            z0 <= transport zdf after trise ;
        else if zdf = '0' then
            z0 <= transport zdf after tfall ;
        else
            z0 <= transport zdf ;
    end if ;
    end process ;
end Behavioral;

Windows 10上的环境是ISE 14.7。 非常感谢!

1 个答案:

答案 0 :(得分:0)

VHDL中的 if then else 语句格式,如下所示:

if [condition] then 
   [statements]
else 
   [statements]
end if;

然后其他如果声明不是 elsif 那么 其他如果语句本身需要结束关键字。

您应该使用 elsif 关键字或 其他如果...则...结束 语句。

您的描述的正确代码是:

process( a1, a0) 
    variable zdf :std_logic ;
begin 
    zdf := a1 AND a0 ;
    if zdf = '1' then
        z0 <= transport zdf after trise ;
    elsif zdf = '0' then
        z0 <= transport zdf after tfall ;
    else
        z0 <= transport zdf ;
    end if ;
end process ;

或者

process( a1, a0) 
    variable zdf :std_logic ;
begin 
    zdf := a1 AND a0 ;
    if zdf = '1' then
        z0 <= transport zdf after trise ;
    else if zdf = '0' then
        z0 <= transport zdf after tfall ;
        end if;
    else
        z0 <= transport zdf ;
    end if ;
end process ;