可编程ASIC应用技术(第三章)课件.ppt

上传人(卖家):三亚风情 文档编号:3503055 上传时间:2022-09-08 格式:PPT 页数:175 大小:1.42MB
下载 相关 举报
可编程ASIC应用技术(第三章)课件.ppt_第1页
第1页 / 共175页
可编程ASIC应用技术(第三章)课件.ppt_第2页
第2页 / 共175页
可编程ASIC应用技术(第三章)课件.ppt_第3页
第3页 / 共175页
可编程ASIC应用技术(第三章)课件.ppt_第4页
第4页 / 共175页
可编程ASIC应用技术(第三章)课件.ppt_第5页
第5页 / 共175页
点击查看更多>>
资源描述

1、3.1 VHDL3.1 VHDL的基本语法规则的基本语法规则 3.2 3.2 顺序语句和并行语句的描述顺序语句和并行语句的描述 3.3 VHDL3.3 VHDL的属性描述的属性描述 第第3 3章章 VHDLVHDL的基本语法现象的基本语法现象 1超高速集成电路硬件描述语言超高速集成电路硬件描述语言(Very high speed Very high speed integrated circuit Hardware Description Languageintegrated circuit Hardware Description Language,VHDLVHDL)最先由美国国防部为实现自

2、己的超高速集成电路计划最先由美国国防部为实现自己的超高速集成电路计划而提出,目的是要开发一种不受各厂商专用集成电路而提出,目的是要开发一种不受各厂商专用集成电路特点限制的通用硬件设计方法,使不同厂商的硬件能特点限制的通用硬件设计方法,使不同厂商的硬件能用一种通用的标准化语言来描述和设计。用一种通用的标准化语言来描述和设计。什么是什么是VHDLVHDL?19811981年年6 6月月 19831983年年7 7月月 19851985年年8 8月月 19861986年年3 3月月 19871987年年1212月月 19931993年年9 9月月开始开始 共同开发共同开发 投入使用投入使用 标准化标

3、准化 定为标准定为标准 新版本新版本 219881988年年9 9月月3030日后,美国国防部就要求开发日后,美国国防部就要求开发ASICASIC设计设计的合同文件中一律采用的合同文件中一律采用VHDLVHDL文档,至此各文档,至此各EDAEDA公司相公司相继推出自己的继推出自己的VHDLVHDL设计环境,或宣布自己的设计工具设计环境,或宣布自己的设计工具可以和可以和VHDLVHDL接口,这样,接口,这样,VHDLVHDL逐步演变为工业标准。逐步演变为工业标准。特点?特点?VHDLVHDL具有与具体工艺和设计方法无关的特点,它不具有与具体工艺和设计方法无关的特点,它不属于某一特定的仿真工具和工

4、业部门,设计者在此语属于某一特定的仿真工具和工业部门,设计者在此语言范围内可自由地选择工艺和设计方法。言范围内可自由地选择工艺和设计方法。3设计方便设计方便VHDLVHDL可以支持自顶向下和基于库的设可以支持自顶向下和基于库的设计方法,支持同步、异步电路、计方法,支持同步、异步电路、FPGA/CPLDFPGA/CPLD及其它电及其它电路设计。路设计。硬件描述能力强硬件描述能力强VHDLVHDL具有通过多层次设计来具有通过多层次设计来描述系统功能的能力,可以进行从系统的数学模型直描述系统功能的能力,可以进行从系统的数学模型直至门级电路的描述。至门级电路的描述。VHDLVHDL能进行系统级的硬件描

5、述,能进行系统级的硬件描述,而一些而一些HDLHDL,如,如VerilogVerilog、UDL/IUDL/I等能进行等能进行ICIC级、级、PCBPCB级级描述,但对系统级的硬件进行描述的功能相对较差。描述,但对系统级的硬件进行描述的功能相对较差。VHDLVHDL用简洁明确的代码描述进行复杂控制逻辑的设计,用简洁明确的代码描述进行复杂控制逻辑的设计,它还支持设计库和可重复使用的元件生成,且提供模它还支持设计库和可重复使用的元件生成,且提供模块设计的创建。块设计的创建。4不依赖器件的设计不依赖器件的设计VHDLVHDL允许设计者生成一个设计允许设计者生成一个设计而并不需要首先选择一个用来实现设

