org.jchdl.model.gsl.core.meta.Node.java
 
generated by Intellij IDEA powered by yFiles
 
Node为所有节点的父类。所有用户创建的节点,必须继承Node类。Node为用户创建了节点提供了很多支持方法,但把logic()方法留给子类自行定义。
 
一. 类结构
 
 
主要属性:
  1. netI:连接在节点Input接口上的线;
  1. netO: 链接在节点Output接口上的线;
  1. ioI:节点的Input接口,与netI中的线一一对应;
  1. ioO:接口Output接口,与netO中的线一一对应;
 
主要方法:
  1. 收集连接在接口Input接口上的线的方法:
  1. in(Net): 添加一条输入线;
  1. in(Net[]):添加一组输入线;
  1. 收集连接在接口Output接口上的线的方法:
  1. out(Net): 添加一条输出线;
  1. out(Net[]):添加一组输出线;
  1. 获取节点Input接口的方法:
  1. in(int index): 获取第index个Input接口;
  1. inputs(): 获取所有的Input接口;
  1. inputs(int from):获取从from开始的所有接口;
  1. inputs(int from, int to):[from, to),获取从from(包含)到to(不包含)的所有接口;
 
  1. 获取节点Output接口的方法:
  1. out(int index): 获取第index个Output接口;
  1. outputs(): 获取所有的Output接口;
  1. outputs(int from):获取从from开始的所有接口;
  1. outputs(int from, int to):[from, to),获取从from(包含)到to(不包含)的所有接口;
 
  1. 节点内部逻辑构建方法:logic()
该方法为抽象方法,留给子类自行定义,即用户通过重新定义该方法,来实现节点的自定义逻辑。
 
  1. 节点构建方法:construct()
辅助方法,下面单讲。
 
  1. 转换为Verilog的方法:toVerilog()
把节点转换为Verilog的(门和开关层结构建模)实现。
 
二. 构建节点
 
当前构建节点的方法如下:
  1. 收集节点构造方法中提供的输入线和输出线;
  1. 调用construct()方法:
  1. 根据收集的输入线和输出线,分别创建足够数量的Input接口和Output接口与之对应;
  1. 调用用户自定义的logic()方法构建节点内部逻辑;
  1. 将输入线和输出线与节点的Input接口和Output接口一一连接;
如此即完成节点构建。
 
三. 用户自定义逻辑:logic()
 
用户自定义逻辑的方法是在子类中覆盖logic方法。logic方法主要做以下事情:
 
  1. 创建线或一组线从Input接口牵出。(创建线时即可自动将Input接口连接到新创建的线的Input接口上,从而驱动(driven)线)
  1. 创建线或一组线连接到Output接口。(创建线时即可自动把线的Output接口连接到节点的Output接口上)
  1. 创建内部子节点;(创建内部子节点时,即可自动把Input牵出作为子节点输入线的线,连接到子节点的Input接口上;并且自动把子节点的Output接口连接到子节点的输出线上)
 
另外,可以通过pullup/pulldown来处理临时需要的线;使用toGround()处理不再需要的线。
 
注意:logic内部使用的线,属于节点的一部分,最好是定义为节点类的属性。
 
四. 总结
 
可以看出,节点的构建其实就是连线:
  1. 把输入线连到Input接口上;
  1. 从Input接口牵出线连到内部子节点上;
  1. 从内部子节点牵出线连接到Output接口上;
  1. Output接口牵出线以供后续使用;(连接到下一个节点,或者接地,或者悬空供观察使用)
 
五. 实例Mux
 
Mux为二选一。
 
  1. 构造函数
构造函数的参数为输入线和输出线,使用in()和out()分别收集:
  1. 收集输入线 in1, in2, sel;
  1. 收集输出线out;
  1. 调用construct方法构建Mux节点;
 
  1. 内部逻辑
  1. 从输入口牵出线,比如:
in1 = new Wire(in(0))
其中,in(0)方法为Node类提供的辅助方法,获取第0个Input接口;
然后创建一条线,从这第0个Input接口牵出。
  1. 创建线连接到输出口,比如:
