add basic gates c func
This commit is contained in:
@@ -86,6 +86,48 @@ enum GateFuncs {
|
||||
GateFunc_Adder8,
|
||||
GateFunc_Adder16,
|
||||
GateFunc_Adder32,
|
||||
GateFunc_And2,
|
||||
GateFunc_And3,
|
||||
GateFunc_And4,
|
||||
GateFunc_And5,
|
||||
GateFunc_And6,
|
||||
GateFunc_And7,
|
||||
GateFunc_And8,
|
||||
GateFunc_Or2,
|
||||
GateFunc_Or3,
|
||||
GateFunc_Or4,
|
||||
GateFunc_Or5,
|
||||
GateFunc_Or6,
|
||||
GateFunc_Or7,
|
||||
GateFunc_Or8,
|
||||
GateFunc_Xor2,
|
||||
GateFunc_Xor3,
|
||||
GateFunc_Xor4,
|
||||
GateFunc_Xor5,
|
||||
GateFunc_Xor6,
|
||||
GateFunc_Xor7,
|
||||
GateFunc_Xor8,
|
||||
GateFunc_Nand2,
|
||||
GateFunc_Nand3,
|
||||
GateFunc_Nand4,
|
||||
GateFunc_Nand5,
|
||||
GateFunc_Nand6,
|
||||
GateFunc_Nand7,
|
||||
GateFunc_Nand8,
|
||||
GateFunc_Nor2,
|
||||
GateFunc_Nor3,
|
||||
GateFunc_Nor4,
|
||||
GateFunc_Nor5,
|
||||
GateFunc_Nor6,
|
||||
GateFunc_Nor7,
|
||||
GateFunc_Nor8,
|
||||
GateFunc_Xnor2,
|
||||
GateFunc_Xnor3,
|
||||
GateFunc_Xnor4,
|
||||
GateFunc_Xnor5,
|
||||
GateFunc_Xnor6,
|
||||
GateFunc_Xnor7,
|
||||
GateFunc_Xnor8,
|
||||
GateFunc_Rom4x1,
|
||||
GateFunc_Rom4x4,
|
||||
GateFunc_Rom4x8,
|
||||
@@ -211,6 +253,48 @@ GATEFUNC(Adder4) { int v = getword(4, 1) + getword(4, 5) + getport(13); setword(
|
||||
GATEFUNC(Adder8) { int v = getword(8, 1) + getword(8, 9) + getport(25); setword(8, 17, v); setport(26, (v>>8) & 1); }
|
||||
GATEFUNC(Adder16) { int v = getword(16, 1) + getword(16, 17) + getport(49); setword(16, 33, v); setport(50, (v>>16) & 1); }
|
||||
GATEFUNC(Adder32) { unsigned long long v = getword(32, 1) + getword(32, 33) + getport(97); setword(32, 65, v); setport(98, (v>>32) & 1); }
|
||||
GATEFUNC(And2) { setport(3, (getport(1) && getport(2))); }
|
||||
GATEFUNC(And3) { setport(4, (getport(1) && getport(2) && getport(3))); }
|
||||
GATEFUNC(And4) { setport(5, (getport(1) && getport(2) && getport(3) && getport(4))); }
|
||||
GATEFUNC(And5) { setport(6, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5))); }
|
||||
GATEFUNC(And6) { setport(7, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6))); }
|
||||
GATEFUNC(And7) { setport(8, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7))); }
|
||||
GATEFUNC(And8) { setport(9, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7) && getport(8))); }
|
||||
GATEFUNC(Or2) { setport(3, (getport(1) || getport(2))); }
|
||||
GATEFUNC(Or3) { setport(4, (getport(1) || getport(2) || getport(3))); }
|
||||
GATEFUNC(Or4) { setport(5, (getport(1) || getport(2) || getport(3) || getport(4))); }
|
||||
GATEFUNC(Or5) { setport(6, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5))); }
|
||||
GATEFUNC(Or6) { setport(7, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6))); }
|
||||
GATEFUNC(Or7) { setport(8, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7))); }
|
||||
GATEFUNC(Or8) { setport(9, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7) || getport(8))); }
|
||||
GATEFUNC(Xor2) { setport(3, (getport(1) ^ getport(2))); }
|
||||
GATEFUNC(Xor3) { setport(4, (getport(1) ^ getport(2) ^ getport(3))); }
|
||||
GATEFUNC(Xor4) { setport(5, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4))); }
|
||||
GATEFUNC(Xor5) { setport(6, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5))); }
|
||||
GATEFUNC(Xor6) { setport(7, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6))); }
|
||||
GATEFUNC(Xor7) { setport(8, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7))); }
|
||||
GATEFUNC(Xor8) { setport(9, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7) ^ getport(8))); }
|
||||
GATEFUNC(Nand2) { setport(3, !(getport(1) && getport(2))); }
|
||||
GATEFUNC(Nand3) { setport(4, !(getport(1) && getport(2) && getport(3))); }
|
||||
GATEFUNC(Nand4) { setport(5, !(getport(1) && getport(2) && getport(3) && getport(4))); }
|
||||
GATEFUNC(Nand5) { setport(6, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5))); }
|
||||
GATEFUNC(Nand6) { setport(7, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6))); }
|
||||
GATEFUNC(Nand7) { setport(8, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7))); }
|
||||
GATEFUNC(Nand8) { setport(9, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7) && getport(8))); }
|
||||
GATEFUNC(Nor2) { setport(3, !(getport(1) || getport(2))); }
|
||||
GATEFUNC(Nor3) { setport(4, !(getport(1) || getport(2) || getport(3))); }
|
||||
GATEFUNC(Nor4) { setport(5, !(getport(1) || getport(2) || getport(3) || getport(4))); }
|
||||
GATEFUNC(Nor5) { setport(6, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5))); }
|
||||
GATEFUNC(Nor6) { setport(7, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6))); }
|
||||
GATEFUNC(Nor7) { setport(8, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7))); }
|
||||
GATEFUNC(Nor8) { setport(9, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7) || getport(8))); }
|
||||
GATEFUNC(Xnor2) { setport(3, !(getport(1) ^ getport(2))); }
|
||||
GATEFUNC(Xnor3) { setport(4, !(getport(1) ^ getport(2) ^ getport(3))); }
|
||||
GATEFUNC(Xnor4) { setport(5, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4))); }
|
||||
GATEFUNC(Xnor5) { setport(6, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5))); }
|
||||
GATEFUNC(Xnor6) { setport(7, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6))); }
|
||||
GATEFUNC(Xnor7) { setport(8, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7))); }
|
||||
GATEFUNC(Xnor8) { setport(9, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7) ^ getport(8))); }
|
||||
GATEFUNC(Rom4x1) { if(getport(6)) { int a = getword(4, 1); for(int i=0; i<1; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(1, 5); } }
|
||||
GATEFUNC(Rom4x4) { if(getport(9)) { int a = getword(4, 1); for(int i=0; i<4; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(4, 5); } }
|
||||
GATEFUNC(Rom4x8) { if(getport(13)) { int a = getword(4, 1); for(int i=0; i<8; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(8, 5); } }
|
||||
@@ -337,6 +421,48 @@ GateFunc sim_logic_functions[] = {
|
||||
GATEFUNCID(Adder8),
|
||||
GATEFUNCID(Adder16),
|
||||
GATEFUNCID(Adder32),
|
||||
GATEFUNCID(And2),
|
||||
GATEFUNCID(And3),
|
||||
GATEFUNCID(And4),
|
||||
GATEFUNCID(And5),
|
||||
GATEFUNCID(And6),
|
||||
GATEFUNCID(And7),
|
||||
GATEFUNCID(And8),
|
||||
GATEFUNCID(Or2),
|
||||
GATEFUNCID(Or3),
|
||||
GATEFUNCID(Or4),
|
||||
GATEFUNCID(Or5),
|
||||
GATEFUNCID(Or6),
|
||||
GATEFUNCID(Or7),
|
||||
GATEFUNCID(Or8),
|
||||
GATEFUNCID(Xor2),
|
||||
GATEFUNCID(Xor3),
|
||||
GATEFUNCID(Xor4),
|
||||
GATEFUNCID(Xor5),
|
||||
GATEFUNCID(Xor6),
|
||||
GATEFUNCID(Xor7),
|
||||
GATEFUNCID(Xor8),
|
||||
GATEFUNCID(Nand2),
|
||||
GATEFUNCID(Nand3),
|
||||
GATEFUNCID(Nand4),
|
||||
GATEFUNCID(Nand5),
|
||||
GATEFUNCID(Nand6),
|
||||
GATEFUNCID(Nand7),
|
||||
GATEFUNCID(Nand8),
|
||||
GATEFUNCID(Nor2),
|
||||
GATEFUNCID(Nor3),
|
||||
GATEFUNCID(Nor4),
|
||||
GATEFUNCID(Nor5),
|
||||
GATEFUNCID(Nor6),
|
||||
GATEFUNCID(Nor7),
|
||||
GATEFUNCID(Nor8),
|
||||
GATEFUNCID(Xnor2),
|
||||
GATEFUNCID(Xnor3),
|
||||
GATEFUNCID(Xnor4),
|
||||
GATEFUNCID(Xnor5),
|
||||
GATEFUNCID(Xnor6),
|
||||
GATEFUNCID(Xnor7),
|
||||
GATEFUNCID(Xnor8),
|
||||
GATEFUNCID(Rom4x1),
|
||||
GATEFUNCID(Rom4x4),
|
||||
GATEFUNCID(Rom4x8),
|
||||
|
||||
Reference in New Issue
Block a user