6、计的器件,对于而并不需要首先选择一个用来实现设计的器件,对于同一个设计描述,可以采用多种不同器件结构来实现同一个设计描述,可以采用多种不同器件结构来实现其功能。其功能。性能评估能力性能评估能力非依赖器件的设计和可移植能力,非依赖器件的设计和可移植能力,允许设计者可采用不同的器件结构和不同的综合工具允许设计者可采用不同的器件结构和不同的综合工具来评估设计。来评估设计。ASICASIC移植方便移植方便如果将设计综合到如果将设计综合到CPLDCPLD或或FPGAFPGA,可,可使设计产品以最快速度上市。使设计产品以最快速度上市。采用采用VHDLVHDL存在的主要问题是:存在的主要问题是:电路采用高级

7、的简明结构的电路采用高级的简明结构的VHDLVHDL描述,意味着放弃了描述,意味着放弃了对电路门级实现定义的控制,由综合工具生成的逻辑对电路门级实现定义的控制,由综合工具生成的逻辑实现效果不好,而且工具不同将导致综合质量不一样,实现效果不好,而且工具不同将导致综合质量不一样,这些问题将会随着技术进步最终解决。这些问题将会随着技术进步最终解决。5619831983年,由年,由GDA(GateWayGDA(GateWay Design Automation)Design Automation)公司的公司的Phil MoorbyPhil Moorby首创。首创。19891989年年CadenceCa

8、dence公司收购了公司收购了GDAGDA公司。公司。19901990年年CadenceCadence公司公开发表公司公开发表VerilogVerilog HDL HDL。19951995年年IEEEIEEE制定并公开发表制定并公开发表VerilogVerilog HDL 1364-HDL 1364-19951995标准。标准。19991999年年VerilogVerilog标准公开发表。标准公开发表。由于由于VerilogVerilog HDL HDL简单易学,因行受到许多使用者的欢简单易学,因行受到许多使用者的欢迎。但由于迎。但由于VerilogVerilog HDL HDL在可靠性方面的

9、不足,在对可在可靠性方面的不足,在对可靠性要求较高的场合,大多采用靠性要求较高的场合,大多采用VHDLVHDL。VerilogVerilog HDL?HDL?6System CSystem C是由是由SynopsysSynopsys公司和公司和CoWareCoWare公司针对业界对公司针对业界对系统级设计语言的需求而合作开发的。系统级设计语言的需求而合作开发的。19991999年年9 9月月2727日,日,4040多家世界著名的多家世界著名的EDAEDA公司、公司、IPIP公司、公司、半导体公司和嵌入式软件公司宣布成立半导体公司和嵌入式软件公司宣布成立System C System C 联联盟

10、。盟。System C System C 从从19991999年年9 9月联盟建立初期的月联盟建立初期的0.90.9版本版本开始更新,开始更新,20012001年年1010月推出了月推出了2.02.0版本。版本。System CSystem C中的基本设计是模块单元,模块可以使得设中的基本设计是模块单元,模块可以使得设计者将一个复杂的系统分割为一些更小但易于管理的计者将一个复杂的系统分割为一些更小但易于管理的部分。模块的功能和作用与部分。模块的功能和作用与HDLHDL语言中的模块相类似,语言中的模块相类似,这使习惯于用这使习惯于用HDLHDL进行设计的设计人员可以很容易的进行设计的设计人员可以

11、很容易的转向用转向用System CSystem C进行设计。进行设计。System C?System C?7硬件语言软件语言的对应关系硬件语言软件语言的对应关系Verilog,SystemC C VHDL Ada语言种类语言种类面向对象面向对象强类型强类型可靠性可靠性灵活性灵活性适于军用适于军用Verilog/C是是否否略弱略弱强强略弱略弱VHDL/Ada是是是是高高略弱略弱是是语言的选择:在系统级采用语言的选择:在系统级采用VHDL,在软件级,在软件级采用采用C语言,在实现级采用语言,在实现级采用Verilog。8硬件描述语言与软件描述语言的区别硬件描述语言与软件描述语言的区别 软件语言软

