理解信号与变量、并行语句与顺序语句

上传人:wt****50 文档编号:40142884 上传时间:2018-05-23 格式:DOC 页数:9 大小:47.50KB
返回 下载 相关 举报
理解信号与变量、并行语句与顺序语句_第1页
第1页 / 共9页
理解信号与变量、并行语句与顺序语句_第2页
第2页 / 共9页
理解信号与变量、并行语句与顺序语句_第3页
第3页 / 共9页
理解信号与变量、并行语句与顺序语句_第4页
第4页 / 共9页
理解信号与变量、并行语句与顺序语句_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《理解信号与变量、并行语句与顺序语句》由会员分享,可在线阅读,更多相关《理解信号与变量、并行语句与顺序语句(9页珍藏版)》请在金锄头文库上搜索。

1、VHDLVHDL:理解信号与变量、:理解信号与变量、并行语句并行语句与与顺顺 序语句序语句初学 VHDL,对一些问题总是感到困惑。比如,同样的赋值语句,在什么场合是 并行的,什么时候又是顺序的?信号与变量有什么区别,为什么在 PROCESS 里, 对信号赋值的结果要等到进程挂起才起作用,而变量赋值却立刻起作用?其实, 从语句产生的电路这个角度,可以更深刻地理解这些问题,下面是我自己摸索 的一些理解方法,有不妥之处请大虾们指正!1、赋值语句。同样 a = b 的赋值语句,会形成什么电路,起关键作用的是敏感信号。a) 如果 a = b 是在进程之外,那么隐含的敏感信号就是 b,那么,这个 赋值语句

2、就形成一条连线。b) 如果是在一个同步进程中,如 if (rising_edge(CLK) then a = b, 这时候,就会形成一个触发器,因为敏感信号是时钟边沿。c) 如果敏感信号是一个电平信号,那么会形成一个锁存器。如一个不完整 的 if 条件:if (cond = 1) then a = b;2、并行语句并行语句和顺序语句顺序语句。从形成的电路的角度,并行语句并行语句最终会有两种形式:a) 并联或不相联的逻辑门或组合电路。因为是并联或不相联的,当然是同 时执行,这个好理解。b) 由同一个时钟边沿驱动的 D 触发器,不论 D 触发器之间是并联、串联或 者不相连的。为什么呢?因为触发器是

3、在同一个时钟边沿同时翻转的,也就是 同时执行,所以本质上就是并行。顺序语句顺序语句只有一种情况,就是形成串联的逻辑门或组合电路。3、信号与变量有什么不同?为什么信号赋值要等到进程挂起生效,变量赋值却 立刻生效?其实,了解了上一点并行语句并行语句和顺序语句顺序语句所生成的电路,这个问题就好理 解了。因为在同步进程里的并行语句并行语句,大多是形成 b 的情况,就是多个由同一 时钟驱动的触发 器。由于从触发器的输入到翻转、输出需要一定的延时,这个 延时基本就是进程执行完毕的时间,所以,触发器翻转后的输出在同一个时钟 边沿中是看不到的,因为 它还没翻转过来呢。这就是信号赋值要等到进程挂起 才生效的原因

4、。那为什么变量赋值却能立刻生效呢?这是因为,变量其实是为了帮助在同 步进程中生成一些逻辑门或组合电路用的。看一看代码:var1 := not i1; var2 := var1 and i2 ; sig = var2; 生成的 RTL,就会看到,两个变量赋值 语句其实生成了一个非门、一个与门。而且,输入信号 i1 和 i2 到 var2 这段是 个组合电路,是不受时钟边沿控制的, 而到信号赋值语句 sig = var2,才形 成一个 D 触发器。所以,这两个变量赋值语句生成了一个串联的非门和与门, 那当然 var2 取到的是 var1 赋值后的值了。最后顺便提一下为什么变量必须只能在进程内可见,

