VHDL配置(Configuration)语句描述层与层之间的连接关系以及实体与构造体之间的对应关系。设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一个实体时,可以利用配置来选择不同的构造体,进行性能对比试验,以得到性能最佳的构造体。

最简单的配置语句,结构如下:

CONFIGURATION 配置名 OF 实体名 IS
       FOR  为实体选配的构造体名
       END FOR;
END 配置名;
举例说明:
 
  
  
library 
    IEEE;

 
   use 
    IEEE.STD_LOGIC_1164. 
   ALL 
   ;

 
   use 
    IEEE.STD_LOGIC_ARITH. 
   ALL 
   ;

 
   use 
    IEEE.STD_LOGIC_UNSIGNED. 
   ALL 
   ;

 
   ---- 
    Uncomment the following  
   library 
    declaration  
   if 
    instantiating

 
   ---- 
    any Xilinx primitives  
   in 
    this code.

 
   -- 
   library 
    UNISIM;

 
   -- 
   use 
    UNISIM.VComponents. 
   all 
   ;



 
   entity 
    counter  
   is 
   

 
   port 
    (load, clear, clk :  
   in 
     
   std_logic 
   ;

data_in :  
   in 
     
   integer 
   ;

data_out :  
   out 
     
   integer 
   );

 
   end 
    counter;



 
   ----------------------------------------------------------------------------------- 
   

 
   ---- 
   计数器count_255,计数范围: 
   0 
   ~ 
   255 
   

 
   ----------------------------------------------------------------------------------- 
   

 
   architecture 
    count_255  
   of 
    counter  
   is 
   



 
   begin 
   

 
   process 
   (clk,clear,load)

 
   variable 
    count: 
   integer 
    : 
   = 
   0 
   ;

 
   begin 
   

 
   if 
    (clear  
   = 
     
   ' 
   1 
   ' 
   )  
   then 
   

 count: 
   = 
   0 
   ;

 elsif(load  
   = 
     
   ' 
   1 
   ' 
   )  
   then 
   

 count: 
   = 
   data_in;

 elsif((clk 
   ' 
   event)and(clk =  
   ' 
   1 
   ' 
   )and(clk 
   ' 
   last_value  
   = 
     
   ' 
   0 
   ' 
   )) 
   then 
   

 
   if 
   (count  
   = 
     
   255 
   ) 
   then 
   

 count: 
   = 
   0 
   ;

 
   else 
   

 count : 
   = 
    count  
   + 
     
   1 
   ;

 
   end 
     
   if 
   ;

 
   end 
     
   if 
   ;



 data_out  
   <= 
    count;



 
   end 
     
   process 
   ;



 
   end 
    count_255;



 
   ----------------------------------------------------------------------------------------- 
   

 
   ---- 
   计数器count_64K,计数范围: 
   0 
   ~ 
   65535 
   

 
   ----------------------------------------------------------------------------------------- 
   

 
   architecture 
    count_64K  
   of 
    counter  
   is 
   



 
   begin 
   

 
   process 
   (clk)

 
   variable 
    count: 
   integer 
    : 
   = 
   0 
   ;

 
   begin 
   

 
   if 
    (clear  
   = 
     
   ' 
   1 
   ' 
   )  
   then 
   

 count: 
   = 
   0 
   ;

 elsif(load  
   = 
     
   ' 
   1 
   ' 
   )  
   then 
   

 count: 
   = 
   data_in;

 elsif((clk 
   ' 
   event)and(clk =  
   ' 
   1 
   ' 
   )and(clk 
   ' 
   last_value  
   = 
     
   ' 
   0 
   ' 
   )) 
   then 
   

 
   if 
   (count  
   = 
     
   65535 
   ) 
   then 
   

 count: 
   = 
   0 
   ;

 
   else 
   

 count : 
   = 
    count  
   + 
     
   1 
   ;

 
   end 
     
   if 
   ;

 
   end 
     
   if 
   ;



 data_out  
   <= 
    count;



 
   end 
     
   process 
   ;



 
   end 
    count_64K;



 
   ------------------------------------------------------------------------------------------ 
   

 
   ---- 
   配置1,small_count,实体counter对应结构体count_255

 
   ------------------------------------------------------------------------------------------ 
   

 
   configuration 
    small_count  
   of 
    counter  
   is 
   

 
   for 
    count_255

 
   end 
     
   for 
   ;

 
   end 
    small_count;



 
   ------------------------------------------------------------------------------------------ 
   

 
   ---- 
   配置2,big_count,实体counter对应结构体count_64K

 
   ------------------------------------------------------------------------------------------ 
   

 
   configuration 
    big_count  
   of 
    counter  
   is 
   

 
   for 
    count_64K

 
   end 
     
   for 
   ;

 
   end 
    big_count; 
 
对装入计数器和构成计数器的数据位宽度不应做具体的说明,只将输入和输出数据作为integer(整型数据)来对待。这样就可以支持多种形式的计数器(如例中8位计数器和16位计数器)。
       除了上面所列举的很简单的实体对应构造体的配置以外呢,配置语句还有另一种功能,就是可以对元件例化(Component instance)语句进行配置。这是一种低层次的配置。通过这种配置方式,可以为同一个例化元件选择不同的例化方式。
       本来想写出这种配置语句的语法结构,不过,太复杂了,写了看得都头疼,还是看例子吧,便于理解,又方便实用。下面是《VHDL Golden Reference》上的一个例子:
 
  
  