12、件语言编写高级语言程序编写高级语言程序编译编译汇编语言程序汇编语言程序编译编译相对地址机器代码相对地址机器代码链接链接绝对地址机器代码绝对地址机器代码计算机逐行执行计算机逐行执行计算结果计算结果硬件语言硬件语言编写高级语言程序编写高级语言程序编译和综合编译和综合电路图电路图晶体管连接网表晶体管连接网表计算机串行执行仿真计算机串行执行仿真位流文件下载位流文件下载芯片芯片根据库编译根据库编译每个点每个时刻的状态值每个点每个时刻的状态值 93.1 VHDL3.1 VHDL的基本语法规则的基本语法规则 3.1.1 VHDL3.1.1 VHDL对标识符的规定对标识符的规定 3.1.2 VHDL3.1.2

13、 VHDL的数据类型的数据类型 3.1.3 VHDL3.1.3 VHDL的对象描述的对象描述 3.1.4 VHDL3.1.4 VHDL的运算操作符的运算操作符 103.1.1 VHDL3.1.1 VHDL对标识符的规定对标识符的规定 在在VHDLVHDL中所使用的中所使用的名字或名称叫标识符名字或名称叫标识符,如变量名、,如变量名、信号名、实体名、结构体名等都是通过标识符来定义信号名、实体名、结构体名等都是通过标识符来定义和区别的,在命名这些标识符时应遵守如下规则:和区别的,在命名这些标识符时应遵守如下规则:任何标识符的首字母必是英文字母;任何标识符的首字母必是英文字母;标识符的英文字母、小写

14、无区别;标识符的英文字母、小写无区别;标识符只能由英文字母、数字和下划线组成;标识符只能由英文字母、数字和下划线组成;使用下划线使用下划线_时,必须是单一的,且其前后都时,必须是单一的,且其前后都必须有英文字母或数字;必须有英文字母或数字;1 1标识符的命名规则标识符的命名规则11注释符用连续两个减号注释符用连续两个减号“”表示。表示。注注释从释从“”符号开始到该行末尾,以回车或符号开始到该行末尾,以回车或换行符结束,编译器不对注释符后面的文字进换行符结束,编译器不对注释符后面的文字进行处理。行处理。用单引号括起来的大写字母用单引号括起来的大写字母XX表示不表示不确定的位逻辑值,用双引号括起来

15、的大写字母确定的位逻辑值,用双引号括起来的大写字母X X串表示不确定的位矢量值,如串表示不确定的位矢量值,如“XXXXX”XXXXX”。不不确定值确定值XX不能用小写,也不能用其他字符代不能用小写,也不能用其他字符代替,否则为错。替,否则为错。在在VHDLVHDL中使用的保留字不能用作为用户命中使用的保留字不能用作为用户命名的标识符。名的标识符。1213判断下列信号命名的正确与否:判断下列信号命名的正确与否:signalsignal d_bus d_bus:std_logic_vectorstd_logic_vector(7 7 downtodownto 0 0););signalsignal

16、 8_bus 8_bus:std_logic_vectorstd_logic_vector(0 0 toto 7 7););signal signal c_busc_bus:std_logic_vectorstd_logic_vector(3 3downto downto 0 0););signal signal c_ _busc_ _bus:std_logic_vectorstd_logic_vector(0 0 toto 3 3););signal signal d_8_inputd_8_input:std_logicstd_logic;a=xa=x;a=Xa=X;b=“xxxxxxxxb

17、=“xxxxxxxx”;b=“XXXXXXXX”b=“XXXXXXXX”;-正确正确-错,用数字开头错,用数字开头-错,不能用错,不能用-错错,连续使用下划线连续使用下划线-正确正确-错错,不确定值用小写字母不确定值用小写字母-正确正确-错错,不确定值用小写字母不确定值用小写字母-正确正确13下标名用于指示数组型变量或信号的某一元素。下标名用于指示数组型变量或信号的某一元素。下标下标区间名则用于指示数组型变量或信号某一区间的元素。区间名则用于指示数组型变量或信号某一区间的元素。下标名的语句格式为:下标名的语句格式为:标识符(表达式)标识符(表达式)其中,其中,“标识符标识符”必须是数组型的变量

