コード例 #1
0
ファイル: TritMatchCircuit4.cs プロジェクト: bmdevx/Ternary
        public TritMatchCircuit4(Trit t0, Trit t1, Trit t2, Trit t3)
        {
            egatea = new EqualityGate(inputStateB: t0)
            {
                ComponentName = nameof(egatea)
            };
            egateb = new EqualityGate(inputStateB: t1)
            {
                ComponentName = nameof(egateb)
            };
            egatec = new EqualityGate(inputStateB: t2)
            {
                ComponentName = nameof(egatec)
            };
            egated = new EqualityGate(inputStateB: t3)
            {
                ComponentName = nameof(egated)
            };

            cgate1 = new ConsensusGate(egatea, egateb)
            {
                ComponentName = nameof(cgate1)
            };
            cgate2 = new ConsensusGate(egatec, egated)
            {
                ComponentName = nameof(cgate2)
            };

            cgate3 = new ConsensusGate(cgate1, cgate2)
            {
                ComponentName = nameof(cgate3)
            };

            deMuxer = new DeMuxer(inputState: Trit.Pos);

            cgate3.Output += deMuxer.InputSelect;

            shiftDownGate = new ShiftDownGate();

            deMuxer.AOutput += shiftDownGate.Input;
            deMuxer.BOutput += shiftDownGate.Input;

            shiftDownGate.Output += (s, t) => Output?.Invoke(this, t);
            deMuxer.COutput      += (s, t) => Output?.Invoke(this, t);
        }
コード例 #2
0
        public TritMatchCircuit(Trit i0, Trit i1)
        {
            egatea = new EqualityGate(inputStateB: i0);
            egateb = new EqualityGate(inputStateB: i1);

            cgate1 = new ConsensusGate(egatea, egateb);

            deMuxer = new DeMuxer(inputState: Trit.Pos);

            cgate1.Output += deMuxer.InputSelect;

            shiftDownGate = new ShiftDownGate();

            deMuxer.AOutput += shiftDownGate.Input;
            deMuxer.BOutput += shiftDownGate.Input;

            shiftDownGate.Output += (s, t) => Output?.Invoke(this, t);
            deMuxer.COutput      += (s, t) => Output?.Invoke(this, t);
        }
コード例 #3
0
ファイル: MatchGate.cs プロジェクト: bmdevx/Ternary
        public MatchGate(Trit i0, Trit i1, Trit t2)
        {
            egatea = new EqualityGate(inputStateB: i0);
            egateb = new EqualityGate(inputStateB: i1);
            egatec = new EqualityGate(inputStateB: t2);

            ecomp1 = new EqualityGate(egatec, null, inputStateB: Trit.Pos);

            cgate1 = new ConsensusGate(egatea, egateb);
            cgate2 = new ConsensusGate(cgate1, ecomp1);

            deMuxer = new DeMuxer(inputState: Trit.Pos);

            cgate2.Output += deMuxer.InputSelect;

            shiftDownGate = new ShiftDownGate();

            deMuxer.AOutput += shiftDownGate.Input;
            deMuxer.BOutput += shiftDownGate.Input;

            shiftDownGate.Output += (s, t) => Output?.Invoke(this, t);
            deMuxer.COutput      += (s, t) => Output?.Invoke(this, t);
        }
コード例 #4
0
ファイル: TrortALUExp.cs プロジェクト: bmdevx/Ternary
        public TrortALUExp()
        {
            #region old
            inverterBusA.BusOutput += muxerBusA.BInput;
            inverterBusB.BusOutput += muxerBusB.BInput;

            maxGateA.Output += muxerBusA.InputSelect;
            maxGateB.Output += muxerBusB.InputSelect;

            shiftDownGateA.Output += maxGateA.BInput;
            shiftDownGateB.Output += maxGateA.BInput;

            muxerBusA.BusOutput += adder.ABusInput;
            muxerBusA.BusOutput += maxBus.ABusInput;
            muxerBusA.BusOutput += minBus.ABusInput;

            muxerBusB.BusOutput += adder.BBusInput;
            muxerBusB.BusOutput += maxBus.BBusInput;
            muxerBusB.BusOutput += minBus.BBusInput;

            adder.CarryOut += InvokeOverflowOutput;

            minBus.BusOutput += muxerBus2.AInput;
            adder.BusOutput  += muxerBus2.BInput;
            maxBus.BusOutput += muxerBus2.CInput;

            muxerBus2.BusOutput += muxerBusF.AInput;
            muxerBus2.BusOutput += muxerBusF.BInput;
            muxerBus2.BusOutput += inverterBusOutput.BusInput;

            inverterBusOutput.BusOutput += muxerBusF.CInput;

            for (int i = 0; i < muxers.Length - 1; i++)
            {
                muxers[i].Output += muxers[i + 1].BInput;
            }

            muxers[4].Output += InvokeSignedOutput;

            muxerBusF.BusOutput += (s, trort) =>
            {
                for (int i = 0; i < muxers.Length; i++)
                {
                    muxers[i].InputSelect(s, trort[i + 1]);
                }

                muxers[0].BInput(s, trort[0]);

                InvokeOutput(s, trort);
            };
            #endregion


            dmA  = new DeMuxer(Trit.Neu, Trit.Pos);
            dmB  = new DeMuxer(Trit.Neu, Trit.Pos);
            dmOp = new DeMuxer(Trit.Neu, Trit.Pos);
            dm3  = new DeMuxer(Trit.Neu, Trit.Pos);
            dm4  = new DeMuxer(Trit.Neu, Trit.Pos);
            dm5  = new DeMuxer(Trit.Neu, Trit.Pos);



#if DEBUG
            ComponentTools.SetComponentNames(this);
#endif
        }