Loading... 下图所示为一个一般意义上的VHDL结构模式。其中实体和结构体是VHDL程序的必要部分,他们可以构成最基本的VHDL程序。通常,一个VHDL程序还包含库和程序包,比如最常用的`IEEE`库中的`STD_LOGIC_1164`程序包。一个实用的VHDL程序也可以由一个或多个实体构成,可以将一个实体作为完整的系统直接使用,也可以将其作为一个底层的配置,即元件来例化。配置(CONFIGURATION)常用于行为仿真,可以与对特定的结构体进行配置,选择控制。  ### 实体(ENTITY) 实体语句结构 ``` ENTITY eneity_name IS PORT ( ...... ); END ENTITY entity_name; ``` 以半加器为例 ``` ENTITY h_adder IS PORT( a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC ); END ENTITY h_adder; ``` ### 结构体(ARCHITECTURE) 用于描述内部电路;一个ENTITY可以存在多个ARCHITECTURE; 结构体语句结构 ``` ARCHITECTURE one of entiey_name IS BEGIN --statements; END ARCHITECTURE one; ``` 以半加器为例 ``` ARCHITECTURE one of h_adder IS BEGIN co <= NOT(a AND b); so <= (a OR b) AND (a NAND b); END ARCHITECTURE one; ``` ### 进程(PROCESS) PROCESS语句包含一个代表实体中部分逻辑行为的、独立的顺序语句描述的进程。 PROCESS的语句结构 ``` PROCESS(信号敏感表) [进程说明部分] -- 定义信号、变量 BEGIN ... END PROCESS; ``` ### 配置(CONFIGURATION) 决定使用哪一个ARCHITECTURE; ### 组件(Component) 声明已定义的其他实体,可以在声明的结构体内调用其他元件。 组件语句结构 ``` Component comp_name PORT( ... ); END Component; ``` 以声明半加器为例 ``` Component h_adder PORT( a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC )' END Component; ``` #### Example 通过设计一个一位全加器的例子来总结上述的内容。 - 半加器描述(Half_Add.vhd) ``` library IEEE; use IEEE.STD_LOGIC_1164.ALL; ENTITY Half_Add IS PORT( a,b : IN STD_LOGIC; co, so : OUT STD_LOGIC ); END ENTITY Half_Add; ARCHITECTURE one of Half_Add IS BEGIN co <= NOT(a NAND b); so <= (a OR b) AND (a NAND b); END ARCHITECTURE one; ``` - 全加器描述(Full_Add.vhd) ``` library IEEE; use IEEE.STD_LOGIC_1164.ALL; ENTITY Full_Add IS PORT( ain, bin, cin : IN STD_LOGIC; cout, sum : OUT STD_LOGIC ); END ENTITY Full_Add; ARCHITECTURE one of Full_Add IS COMPONENT Half_Add PORT( --在全加器结构体中加入半加器组件描述声明 a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC ); END COMPONENT; SIGNAL d, e, f : STD_LOGIC; BEGIN u1 : Half_Add PORT map(a=>ain, b=>bin, co=>d, so=>e); --使用PORT MAP()实例化元件 u2 : Half_Add PORT map(a=>e, b=>cin, co=>f, so=>sum); cout <= f OR d; END ARCHITECTURE one; ``` 注意,需要将Full_Add.vhd设置为顶层实体,这样编译后才能生成一位全加器。编译后生成的RTL图   Last modification:June 28th, 2020 at 11:25 am © 允许规范转载
One comment
1