来源:http://waxman.ycool.com/post.1804338.html
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。