18、或信号的名字,必须是数组型的变量或信号的名字,“表达式表达式”所代表的值必须是数组下标范围中的一个所代表的值必须是数组下标范围中的一个或某一区间元素的位值。或某一区间元素的位值。signalsignal sg1 sg1:std_logic_vectorstd_logic_vector(0 to 50 to 5);signalsignal sg2 sg2:integer rangeinteger range 0 0 toto 3 3;y=y=sg1(4)sg1(4);w=w=sg2(3)sg2(3);2 2下标名的命名规则下标名的命名规则143.1.2 VHDL3.1.2 VHDL的数据类型的数

19、据类型 在在VHDLVHDL中,中,每一个对象都有一种类型且只能具有该类每一个对象都有一种类型且只能具有该类型的值,相同类型的对象之间才能进行所要求的操作,型的值,相同类型的对象之间才能进行所要求的操作,而且有的操作还要求位长相同。而且有的操作还要求位长相同。VHDLVHDL的数据类型分为标准的数据类型和用户定义的数的数据类型分为标准的数据类型和用户定义的数据类型及子类型,不同的数据类型之间若要进行运算、据类型及子类型,不同的数据类型之间若要进行运算、代入和赋值,必须进行数据类型的转换。代入和赋值,必须进行数据类型的转换。VHDLVHDL中的数据类型可以分为两大类。中的数据类型可以分为两大类。

20、第一类:标量型,包括整数类型、实数类型、枚举类第一类:标量型,包括整数类型、实数类型、枚举类型、时间类型。型、时间类型。第二类:复合类型,可以由小的数据类型复合而成,第二类:复合类型,可以由小的数据类型复合而成,如可由标量型复合而成。如可由标量型复合而成。15(1 1)整数类型)整数类型整数(整数(integerinteger)类型的范围为)类型的范围为-(2 23131-1-1)()(2 23131-1 1),所能表达的十进制数范围为),所能表达的十进制数范围为-2147483647-214748364721474836472147483647。整数类型数据的表达方式如下:整数类型数据的表达

21、方式如下:+112+112,+318000+318000,-777-777,012012,2E62E6其中,其中,012012相当于相当于1212;2E6=22E6=210106 6。此外,如用二进制、八进制、十六进制表示整数,需此外,如用二进制、八进制、十六进制表示整数,需将将2 2、8 8、1616放在数字前,用两个号将数字括起来,放在数字前,用两个号将数字括起来,如如2#1111-1111#2#1111-1111#、8#377#8#377#、16#FF#16#FF#。数字中间的。数字中间的“-”-”号不起作用,只是为了读数方便,故号不起作用,只是为了读数方便,故123-456123-45

22、6与与123456123456是同一个数。是同一个数。1.1.标准的数据类型标准的数据类型16(2 2)自然数类型和正整数类型)自然数类型和正整数类型自然数(自然数(naturalnatural)和正整数()和正整数(positivepositive)类型都是)类型都是整数类型的一个子类型,其取值范围都可取正整数,整数类型的一个子类型,其取值范围都可取正整数,区别在于区别在于自然数类型数据除可取正整数外还可取零值,自然数类型数据除可取正整数外还可取零值,而正整数则不能取零值。而正整数则不能取零值。(3 3)实数类型)实数类型实数(实数(realreal)类型是一种浮点数,其取值范围为)类型是一

23、种浮点数,其取值范围为-1.0E+381.0E+38+1.0E+38+1.0E+38,即,即-1.0-1.010103838+1.0+1.010103838。书。书写时一定要有小数点。写时一定要有小数点。实数的例子如下:实数的例子如下:-1.0-1.0,+2.7+2.7,2.52.5,-1.0E38-1.0E38有些数可以用整数表示也可以用实数表示。例如数字有些数可以用整数表示也可以用实数表示。例如数字1 1的整数表示为的整数表示为1 1,而用实数表示则为,而用实数表示则为1.01.0。两个数的。两个数的值是一样的,但数据类型却不一样。值是一样的,但数据类型却不一样。17(4 4)位类型)位类

