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. C#并发编程之初识并行编程

    写在前面 之前微信公众号里有一位叫sara的朋友建议我写一下Parallel的相关内容,因为手中商城的重构工作量较大,一时之间无法抽出时间.近日,这套系统已有阶段性成果,所以准备写一下Parallel ...

  2. 【Swift】获取UILabel中点击的某个功能标签文字并作出响应动作

    1.需求 首先.针对UILabel中显示的多个功能标签,作出颜色标记提示. 其次.对关键字作出点击响应动作. 如图所示: 解决: 1.使用正则匹配到关键字 public static var hash ...

  3. Django 配置JWT认证方式

    1. 安装 rest_framework + djangorestframework_simplejwt 安装djangorestframework_simplejwt :pip install dj ...

  4. Java语言简介、基础组成、封装、继承、多态、抽象类、内部类、接口

    目录 Java简介 Java语言基础组成 面向对象 对象 封装 构造函数 this关键字 static(静态关键字) 主函数 静态什么时候用呢? 面向对象(数组工具对象建立) 设计模式 继承 成员变量 ...

  5. [whu1564]后缀数组

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1564 思路:先把串复制一遍,在末尾补个标记,后缀数组跑一下,扫一遍就ok了(过滤后缀在后半 ...

  6. vue render 中遇到的问题

    以后遇到问题会持续更新 1 render中   判断是否显示 2 render中  属性可以通过判断的形式显示

  7. Flutter RenderBox指南——绘制篇

    本文基于1.12.13+hotfix.8版本源码分析. 0.大纲 RenderBox的用法 通过RenderObjectWidget把RenderBox塞进界面 1.RenderBox 在flutte ...

  8. XCode Interface Builder开发——1

    XCode Interface Builder开发--1 创建Xcode项目 选择第二个选项 选择Single View App,点击Next 设置完后点击Next Xcode基本面板 导航面板 工具 ...

  9. 面试最后HR都要问一句"有没有什么问题要问我"?

    HR最想听到的问题是: 1.询问职位发展方面的问题: (1)比如:这个职位的未来的发展空间如何,公司是如何对员工进行绩效考评的...等等这类问题,可以让HR觉得你是一个有长远目标和规划的人. 2.询问 ...

  10. 05 返回静态文件的多线程web框架

    05 返回静态文件的多线程web框架 服务器server端python程序(多线程版): import socket from threading import Thread,currentThrea ...