5、我猜可能是为了防止 在同步进程中输出异步信号,造成混乱吧。因为如果变量是外部可见的,如上 面的 var2,那么 var2 的值就可以异步输出到进程外了。所以限制变量只能进 程内可见后,要输出变量的值就只能赋值给一个信号,在同步进程中,就是加 了一个 触发器了。VHDL 的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序 无关。进程语句begin 进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间 是并行的,并可访问结构体或实体中定义的信号。因此进程语句称为并行描述 语句。进行语句结构内部所有语句都是顺序执行的 进程语句的启动是由 process 后敏感信号表中所

6、标明的敏感信号触发来的。 各进程间的通信是由信号来传递的 语法如下: 标记:标记:processprocess(敏感信号表)(敏感信号表)变量说明语句;变量说明语句; beginbegin 一组顺序语句;一组顺序语句; endend processprocess 标记;标记;标记:为进程标号 敏感信号表:是进程用来读取所有敏感信号(包括端口)的列表。 变量说明:主要包括变量的数据类型说明、子程序说明等 从 begin 到 end process 之间是一组顺序执行语句。敏感信号表 所谓敏感信号表:就是用来存放敏感信号的列表。在进程语句中,敏感信号指 那些发生改变后能引起进程语句执行的信号。敏感

7、信号表中可以使用一个或多 个信号,当其中一个或多个信号值改变时,就在进程内部引起语句执行。敏感 信号表也可忽略,但程序中必须有其他形式的敏感信号激励。例如 wait、wait for、wait until 和 wait on。进程语句的启动 在 VHDL 语言中,进程有两种工作状态:等待和执行。当敏感信号表中的信号没 有变化时,进程处于等待状态;当敏感信号表中的信号有变化时,进程处于执行状态 进程语句的同步 同一个结构体中不仅可以有多个进程存在,同一个结构体中的多个进程还可以 同步。VHDL 中通常采用时钟信号来同步进程,具体方法是:结构体中的几个进 程共用同一个时钟信号来进行激励。并发信号赋

8、值语句 信号赋值语句在进程内部出现时,它是一种顺序描述语句。信号赋值语句在结构体的进程之外出现时,它将以一种并发语句的形式出现。 它们在结构体中是并行执行的。注意:并发信号赋值语句是靠事件来驱动的,因此对于并发信号赋值语句来说,注意:并发信号赋值语句是靠事件来驱动的,因此对于并发信号赋值语句来说, 只有当赋值符号只有当赋值符号“=”“=”右边的对象有事件发生时才会执行该语句。右边的对象有事件发生时才会执行该语句。条件信号赋值语句 语法结构: 目标信号目标信号=表达式表达式 1 1 whenwhen 条件条件 1 1 elseelse表达式表达式 2 2 whenwhen 条件条件 2 2 el

9、seelse表达式表达式 3 3 whenwhen 条件条件 3 3 elseelse.表达式表达式 n-1n-1 whenwhen 条件条件 n-1n-1 elseelse表达式表达式 n n; VHDL 语言程序执行到该语句时,首先要进行条件判断,之后才进行信号赋值。 如果满足条件,就将该条件前面那个表达式的值赋给目标信号;如果不满足条 件按,就继续判断,直到最后一个表达式,如果前面的条件均不满足就无条件 的赋值给最后一个表达式,因为最后一个表达式赋值无需条件。选择信号赋值语句 语法结构: withwith 表达式表达式 selectselect目标信号目标信号=表达式表达式 1 1 wh

10、enwhen 选择条件选择条件 1 1,表达式表达式 2 2 whenwhen 选择条件选择条件 2 2,.表达式表达式 n n whenwhen 选择条件选择条件 n n; 该语句在赋值之前需要对条件进行判断,附和条件则赋值,否则继续判断,直 到最后一个语句。选择赋值语句需要把表达式的值在条件中都列举出来。元件例化语句 在 VHDL 中,引用元件或者模块的说明采用 component 语句,他的作用是在结构 体说明部分说明引用的元件或者模块,是元件说明语句。 语法格式: componentcomponent 引用的元件名引用的元件名genericgeneric 参数说明;参数说明;portp