24、型位(位(bitbit)数据类型用来表示数字系统中的一个位,)数据类型用来表示数字系统中的一个位,位的取值只能是位的取值只能是 00或或 11,将,将0 0或或1 1放在单引号放在单引号中。中。位与整数中的位与整数中的0 0或或1 1不同,它仅表示一个位的两种不同,它仅表示一个位的两种取值。有时也可以用显式说明位数据类型,如取值。有时也可以用显式说明位数据类型,如bitbit(11)。位数据与布尔量类型数据也是不同的。)。位数据与布尔量类型数据也是不同的。(5 5)位矢量型)位矢量型位矢量(位矢量(bit_vectorbit_vector)类型是用双引号括起来的一组)类型是用双引号括起来的一组

25、位数据类型,位数据类型,如如“110001”110001”,x“00ab”x“00ab”,o“456”o“456”。x x表示十六进制的位矢量,表示十六进制的位矢量,o o表示八进制的位矢量,常表示八进制的位矢量,常用于表示总线上各位的状态。用于表示总线上各位的状态。18(6 6)布尔量类型)布尔量类型一个布尔量(一个布尔量(booleanboolean)类型只有真()类型只有真(true=1true=1)和假(和假(false=0false=0)两种取值,只能用于关系运算)两种取值,只能用于关系运算中判断关系式是否成立,成立为真,反之为假。中判断关系式是否成立,成立为真,反之为假。(7 7)

26、字符类型)字符类型字符(字符(charactercharacter)类型的数据是用单引号括起来的)类型的数据是用单引号括起来的单字符号,单字符号,在包集合在包集合standardstandard中给出了预定义的中给出了预定义的128128个个ASCIIASCII码字符类型。如码字符类型。如AA、BB、QQ。由于。由于VHDLVHDL对大小写不敏感,所以程序中出现的大写字母和对大小写不敏感,所以程序中出现的大写字母和小写字母被看作是一样的,但对于字符类型的数据的小写字母被看作是一样的,但对于字符类型的数据的大小写则认为是不一样的。字符大小写则认为是不一样的。字符11与整数与整数1 1和实数和实数

27、1.01.0也是不相同的。当要明确指出也是不相同的。当要明确指出1 1的字符数据时,则的字符数据时,则可显式的写为可显式的写为charactercharacter(11)。)。19(8 8)字符串类型)字符串类型字符串(字符串(stringstring)类型的数据是由双引号括起来的一)类型的数据是由双引号括起来的一个字符序列,也称为字符矢量或字符串数组。个字符序列,也称为字符矢量或字符串数组。如如“string long”string long”,字符串常用于程序的提示和说明。,字符串常用于程序的提示和说明。(9 9)文件类型)文件类型文件(文件(filefile)类型可用来传输大量数据,文件

28、中可包)类型可用来传输大量数据,文件中可包括各种数据类型的数据。括各种数据类型的数据。用用VHDLVHDL描述时序仿真的激励描述时序仿真的激励信号和仿真波型输出,一般都要用文件类型。信号和仿真波型输出,一般都要用文件类型。(1010)行类型)行类型行(行(lineline)数据类型用于对文件的输入输出处理,它)数据类型用于对文件的输入输出处理,它可存放文件中一行的数据。可存放文件中一行的数据。在在IEEEIEEE10761076标准中的标准中的TEXIOTEXIO程序包中定义了几种文件程序包中定义了几种文件I/OI/O传输方法,调用这传输方法,调用这些程序就能完成数据的传输。些程序就能完成数据

