VHDL对象包括:信号、变量、常量和运算符。
 
信号
 
在中声明VHDL信号:
 
•体系结构声明部分:在该体系结构内的任何位置使用VHDL信号。
 
•一个块:在该块中使用VHDL信号。
 
使用<=信号分配运算符分配VHDL信号。
 
 
 signal sig1 : std_logic;   
 
 
 sig1 <= '1';   
 
 
 
 变量
 
 VHDL变量为:
 
 •在进程或子程序中声明。
 
 •在该过程或子程序中使用。
 
 •使用:=赋值运算符进行赋值。
 
  
  variable var1 : std_logic_vector (7 downto 0); var1 := "01010011";   
 
 
 
 
  
  常量
 
  您可以在任何声明性区域中声明VHDL常量。常数用于区域在声明常数值之后,不能更改它们。
 
   
   signal sig1 : std_logic_vector(5 downto 0);constant init0 :   
  
 
   
   std_logic_vector (5 downto 0) := "010111";sig1 <= init0;  
  
 
  
 
   
   操作 
 
   Vivado合成支持VHDL运算符。 
 
   轮班操作示例 
 
   
 
   
 
   VHDL实体描述
 
   VHDL电路描述
 
   VHDL电路描述(设计单元)包括以下内容:
 
   •实体声明:提供电路的外部视图。描述从中可见的对象外部,包括电路接口,如I/O端口和泛型。
 
   •体系结构:提供电路的内部视图,并描述电路行为或结构
 
   VHDL实体声明
 
   电路的I/O端口在实体中声明。每个端口都有一个:
 
   •名称
 
   •模式(输入、输出、输出、缓冲)
 
   •类型
 
   受限端口和非受限端口
 
   定义端口时,端口:
 
   •可受约束或不受约束。
 
   •通常受到限制。
 
   •在实体声明中可以不受约束。
 
   ○ 如果端口不受约束,则在连接时实例化时定义其宽度在正式端口和实际信号之间进行。
 
   ○ 无约束端口允许您创建同一实体的不同实例,定义不同的端口宽度。
 
   建议:不要使用不受约束的端口。定义通过泛型约束的端口。
 
   在实例化时应用这些泛型的不同值。在顶级实体上不要有不受约束的端口。
 
   不接受多个维度的数组类型作为端口。实体声明可以也声明VHDL泛型。
 
   缓冲端口模式
 
   建议:不要使用缓冲端口模式。
 
   VHDL允许在内部使用信号时使用缓冲端口模式,并在以下情况下用作输出端口只有一个内部驱动程序。缓冲端口是合成期间的潜在误差源,并通过模拟使合成后结果的验证复杂化。
 
    
    NOT RECOMMENDED Coding Example WITH Buffer Port Mode  
 
    
    entity alu is   
   
 
    
    port(   
   
 
    
    CLK : in STD_LOGIC;   
   
 
    
    A : inSTD_LOGIC_VECTOR(3 downto 0);   
   
 
    
    B : inSTD_LOGIC_VECTOR(3 downto 0);   
   
 
    
    C : buffer STD_LOGIC_VECTOR(3 downto 0));   
   
 
    
    end alu;   
   
 
    
    architecture behavioral of alu is   
   
 
    
    begin   
   
 
    
    process begin   
   
 
    
    if rising_edge(CLK) then   
   
 
    
    C <= UNSIGNED(A) + UNSIGNED(B) UNSIGNED(C);   
   
 
    
    end if;   
   
 
    
    end process;   
   
 
    
    end behavioral;   
   
 
    
    丢弃缓冲区端口模式
 
    建议:丢弃缓冲端口模式。
 
    在前面的编码示例中,信号C是用缓冲模式建模的,并且两者都使用内部和作为输出端口。可以连接到C的每个层次结构级别也必须声明为缓冲区。
 
    要删除缓冲区模式:
 
    1.插入一个伪信号。
 
    2.将端口C声明为输出。
 
     
     RECOMMENDED Coding Example WITHOUT Buffer Port Mode  
 
     
     entity alu is   
    
 
     
     port(   
    
 
     
     CLK : in STD_LOGIC;   
    
 
     
     A : in STD_LOGIC_VECTOR(3 downto 0);   
    
 
     
     B : in STD_LOGIC_VECTOR(3 downto 0);   
    
 
     
     C : out STD_LOGIC_VECTOR(3 downto 0));   
    
 
     
     end alu;   
    
 
     
     architecture behavioral of alu is   
    
 
     
     -- dummy signal   
    
 
     
     signal C_INT : STD_LOGIC_VECTOR(3 downto 0);   
    
 
     
     begin   
    
 
     
     C <= C_INT;   
    
 
     
     process begin   
    
 
     
     if rising_edge(CLK) then   
    
 
     
     C_INT <= A and B and C_INT;   
    
 
     
     end if;   
    
 
     
     end process;   
    
 
     
     end behavioral;   
    
 
     
     VHDL Architecture Declarations  
 
     
     You can declare internal signals in the architecture. Each internal signal has a name and a type.   
    
 
     
     VHDL Architecture Declaration Coding Example  
 
     
     library IEEE;   
    
 
     
     use IEEE.std_logic_1164.all;   
    
 
     
     entity EXAMPLE is   
    
 
     
     port (   
    
 
     
     A,B,C : in std_logic;   
    
 
     
     D,E : out std_logic );   
    
 
     
     end EXAMPLE;   
    
 
     
     architecture ARCHI of EXAMPLE is   
    
 
     
     signal T : std_logic;   
    
 
     
     begin   
    
 
     
     ...   
    
 
     
     end ARCHI;