进程(PROCESS)语句是最具VHDL特色的语句。进程用于描述顺序事件,由顺序语句组成,但其本身却是并行语句,正是由于它的并行行为和顺序行为的双重特性,所以使它成为VHDL程序中使用最频繁和最能体现VHDL风格的一种语句。一个结构体中可以有多个并行运行的进程结构,而每一个进程的内部结构却是由一系列顺序语句来构成的。
进程语句与结构体中的其他部分进行信息交流是靠信号完成的。进程语句有一个敏感信号表,这是进程赖以启动的敏感表。表中列出的任何信号的改变,都将启动进程,并执行进程内相应的顺序语句。
1.PROCESS语句格式
PROCESS语句的表达格式如下:
顺序描述程序;
每一个PROCESS语句可以赋予一个进程标号,但这个标号不是必需的。进程说明部分用于定义该进程所需的局部数据环境,包括数据类型、常量、变量、属性、子程序等,但不能定义信号和共享变量。
顺序描述语句部分是一段顺序执行的语句,描述该进程的行为。PROCESS中规定了每个进程语句在它的某个敏感信号(由敏感信号参量表列出)的值改变时都必须立即完成某一功能行为。这一行为由进程顺序语句定义,行为的结果可以赋给信号,并通过信号被其他的PROCESS或BLOCK读取或赋值。当进程中定义的任一敏感信号发生更新时,由顺序语句定义的行为就要重复执行一次,当进程中最后一个语句执行完成后,执行过程将返回到第一个语句,以等待下一次敏感信号变化。
一个结构体中可含有多个PROCESS结构,每一PROCESS结构对于其敏感信号参数表中定义的任一敏感参量的变化,每个进程可以在任何时刻被激活或者称为启动。而所有被激活的进程都是并行运行的,这就是为什么PROCESS结构本身是并行语句的道理。
PROCESS语句必须以语句“ENDPROCESS[进程标号];”结尾,其中,进程标号不是必需的,敏感表旁的[IS]也不是必需的。
2.PROCESS组成
PROCESS语句结构是由3个部分组成的,即进程说明部分、顺序描述语句部分和敏感信号参数表。
1)进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。
2)顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。各个顺序语句在PROCESS中的特点如下:
①信号赋值语句:在进程中将计算或处理的结果向信号(SIGNAL)赋值。
②变量赋值语句:在进程中以变量(VARIABLE)的形式存储计算的中间值。
③进程启动语句:当PROCESS的敏感信号参数表中没有列出任何敏感量时,进程的启动只能通过WAIT语句。这时可以利用WAIT语句监视信号的变化情况,以便决定是否启动进程。WAIT语句可以看成是一种隐式的敏感信号表。
④子程序调用语句:对已定义的过程和函数进行调用,并参与计算。
⑤顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句等。
⑥进程跳出语句:包括NEXT语句和EXIT语句。(www.xing528.com)
3)敏感信号参数表需列出用于启动本进程可读入的信号名(当有WAIT语句时例外)。
例4.22 是一个含有进程的结构体,进程标号为P1,进程敏感信号参数表中未列出敏感信号,所以,进程的启动靠WAIT语句,在此clock即为该进程的敏感信号。每当出现一个时钟脉冲clock时,即进入WAIT语句以下的顺序语句执行进程中,且当driver为高电平时
进入CASE语句结构。
例4.22
例4.23是一个3位二进制加法计数器结构体内的逻辑描述,该结构体中的进程含有IF语句,进程定义了3个敏感信号clk、clc、en。当其中任何一个信号改变时,都将启动进程的运行。信号cnt3被综合器用寄存器来实现。
该计数器除了有时钟信号clk外,还设置了计数清0信号clc和计数使能信号en,进程将它们都列为敏感信号。
例4.23
3.进程设计要点
进程的设计需要注意以下几方面的问题:
1)在进程中只能设置顺序语句,虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的,因而进程的顺序语句具有明显的顺序/并行运行双重性。
2)进程的激活必须由敏感信号表中定义的任一敏感信号的变化来启动,否则必须有一个显式的WAIT语句来激活。这就是说,进程既可以由敏感信号的变化来启动,也可以由满足条件WAIT语句来激活;反之,在遇到不满足条件的WAIT语句后,进程将被挂起。因此,进程中必须定义显式或隐式的敏感信号。如果一个进程对一个信号集合总是敏感的,那么可以使用敏感表来指定进程的敏感信号。但是,在一个使用了敏感表的进程(或者由该进程所调用的子程序)中不能含有任何等待语句。
3)信号是多个进程间的通信线。结构体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过传递信号和共享变量值来实现的。所以,相对于结构体来说,信号具有全局特性,它是进程间进行并行联系的重要途径。因此,在任一进程的进程说明部分不允许定义信号(共享变量是VHDL′93增加的内容)。
4)进程是重要的建模工具。进程结构不但为综合器所支持,而且进程的建模方式将直接影响仿真和综合结果。需要注意的是综合后对应于进程的硬件结构,对进程中的所有可读入信号都是敏感的,而在VHDL行为仿真中并非如此,除非将所有的读入信号列为敏感信号。
进程语句是VHDL程序中使用最频繁和最能体现VHDL特点的一种语句,其原因大概是由于它的并行和顺序行为的双重性,以及其行为描述风格的特殊性。为了使VHDL的软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输入信号都列入敏感表中。不难发现,在对应的硬件系统中,一个进程和一个并行赋值语句确实有十分相似的对应关系,并行赋值语句就相当于一个将所有输入信号隐性的列入结构体检测范围的(即敏感表的)进程语句。
综合后的进程语句所对应的硬件逻辑模块,其工作方式可以是组合逻辑方式的,也可以是时序逻辑方式的。例如,在一个进程中,一般的IF语句,综合出的多为组合逻辑电路(一定条件下);若出现WAIT语句,在一定条件下,综合器将引入时序元件,如触发器。
例4.24
本例中的程序用3个进程语句描述了3个并列的三态缓冲器电路,这个电路由3个完全相同的三态缓冲器构成,且输出是连接在一起的。这是一种总线结构,它的功能是可以在同一条线上的不同时刻内传输不同的信息。这是一个多驱动信号的实例,有许多实际的应用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。