29、的传输。20(1111)错误等级类型)错误等级类型错误等级(错误等级(severity levelseverity level)类型数据用来表示系统)类型数据用来表示系统的状态,共有的状态,共有4 4种:种:注意(注意(notenote)、警告()、警告(warningwarning)、)、出错(出错(errorerror)、失败()、失败(failurefailure)。在系统仿真中,在系统仿真中,可以用这可以用这4 4种状态来提示系统当前的工作情况。种状态来提示系统当前的工作情况。上述上述1111种数据类型是种数据类型是VHDLVHDL中标准的数据类型,在编程中标准的数据类型,在编程时可以

30、直接引用。此外,许多时可以直接引用。此外,许多CADCAD厂商在包集合中对厂商在包集合中对标准数据类型进行了扩展,如有的增加了数组数据等。标准数据类型进行了扩展,如有的增加了数组数据等。21任何一个信号和变量的赋值必须落入给定的约束区间任何一个信号和变量的赋值必须落入给定的约束区间中。中。约束区间的说明通常跟在数据类型声明的后面。约束区间的说明通常跟在数据类型声明的后面。例如:例如:integer rangeinteger range 100 100 downtodownto 1 1;bit_vectorbit_vector(3 3 downtodownto 0 0););realreal r

31、angerange 2.0 2.0 toto 23.0 23.0;约束数据的取值范围用关键字约束数据的取值范围用关键字rangerange指明,在表示数指明,在表示数据的增、减方向时,用据的增、减方向时,用toto和和downtodownto指明,指明,对位矢量的对位矢量的取值范围不用关键字取值范围不用关键字rangerange,但要用圆括号将数据的,但要用圆括号将数据的取值括起来。取值括起来。用用toto和和downtodownto的区别在于:的区别在于:toto表示数据左边的位为低表示数据左边的位为低位或较小的数据,右边的位为高位或较大的数据;位或较小的数据,右边的位为高位或较大的数据;d

32、owntodownto表示表示左边的位为高位,右边的位为低位。左边的位为高位,右边的位为低位。数据的约束区间数据的约束区间 22在进行在进行VHDLVHDL编程时,除可以使用标准的数据类型外,编程时,除可以使用标准的数据类型外,为便于阅读和对数据进行管理,根据需要,用户还可为便于阅读和对数据进行管理,根据需要,用户还可以自己定义数据类型。以自己定义数据类型。用户自己定义的数据类型常用在用户自己定义的数据类型常用在architecturearchitecture、entityentity、processprocess、packagepackage、subprogramsubprogram的声明部

