原创 硬件描述语言(VHDL)之(二)---VHDL程序基本结构

2008-9-9 10:48 5315 8 8 分类: FPGA/CPLD

硬件描述语言(VHDL)之(二)  VHDL程序基本结构


16  

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


           库、程序包 


           实体(Entity 
 


           结构体                   


    Architecture 
 


          进程          或其它并行结构 


     配置(Configuration


 


17  


一、实体(说明)


     实体(说明):


         定义系统的输入输出端口


     语法:          


ENTITY <entity_name> IS


     Generic Declarations


     Port Declarations


END <entity_name>; (1076-1987 version)


END ENTITY <entity_name> ; ( 1076-1993               


                                                    version)


 


18  


1、类属说明


   类属说明:


       确定实体或组件定义的局部常数。模 


   块化设计时多用于不同层次模块之间信息的


   传递。可从外部改变内部电路结构和规模。


       类属说明必须放在端口说明之前。          


Generic (


          常数名称:类型 [= 缺省值]


         {常数名称:类型 [= 缺省值]}


               )



 
 
 
 
 


19  


类属常用于定义:


    实体端口的大小、


    设计实体的物理特性、


    总线宽度、


    元件例化的数量等。


例:


    entity mck is


        generic(width: integer:=16);


        port(add_bus:out std_logic_vector


             (width-1 downto 0));


        …



 
 
 
 
 


20  


例:2输入与门的实体描述


  entity and2 is


     generic(risewidth: time:= 1 ns;


             fallwidth: time:= 1 ns);


     port(a1: in std_logic;


          a0: in std_logic;


          z0: out std_loigc);


  end entity and2;


  注:数据类型 time 用于仿真模块的设计。


      综合器仅支持数据类型为整数的类属值。



 
 
 
 
 


21  


其中,端口模式:


    in: 输入型,此端口为只读型。


    out: 输出型,只能在实体内部对其赋值。


    inout:输入输出型,既可读也可赋值。


    buffer: 缓冲型,与 out 相似,但可读。 


Port


     端口名称{,端口名称}:端口模式   数据类型;


     …


     端口名称{,端口名称}:端口模式   数据类型


           ); 


2、端口声明 


端口声明:确定输入、输出端口的数目和类型。



 
 
 
 
 


22  


out buffer 的区别: 


inout buffer 的区别:



 
 
 
 
 


23  


    指端口上流动的数据的表达格式。为预先定


义好的数据类型。


    如:bitbit_vectorinteger 


        std_logicstd_logic_vector 等。


例:


entity nand2 is  entity m81 is


port (           port(


   a,b:in bit;      a:in bit_vector(7 downto 0);


   z: out bit     sel:in bit_vector(2 downto 0);


       ) ;          b:out bit); 


end entity nand2; end entity m81; 


3、数据类型:



 
 
 
 
 


24  


作用:定义系统(或模块)的行为、元件及内部


      的连接关系,即描述其逻辑功能。


两个组成部分:


   对数据类型、常数、信号、子程序、元件等


     元素的说明部分。


   以各种不同的描述风格描述的系统的逻辑功


     能实现的部分。常用的描述风格有:行为描


     述、数据流描述、 结构化描述。 


二、结构体



 
 
 
 
 


25  
 


结构体 
 


结构体说明 


结构体功能描述 


   常数说明   


数据类型说明   


   信号说明   


例化元件说明   


  子程序说明   


    块语句   


   进程语句   


信号赋值语句   


子程序调用语句   


元件例化语句 



 
 
 
 
 


26  


实体与结构体的关系: 


设计实体 


结构体1 


结构体2 


结构体3 


结构体n 




 


    一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。



 
 
 
 
 


27  


注:同一实体的结构体不能同名。定义语句


    常数、信号不能与实体的端口同名。 


architecture  结构体名称  of  实体名称  is


      [说明语句]内部信号、常数、


       数据类型、子程序(函数、过程)、


       元件等的说明;


   begin


      [并行处理(功能描述)语句]


   end  [architecture] 结构体名称; 


结构体的语法:



 
 
 
 
 


28  


例:结构体错误的信号声明



 
 
 
 
 


29  


例:一个完整描述(3 bit 计数器)



 
 
 
 
 


30  


3bit计数器的等效描述(outbuffer的区别):



 
 
 
 
 


31  


三、配置 


设计实体 


结构体1 


结构体2 


结构体3 


结构体n 




 


一个设计实体的多种实现方式 


配置:从某个实体的多种结构体描述方式选择


      特定的一个。



 
 
 
 
 


32  


configuration  配置名  of  实体名 is


    for   选配结构体名


    end  for


end  配置名; 


简单配置的语法:



 
 
 
 
 


33  


library ieee;


use ieee.std_logic_1164.all;


entity nand is


      port(a: in std_logic;


              b: in std_logic;


              c: out std_logic);


end entity nand;


architecture art1 of nand is


begin


       c<=not (a and b);


end architecture art1; 


例:一个与非门不同实现方式的配置如下:  



 
 
 
 
 


34  


architecture art2 of nand is


begin


      c<=‘<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1’ when (a=‘0’) and (b=‘0’) else


            ‘1’ when (a=‘0’) and (b=‘1’) else


            ‘1’ when (a=‘1’) and (b=‘0’) else


            ‘0’ when (a=‘1’) and (b=‘1’) else


            ‘0’;


end architecture art2;



 
 
 
 
 


35  


configuration first of nand is


       for art1;


       end for;


end first;


configuration second of nand is


       for art2


       end for;


end  second;



 
 
 
 
 


36  


例:一个对计数器实现多种形式的配置如下:



 
 
 
 
 


37



 
 
 
 
 


38  


程序包: 


    已定义的常数、数据类型、元件调用说明、子程序的一个集合。


    目的:方便公共信息、资源的访问和共享。 


库:


    多个程序包构成库。


                 


四、  程序包、库



 
 
 
 
 


39  


程序包说明的内容: 


    常量说明;


    VHDL数据类型说明;


    元件说明;


    子程序说明; 


程序包的结构包括: 


    程序包说明(包首)


    程序包主体(包体)



 
 
 
 
 


40  


包声明项可由以下语句组成:


    use 语句(用来包括其它程序包);


    类型说明;子类型说明;常量说明;


    信号说明;子程序说明;元件说明。 


  package  程序包名  is


    { 包说明项 }


  end  程序包名; 


1、程序包说明(包首) 


语法:



 
 
 
 
 


41  


例:程序包说明



 
 
 
 
 


42  


包体说明项可含:


    use 语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。  


package body   程序包名  is


    { 包体说明项 }


end   程序包名; 


2、程序包包体 


程序包的内容:子程序的实现算法。


包体语法:



 
 
 
 
 


43  


程序包首与程序包体的关系:


   程序包体并非必须,只有在程序包要说明


子程序时,程序包体才必须的。


   程序包首可以独立定义和使用。如下:



 
 
 
 
 


44  


package seven is


   subtype segments is bit_vector(0 to 6);


   type bcd is range 0 to 9;


end seven;


library work;


use work.seven.all;


entity decoder is


   port(input: in bcd;


        drive: out segments);


end decoder;


architecture art of decoder is


begin



 
 
 
 
 


45  


with input select


   drive<=B“1111110” when 0,


          B“0110000” when 1,


          B“1101101” when 2,


          B“1111001” when 3,


          B“0110011” when 4,


          B“1011011” when 5,


          B“1011111” when 6,


          B“1110000” when 7,


          B“1111111” when 8,


          B“1111011” when 9,


          B“0000000” when others;


end architecture art; 
 
 
 
 
 
 
 


a 


b 


c 


d 


e 


f 


g



 
 
 
 
 


46  


3、库的种类


   VHDL库可分为 5种:


   1IEEE


      定义了四个常用的程序包:


       ? std_logic_1164 (std_logic types & 


                          related functions)


       ? std_logic_arith (arithmetic functions)


       ? std_logic_signed (signed arithmetic


                           functions)


       ? std_logic_unsigned (unsigned 


                          arithmetic functions)        



 
 
 
 
 


47  


         Type STD_LOGIC 


         9 logic value system (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’,


                                            ‘L’, ‘H’, ‘-’) 


             ? ‘W’, ‘L’, ‘H” weak values (Not supported


                                                        by Synthesis)


             ? ‘X’ - (not ‘x’)used for unknown


             ? ‘Z’ - (not ‘z’) used for tri-state


             ? ‘-’ Don’t Care     



 
 
 
 
 


48  


  2STD 库(默认库)


     程序包为:standard


     定义最基本的数据类型:


         Bitbit_vector Boolean


         IntegerRealand Time


     注:Type Bit


         2  logic value system (‘0’, ‘1’)


  3)面向ASIC的库


  4WORK库(默认库)


  5)用户定义库



 
 
 
 
 


49  


4、库及程序包的使用


    库及程序包的说明总放在实体单元前面,


默认库及程序包可不作说明。用关健字library


说明要使用的库,用关健字 use 说明要使用的库的程序包。


    库及程序包的作用范围:仅限于所说明的设计实体。


    每一个设计实体都必须有自已完整的库及程序包说明语句。 



 
 
 
 
 


50  
 
 
 
 
 
 
 
 


             库、程序包 


           实体(Entity 
 
 
 
 


            结构体                   


    Architecture 
 
 
 


          进程          或其它并行结构 


     配置(Configuration



 
 
 
 
 


51  


库的使用语法: 
 


程序包的使用有两种常用格式: 
 


               


例:


    library  ieee


    use  ieee.std_logic_1164.all


    use ieee.std_logic_unsigned.conv_integer;   
 


    library   库名; 
 
 


    use   库名.程序包名.项目名


   use   库名.程序包名.All 



 
 
 
 
 


52  


2 1 选择器:



 
 
 
 
 


53  


21的另一种描述



 
 
 
 
 


54  


四类语言要素:


     数据对象(Data Object


     数据类型(Data Type


     操作数(Operands


     操作符(Operator 


 


*******************************************************************************

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条