在前面介绍层次化结构模型时,我们已经看到,一个电路有唯一的主模块,主模块由若干子模块和若干进程组成,每个子模块又由若干子模块和若干进程组成。在最底层的模块中,则全由进程组成。子模块和进程都以并行语句的形式出现。对一个模块进行模拟的过程就是对其中的各并行语句依次进行处理。对进程的处理按前面讲的事件表驱动法进行。在遇到模块调用时,首先按照调用路径找到该模块中的各信号在全局信号中的映射关系;其次根据模块表中的端口关联关系将调用模块中的实际信号传送给模块的输入端口;然后用递归方法处理子模块中的各并行语句。子模块的模拟结束后,再把输出端口的新事件传出到实际信号。 元件模块的运行过程如下: 运行元件模块( ) { 找到当前运行路径下所用的与路径有关的内部数据; if ( 为继续模拟 ) //继续模拟是在正常结束或中断结束是再接着模拟时出现 { 恢复状态; 取当前并行语句; } //从保存的并行语句处开始 else 当前并行语句 = 第一条并行语句; //从开头模拟的情况 while (当前并行语句 != NULL) //按并行语句一句一句执行 { switch (语句类型) //并行语句分例化调用语句、进程语句、生成语句三类 { case 例化调用语句: //层次式结构 对IN,INOUT等模式的端口把值传入; 运行元件模块(); //递归执行本算法程序 把OUT,INOUT等模式的端口的最近时刻的信号事件传出; break; case 进程: //包括等价与进程语句的简单并行语句 处理进程(); //执行前面介绍的处理进程算法程序。 break; case 生成语句: //生成语句特殊处理,此处从略。 执行生成语句模拟; break; } 取下一条并行语句; 当前并行语句 = 下一条并行语句; } return( NORMAL ); }
|