33、分。的声明部分。用户定义的数据类型一般格式为:用户定义的数据类型一般格式为:type type 数据类型名,数据类型名数据类型名,数据类型名 类型定义;类型定义;类型定义包括:标量类型定义、复合类型定义、存类型定义包括:标量类型定义、复合类型定义、存取类型定义、文件类型定义。取类型定义、文件类型定义。2.2.用户定义的数据类型用户定义的数据类型23枚举类型枚举类型枚举(枚举(enumeratedenumerated)类型是用符号名来代替数字,它)类型是用符号名来代替数字,它的可能值应明确地列出的可能值应明确地列出。其定义格式为:。其定义格式为:typetype 数据类型名数据类型名 isis(

34、元素,元素,(元素,元素,.);其中其中typetype和和isis为用户定义数据类型的关键字为用户定义数据类型的关键字。进行枚举类型定义时,用圆括号列举被定义的各元素。进行枚举类型定义时,用圆括号列举被定义的各元素。列举的元素可以是文字、标识符或者一个字符文字,列举的元素可以是文字、标识符或者一个字符文字,字符文字是单个可印刷的字符文字是单个可印刷的ASCASC字符。字符。例如:例如:aa,BB,55,%,”,。24标识符是不分大小写的,但字符文字则有大小写标识符是不分大小写的,但字符文字则有大小写之分。之分。例如:例如:typetype std_logicstd_logic is is(U

35、U,XX,00,11,ZZ,WW,LL,HH,-);程序在处理枚举类型时,从前向后对它们的位置程序在处理枚举类型时,从前向后对它们的位置进行编序,进行编序,UU的位置序号为的位置序号为0 0,其它的位置序号,其它的位置序号分别为分别为1 1、2 2、3 3、4 4、5 5、6 6、7 7、8 8,但用户读起来就,但用户读起来就方便多了。方便多了。25整数类型与实数类型整数类型与实数类型用户定义的整数(用户定义的整数(integerinteger)类型与实数()类型与实数(realreal)类)类型不同于型不同于VHDLVHDL中的标准整数类型与实数类型,它属于中的标准整数类型与实数类型,它属于

36、它们的子集,它们的子集,其格式为:其格式为:typetype 数据类型名数据类型名 isis 标准的数据类型约束范围标准的数据类型约束范围;例如:例如:typetype dgt dgt is is integerinteger range range-10 -10 toto 10 10;type type cntcnt is is realreal range range 0.0 0.0 toto 10.0 10.0;这里的这里的integerinteger、realreal是已被定义的标准的数据类型。是已被定义的标准的数据类型。用户定义的数据类型用户定义的数据类型dgtdgt、cntcnt是

37、已被定义的标准的数是已被定义的标准的数据类型的子集。据类型的子集。26数组类型数组类型数组(数组(arrayarray)类型是将相同类型的数据集合在一起形)类型是将相同类型的数据集合在一起形成的一个新的数据类型成的一个新的数据类型,它可以是一维的或多维的。数,它可以是一维的或多维的。数组定义的书写格式为:组定义的书写格式为:typetype 数据类型名数据类型名 is arrayis array 范围范围 ofof 原数据类型名;原数据类型名;原数据类型名指新定义的数据类型中每一个元素的数原数据类型名指新定义的数据类型中每一个元素的数据类型。据类型。如果没有指定范围是采用何种数据类型,则如果没

38、有指定范围是采用何种数据类型,则默默认使用整数数据类型来说明范围。认使用整数数据类型来说明范围。例如:例如:type type wordword is arrayis array (3131 downto downto 0 0)ofof std_logic std_logic;这里范围(这里范围(31 downto31 downto 0 0)没有指明其数据类型,因此)没有指明其数据类型,因此被默认为使用了整数数据类型。被默认为使用了整数数据类型。27若范围这一项需用整数以外的其它数据类型时,则在若范围这一项需用整数以外的其它数据类型时,则在指定数据范围前应加数据类型名。指定数据范围前应加数据类

39、型名。例如:例如:type type word word is arrayis array (integer integer 1 1 to to 8 8)of of std_logicstd_logic;typetype instruction instruction isis (addadd,subsub,incinc,srlsrl,srfsrf,ldalda,ldbldb,xfrxfr););subtypesubtype digit digit isis i integernteger 0 0 toto 9 9;typetype insflaginsflag is arrayis arra

40、y (instructioninstruction add add toto srf srf)of of digitdigit;typetype std_logic_vectorstd_logic_vector is arrayis array (natural rangenatural range )ofof std_logicstd_logic;这里范围由这里范围由natural range natural range 指定,这是一个没有范指定,这是一个没有范围限制的数组,在这种情况下,范围由信号或变量声围限制的数组,在这种情况下,范围由信号或变量声明语句确定。例如:明语句确定。例如:si

41、gnalsignal busrange busrange:std_logic_vectorstd_logic_vector(0 0 toto 3 3););28例例3-33-3:多维数组描述的例子。:多维数组描述的例子。typetype memarray memarray is arrayis array (0 0 toto 5 5,7 7 downtodownto 0 0)ofof std_logicstd_logic;constantconstant romdata romdata:memarraymemarray:=(00,00,00,00,00,00,00,00),),(00,11,1

42、1,11,00,00,00,11),),(00,00,11,11,00,00,00,00),),(11,11,11,00,00,00,00,11),),(00,00,00,00,11,11,00,11),),(11,11,00,00,00,00,11,00););signalsignal data_bit data_bit:std_logicstd_logic;data_bit=romdatadata_bit=romdata(4 4,6 6););29时间类型时间类型时间(时间(timetime)类型属于典型的物理量类型,)类型属于典型的物理量类型,对物理对物理量类型的描述涉及数字和单位两个部

43、分,两者中间隔量类型的描述涉及数字和单位两个部分,两者中间隔一个空格。一个空格。如如30 s30 s(3030秒)、秒)、20 m20 m(2020米)、米)、2 k2 k(千欧(千欧姆)、姆)、40 A40 A(4040安培),安培),VHDLVHDL综合器不接受物理量这综合器不接受物理量这类文字类型数据。类文字类型数据。VHDLVHDL中惟一的预定义物理量类型是中惟一的预定义物理量类型是时间类型。对时间类型定义的书写格式为:时间类型。对时间类型定义的书写格式为:TypeType 数据类型名数据类型名 is is 范围范围;unitsunits基本单位基本单位;单位单位;end unitse