11、ort 端口说明;端口说明; endend componetcomponet; 引用的元件名引用的元件名:是将一个设计现成的实体定义为一个元件,是已经设计好的实体名,用来制定 要在结构体中使用的元件名称 如果结构体中要进行参数的传递,那么 component 语句中需要类属参数说明- 可选项; 引用元件端口的说明,是已经设计好的实体端口名表; 元件说明语句在 architecture 和 begin 之间。元件例化引用 采用 componet 语句对要引用的原件进行说明后,为了引用的元件正确地嵌入到 高一层的结构体描述中,就必须把被引用的元件端口信号于结构体中相应端口 信号正确地连接起来,这就

12、是元件例化语句要实现的功能。 语法结构: 标号名:元件名标号名:元件名genericgeneric mapmap(参数映射)(参数映射)protprot mapmap(端口映射);(端口映射); 其中标号:是元件例化语句的惟一标识,结构体中的标号名应该是惟一的 generic map 语句:它的功能是实现对参数的赋值操作,从而可以灵活地改变 引用元件的参数,为可选项 prot map:它的功能是把引用元件的端口信号与实际连接的信号对应起来,从 而进行元件的引用操作。 VHDL 中,为了实现引用元件的端口信号与结构体中的实际信号相连接,往往采 用两种映射方法: 1、位置映射方法:指 port m

13、ap 语句中实际信号的书写顺序于 componet 语句中 端口说明的信号书写语句顺序一致 2、名称映射方法:指在 port map 中将引用的元件的端口信号名称赋值给结构 体中要使用例化元件的各个信号 (名称映射语句的书写要求不是十分严格,只要把映射的对应信号连接起来就 可以,顺序可以颠倒)。生成语句生成语句 规则结构 某些电路部分是由同类元件组成的阵列,这些同类元件叫规则结构,例如:随 机 RAM、只读 ROM、移位寄存器等规则结构一般用生成语句来描述。 生成语句有两种形式:for_generate 和 if_generate for_generate 主要用来描述规则 if_genera

14、te 主要用来描述结构在其端部表现出的不规则性,例如边界条件的 特殊性 for_generate 语句 标号:标号:forfor 循环变量循环变量 inin 离散范围离散范围 generategenerate并行处理语句;并行处理语句;endend generategenerate 标号;标号; 标号:用来作为 for_generate 语句的唯一标识符,可选项; 循环变量:它的值在每次循环中都将发生变化; 离散范围:用来指定循环变量的取值范围,循环变量的取值将从取值范围最左 边的值开始并且递增到取值范围的最右边,实际上限定了循环次数 for_generate 与 for_loop 语句很类似

15、,但二者有区别。for_loop 语句的循环 体中的处理语句是顺序的,而 for_generate 语句中处理的语句是并行处理的, 具有并发性。if_generateif_generate 语句语句 标号:标号:ifif 条件条件 generategenerate并行处理语句;并行处理语句; endend generategenerate 标号;标号; if_generate 语句是并行处理语句,其中不允许出现 else 子语句浅析硬件描述语言浅析硬件描述语言 VHDLVHDL 中的进程语句中的进程语句作者简介:郭海青(19545-),甘肃酒泉人,副教授,主要从事电子测量技术 和电子设计自动化

16、(EDA)的教学和研究。VHDL 语言作为 IEEE 工业标准,在电子工程设计领域已成为通用的硬件描述 语言 。它主要用于描述数字系统的结构、行为、功能和接口,几乎可承担起全 部的数字系统设计任务。在 VHDL 语言中,进程(PROCESS)语句是最具特色 的语句。它本身是一种并行语句并行语句,但它提供了一种用算法(顺序语句顺序语句)描述硬 件行为的方法。综合后的进程语句所对应的硬件逻辑模块,其工作方式可以是 组合逻辑,也可以是时序逻辑,因此得到广泛的应用。本文中,笔者总结了 VHDL 教学和实际设计的经验,较为详细地讨论了进程 语句的特点,尤其对 PROCESS 结构中的顺序语句顺序语句,所具有明显的顺序/并行运行 的双重性,从计算机的软件行为仿真的模拟过程而言的顺序性和 实现的硬件的并行性进行了说明。通过实例以及分析,提出了正确应用的要点。 希望对学习 VHDL 的读者有所帮助,并愿与同行切磋。 1.进程(PROCE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号