GSL的拓扑模型是线和节点连接的模型,值的传播,即是值在线和节点之间传播和转化的过程。
 
值的传播有两种方式:
  1. 深度优先;
  1. 广度优先;
 
如果值不变,则终止传播。这样可以破除触发器那样带环的拓扑结构导致的死循环。
 
一. 深度优先
 
优先传递给Port的downstream Port,如果downstream Port有下一级的Port,则优先传递给下一级的Port。
 
拓扑结构没有环时,可以使用这种传播方式。有环比如锁存器时则可能会导致锁存的值是错误的值;
 
对应到代码中的方法,如下:
  1. wireA.propagate(): 将wireA的值以深度优先的方法传播下去,直至结束。
  1. PropagateManager.propagate():把加入到propagate manager中的wires等propagatables的值以深度优先的方式传递下去;(需要先使用PropagateManage.add(wireA, wireB...)方法把需要传播的propagatables加进来)
 
二. 广度优先
 
有的结构比如锁存器对时间的有要求:只锁存某个时间窗口到来的值。所以为了使锁存器能够锁存到正确的值,提供了广度优先的传播方式。
 
广度优先方式,优先把Port所有的downstream ports都传播到,然后在进行下一步传播,即把所有downstream ports的downstream ports传播到。
 
对应到代码中的方法,如下:
  1. PropagateManager.propagateParallel(): 每个Port每次只传播一步,即只传播给Port的所有下级Port,而把下级Port加入到PropagateManager等待下一步传播。(需要先使用PropagateManage.add(wireA, wireB...)方法把需要传播的propagatables加进来)
  1. PropagateManager.propagateParallel(wireA, wireB, ...): 同1,区别在于,直接传播wireA, wireB等的值,不需要用PropagateManage.add()了。
 
三. 值不变终止传播
 
如果值不变,则终止传播。这样可以破除触发器那样带环的拓扑结构导致的死循环。
 
四. 线的传播
 
 
Wire本身为Propagatable, 需要也可以定义自身的传播逻辑。
当前的实现逻辑时直接把Input port的值,赋值给Output port。
 
五. 节点的传播
 
节点为Propagatable, 可以定义自身的传播逻辑。
 
如果节点为原子节点,则需要继承AtomicNode类覆盖atomic()方法,实现Input值到Output值的转换逻辑,比如与门、或门、非门等。
 
如果节点为复合节点,则可以直接使用Node类实现的传播方法:
1. 节点Input的值由上级Wire的Output确定,然后直接赋值给下级Wire的Input。
2. 节点Output的值,直接由上级Wire Output的值确定,然后传递给下级Wire的Input。
即复合节点的Input和Output接口直接传值,不做变化。
 
六. 举例:Mux
 
 
运行输出如下:
 
PS. 第一步因为sel没有赋值,初始值为x,所以算出来out的值为x。
 
 

jchdl - GSL值的传播的更多相关文章

  1. jchdl - GSL Port

    https://mp.weixin.qq.com/s/DVmMrCFgNLuZDtssQ85w7A   org.jchdl.model.gsl.core.meta.Port.java   ​​ gen ...

  2. jchdl - GSL实例 - DFlipFlop(D触发器)

    https://mp.weixin.qq.com/s/7N3avTxTd2ZUnAcKg4w3Ig   D触发器对边沿敏感,只有当相应的边沿出现时,才会触发D的值传播到输出Q.   ​​ 引自:htt ...

  3. jchdl - GSL Node

    https://mp.weixin.qq.com/s/Oa4qgjIUccu5Y-Jlqcyn_A   org.jchdl.model.gsl.core.meta.Node.java   ​​ gen ...

  4. jchdl - GSL Wire

    https://mp.weixin.qq.com/s/4w_wwwCd6iBhh0QR2wK81Q   org.jchdl.model.gsl.core.datatype.net.Wire.java ...

  5. jchdl - GSL实例 - Mux4(使用Mux)

    https://mp.weixin.qq.com/s/GrYJ4KXEFRoLLmLnAGoMSA 原理图 ​​ 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...

  6. jchdl - GSL实例 - Mux4(使用WireVec简化输入线声明)

    https://mp.weixin.qq.com/s/yJx_dV6ScUStJtPWVuD38w 原理图 ​​ 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...

  7. jchdl - GSL实例 - Mux4

    https://mp.weixin.qq.com/s/hh0eExVFC6cxzpvNI1cA9A 使用门实现四选一选择器. 原理图 ​​ 参考链接 https://github.com/wjcdx/ ...

  8. jchdl - GSL实例 - Div

    因为对除法研究不深,这里略去不表.   有兴趣可以参考链接: https://github.com/wjcdx/jchdl/blob/master/src/org/jchdl/model/gsl/op ...

  9. jchdl - GSL实例 - MulC2(有符号数的乘法)

      这里的实现,先把符号位取出来,使用两个正数相乘,然后在把符号加到乘积上.   参考链接 https://github.com/wjcdx/jchdl/blob/master/src/org/jch ...

随机推荐

  1. 戴尔服务器ipmi报错

    戴尔服务器ipmi配置完成,用浏览器打开报错 查看器已终止,网络已中断 原因:这个问题是java报错,用火狐打开报错 解决方法: 用IE打开就没问题,IE要用较高版本的,楼主的是win10-IE11

  2. CSS 块元素、内联元素、内联块元素三者的区别与转换

    三种元素 块元素 内联元素 内联块元素 元素之间的转换 三种元素 元素就是标签,布局中常用的有三种标签,块元素.内联元素.内联块元素. 了解这三种元素的特性,才能熟练的进行页面布局. 块元素 块元素, ...

  3. 王颖奇 20171010129《面向对象程序设计(java)》第十五周学习总结

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 学习总结: 理论部分: ◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start JAR文件: 1.Java程序的打 ...

  4. LeetCode--Squares of a Sorted Array && Robot Return to Origin (Easy)

    977. Squares of a Sorted Array (Easy)# Given an array of integers A sorted in non-decreasing order, ...

  5. 谈谈Spring中的BeanPostProcessor接口

    一.前言   这几天正在复习Spring的相关内容,在了解bean的生命周期的时候,发现其中涉及到一个特殊的接口--BeanPostProcessor接口.由于网上没有找到比较好的博客,所有最后花了好 ...

  6. PHP导出excel文件之权限字段筛选导出

    因为导出excel时要过滤掉不是自身权限内的数据,权限有专门的字段,所以导出的数据要具体考量,数据库权限字段是MMId,因为登录的时候MMId已存入SESSION,所以导出的时候只要判断是否在此SES ...

  7. Arrays.binarySearch的返回值

    如果查找的值包含在数组中,返回搜索的第一个值的下标: 如果查找的值不在数组中,返回(-插入点-1):插入点即为第一个大于此查找值的元素下标 插入点 为将该值插入数组的那一点:即第一个大于此键的元素下标 ...

  8. 使用IDEA远程向伪分布式搭建的Hadoop提交MapReduce作业

    环境 VirtualBox 6.1 IntelliJ IDEA 2020.1.1 Ubuntu-18.04.4-live-server-amd64 jdk-8u251-linux-x64 hadoop ...

  9. PHP对象基础

    class demo1 { public function test1(){ echo '这是一个公有方法,可以随意调用!' } protected function test2(){ $this-& ...

  10. vue打包 报错问题记录

    1.  assetsPublicPath: '/' 修改为 assetsPublicPath: './'   2. untils.js里面增加   publicPath: '../../'  重新运行 ...