44、nd units;30在在standardstandard程序包中对时间的定义为:程序包中对时间的定义为:type time is rangetype time is range -1E18-1E18 toto 1E181E18;units units fs fs;psps=1000fs=1000fs;ns=1000psns=1000ps;ss=1000ns=1000ns;ms=1000sms=1000s;sec=1000mssec=1000ms;min=60sec min=60sec;hr=60min hr=60min;end unitsend units;31记录数据类型记录数据类型记录(

45、记录(recoderecode)数据类型定义的书写格式为:)数据类型定义的书写格式为:typetype 数据类型名数据类型名 is recordis record 元素名元素名:数据类型名数据类型名;元素名元素名:数据类型名数据类型名;end recordend record;从记录数据类型中提取元素数据时应用从记录数据类型中提取元素数据时应用进行进行分隔,即为记录数据类型名分隔,即为记录数据类型名元素名。元素名。记录是将不同记录是将不同类型的数据组织在一起而形成的新类型,类型的数据组织在一起而形成的新类型,而数组则是而数组则是同一类型数据的集合同一类型数据的集合,即记录中元素的数据类型可以,

46、即记录中元素的数据类型可以不同,而数组中元素的数据类型必须相同。不同,而数组中元素的数据类型必须相同。32例例3-43-4:记录数据类型的应用。:记录数据类型的应用。typetype bank bank is recordis recordaddr0addr0:std_logic_vectorstd_logic_vector(7 7 downtodownto 0 0););addr1addr1:std_logic_vectorstd_logic_vector(3 3 downtodownto 0 0););r0r0:integerinteger;instinst:instructioninst

47、ruction;end recordend record;signalsignal addbus0 addbus0:std_logic_vectorstd_logic_vector(7 7 downtodownto 0 0);signalsignal addbus1 addbus1:std_logic_vectorstd_logic_vector(3 3 downtodownto 0 0););signalsignal result result:integerinteger;signalsignal alu_codealu_code:instructioninstruction;signal

48、signal r_bank r_bank:bankbank:=(“00000000”00000000”,“0000”0000”,0 0,addadd););addbus1=r_bank.addr1addbus1=r_bank.addr1;r_bank.inst=alu_coder_bank.inst=alu_code;33将用户已定义的数据类型作一些范围限制就形成用将用户已定义的数据类型作一些范围限制就形成用户定义的子类型。户定义的子类型。子类型定义的一般格式为:子类型定义的一般格式为:subtype subtype 子类型名子类型名 is is 源数据类型名范围源数据类型名范围;例如:例如:

49、subtypesubtype digit digit isis integer range integer range 0 0 toto 9 9;subtypesubtype addrbus addrbus isis std_logic_vectorstd_logic_vector(7 7 downto downto 0 0););3.3.用户定义的子类型用户定义的子类型34在在VHDLVHDL中使用别名中使用别名(alias)(alias)可来代替对现有信号、可来代替对现有信号、变量、常数或文件对象的声明,也可用来对除标签、变量、常数或文件对象的声明,也可用来对除标签、循环参数、生成语句参数

50、外的几乎所有先前声明过的循环参数、生成语句参数外的几乎所有先前声明过的非对象进行声明。非对象进行声明。别名本身并不定义新的对象,它只是给现有的对象别名本身并不定义新的对象,它只是给现有的对象分配一个特定的名称。分配一个特定的名称。别名主要用来提高对矢量某些别名主要用来提高对矢量某些特定部分的可读性。当一个别名表示的矢量的特定部特定部分的可读性。当一个别名表示的矢量的特定部分没有被声明为子类型时,别名表示的内容可当做子分没有被声明为子类型时,别名表示的内容可当做子类型看待。类型看待。4 4、别名的使用、别名的使用35例如:例如:signalsignal instruction:instructi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(可编程ASIC应用技术(第三章)课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|