- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7-3 VHDL词法
主要内容:1、标识符
2、对象
3、数据类型
4、类型转换
5、词法单元
6、运算操作符
重点内容: 对象和类型转换;7.3.1 标识符; 1、标识符主要由字母、数字以及下划线组成。
2、第一个字符必须是英文字母。
3、最后一个字符不能是下划线。
4、在标识符中不允许出现两个连续的下划线。
5、短标识符不区分大小写。
6、VHDL中的保留字不能作为一般的短标识符使用。; ;7.3.2 对象;常量; 3、常量说明的位置
(1)在VHDL中,如果一个对象在程序包中或实体说明部分被说明,那么在本设计和本设计内部的任何结构体中都可以引用这个对象,称之为对象的全局化;如果一个对象在结构体说明部分被说明,那么仅可以在此结构体中引用这个对象,称之为对象的局部化。
(2)常量可以在程序包、实体、结构体或进程的说明区中对常量的标识符、类型、常量值进行指定。
(3)定义在程序包中的常量可由所在的任何实体和结构体调用。
(4)定义在实体内的常量仅在实体内使用,定义在进程内的常量仅在进程内使用。
(5)在某些特殊情况下,在程序包中说明一个常量时,可以不赋予一个初始值,称为缓冲常量。;变量主要用于对暂时数据进行局部存储,是一个局部量。
??变量说明的格式:
variable 变量名:数据类型[:=表达式];
例:
variable temp : std_logic :=‘0’;
variable a,b : integer :=0 ;
variable count1:integer range 0 to 255 :=0;
variable enable : std_logic ;
;注意:
(1)变量初始化时采用“: =”,而在变量赋值语句中也采用此符号来进行赋值。
(2)变量也可以连续赋值,其值在设计实体中可以改变。
(3)当没有被赋初值时,取默认值,即取该类型的最左值或最小值。如:前面的第4个信号说明中,没有指定初始值,则信号enable取默认值‘0’。
(4)和信号不同,变量的赋值是直接的、立即生效的,在某一个时刻仅包含一个值。因此在变量赋值语句中,不允许出现附加延时。
如:temp:=a after 10ns;
enable:=‘0’ after 20ns;
这是错误的语句。;变量说明的位置??:
变量只可以在进程语句、过程语句和函数语句的说明区域中进行说明。??
变量的作用范围只能在说明它的进程、过程和函数中,在其他部分是无效的。
若要将一个变量的值用于作用范围之外,需要将该变量的值赋给一个相同类型的信号。;例:
Library ieee;
Use ieee.std_logic_1164.all;
Entity sync is
port(clk: in std_logic;
irq: out std_logic);
End sync;
Architecture rtl of sync is
signal temp : integer;
Begin
Label1: process
Variable counter : integer :=0;
;说 明:
(1)该程序的功能是根据输入时钟信号clk,产生一个周期为16倍的中断信号irq,中断信号宽度为1个时钟周期。
(2)进程Lable1主要用来进行计数,当clk发生变化且为1时启动该进程,执行counter的加1操作;进程Label2用来产生中断信号irq,当计数器temp计满16个时钟周期时,将irq置0并持续1个时钟周期。
(3)counter为进程Label1中的变量,不能在进程Label2中使用。在结构体中定义一个信号temp,将变量counter的值赋给它,将其值带出进程Label1。
; 1、信号作用:起连线的作用,将实体与实体、元件与元件连接起来构成系统。一般情况下,将信号视为硬件系统中连线的抽象。;注 意:
(1)信号初始化时采用“: =”,而在源程序中信号值的代入将采用代入符“=”。
(2)信号可以连续赋值,其值在设计实体中可以改变,这一点与常量不同。
(3)当没有被赋初值时,取默认值,即取该类型的最左值或最小值。
如:前面的第3个信号说明中,没有指定初始值,则信号address_bus取默认值“UUUUUUUU”,因为对于std_logic_vector(7 downto0)
文档评论(0)