out = new Wire(out(0))
out(0)方法为Node类提供的辅助方法,获取第0个Output接口;
然后创建一条线,连接到这个输出口上;
  1. 创建子节点Not需要的输出线selNot;
  1. 创建字节点Not:sel作为输入线,selNot作为输出线;
  1. 同理,逐个创建子节点:两个与门,一个或门;
 
  1. 节点内部的线
 
节点内部使用的线,推荐作为节点属性声明:
 
  1. 创建Mux节点
 
PS. inst静态方法可以省略new关键字,使代码更紧凑。
 
六. 原子节点(AtomicNode)
 
原子节点是节点的子类。覆盖了logic方法,但实现为空。
 
该类定义了抽象方法atomic()供子类覆盖,以实现从输入到输出的转化逻辑。最简单的比如非门:
 
atomic()方法调用not()方法,实现从输入到输出值的转换。
 

jchdl - GSL Node的更多相关文章

  1. jchdl - GSL Port

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

  2. jchdl - GSL实例 - Add

    https://mp.weixin.qq.com/s/6xcYYdYZTBPTf25xFluzBQ   使用FullAdder级联实现加法器   参考链接: https://github.com/wj ...

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

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

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

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

  5. jchdl - GSL值的传播

    https://mp.weixin.qq.com/s/jgMljoca-Cwe9x0NaTLzZg   GSL的拓扑模型是线和节点连接的模型,值的传播,即是值在线和节点之间传播和转化的过程.   值的 ...

  6. jchdl - GSL Wire

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

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

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

  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. php报错:strip_tags() expects parameter 1 to be string, array given

    囧....... 这个表示参数需要字符串,而你传入了数组,所以出错了~ 检查下函数或者方法是否正确,还有参数

  2. LTE无线网络优化简介

    LTE无线网络优化特点 覆盖和质量的估计参数不同 TD-LTE使用RSPP.RSRQ.SINR进行覆盖和质量的评估. 影响覆盖问题的因素不同 工作频段的不同,导致覆盖范围的差异显著:需要考虑天线模式对 ...

  3. Mybatis-入门演示

    MyBatis:持久层框架 前言 之前有看过和学习一些mybatis的文章和内容,但是没有去写过文章记录下,现在借鉴b站的狂神视频和官方文档看来重新撸一遍入门.有错误请多指教. 内容 数据访问层-相当 ...

  4. Web快速输入标签

    在书写web代码的时候,掌握一些快捷输入方式不仅可以提高效率,还能省不少力气. 1. > :下一个子标签,如 div>p 加Tab达到: <div><p></ ...

  5. A~Z;26个字母美式

    26个字母美式读法 音频下载地址: 链接:https://pan.baidu.com/s/1KOlxNCydgtsODQZMT9JFJg 提取码:8a9g

  6. 使用react的一点提醒17/10/26

    1.不直接操作dom 今天在和同学讨论的时候,发现了一些以前没注意的问题. 这段时间自己学习时一直都是用原生js写代码,但是以前在公司经常使用jq,也不知不觉间让我习惯了操作dom的倾向. 使用vue ...

  7. gRPC负载均衡(自定义负载均衡策略)

    前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了pick_first和round_robin两种负载均衡策略,轮询法round_robin不能满足因服务器配置不同而承担不同负载量,这篇 ...

  8. jQuery的插件和跨域、ajax

    1. 插件: 也称组件 什么是: 拥有专属的HTML,CSS和js的独立页面区域 为什么: 重用! 何时: 只要一个功能/区域可能被反复使用时 如何: 3个来源: 1. 官方插件:jquery ui ...

  9. Django之urls.py路由配置(URLConf)

    urls.py路由配置(URLConf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 基本格式: Django1.x版本 ...

  10. python3.x 基础三:字符集问题

    总结了一张表,更详细信息百度百科: 序号 年份 编码 标准协会 特点 二进制长度 字符长度 表现 1 1967 ASCII 美国国家标准学会(American National Standard In ...