我是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。 非常感谢!
答案 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 ;