• jchdl


     
    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()方法,实现从输入到输出值的转换。
     
  • 相关阅读:
    基础数据补充
    购物车
    小数据池、深浅拷贝和集合
    列表、元组和range
    小数据池、深浅拷贝和集合练习
    字典
    字符串练习
    列表练习
    练习
    字典练习
  • 原文地址:https://www.cnblogs.com/wjcdx/p/9616068.html
Copyright © 2020-2023  润新知