硬件描述语言第二讲

上传人:无*** 文档编号:244159228 上传时间:2024-10-02 格式:PPT 页数:41 大小:153KB
返回 下载 相关 举报
硬件描述语言第二讲_第1页
第1页 / 共41页
硬件描述语言第二讲_第2页
第2页 / 共41页
硬件描述语言第二讲_第3页
第3页 / 共41页
点击查看更多>>
资源描述
*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2008-092008.12,硬件描述语言及器件,教材:任勇峰等编著,VHDL,与硬件实现速成,主讲教师:刘文怡,08/09,学年第,1,学期,教学安排,第,1,讲:,VHDL,概述及其开发环境,第,2,讲:,VHDL,的基本元素,第,3,讲:,VHDL,的进程,第,4,讲:其它并行语句,第,5,讲:,VHDL,实例剖析,第,6,讲:,VHDL,的顺序描述语句,第,7,讲:结构体的描述风格,第,8,讲:计数器和状态机,第,9,讲:不同风格的状态机举例,第,10,讲:,VHDL,综合举例,2008-092008.12,第,2,讲:,VHDL,的基本元素,1,标识符,2,数据对象,3,数据类型,4,操作符,5,端口模式,2008-092008.12,1,标识符,标识符规则是,VHDL,语言中符号书写的一般规则。不仅对电子系统设计工程师是一个约束,同时也为各种各样的,EDA,工具提供了标准的书写规范,使之在综合仿真过程中不生产生歧义,易于仿真。,VHDL,语言有两个标准版:,VHDL,87,版和,VHDL,93,版。,VHDL,87,版的标识符语法规则经过扩展后,形成了,VHDL,93,版的标识符语法规则。前一部分称为短标识符,扩展部分称为扩展标识符。,VHDL,93,版含有短标识符和扩展标识符两部分。,2008-092008.12,短标识符,(1),短标识符,VHDL,的短标识符是遵守以下规则的字符序列:,(1),必须以英文字母打头。,(2),字符可以是大写、小写的数字,(0,9),和下划线,(_),。,(3),下划线前后都必须有英文字母或数字。,(4)EEA,工具综合、仿真时,短标识符不区分大小写。,一般地,对,VHDL,的保留字:,ENTITY,,,ARCHITECTURE,,,END,,,BUS,,,USE,,,WHEN,,,WAIT,,,IS,在程序书写时,一般要求大写或黑体,使得程序易于阅读,易于检查错误。,2008-092008.12,短,标识符,(2),下面是合法的标识符:,multi_screens,Multi_screens,Multi_Screens,MULTI_SCREENS,下面的书写是不合法的:,illegal%name illegal-name illegal-name,2008-092008.12,扩展标识符,扩展标识符是,VHDL,93,版增加的标识符书写规则:,(1),扩展标识符用反斜杠来定界。,multi_screens,,,eda_centrol,等都是合法的扩展标识符。,(2),允许包含图形符号、空格符。例如:,mode A, $100, p%name,等。,(3),反斜杠之间的字符可以用保留字。例如:,buffer, entity, end,等。,(4),扩展标识符的界定符两个斜杠之间可以用数字打头。如:,100$,,,2chip,,,4screens,等。,(5),扩展标识符中允许多个下划线相连。例如:,Four_screens,,,TWO_Computer_sharptor,等。,(6),扩展标识符区分大小写。例如,: EDA,与,eda,不同。,(7),扩展标识符与短标识符不同。例如,:COMPUTER,与,Computer,不同。,2008-092008.12,2,数据对象,(1),在,VHDL,语言中,凡是可以赋于一个值的客体叫对象,(object),。,VHDL,对象包含有专门数据类型,主要有,4,个基本类型:常量,(CONSTANT),、,信号,(SIGNAL),、,变量,(VARIABLE),和文件,(FILES),。,其中文件类型是,VHDL,93,标准中新通过的。,2008-092008.12,数据对象,(2),信号和变量可以连续的赋于不同的值。,常量只在它被说明时赋值,在整个器件工作期间值不变化。试图对常量多次赋值是错误的。,文件可以用参数向子程序传递数据,通过子程序对文件进行读和写操作。文件不可以通过赋值来更新文件的内容,文件参数没有模式。,2008-092008.12,数据对象(,3,),对象说明的一般书写格式为:,对象类别,标识符表:子类型标识,:,初值,;,对象说明举例:,CONSTANT T1,,,T2,:,time :,30ns,,,-,常量说明,VARIABLE SUM,:,read,;,-,变量说明,SIGNAL CLOCK,:,bit,;,-,信号说明,FILE input,:,Text IS IN,“,STD_INPUT,”,-,文件说明,2008-092008.12,数据对象(,4,),对象的赋值规则:,可用函数调用的方法给对象赋初值。,CONSTANT Bus,number,:,Integer :,My_function(True,,,6),;,如果在同一个对象说明语句中,对多个同一类型的对象指定初始值,则多个对象同时取得了这一指定值。,信号和变量的默认值。当信号和变量没有指定初始值或没有给信号变量赋值时,即信号和变量的值在对象说明语句中默认时,信号变量的取值称为默认值。一般地,若变量为字符型变量则取最大值;若变量、信号为数值型变量,则取初始值,默认值为,0,2008-092008.12,常量(,1,),常量,(constant),是设计者给实体中某一常量名赋予的固定值。一般地,常量赋值在程序开始前进行说明,数据类型在实体说明语句中指明。常量说明的一般格式如下:,CONSTANT,常数名:数据类型,:,表达式;,根据上面的格式,举例如下:,8,位寄存器宽度指定:,CONSTANT,width,:,integer:,8,;,设计实体的电源供电电压指定:,CONSTANT,Vcc,:,real:,5.0,;,某一模块信号输入,/,输出的延迟时间:,CONSTANT,DALY,:,time:,100ns,;,3,数据对象,2008-092008.12,常量(,2,),常量标识符、,WIDTH,,,VCC,,,DALY,,,PBUS,等在,VHDL,程序中多处有用,其值在运行中不变。若要改变常量值,必须要改变设计,改变实体中的常量说明,然后重新编译。,常量必须在程序包、实体、结构体或进程的说明区域中对常量的标识符、类型、常量值进行指定。,定义在程序包中的常量由所在的实体或结构体调用。,定义在实体内的常量仅在实体内使用,定义在进程内的常量仅在进程内使用。,2008-092008.12,变量(,1,),变量,(variables),仅用在进程语句、函数语句、过程语句中的结构中使用,变量是一个局部量,变量的赋值立即生效,不产生赋值延时。变量书写的一般格式为:,VARIABLES,变量名:数据类型,约束条件,:,表达式;,根据上述格式,举例如下:,VARIABLES,result,:,std_logic:,0,;,变量赋初值,VARIABLES,x,,,y,,,z,:,integer,;,VARIABLES,count,:,integer range 0 TO 255 :,10,;,2008-092008.12,变量(,2,),在,VHDL,语言中,变量的使用规则和限制范围说明如下:,变量赋值是直接非预设的。在某一时刻仅包含了一个值。,变量赋值和初始化赋值符号用,“,:,”,表示。,变量不能用于硬件连线和存储元件。,在仿真模型中,变量用于高层次建模。,在系统综合时,变量用于计算,作为索引载体和数据暂存。,在进程中,变量的使用范围在进程之内。若将变量用于进程之外,必须将该值赋给一个相同类型的信号,即进程之间传递数据靠的是信号。,2008-092008.12,信号,(1),信号,(signal),是电子电路内部硬件实体相互连接的抽象表示。信号通常在构造体、包集合和实体说明中使用,其一般书写格式为:,SIGNAL,信号名:数据类型、约束条件,:,表达式;,使用上述格式举例如下:,SIGNAL,sys_clk,:,BIT :,0,;,-,系统时钟信号,SIGNAL count,:,bit_vector(7,downto,0),;,-,计数器宽度,2008-092008.12,信号(,2,),有关信号的使用规则说明如下:,“,:=,”,表示对信号直接赋值,表示信号初始值不产生延时。,“,=,”,表示代入赋值,是变量之间信号的传递,代入赋值法允许产生延时。例如:,T1,=,T2,;,在仿真中,初始化能保证信号设定在指定值上。对于存储元件的加电初始状态,应该设计复位或予置位机构,而不是通过信号指定初始化值来实现。,在,EDA,工具综合时,信号应在结构体中描述清楚。,2008-092008.12,4,数据类型,VHDL,语言标准定义了,10,种标准的数据类型。为了方便设计,允许用户自定义数据类型。,VHDL,语言程序是系统行为的描述、功能的说明和结构的组织,使用规范化语言,有着很强的约束性。不同的数据类型不能直接代入,相同的类型,位长不同也不能代入。,EDA,工具在编译、综合时会报告类型错。,2008-092008.12,数据类型(,2,),VHDL,语言标准所定义的标准数据类型,(1),整数类型,(INTEGER TYPE),(2),实数类型或浮点类型,(REAL TYPE,FLOATING TYPE),(3),位类型,(BIT TYPE),std_logic,(4),位矢量类型,(BIT_VECTOR TYPE),std_logic_vector,(5),布尔类型,(BOOLEAN TYPE),(6),字符类型,(CHARACTER TYPE),(7),时间类型或物理类型,(Time type,physical type),(8),错误类型,(NOTE,,,WARNIING,,,ERROR,,,FAILURE TYPE),(9),自然数、整数类型,(NATURAL TYPE),(10),字符串类型,(TRING TYPE),2008-092008.12,数据类型(,3,),布尔量,(BOOLEAN),布尔量是二值枚举量,每一个布尔量具有两个可能的值:,“,真,”,或者,“,假,”,。,布尔量没有数量多少的概念,不能进行算术运算,只能进行逻辑运算。,布尔量常用来表达信号的状态,或者总线上的控制权,仲裁情况,忙、闲状态等。,若某个客体被定义为布尔量,则,EDA,工具对设计进行仿真时,自动地对其赋值情况进行核查。,2008-092008.12,数据类型(,4,),字符,(CHARACTER),字符在,VHDL,语言中编程时用单引号括起来。,A,,,a,,,B,,,b,,,都认为是不同的字符。,VHDL,语言对大小写英文字母不敏感,但区分字符量中的大小写。字符,1,,,2,仅是符号。,字符包括,A,Z,,,a,z,,,0,9,,,空格及一些特殊字符。,2008-092008.12,数据类型(,5,),字符串,(STRING),字符串是由双引号括起来的一个字符序列。,例如,“,VHDL,”,,,“,STRING,”,,,“,MULTI_SCREEN COMPUTER,”,等。,字符串在其他文献中也称为字符矢量或字符串数组。,字符串一般用于程序的提示、结果的说明等场合。,2008-092008.12,数据类型(,6,),整数,(INTEGER),在,VHDL,语言中,整数范围从,(2,31,1),到,(2,31,1),,例如:,128,,,5,,,12,,,。,在电子系统中,整数可以用进制来表示。,整数不能看作矢量,不能单独对某一位操作。,整数不能用于逻辑运算,只能用于算术运算。,对象的数据类型定义为整数时,范围应有约束。例如:,VARIABLE A,:,INTEGER RANGE,128 TO 128,;,在电子系统设计过程中,整数可以用来抽象地表达总线的状态。,2008-092008.12,数据类型(,7,),位,(,BIT,),位通常用来表示一个信号的值。,位通常用单引号来括号引其位的值。,如:,TYPE BIT IS (0,,,1),;,位的值,0,,,1,表示信号的状态;,布尔量的值,0,,,1,表示,假,,,真,。两者的意义不一样。,2008-092008.12,类,型,转,换,(1),在,VHDL,程序设计中,不同类型的对象不能代入。对于某一数据类型的变量、信号、常量、文件赋值时,类型一定要一致,否则,EDA,工具进行综合、仿真等过程中不能通过。,为了进行不同类型的数据变换,可以有,3,种方法:类型标记法、函数转换法和常数转换法。,2008-092008.12,类,型,转,换,(2),用类型标记法实现类型转换,类型标记就是类型的名称。类型标记法仅适用于关系密切的标量类型之间的类型转换,即整数和实数的类型转换。若:,variable i,:,integer,;,variable r,:,real,;,则有:,i:,integer(r),;,r:,real(i),;,2008-092008.12,类,型,转,换,(3),用函数法进行数据类型转换,,VHDL,语言标准中的程序包提供的变换函数来完成这个工作。这些程序包有,3,种:,STD_LOGIC_1164,程序包定义的转换函数:,函数,TO_STDLOGICVECTOR,(A) -,由位矢量,BIT_VECTOR,转换为标准逻辑矢量,STD_LOGIC_VECTOR,函数,TO_BITVECTOR,(A),;,-,由标准逻辑矢量,STD_LOGIC_VECTOR,转换为位矢量,BIT_VECTOR,函数,TO_STDLOGIC,(A),;,-,由,BIT,转换为,STD_LOGIC,函数,TO_BIT,(A),;,-,由标准逻辑,STD_LOGIC,转换,BIT,2008-092008.12,逻辑标准值,VHDL,93,标准定义了,STD_LOGIC 9,种不同的值,增加了不定状态,“,X,”,、,高阻状态,“,Z,”,。,不定状态方便了系统仿真,高阻状态方便了双向总线的描述。,U,-,初始值,X,-,不定,未知;,O,-0,1,-1,Z,-,高阻,W,-,弱信号不定,未知,L,-,弱信号,0,H,-,弱信号,1,-,不可能情况,2008-092008.12,命名规则,在,VHDL,语言中使用的名字,如信号名、实体名、结构体名、变量名、各种进程标记、块标记等命名时,应遵守如下规则:,构成名字的符号有英文字母,数字和,_,连字符。,名字的最前面应该是英文字母。,不能连续使用连字符,“,_,”,,名字最后一个符号也不能用连字符。,命名规则举例:,SIGNAL,sel,:,INTEGER,;,SIGNAL PCI_BUS,:,STD_LOGIC_VECTOR(31 DOWNTO O),;,SIGNAL 8_BUS,:,.,-,数字开头,是错误的名字,SIGNAL PCI_,BUS,:,. -,是非法符号,SIGNAL PCI_BUS_,:,. -,结尾不能用连字符,2008-092008.12,程序注释,为了提高,VHDL,语言设计程序的可读性,像其他高级语言那样,在每一程序行后可以增加注释。,注释从,“,-,”,符号开始,到该行末尾结束。,注释文字不作,EDA,工具进行逻辑综合的依据。不产生硬件电路结构,不描述电路行为,在综合、仿真、验证过程中,,EDA,工具对注释行不进行处理。,2008-092008.12,程序注释,注释不是设计描述的有效部分,编译后存入数据库中的部分不含注释部分。,举例:,Trant,Frame,idle,irdy,devsel,;,-PCI,总线数据传输译码逻辑之一,。,2008-092008.12,十进制数表示法,十进制数书写的规范格式为:,十进制文字,: :, 整数指数,其中 整数,: :, 数字或下划线连接的数字,指数,: :,E,整数或,E,整数,整数举例:,089,,,0,,,456_78,,,2e8,,,5e3,。,实数举例:,12.0,,,0.0,,,3.14159,,,1.2E,3,,,2.4e,5,。,2008-092008.12,字符、字符串,VHDL,语言中,字符为单引号括起来的,ASCII,字符其规范书写格式为:,字符文字,: :,图形字符,例如,1,,,A,,,F,。,字符串为双引号括起来的图形字符序列。规范书写格式为:,字符串文字,: :,“,图形字符,”,例如:,“,PCI BUS interface,”,,,“,This string,constain,an information,”,。,2008-092008.12,5,运算操作符,VHDL,语言的操作符有,4,种:,(1),逻辑运算符,(LOGICAL),(2),关系运算符,(RELATIONAL),(3),算术运算符,(ARITHMETIC),(4),并置运算,(CONCATENATION),2008-092008.12,逻辑运算符,在,VHDL,中,逻辑运算符有,6,种,列表如下:,(1)NOT,取反,(2)AND,与,(3)OR,或,(4)NAND,与非,(5)NOR,或非,(6)XOR,异或;,2008-092008.12,算术运算符,VHDL,算术运算符的例表如下:,(1),-,加运算,(2),- -,减运算,(3)*,-,乘运算,(4)/,-,除运算,(5)MOD,-,求模运算,(6)REM,-,取余运算,(7),-,正,(8),-,负,(9)*,-,指数运算,(10)ABS,-,取绝对值,2008-092008.12,关系运算符(,1,),关系运算符是两个对象在比较运算时,将两个操作数比较的结果表示出来所使用的符号,列表如下:,等于,/,不等于,小于,小于等于,大于,大于等于,2008-092008.12,关系运算符(,2,),关于运算符,在,VHDL,程序设计中有如下规则:,两个对象进行比较时,数据类型一定要相同。,(,等于,),和,/,(,不等于,),适用于所有数据类型的对象之间的比较。,大于、小于、大于等于、小于等于适用于整数、实数位、位矢量及数组类型的比较。,符号有两种含义:代入符和小于等于符,要根据上下文判断。,两个位矢量类型的对象比较时,自左至右,按位比较。,2008-092008.12,并置运算符,在,VHDL,程序设计中,并置运算符,“,”,用于位的连接。并置运算符的使用规则如下:,并置运算符可用于位的连接,形成位矢量。,并置运算符可用两位矢量的连接构成更大的位矢量。,位的连接,可以用并置符连接法,也可用集合体连接法。举例如下:,DATA_C,D0,D1,D2,D3,;,DATA_C,(D0,,,D1,,,D2,,,D3),;,2008-092008.12,操作符的运算优先级,在,VHDL,程序设计中,逻辑运算、关系运算、算术运算、并置运算优先级是不相同的,各种运算的操作不可能放在一个程序语句中,所以把各种运算符排成统一的优先顺序表意义不明显。,其次,,VHDL,语言的结构化描述,在综合过程中,程序是并行的,没有先后顺序之分,写在不同程序行的硬件描述程序同时并行工作。,VHDL,语言程序设计者不要理解程序是逐行执行,运算是有先后顺序的,这样是不利于,VHDL,程序的设计。,运算符的优先顺序仅在同一行的情况下有顺序、有优先,不同行的程序是同时的。,2008-092008.12,习 题,1,什么叫对象?对象有哪几个类型?,2,VHDL,语言定义的标准类型有哪些?,3,简述,VHDL,语言操作符的优先级。,4,哪,3,种方法可用来进行类型转换?,2008-092008.12,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!