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. Spring Cloud学习 之 Spring Cloud Ribbon(负载均衡策略)

    文章目录 AbstractLoadBalancerRule: RandomRule: RoundRobinRule: RetryRule: WeightedResponseTimeRule: 定时任务 ...

  2. Day_08【面向对象】扩展案例2_测试旧手机新手机类,并给新手机实现玩游戏功能

    分析以下需求,并用代码实现 1.定义手机类 行为: 打电话,发短信 2.定义接口IPlay 行为: 玩游戏 3.定义旧手机类继承手机类 行为: 继承父类的行为 4.定义新手机继承手机类实现IPlay接 ...

  3. Git使用教程之从远程库克隆项目(四)

    我们接下来在本地新建一个文件夹,把刚刚github上创建的项目克隆下来,操作步骤如下: 1.克隆项目: 找到github上面的SSH地址,如图: 开始克隆: $ git clone git@githu ...

  4. jmeter录制rabbitmq消息-性能测试

     一.目的 为了测试系统的稳定性,在UAT环境下,通一段时间内不间断发送MQ消息来验证系统是否会出现异常. 二.测试工具 使用测试工具:jmeter5.2.1,火狐浏览器71.0,RabbitMQ管理 ...

  5. C# 数据操作系列 - 4. 自己实现一个ORM

    0. 前言 在之前的几篇内容中,我们了解了如何通过ADO.NET 访问数据库,如何修改.新增数据.如何通过DataSet和DataAdapter获取数据,我们将在这一篇试试自己实现一个简单的ORM框架 ...

  6. 设计模式之GOF23访问者模式

    访问者模式Visitor 模式动机:对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同访问者的访问方式也不同 定义 ...

  7. [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)

    题意:给n个数字串,求它们的所有不包含前导0的不同子串的值之和 思路:把数字串拼接在一起,构造SAM,然后以每个状态的长度len作为特征值从小到大排序,从前往后处理每个状态,相当于按拓扑序在图上合并计 ...

  8. [hdu5445 Food Problem]多重背包

    题意:一堆食物,有价值.空间.数量三种属性,一些卡车,有空间,价格,数量三种属性.求最少的钱(不超过50000)买卡车装下价值大于等于给定价值的食物,食物可以拆开来放. 思路:这题的关键是给定的条件: ...

  9. Mysql 常用函数(23)- sign 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html sign 的作用 返回参数的符号 sign 的语法 ...

  10. 一、线程 & 线程池

    一.线程的介绍 1.1.概念 进程: 你的硬盘上有一个简单的程序,这个程序叫QQ.exe,这是一个程序,这个程序是一个静态的概念,它被扔在硬盘上也没人理他,但是当你双击它,弹出一个界面输入账号密码登录 ...