---------------------------------------------- 
   

 
   ---------------------------------------------- 
   

 
   ---- 
    配置语句例2  
   ----- 
   

 
   ---- 
    2007年07月20日  
   ----- 
   

 
   ---------------------------------------------- 
   

 
   ---------------------------------------------- 
   



 
   use 
    Work.Types. 
   all 
   ;



 
   ---------------------------------------------- 
   

 
   ---- 
    实体Top说明

 
   ---------------------------------------------- 
   

 
   entity 
    Top  
   is 
     
   -- 
    Top level H 
   / 
   W description

 
   port 
    (A, B:  
   in 
    Int8; F, G:  
   out 
    Int8);

 
   end 
    Top;



 
   ---------------------------------------------- 
   

 
   ---- 
   实体Top对应的结构体Structure

 
   ---------------------------------------------- 
   

 
   architecture 
    Structure  
   of 
    Top  
   is 
   



 
   component 
    Blk

 
   port 
    (A:  
   in 
    Int8; F:  
   out 
    Int8);

 
   end 
     
   component 
   ;



 
   begin 
   



B1: Blk  
   port 
     
   map 
    (A, F); 
   -- 
   元件例化,标号B1

B2: Blk  
   port 
     
   map 
    (B, G); 
   -- 
   元件例化,标号B2



 
   end 
    Structure;





 
   use 
    Work.Types. 
   all 
   ;

 
   ---------------------------------------------- 
   

 
   ---- 
    实体Blk说明

 
   ---------------------------------------------- 
   

 
   entity 
    Blk  
   is 
     
   -- 
    Pre 
   - 
   synthesis

 
   port 
    (A:  
   in 
    Int8; F:  
   out 
    Int8);

 
   end 
    Blk;



 
   ---------------------------------------------- 
   

 
   ---- 
   实体Blk对应的结构体RTL

 
   ---------------------------------------------- 
   

 
   architecture 
    RTL  
   of 
    Blk  
   is 
   

 
   begin 
   

...

 
   end 
    RTL;







 
   library 
    IEEE;

 
   use 
    IEEE.Std_logic_1164. 
   all 
   ;



 
   entity 
    GateLevelBlk  
   is 
     
   -- 
    Post 
   - 
   synthesis

 
   port 
    (IP:  
   in 
    Std_logic_vector( 
   7 
     
   downto 
     
   0 
   );

 OP:  
   out 
    Std_logic_vector( 
   7 
     
   downto 
     
   0 
   ));

 
   end 
    GateLevelBlk;



 
   architecture 
    Synth  
   of 
    GateLevelBlk  
   is 
   

 
   begin 
   

 ...

 
   end 
    Synth;



 
   use 
    Work.Types. 
   all 
   ;



 
   configuration 
    TopMixed  
   of 
    Top  
   is 
   --- 
   TopMixed是配置名,Top是实体名

 
   for 
    Structure  
   --- 
   Structure是结构体名,是和实体Top相对应的结构体

 
   for 
    B1: Blk  
   --- 
   B1和B2是结构体structure中的元件例化语句的标号

 
   use 
     
   entity 
    Work.Blk(RTL); 
   --- 
    此语句说明,在元件例化的时候,利用用户自定义

 
   --- 
   的实体blk来例化,其结构体是RTL 

 
   end 
     
   for 
   ;

 
   for 
    B2: Blk

 
   use 
     
   entity 
    Work.GateLevelBlk(Synth) 
   --- 
    此语句说明,元件例化B2时,利用实体

 
   --- 
   GateLevelBLK对应的Synth构造体来例化

 
   port 
     
   map 
    (IP  
   => 
    To_Vector(A),

 To_Int8(OP)  
   => 
    F);

 
   end 
     
   for 
   ;

 
   end 
     
   for 
   ;

 
   end 
    TopMixed;



 
   use 
    Work.Types. 
   all 
   ;



 
   entity 
    Test  
   is 
     
   -- 
    Test bench  
   for 
    Top

 
   end 
    Test;



 
   architecture 
    Bench  
   of 
    Test  
   is 
   



 
   component 
    Top

 
   port 
    (A, B:  
   in 
    Int8; F, G:  
   out 
    Int8);

 
   end 
     
   component 
   ;



 
   signal 
    A, B, F, G: Int8;



 
   begin 
   

 ...

 Inst: Top  
   port 
     
   map 
    (A, B, F, G);

 
   end 
    Bench;



 
   configuration 
    TestMixed  
   of 
    Test  
   is 
   

 
   for 
    Bench

 
   for 
     
   all 
   : Top  
   --- 
   对于上面所有Top对应的标号,都用下面的use语句来进行例化

 
   use 
     
   configuration 
    Work.TopMixed; 
   --- 
   此语句说明,用配置TopMixed来进行例化

 
   end 
     
   for 
   ;

 
   end 
     
   for 
   ;



 
   end 
    TestMixed;



配置的另一个例子见西电 侯伯亨 VHDL的书,30~31页例2-15~例2-18。