Petri网是异步并发系统,没有人为的控制流,直观地表示了非确定性;且可以图形化的方式描述复杂的系统,并可运用数学工具进行分析。因此,其在软件系统的建模与仿真中得到广泛应用。Petri网自身具备的可运行性方便了系统形式化描述级的模拟,可以用于表达不同抽象级上的系统概念并清楚地描述整个系统的运作过程。笔者发现Petri网的应用目前仅局限于软件系统的设计,例如网络协议、物流管理等,而在硬件系统中却很少涉足。硬件系统随着功能的日益增强,其功能描述也越来越复杂。基于硬件系统描述的VHDL语言以其强大的硬件描述能力,已被广大科研工作者所采用。VHDL语言也适用于描述异步并发系统,因此可与Petri网建立的模型联系起来。
本文采用自顶向下与层次分析相结合的设计方法用Petri网的一个子类C/E系统(条件/事件系统)对视频输入卡的逻辑控制器建立模型。针对控制器C/E模型中关心和需要观察的变量,确定VHDL描述的实体和端口,由C/E系统网的拓扑结构确定条件和事件间的逻辑关系,构造VHDL语言中的结构体。采用EDA开发工具MAX+PLUS II进行代码设计,逻辑综合,并对设计进行仿真,最后下载到CPLD,验证了逻辑控制器设计的正确性。
图1 视频输入卡结构框图
1 应用背景及控制器功能要求
图1为某一视频输入卡结构框图。前端视频信号经过解码、缓冲后,将数据送入DSP处理。其中由逻辑控制器协调各部分之间的运作。从图1中可以看出,逻辑控制器与视频切换、视频解码、视频数据缓存以及DSP等部分存在联系,归纳起来需要完成五个基本功能:视频通道切换控制;插入行标志信息;FIFO的初始化操作;写FIFO;读FIFO。
要完成上述五个基本功能,必须保证每个功能与另一功能之间不存在冲突,但允许存在并发行为,同时它们之间的逻辑顺序应保持一致。因此需要一个主控模块协调各部分的操作。各功能部分之间的逻辑关系比较复杂,涉及到图像数据的行同步以及场同步等问题,一旦出错,则接收的就不是有效的图像数据,后续工作也不能正常进行。为此,首先建立Petri网模型,并运用数学工具进行分析,最后采用VHDL语言实现。
2 控制器Petri网模型
应用Petri网的一个子类C/E建立视频输入卡的逻辑控制器模型。控制器实现的五大功能,在满足各自条件的情况下,能够正确地完成相关操作。如果将每个功能展开进行Petri网模型设计,将会使整个C/E系统的节点过多。节点一多,则不易分析其性质和计算它的可达树、不变量等参数。Petri网特有的直观易懂、适于交流的图形表示也就失去了意义。采用层次分析的方法,首先在顶层根据各功能要求建立一个Petri网模型,然后在各个模块内部建立更详细的子模型。鉴于顶层和底层的分析方法类似,只将顶层模型展开讨论。网络的一些动态特性,如库所与变迁的含义如表1所示。
逻辑控制器顶层Petri网模型如图2所示。该模型是一个基本网系统,其状态元素称为条件,变迁元素称为事件。事件的发生改变条件的状态(成真与否),引起信息在网上的流动1。由条件和事件组成的有向网通常表现为三元组(B,E;F),其中B为条件集,E为事件集。同时该模型还满足如下条件:
·(B,E;F)为简单网;
·B中每个条件都有机会成真,也有机会成假;
·E中每个事件都有机会发生;
·由初始情态ci导出的可达情态集是完全可到达关系R下的等价类。
因此,该模型还是一个C/E系统。在Petri网仿真软件Visual Object Net++中进行仿真测试,结果表明该模型能很好地描述控制器各部分之间的逻辑关系。
3 VHDL程序的基本单元设计
CPLD(复杂可编程逻辑器件)是处于并行工作方式的基本电路单元构成的高速、大规模集成器件,可作为一种并发系统模型与Petri网建立联系。VHDL作为一种硬件描述语言,支持行为描述、数据流描述和结构化描述等多种描述方法,可以用并行和顺序多种语句方式描述实际的系统,并可采用VHDL的并行语句描述C/E系统中条件/事件间的并发关系,用VHDL的顺序语句描述条件/事件间的顺序约束机制,为解决C/E系统中的有效冲突提供了可行的方法。
VHDL语言程序设计的基本单元称为一个基本设计实体,其主要由实体说明(entity declaration)和构造体(architecture body)两部分构成。实体说明部分规定了设计单元的输入输出接口信号或引脚。根据该控制器的C/E系统中关心和需观察的变量选择系统的输入和输出信号,以确定基本设计单元的实体及其端口。在控制器的C/E系统模型中,因为事件驱动条件是变化的,所以将发生的事件作为设计实体的输入信号,系统条件作为实体的输出信号。同时,为实体设计一个输入端口sysSTART,使系统上电复位。当sysSTART触发时赋予系统初始标识,系统资源(Token)流动使能。下面是具体的VHDL实体描述。
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
……其它库
ENTITY MainCtrl IS
PORTsysSTART: IN 数据类型
事件:IN数据类型
条件:OUT数据类型
END MainCtrl IS
构造体部分定义了设计单元的具体构造和操作(行为)。C/E系统模型的拓扑结构直观地表达了条件和事件间的约束机制。这种约束机制映射为控制器内部各模块之间的逻辑关系。根据控制器C/E系统模型的特点,可采用多进程结构描述C/E系统。进程内部顺序执行,进程之间并发执行。多进程结构是并行执行进程的网络,多个进程并发执行。因此从C/E系统的拓扑结构,可将各进程映射为C/E系统的各库所状态,从而能够描述出各条件库所间的异步并发关系。各进程之间通过接口信号进行通信。接口信号是由新变化的参量引导进程产生的输出结果。设计进程的程序,使之产生的输出结果成为新的库所状态,从而影响变迁触发(fire)条件,以各进程的输出结果作为进程间的通信接口信号。具体描述如下:
ARCHITECTURE behav OF MainCtrl IS
BEGIN
进程Ri:PROCESS(事件集) i∈1,14
BEGIN
Pi<= 进程Ri的输出;
……
END PROCESS Ri
......
END behav
冲突是由系统资源的共享产生的,与并发是一对对偶的概念1。在实际的Petri网模型中可能存在冲突K=<Pi,T1T2……,M>,网系统自身并不提供解决冲突的方法。避免冲突的方法或措施有:
(1)由用户选择,有冲突的地方通常是需要作出选择和决策的地方。
(2)设置合适的触发规则:确定性产生规则,如优先级;不确定性产生规则,如发生概率。
(3)改变系统结构,即改写Petri网的关联矩阵,增加共享资源回收。
VHDL语言中的并行语句同样不能解决冲突问题。使用VHDL并行语句描述冲突时将导致资源的丢失。而使用VHDL语言中的顺序语句,如进程内部的语句,采用设定不同优先级的方法,可以解决Petri网中存在的冲突。本控制器C/E系统也存在冲突现象,如图3所示。
对每个库所Pi进程的变化(Token的有无),使用电平的高低来表征。事件发生与否,用脉冲出现与否表征。该C/E系统的结构体共有14个并行处理的进程。根据对控制器进行形式描述的思想,在进程内部采用下列结构:
进程Ri:PROCESS(事件参数表) i∈1,14
……
IF<条件表达式> THEN
<行为表达式>
END IF;
END PROCESS 进程Ri;
事件参数表(也称敏感量)中事件触发进程的执行过程是:在判断事件的<条件表达式>为真后,顺序执行其后的<行为表达式>,由新变化的参量引导进程产生输出结果;执行完进程语句后,返回进程的事件参数,等待事件集新的变化,引发进程的再一次进行,往复循环。
图4 顶层模块时序仿真
4 基于VHDL的仿真与CPLD实现
VHDL语言设计技术齐全,方法灵活,支持广泛,对系统硬件描述能力强,具有多层次描述系统硬件的能力,可以从系统的数学模型直到门级电路。对控制器的Petri网模型进行VHDL程序设计后,利用综合器进行逻辑综合和优化,综合后再经仿真器进行时序仿真,得到涉及器件硬件特性的仿真结果,其结果正确。最后下载到Altera系列的EPM7128STC-6芯片上,从而实现视频输入卡逻辑控制器设计。行为仿真结果的仿真波形如图4所示。
将Petri网与EDA技术结合,对视频输入卡逻辑控制器用Petri网的C/E系统建模,并使用VHDL对协议的C/E系统模型进行程序设计,最后由CPLD器件实现控制器模型,使之成为实际的逻辑控制电路。这为硬件电路的高层综合设计提供了一种方法,也为软件系统和硬件系统开辟了一条沟通的渠道。对于其它具有多因素、动态和并发特点的系统,同样可用Petri网建立模型,用CPLD器件对模型进行仿真和实现。