一个嵌入式系统的Petri网模型与CPLD实现
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
……其它库
ENTITY MainCtrl IS
PORTsysSTART: IN 数据类型
事件:IN数据类型
条件:OUT数据类型
END MainCtrl IS
构造体部分定义了设计单元的具体构造和操作(行为)。javascript:window.open(this.src);" style="cursor:pointer;"/>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器件对模型进行仿真和实现。