https://mp.weixin.qq.com/s/2_0yQYdHlSQzPw7vX7NuHA
因为建模方式的不同,RTL值的传播不同于GSL值的传播。
jchdl GSL模型的信息较多,知道Port的upstream Port和downstream Ports,也就是知道值的变化从哪里传过来,又要传到哪里去。所以GSL模型,使用推式传播(Push),即如果portA的值发生变化,则把变化事件推给portA的所有downstream ports。
jchdl RTL为了模型简洁,只保留了Block依赖的事件的信息,而事件被依赖的Block的信息,只能检查事件是否发生,而不能在事件发生之后推送给依赖该事件的Block。所以RTL模型,使用拉式传播(Pull),即检查模块及模块的子模块中各个Block所依赖的事件是否发生,如果发生执行Block对应的逻辑块。
值变化事件传播的步骤如下:
一. PropagateManager
使用PropagateManager提供的方法,来完成值的传播。
二. 举例:Mux
运行结果如下:
需要注意的是,传播一定要有值的变化事件发生,如果没有,则值仍为默认值。
三. Propagatable
具有传播能力的元素。
四. 事件