下图所示为一个一般意义上的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图

半加器RTL

一位全加器RTL

Last modification:June 28th, 2020 at 11:25 am
如果觉得我的文章对你有用,请随意赞赏