本文共 2395 字,大约阅读时间需要 7 分钟。
1.创建Add.java, 并生成构造方法和logic()方法 3. 在构造方法中搜集输入输出线并调用construct()方法 这里首先从input ports牵出线,并创建连接到output ports的线。其中,最后一个input port使用in(-1)取出。最后一个output port使用out(-1)取出。 cout作为一个游标,逐次指向每一级的进位线进行连接。最开始为cin,第一级之后代表这一级FullAdder的进位线...直到最后,代表最后一个进位线连接到Add节点的最后一个output port. module Add_8后面多出来一个8?这样就可以把不同位宽的Add模块区分开来。 原子节点需要覆盖primitive()方法,以返回原语的名称。比如与门,需要返回and: package org.jchdl.model.gsl.operator.arithmetic; import org.jchdl.model.gsl.core.datatype.helper.WireVec; import org.jchdl.model.gsl.core.datatype.net.Wire; import org.jchdl.model.gsl.core.meta.Node; import org.jchdl.model.gsl.core.value.Value; // treat operands as plain bits public class Add extends Node { public Add(WireVec sum, Wire cout, WireVec in1, WireVec in2, Wire cin) { in1 = new WireVec(inputs(0, nBits)); in2 = new WireVec(inputs(nBits, 2*nBits)); sum = new WireVec(outputs(0, nBits)); for (int i = 0; i < nBits; i++) { Wire coutNext = new Wire(); FullAdder.inst(sum.wire(i), coutNext, in1.wire(i), in2.wire(i), cout); public String getName() { return this.getClass().getSimpleName() + "_" + nBits; public static Add inst(WireVec sum, Wire cout, WireVec in1, WireVec in2, Wire cin) { return new Add(sum, cout, in1, in2, cin); public static void main(String args[]) { WireVec in1 = new WireVec(8); WireVec in2 = new WireVec(8); WireVec out = new WireVec(8); Add.inst(out, cout, in1, in2, cin); in1.assign(new Value[] { //0b0000_0010 Value.V0, Value.V1, Value.V0, Value.V0, Value.V0, Value.V0, Value.V0, Value.V0, in2.assign(new Value[] { // 0b1111_1111 Value.V1, Value.V1, Value.V1, Value.V1, Value.V1, Value.V1, Value.V1, Value.V1, System.out.println("c_sum: " + cout + "_" + out); Add.inst(out, cout, in1, in2, cin).toVerilog(); 转载于:https://www.cnblogs.com/wjcdx/p/9685962.html