Menu Close

VHDL 实体例化与简单层次电路设计

VHDL语言一个优良的特点是任何由VHDL语言描述的电路都可以作为一个元件为另外一个设计使用,这个使用过程成为例化。通过例化可以使设计电路重用与设计层次化。代码重用加速设计进程,层次化使设计代码更清晰。本节着重讨论实体电路例化及层次化设计。下面以4位全加器设计为例,将已经设计过的一位全加器作为元件例化,形成4位全加器,构成层次化设计。

1.元件声明

完整的VHDL设计(entity+ architecture)可以作为元件例化。下面将一位全加器的代码重列如下:

 


 

  • 元件声明格式

若希望已设计的代码可以重用,首先需要作元件声明。注意将设计例化,需要entity和architecture两个部分都具备的完整设计。元件声明由component 关键字引导后跟元件名,元件名应该与将要声明为元件的设计程序的实体名一致。元件声明须在architecture 的声明区内完成。

元件声明格式如下:

          component  component_name         – – component_name  is the entity name of another entity  ,元件名应与被例化的实体名一致

generic(

parameter_name1 : type_1 ;                   – – same as entity  generic part   excerpt that the comma is used in stead of semicolon.

                                                                          – -这一部分几乎与实体的generic部分相同,

parameter_name2 : type_2 ;                  – -但需注意每行以分号“;”结束。因此可以将被例化的源文件复制修改即可。元件声明部分,参数不能设初值。

…

parameter_namen : type_n

);                                                         – – – 以分号“;”结束

port (

port_name1 :  direction  type_1;   – -same as  entity  port part  excerpt that the comma is used in stead of semicolon. 这一部分几乎与实体的generic部分相同,但需注意每行以分号”;”结束。

port_name2 :  direction   type_2,;- -但需注意每行以分号”;”结束。因此可以将被例化的源文件复制修改即可。元件声明部分,参数不能设初值。

….

port_namen :  direction   type_n      — direction — in ,out ,inout , buffer etc.

);

end component;

元件声明 除了 “ component    component_name ….end component;” 外  ,内部的generic和port 部分几乎与被例化的实体格式一致,除了这里每行以逗号结束,而且不能设置初值。

例1: 将一位全加器在新设计的四位全加器内声明

2. 元件的例化格式

元件声明后就可以在行为描述区例化及使用。

  • 元件例化及使用方式如下:

(1) 将本设计实体的输入端口或本地信号作为元件的输入。

(2)将元件的输出作为本设计实体的输出或参与本地的信号运算。

           (3)一个元件可以多次例化并使用。

  • 元件的使用格式

component_instance_name : component_name    —元件例化名:元件名 ,
generic map(                                                      – – generic map
parameter_name1 => value1,                         —参数传递值,可以为常数,也可为generic声明的参数,注意以逗号”,”结束
parameter_name2 => value2,

…..

parameter_namen => valuen
)                                                                               – – 没有分号”;”
port map (                                                             – – port map
port_name1 =>  signal_name_1  ,                     – -注意以逗号”,”结束, signal_name 可以为本地信号,或本实体的端口,

                                                                                 – – 映射时注意输入、 输出方向
port_name2 =>  signal_name_2  ,

   ….

port_namen =>  signal_name_n

);

元件例化注意事项:

(1) 例化名在前,元件名在后,中间冒号”:”隔开;注意这种例化名与元件的顺序与Verilog和system verilog的例化方式的区别。

(2)generic map引导参数部分例化

(3)参数例化部分以逗号”,”结束一条描述指令。注意与元件声明时的区别,元件声明时以分号”;”结束每一个参数的映射。

(4)generic 的结束只有”)”,没有分号”;”

(5) port map引导端口例化

(6)每行以逗号结束

(7)无论参数映射还是端口映射,都采用”=>”进行映射。左边为元件内部名称,右边为本实体中端口或信号名称。

3. 完成4为全加器设计


注意:在VHDL语言中,矢量的每个分量的引用采用小括号加索引值的方式实现的。如a(3)单独使用a{bit_vector(3 downto 0)}的第4个bit。其他使用方式,如a(3 downto 2), a(2 downto 1)  等。

Posted in FPGA, FPGA 教材教案, IC 教材教案, VHDL, VHDL, 开发语言, 教材与教案, 文章, 编程语言, 集成电路