3.4 VHDL结构体的子结构
在一个设计的结构体中,有三种子结构:块(block)语句结构、进程(process)语句结构和子程序结构。
3.4.1 块语句结构
对于一个大规模的设计,传统的硬件电路设计通常包括一张总电路原理图和若干张子原理图。对于VHDL设计来说,一个设计的结构体对应于总电路原理图,那么块语句就对应着电路原理图中的子原理图。因此,不难看出,一个结构体可以由若干个块语句组成,每个块语句可以看成是结构体的子模块,块语句将若干并发语句组在一起,形成一个子模块。
1.块语句的结构
一个块语句的结构如下。
一个block语句结构,必须在关键词block前设置块标号。接口说明部分包含port、generic、port map、generic map等接口说明语句,对block接口的设置及外界信号的连接状况进行说明。与利用protel进行设计相比,这非常类似于原理图间的图示接口说明。
块说明部分可以定义以下内容。
定义USE语句、子程序语句、数据类型、子类型、常数、信号、元件。
块的类属说明和接口说明的作用范围受限于当前的block,所有这些在block内部的说明不能适用于外部环境,即对外部环境是不透明的,但对于嵌套内层的块是透明的。
block语句部分可包含结构体中的任何可并行结构。
2.卫式块语句
block语句有一种特殊的控制方式:在block语句中包含一个卫式表达式,当卫式表达式为真时,执行block语句;当卫式表达式为假时,不执行block语句。这种通过卫式表达式来对block中的驱动器进行使能的block语句称为卫式块语句。
通过卫式块语句可以描述一个D触发器,对于D触发器来说,只有当时钟clk有效时,输出端的值才会随着输入数据的变化而变化。
3.4.2 进程语句结构
在设计实体的结构中,所有的处理语句都是并行处理语句。所谓并行处理语句就是用来描述一组并发行为,与书写次序无关的语句;而进程语句则是一个顺序语句,它与书写次序有关,即严格按照书写次序来顺序执行。
进程语句的结构如下。
在进程语句结构中,进程语句部分所描述的各个语句都是按顺序执行的,它们与书写次序有关。在多个进程的结构体描述中,进程标号是区分各个进程的标志,但进程标号并不是必需的。一个结构体可以有多个PROCESS结构,每一个进程在其敏感信号参数表中定义的任意敏感参量发生变化时,都可以被激活或启动。而所有被激活的进程都是并行运行的,即PROCESS结构本身是并行语句。
一个进程有两种状态:等待状态和执行状态。当敏感信号表中的信号没有改变或者进程激励的条件不满足时,进程处于等待状态;当敏感信号表中的信号有改变或者进程激励的条件满足时,进程处于执行状态,顺序执行进程中的语句。
不难看出,进程语句的启动主要取决于敏感信号表中的信号发生变化或者进程激励的条件得到满足。进程启动后,从BEGIN到END PROCESS的语句将从上到下顺序执行一次,在最后一个语句执行完后,就返回进程语句的开始,等待下一次敏感信号表中的信号变化或者进程激励的条件满足。进程语句可以被看成一个无限循环的模拟周期间,进程的最后一个语句执行完后,就返回进程的第一个语句,等待下一次变化发生的语句。
下面举一个例子来具体说明进程语句是如何进行工作的。
该进程语句对信号d0、d1、d2、d3、s0及s1敏感,这些信号中只要有一个信号发生变化,就将启动该进程语句。进程启动后,每个语句按照书写顺序从上到下执行一遍,执行完所有的语句后,进程语句挂起,等待着敏感信号的下一次变化。
前面曾提到过进程语句之间是并行的,而进程语句内部的才是顺序语句。在VHDL中,一个设计实体可以有多个结构体,每个结构体中可以有多个进程语句,多个进程语句之间是并行关系。下面就是一个进程同步的例子。
同一个结构体中不仅可以有多个进程存在,而且同一个结构体中的多个进程之间可以一边进行通信,一边并行地同步执行。下述源代码描述了两个进程之间的通信,并通过时钟信号使两个进程并行地同步执行。
在VHDL中常用时钟信号来同步进程,其方法就是结构体中的几个进程共用同一个时钟进行激励,以启动进程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。