@@ -1,4 +1,5 @@
using System.Collections.Generic ;
using System ;
using System.Collections.Generic ;
namespace UntitledLogicGame.Workspace.Gates
{
@@ -8,7 +9,8 @@ namespace UntitledLogicGame.Workspace.Gates
{
public override string [ ] Inputs { get ; } = new string [ ] { } ;
public override string [ ] Outputs { get ; } = new string [ ] { } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( 0 ) ;
}
#endregion
@@ -23,50 +25,32 @@ namespace UntitledLogicGame.Workspace.Gates
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false ) , new OutputState ( false ) } ,
{ new InputState ( true ) , new OutputState ( true ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( input [ 0 ] ) ;
}
internal class ANDGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false , false ) , new OutputState ( false ) } ,
{ new InputState ( false , true ) , new OutputState ( false ) } ,
{ new InputState ( true , false ) , new OutputState ( false ) } ,
{ new InputState ( true , true ) , new OutputState ( true ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( input [ 0 ] & & input [ 1 ] ) ;
}
internal class ORGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false , false ) , new OutputState ( false ) } ,
{ new InputState ( false , true ) , new OutputState ( true ) } ,
{ new InputState ( true , false ) , new OutputState ( true ) } ,
{ new InputState ( true , true ) , new OutputState ( true ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( input [ 0 ] | | input [ 1 ] ) ;
}
internal class XORGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false , false ) , new OutputState ( false ) } ,
{ new InputState ( false , true ) , new OutputState ( true ) } ,
{ new InputState ( true , false ) , new OutputState ( true ) } ,
{ new InputState ( true , true ) , new OutputState ( false ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( input [ 0 ] ^ input [ 1 ] ) ;
}
#endregion
@@ -77,67 +61,47 @@ namespace UntitledLogicGame.Workspace.Gates
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false ) , new OutputState ( true ) } ,
{ new InputState ( true ) , new OutputState ( false ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( ! input [ 0 ] ) ;
}
internal class NANDGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false , false ) , new OutputState ( true ) } ,
{ new InputState ( false , true ) , new OutputState ( true ) } ,
{ new InputState ( true , false ) , new OutputState ( true ) } ,
{ new InputState ( true , true ) , new OutputState ( false ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( ! ( input [ 0 ] & & input [ 1 ] ) ) ;
}
internal class NORGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false , false ) , new OutputState ( true ) } ,
{ new InputState ( false , true ) , new OutputState ( false ) } ,
{ new InputState ( true , false ) , new OutputState ( false ) } ,
{ new InputState ( true , true ) , new OutputState ( false ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( ! ( input [ 0 ] | | input [ 1 ] ) ) ;
}
internal class XNORGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
{
{ new InputState ( false , false ) , new OutputState ( true ) } ,
{ new InputState ( false , true ) , new OutputState ( false ) } ,
{ new InputState ( true , false ) , new OutputState ( false ) } ,
{ new InputState ( true , true ) , new OutputState ( true ) } ,
} ;
internal override Func < InputState , OutputState > Function = > ( input ) = > new OutputState ( ! ( input [ 0 ] ^ input [ 1 ] ) ) ;
}
#endregion
#region 400 - Latches
internal class SRLatchGate : GateDefinition
internal class SRLatchGate : StateGateDefinition
{
public new string Name = > "SR Latch" ;
public override string [ ] Inputs { get ; } = new string [ ] { "S" , "R" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "SR Latch" ;
public new bool HasState = > true ;
private bool _q ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var s = input [ 0 ] ;
var r = input [ 1 ] ;
@@ -146,20 +110,18 @@ namespace UntitledLogicGame.Workspace.Gates
else if ( s ) // set
_q = true ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
internal class JKLatchGate : GateDefinition
internal class JKLatchGate : StateGateDefinition
{
public new string Name = > "JK Latch" ;
public override string [ ] Inputs { get ; } = new string [ ] { "J" , "K" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "JK Latch" ;
public new bool HasState = > true ;
private bool _q ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var j = input [ 0 ] ;
var k = input [ 1 ] ;
@@ -170,45 +132,41 @@ namespace UntitledLogicGame.Workspace.Gates
else if ( j ) // set
_q = true ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
internal class DLatchGate : GateDefinition
internal class DLatchGate : StateGateDefinition
{
public new string Name = > "D Latch" ;
public override string [ ] Inputs { get ; } = new string [ ] { "D" , "E" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "D Latch" ;
public new bool HasState = > true ;
private bool _q ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var d = input [ 0 ] ;
var e = input [ 1 ] ;
if ( e ) // set
_q = d ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
#endregion
#region 500 - Flip - Flops
internal class SRFlipFlopGate : GateDefinition
internal class SRFlipFlopGate : StateGateDefinition
{
public new string Name = > "SR Flip-Flop" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "S" , "R" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "SR Flip-Flop" ;
public new bool HasState = > true ;
private bool _q ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var s = input [ 1 ] ;
@@ -220,21 +178,19 @@ namespace UntitledLogicGame.Workspace.Gates
_q = true ;
_lastClk = clk ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
internal class JKFlipFlopGate : GateDefinition
internal class JKFlipFlopGate : StateGateDefinition
{
public new string Name = > "JK Flip-Flop" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "J" , "K" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "JK Flip-Flop" ;
public new bool HasState = > true ;
private bool _q ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var j = input [ 1 ] ;
@@ -248,21 +204,19 @@ namespace UntitledLogicGame.Workspace.Gates
_q = true ;
_lastClk = clk ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
internal class DFlipFlopGate : GateDefinition
internal class DFlipFlopGate : StateGateDefinition
{
public new string Name = > "D Flip-Flop" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "D" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "D Flip-Flop" ;
public new bool HasState = > true ;
private bool _q ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var d = input [ 1 ] ;
@@ -270,21 +224,19 @@ namespace UntitledLogicGame.Workspace.Gates
_q = d ;
_lastClk = clk ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
internal class TFlipFlopGate : GateDefinition
internal class TFlipFlopGate : StateGateDefinition
{
public new string Name = > "T Flip-Flop" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "T" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" , "Q̅" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "T Flip-Flop" ;
public new bool HasState = > true ;
private bool _q ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var t = input [ 1 ] ;
@@ -293,99 +245,108 @@ namespace UntitledLogicGame.Workspace.Gates
_q = ! _q ;
_lastClk = clk ;
return new OutputState ( _q , ! _q ) ;
}
} ;
}
#endregion
#region 600 - Combinational
#region 600 - Arithmetic
internal class HalfAddGate : GateDefinition
{
public new string Name = > "Half Add." ;
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "S" , "C" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false ) , new OutputState ( false , false ) } ,
{ new InputState ( false , true ) , new OutputState ( true , false ) } ,
{ new InputState ( true , false ) , new OutputState ( true , false ) } ,
{ new InputState ( true , true ) , new OutputState ( false , true ) } ,
var a = input [ 0 ] ;
var b = input [ 1 ] ;
var s = a | | b ;
var c = a & & b ;
return new OutputState ( s , c ) ;
} ;
public new string Name = > "Half Add." ;
}
internal class FullAddGate : GateDefinition
{
public new string Name = > "Full Add." ;
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" , "Cɪ " } ;
public override string [ ] Outputs { get ; } = new string [ ] { "S" , "Cᴏ " } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false , false ) , new OutputState ( false , false ) } ,
{ new InputState ( false , false , true ) , new OutputState ( true , false ) } ,
{ new InputState ( false , true , false ) , new OutputState ( true , false ) } ,
{ new InputState ( false , true , true ) , new OutputState ( false , true ) } ,
{ new InputState ( true , false , false ) , new OutputState ( true , false ) } ,
{ new InputState ( true , false , true ) , new OutputState ( false , true ) } ,
{ new InputState ( true , true , false ) , new OutputState ( false , true ) } ,
{ new InputState ( true , true , true ) , new OutputState ( true , true ) } ,
var a = input [ 0 ] ;
var b = input [ 1 ] ;
var ci = input [ 2 ] ;
var s = a | | b | | ci ;
var co = a & & b | | a & & ci | | b & & ci ;
return new OutputState ( s , co ) ;
} ;
public new string Name = > "Full Add." ;
}
internal class HalfSubGate : GateDefinition
{
public new string Name = > "Half Sub." ;
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "S" , "C" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false ) , new OutputState ( false , false ) } ,
{ new InputState ( false , true ) , new OutputState ( true , true ) } ,
{ new InputState ( true , false ) , new OutputState ( true , false ) } ,
{ new InputState ( true , true ) , new OutputState ( false , false ) } ,
var a = input [ 0 ] ;
var b = input [ 1 ] ;
var s = a | | b ;
var c = ! a & & b ;
return new OutputState ( s , c ) ;
} ;
public new string Name = > "Half Sub." ;
}
internal class FullSubGate : GateDefinition
{
public new string Name = > "Full Add." ;
public override string [ ] Inputs { get ; } = new string [ ] { "A" , "B" , "Cɪ " } ;
public override string [ ] Outputs { get ; } = new string [ ] { "S" , "Cᴏ " } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false , false ) , new OutputState ( false , false ) } ,
{ new InputState ( false , false , true ) , new OutputState ( true , true ) } ,
{ new InputState ( false , true , false ) , new OutputState ( true , true ) } ,
{ new InputState ( false , true , true ) , new OutputState ( false , true ) } ,
{ new InputState ( true , false , false ) , new OutputState ( true , false ) } ,
{ new InputState ( true , false , true ) , new OutputState ( false , false ) } ,
{ new InputState ( true , true , false ) , new OutputState ( false , false ) } ,
{ new InputState ( true , true , true ) , new OutputState ( true , true ) } ,
var a = input [ 0 ] ;
var b = input [ 1 ] ;
var ci = input [ 2 ] ;
var s = a | | b | | ci ;
var co = a & & ! b | | a & & ! ci | | b & & ci ;
return new OutputState ( s , co ) ;
} ;
public new string Name = > "Full Add." ;
}
#endregion
#region 700 - Data
internal class MuxGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "E" , "S" , "D₀" , "D₁" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Y" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false , false , false ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , false , false , true ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , false , true , false ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , false , true , true ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , true , false , false ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , true , false , true ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , true , true , false ) , new OutputState ( false ) } , // => E=0
{ new InputState ( false , true , true , true ) , new OutputState ( false ) } , // => E=0
{ new InputState ( true , false , false , false ) , new OutputState ( false ) } , // => S=0 => Y=D₀=0
{ new InputState ( true , false , false , true ) , new OutputState ( false ) } , // => S=0 => Y=D₀=0
{ new InputState ( true , false , true , false ) , new OutputState ( true ) } , // => S=0 => Y=D₀=1
{ new InputState ( true , false , true , true ) , new OutputState ( true ) } , // => S=0 => Y=D₀=1
{ new InputState ( true , true , false , false ) , new OutputState ( false ) } , // => S=1 => Y=D₁=0
{ new InputState ( true , true , false , true ) , new OutputState ( true ) } , // => S=1 => Y=D₁=1
{ new InputState ( true , true , true , false ) , new OutputState ( false ) } , // => S=1 => Y=D₁=0
{ new InputState ( true , true , true , true ) , new OutputState ( true ) } , // => S=1 => Y=D₁=1
var e = input [ 0 ] ;
var s = input [ 1 ] ;
var d0 = input [ 2 ] ;
var d1 = input [ 3 ] ;
var y = e & & ( ! s & & d0 | | s & & d1 ) ;
return new OutputState ( y ) ;
} ;
}
@@ -393,68 +354,118 @@ namespace UntitledLogicGame.Workspace.Gates
{
public override string [ ] Inputs { get ; } = new string [ ] { "E" , "S" , "D" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Y₀" , "Y₁" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false , false ) , new OutputState ( false , false ) } , // => E=0
{ new InputState ( false , false , true ) , new OutputState ( false , false ) } , // => E=0
{ new InputState ( false , true , false ) , new OutputState ( false , false ) } , // => E=0
{ new InputState ( false , true , true ) , new OutputState ( false , false ) } , // => E=0
{ new InputState ( true , false , false ) , new OutputState ( false , false ) } , // => S=0 => Y₀=D=0
{ new InputState ( true , false , true ) , new OutputState ( true , false ) } , // => S=0 => Y₀=D=1
{ new InputState ( true , true , false ) , new OutputState ( false , false ) } , // => S=1 => Y₁=D=0
{ new InputState ( true , true , true ) , new OutputState ( false , true ) } , // => S=1 => Y₁=D=1
var e = input [ 0 ] ;
var s = input [ 1 ] ;
var d = input [ 2 ] ;
var y0 = e & & ! s & & d ;
var y1 = e & & s & & d ;
return new OutputState ( y0 , y1 ) ;
} ;
}
internal class EncGate : GateDefinition
internal class Mux2bGate : GateDefinition
{
public new string Name = > "2bits Mux" ;
public override string [ ] Inputs { get ; } = new string [ ] { "E" , "S₀" , "S₁" , "D₀" , "D₁" , "D₂" , "D₃" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Y" } ;
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var e = input [ 0 ] ;
var s0 = input [ 1 ] ;
var s1 = input [ 2 ] ;
var d0 = input [ 3 ] ;
var d1 = input [ 4 ] ;
var d2 = input [ 5 ] ;
var d3 = input [ 6 ] ;
var y = e & & (
! s0 & & ! s1 & & d0 | |
s0 & & ! s1 & & d1 | |
! s0 & & s1 & & d2 | |
s0 & & s1 & & d3
) ;
return new OutputState ( y ) ;
} ;
}
internal class Demux2bGate : GateDefinition
{
public new string Name = > "2bits Demux" ;
public override string [ ] Inputs { get ; } = new string [ ] { "E" , "S₀" , "S₁" , "D" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Y₀" , "Y₁" , "Y₂" , "Y₃" } ;
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var e = input [ 0 ] ;
var s0 = input [ 1 ] ;
var s1 = input [ 2 ] ;
var d = input [ 3 ] ;
var y0 = e & & ! s0 & & ! s1 & & d ;
var y1 = e & & s0 & & ! s1 & & d ;
var y2 = e & & ! s0 & & s1 & & d ;
var y3 = e & & s0 & & s1 & & d ;
return new OutputState ( y0 , y1 , y2 , y3 ) ;
} ;
}
internal class Enc2b4bGate : GateDefinition
{
public new string Name = > "2b/4b Enc." ;
public override string [ ] Inputs { get ; } = new string [ ] { "D₀" , "D₁" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Y₀" , "Y₁" , "Y₂" , "Y₃" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false ) , new OutputState ( true , false , false , false ) } , // D̅₀D̅₁
{ new InputState ( false , true ) , new OutputState ( false , true , false , false ) } , // D₀D̅₁
{ new InputState ( true , false ) , new OutputState ( false , false , true , false ) } , // D̅₀D₁
{ new InputState ( true , true ) , new OutputState ( false , false , false , true ) } , // D₀D₁
var d0 = input [ 0 ] ;
var d1 = input [ 1 ] ;
var y0 = ! d0 & & ! d1 ;
var y1 = d0 & & ! d1 ;
var y2 = ! d0 & & d1 ;
var y3 = d0 & & d1 ;
return new OutputState ( y0 , y1 , y2 , y3 ) ;
} ;
}
internal class DecGate : GateDefinition
internal class Dec4b2bGate : GateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "D₃" , "D₂" , "D₁" , "D₀" } ;
public new string Name = > "4b/2b Dec." ;
public override string [ ] Inputs { get ; } = new string [ ] { "D₀" , "D₁" , "D₂" , "D₃" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Y₀" , "Y₁" } ;
internal override Dictionary < InputState , OutputState > TruthTable { get ; } = new Dictionary < InputState , OutputState >
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
{ new InputState ( false , false , false , false ) , new OutputState ( false , false ) } , // XX
{ new InputState ( false , false , false , true ) , new OutputState ( false , false ) } , // D̅₀D̅₁
{ new InputState ( false , false , true , false ) , new OutputState ( true , true ) } , // D₀D̅₁
{ new InputState ( false , false , true , true ) , new OutputState ( true , false ) } , // D₀D̅₁
{ new InputState ( false , true , false , false ) , new OutputState ( false , true ) } , // D̅₀D₁
{ new InputState ( false , true , false , true ) , new OutputState ( false , true ) } , // D̅₀D₁
{ new InputState ( false , true , true , false ) , new OutputState ( false , true ) } , // D̅₀D₁
{ new InputState ( false , true , true , true ) , new OutputState ( false , true ) } , // D̅₀D₁
{ new InputState ( true , false , false , false ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , false , false , true ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , false , true , false ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , false , true , true ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , true , false , false ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , true , false , true ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , true , true , false ) , new OutputState ( true , true ) } , // D₀D₁
{ new InputState ( true , true , true , true ) , new OutputState ( true , true ) } , // D₀D₁
var d0 = input [ 0 ] ;
var d1 = input [ 1 ] ;
var d2 = input [ 2 ] ;
var d3 = input [ 3 ] ;
var y0 = d1 & & ! d2 | | d3 ;
var y1 = d2 | | d3 ;
return new OutputState ( y0 , y1 ) ;
} ;
}
#endregion
#region 700 - Registers
#region 800 - Registers
internal class SISO4bGate : GateDefinition
internal class SISO4bGate : StateGateDefinition
{
public new string Name = > "4bits SISO" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "D" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "4 bits SISO" ;
public new bool HasState = > true ;
private bool _q0 ;
private bool _q1 ;
@@ -462,7 +473,7 @@ namespace UntitledLogicGame.Workspace.Gates
private bool _q3 ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var d = input [ 1 ] ;
@@ -475,16 +486,14 @@ namespace UntitledLogicGame.Workspace.Gates
}
_lastClk = clk ;
return new OutputState ( _q3 ) ;
}
} ;
}
internal class SIPO4bGate : GateDefinition
internal class SIPO4bGate : StateGateDefinition
{
public new string Name = > "4bits SIPO" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "D" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q₀" , "Q₁" , "Q₂" , "Q₃" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "4 bits SIPO" ;
public new bool HasState = > true ;
private bool _q0 ;
private bool _q1 ;
@@ -492,7 +501,7 @@ namespace UntitledLogicGame.Workspace.Gates
private bool _q3 ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var d = input [ 1 ] ;
@@ -505,16 +514,14 @@ namespace UntitledLogicGame.Workspace.Gates
}
_lastClk = clk ;
return new OutputState ( _q0 , _q1 , _q2 , _q3 ) ;
}
} ;
}
internal class PIPO4bGate : GateDefinition
internal class PIPO4bGate : StateGateDefinition
{
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "D₀" , "D₁" , "D₂" , "D₃" } ;
public new string Name = > "4bits PIPO" ;
public override string [ ] Inputs { get ; } = new string [ ] { "CLK" , "D₀" , "D₁" , "D₂" , "D₃" } ;
public override string [ ] Outputs { get ; } = new string [ ] { "Q₀" , "Q₁" , "Q₂" , "Q₃" } ;
internal override Dictionary < InputState , OutputState > TruthTable = > EmptyTruthTable ;
public new string Name = > "4 bits PIPO" ;
public new bool HasState = > true ;
private bool _q0 ;
private bool _q1 ;
@@ -522,7 +529,7 @@ namespace UntitledLogicGame.Workspace.Gates
private bool _q3 ;
private bool _lastClk ;
internal new OutputState Compute ( InputState input )
internal override Func < InputState , OutputState > Function = > ( input ) = >
{
var clk = input [ 0 ] ;
var d0 = input [ 1 ] ;
@@ -538,7 +545,7 @@ namespace UntitledLogicGame.Workspace.Gates
}
_lastClk = clk ;
return new OutputState ( _q0 , _q1 , _q2 , _q3 ) ;
}
} ;
}
#endregion