add bus bricks to c logic
This commit is contained in:
parent
1787444b72
commit
d3ecd34b26
@ -147,6 +147,18 @@ FAST void sim_gate_set_data(const struct Gate* const gate, const int addr, const
|
||||
assert(addr>=0 && addr<gate->data_size);
|
||||
gate->data[addr] = val;
|
||||
}
|
||||
FAST int sim_gate_get_word(const struct Gate* const gate, const int size, const int idx) {
|
||||
int val = 0;
|
||||
for(int i=0; i<idx; i++) {
|
||||
val += sim_gate_get_port(gate, idx+i) << i;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
FAST void sim_gate_set_word(const struct Gate* const gate, const int size, const int idx, const int val) {
|
||||
for(int i=0; i<idx; i++) {
|
||||
sim_gate_set_port(gate, idx+i, (val>>i) & 1);
|
||||
}
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
@ -158,5 +170,9 @@ FAST void sim_gate_set_data(const struct Gate* const gate, const int addr, const
|
||||
#define getdata(i) sim_gate_get_data(gate, i)
|
||||
#define getportrising(i) sim_gate_get_port_rising(gate, i)
|
||||
#define getportfalling(i) sim_gate_get_port_falling(gate, i)
|
||||
#define copyword(size, iin, iout) for(int i=0;i<size;i++) { setport(iout+i, getport(iin+i)); }
|
||||
#define getword(size, idx) sim_gate_get_word(gate, size, idx)
|
||||
#define clearword(size, idx) for(int i=0;i<size;i++) { setport(idx+i, 0); }
|
||||
#define setword(size, idx, val) sim_gate_set_word(gate, size, idx, val)
|
||||
|
||||
#include "compiled_sim_gates.c"
|
||||
|
Binary file not shown.
@ -4,18 +4,194 @@ enum GateFuncs {
|
||||
GateFunc_None,
|
||||
GateFunc_Diode,
|
||||
GateFunc_Not,
|
||||
GateFunc_Enabler1,
|
||||
GateFunc_Enabler2,
|
||||
GateFunc_Enabler3,
|
||||
GateFunc_Enabler4,
|
||||
GateFunc_Enabler5,
|
||||
GateFunc_Enabler6,
|
||||
GateFunc_Enabler7,
|
||||
GateFunc_Enabler8,
|
||||
GateFunc_Enabler9,
|
||||
GateFunc_Enabler10,
|
||||
GateFunc_Enabler11,
|
||||
GateFunc_Enabler12,
|
||||
GateFunc_Enabler13,
|
||||
GateFunc_Enabler14,
|
||||
GateFunc_Enabler15,
|
||||
GateFunc_Enabler16,
|
||||
GateFunc_Enabler24,
|
||||
GateFunc_Enabler32,
|
||||
GateFunc_Enabler48,
|
||||
GateFunc_Enabler64,
|
||||
GateFunc_Buffer1,
|
||||
GateFunc_Buffer2,
|
||||
GateFunc_Buffer3,
|
||||
GateFunc_Buffer4,
|
||||
GateFunc_Buffer5,
|
||||
GateFunc_Buffer6,
|
||||
GateFunc_Buffer7,
|
||||
GateFunc_Buffer8,
|
||||
GateFunc_Buffer9,
|
||||
GateFunc_Buffer10,
|
||||
GateFunc_Buffer11,
|
||||
GateFunc_Buffer12,
|
||||
GateFunc_Buffer13,
|
||||
GateFunc_Buffer14,
|
||||
GateFunc_Buffer15,
|
||||
GateFunc_Buffer16,
|
||||
GateFunc_Buffer24,
|
||||
GateFunc_Buffer32,
|
||||
GateFunc_Buffer48,
|
||||
GateFunc_Buffer64,
|
||||
GateFunc_DFF1,
|
||||
GateFunc_DFF2,
|
||||
GateFunc_DFF3,
|
||||
GateFunc_DFF4,
|
||||
GateFunc_DFF5,
|
||||
GateFunc_DFF6,
|
||||
GateFunc_DFF7,
|
||||
GateFunc_DFF8,
|
||||
GateFunc_DFF9,
|
||||
GateFunc_DFF10,
|
||||
GateFunc_DFF11,
|
||||
GateFunc_DFF12,
|
||||
GateFunc_DFF13,
|
||||
GateFunc_DFF14,
|
||||
GateFunc_DFF15,
|
||||
GateFunc_DFF16,
|
||||
GateFunc_DFF24,
|
||||
GateFunc_DFF32,
|
||||
GateFunc_DFF48,
|
||||
GateFunc_DFF64,
|
||||
};
|
||||
|
||||
GATEFUNC(Diode) {
|
||||
setport(2, getport(1));
|
||||
}
|
||||
GATEFUNC(Not) {
|
||||
setport(2, !getport(1));
|
||||
}
|
||||
GATEFUNC(Diode) { setport(2, getport(1)); }
|
||||
GATEFUNC(Not) { setport(2, !getport(1)); }
|
||||
GATEFUNC(Enabler1) { if(getport(3)) { copyword(1, 1, 2); } else { clearword(1, 2); } }
|
||||
GATEFUNC(Enabler2) { if(getport(5)) { copyword(2, 1, 3); } else { clearword(2, 3); } }
|
||||
GATEFUNC(Enabler3) { if(getport(7)) { copyword(3, 1, 4); } else { clearword(3, 4); } }
|
||||
GATEFUNC(Enabler4) { if(getport(9)) { copyword(4, 1, 5); } else { clearword(4, 5); } }
|
||||
GATEFUNC(Enabler5) { if(getport(11)) { copyword(5, 1, 6); } else { clearword(5, 6); } }
|
||||
GATEFUNC(Enabler6) { if(getport(13)) { copyword(6, 1, 7); } else { clearword(6, 7); } }
|
||||
GATEFUNC(Enabler7) { if(getport(15)) { copyword(7, 1, 8); } else { clearword(7, 8); } }
|
||||
GATEFUNC(Enabler8) { if(getport(17)) { copyword(8, 1, 9); } else { clearword(8, 9); } }
|
||||
GATEFUNC(Enabler9) { if(getport(19)) { copyword(9, 1, 10); } else { clearword(9, 10); } }
|
||||
GATEFUNC(Enabler10) { if(getport(21)) { copyword(10, 1, 11); } else { clearword(10, 11); } }
|
||||
GATEFUNC(Enabler11) { if(getport(23)) { copyword(11, 1, 12); } else { clearword(11, 12); } }
|
||||
GATEFUNC(Enabler12) { if(getport(25)) { copyword(12, 1, 13); } else { clearword(12, 13); } }
|
||||
GATEFUNC(Enabler13) { if(getport(27)) { copyword(13, 1, 14); } else { clearword(13, 14); } }
|
||||
GATEFUNC(Enabler14) { if(getport(29)) { copyword(14, 1, 15); } else { clearword(14, 15); } }
|
||||
GATEFUNC(Enabler15) { if(getport(31)) { copyword(15, 1, 16); } else { clearword(15, 16); } }
|
||||
GATEFUNC(Enabler16) { if(getport(33)) { copyword(16, 1, 17); } else { clearword(16, 17); } }
|
||||
GATEFUNC(Enabler24) { if(getport(49)) { copyword(24, 1, 25); } else { clearword(24, 25); } }
|
||||
GATEFUNC(Enabler32) { if(getport(65)) { copyword(32, 1, 33); } else { clearword(32, 33); } }
|
||||
GATEFUNC(Enabler48) { if(getport(97)) { copyword(48, 1, 49); } else { clearword(48, 49); } }
|
||||
GATEFUNC(Enabler64) { if(getport(129)) { copyword(64, 1, 65); } else { clearword(64, 65); } }
|
||||
GATEFUNC(Buffer1) { if(getport(3)) { copyword(1, 1, 2); } else { clearword(1, 2); } }
|
||||
GATEFUNC(Buffer2) { if(getport(5)) { copyword(2, 1, 3); } else { clearword(2, 3); } }
|
||||
GATEFUNC(Buffer3) { if(getport(7)) { copyword(3, 1, 4); } else { clearword(3, 4); } }
|
||||
GATEFUNC(Buffer4) { if(getport(9)) { copyword(4, 1, 5); } else { clearword(4, 5); } }
|
||||
GATEFUNC(Buffer5) { if(getport(11)) { copyword(5, 1, 6); } else { clearword(5, 6); } }
|
||||
GATEFUNC(Buffer6) { if(getport(13)) { copyword(6, 1, 7); } else { clearword(6, 7); } }
|
||||
GATEFUNC(Buffer7) { if(getport(15)) { copyword(7, 1, 8); } else { clearword(7, 8); } }
|
||||
GATEFUNC(Buffer8) { if(getport(17)) { copyword(8, 1, 9); } else { clearword(8, 9); } }
|
||||
GATEFUNC(Buffer9) { if(getport(19)) { copyword(9, 1, 10); } else { clearword(9, 10); } }
|
||||
GATEFUNC(Buffer10) { if(getport(21)) { copyword(10, 1, 11); } else { clearword(10, 11); } }
|
||||
GATEFUNC(Buffer11) { if(getport(23)) { copyword(11, 1, 12); } else { clearword(11, 12); } }
|
||||
GATEFUNC(Buffer12) { if(getport(25)) { copyword(12, 1, 13); } else { clearword(12, 13); } }
|
||||
GATEFUNC(Buffer13) { if(getport(27)) { copyword(13, 1, 14); } else { clearword(13, 14); } }
|
||||
GATEFUNC(Buffer14) { if(getport(29)) { copyword(14, 1, 15); } else { clearword(14, 15); } }
|
||||
GATEFUNC(Buffer15) { if(getport(31)) { copyword(15, 1, 16); } else { clearword(15, 16); } }
|
||||
GATEFUNC(Buffer16) { if(getport(33)) { copyword(16, 1, 17); } else { clearword(16, 17); } }
|
||||
GATEFUNC(Buffer24) { if(getport(49)) { copyword(24, 1, 25); } else { clearword(24, 25); } }
|
||||
GATEFUNC(Buffer32) { if(getport(65)) { copyword(32, 1, 33); } else { clearword(32, 33); } }
|
||||
GATEFUNC(Buffer48) { if(getport(97)) { copyword(48, 1, 49); } else { clearword(48, 49); } }
|
||||
GATEFUNC(Buffer64) { if(getport(129)) { copyword(64, 1, 65); } else { clearword(64, 65); } }
|
||||
GATEFUNC(DFF1) { if(getport(3)) { copyword(1, 1, 2); } }
|
||||
GATEFUNC(DFF2) { if(getport(5)) { copyword(2, 1, 3); } }
|
||||
GATEFUNC(DFF3) { if(getport(7)) { copyword(3, 1, 4); } }
|
||||
GATEFUNC(DFF4) { if(getport(9)) { copyword(4, 1, 5); } }
|
||||
GATEFUNC(DFF5) { if(getport(11)) { copyword(5, 1, 6); } }
|
||||
GATEFUNC(DFF6) { if(getport(13)) { copyword(6, 1, 7); } }
|
||||
GATEFUNC(DFF7) { if(getport(15)) { copyword(7, 1, 8); } }
|
||||
GATEFUNC(DFF8) { if(getport(17)) { copyword(8, 1, 9); } }
|
||||
GATEFUNC(DFF9) { if(getport(19)) { copyword(9, 1, 10); } }
|
||||
GATEFUNC(DFF10) { if(getport(21)) { copyword(10, 1, 11); } }
|
||||
GATEFUNC(DFF11) { if(getport(23)) { copyword(11, 1, 12); } }
|
||||
GATEFUNC(DFF12) { if(getport(25)) { copyword(12, 1, 13); } }
|
||||
GATEFUNC(DFF13) { if(getport(27)) { copyword(13, 1, 14); } }
|
||||
GATEFUNC(DFF14) { if(getport(29)) { copyword(14, 1, 15); } }
|
||||
GATEFUNC(DFF15) { if(getport(31)) { copyword(15, 1, 16); } }
|
||||
GATEFUNC(DFF16) { if(getport(33)) { copyword(16, 1, 17); } }
|
||||
GATEFUNC(DFF24) { if(getport(49)) { copyword(24, 1, 25); } }
|
||||
GATEFUNC(DFF32) { if(getport(65)) { copyword(32, 1, 33); } }
|
||||
GATEFUNC(DFF48) { if(getport(97)) { copyword(48, 1, 49); } }
|
||||
GATEFUNC(DFF64) { if(getport(129)) { copyword(64, 1, 65); } }
|
||||
|
||||
GateFunc sim_logic_functions[] = {
|
||||
0,
|
||||
GATEFUNCID(Diode),
|
||||
GATEFUNCID(Not),
|
||||
GATEFUNCID(Enabler1),
|
||||
GATEFUNCID(Enabler2),
|
||||
GATEFUNCID(Enabler3),
|
||||
GATEFUNCID(Enabler4),
|
||||
GATEFUNCID(Enabler5),
|
||||
GATEFUNCID(Enabler6),
|
||||
GATEFUNCID(Enabler7),
|
||||
GATEFUNCID(Enabler8),
|
||||
GATEFUNCID(Enabler9),
|
||||
GATEFUNCID(Enabler10),
|
||||
GATEFUNCID(Enabler11),
|
||||
GATEFUNCID(Enabler12),
|
||||
GATEFUNCID(Enabler13),
|
||||
GATEFUNCID(Enabler14),
|
||||
GATEFUNCID(Enabler15),
|
||||
GATEFUNCID(Enabler16),
|
||||
GATEFUNCID(Enabler24),
|
||||
GATEFUNCID(Enabler32),
|
||||
GATEFUNCID(Enabler48),
|
||||
GATEFUNCID(Enabler64),
|
||||
GATEFUNCID(Buffer1),
|
||||
GATEFUNCID(Buffer2),
|
||||
GATEFUNCID(Buffer3),
|
||||
GATEFUNCID(Buffer4),
|
||||
GATEFUNCID(Buffer5),
|
||||
GATEFUNCID(Buffer6),
|
||||
GATEFUNCID(Buffer7),
|
||||
GATEFUNCID(Buffer8),
|
||||
GATEFUNCID(Buffer9),
|
||||
GATEFUNCID(Buffer10),
|
||||
GATEFUNCID(Buffer11),
|
||||
GATEFUNCID(Buffer12),
|
||||
GATEFUNCID(Buffer13),
|
||||
GATEFUNCID(Buffer14),
|
||||
GATEFUNCID(Buffer15),
|
||||
GATEFUNCID(Buffer16),
|
||||
GATEFUNCID(Buffer24),
|
||||
GATEFUNCID(Buffer32),
|
||||
GATEFUNCID(Buffer48),
|
||||
GATEFUNCID(Buffer64),
|
||||
GATEFUNCID(DFF1),
|
||||
GATEFUNCID(DFF2),
|
||||
GATEFUNCID(DFF3),
|
||||
GATEFUNCID(DFF4),
|
||||
GATEFUNCID(DFF5),
|
||||
GATEFUNCID(DFF6),
|
||||
GATEFUNCID(DFF7),
|
||||
GATEFUNCID(DFF8),
|
||||
GATEFUNCID(DFF9),
|
||||
GATEFUNCID(DFF10),
|
||||
GATEFUNCID(DFF11),
|
||||
GATEFUNCID(DFF12),
|
||||
GATEFUNCID(DFF13),
|
||||
GATEFUNCID(DFF14),
|
||||
GATEFUNCID(DFF15),
|
||||
GATEFUNCID(DFF16),
|
||||
GATEFUNCID(DFF24),
|
||||
GATEFUNCID(DFF32),
|
||||
GATEFUNCID(DFF48),
|
||||
GATEFUNCID(DFF64),
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,196 @@
|
||||
-- Auto-generated by gencfuncs.lua
|
||||
|
||||
cFuncsByName = {
|
||||
local cFuncsByName = {
|
||||
["diode"] = 1,
|
||||
["diode up"] = 1,
|
||||
["diode down"] = 1,
|
||||
["not"] = 2,
|
||||
["not up"] = 2,
|
||||
["not down"] = 2,
|
||||
["enabler 1 bit"] = 3,
|
||||
["enabler 1 bit up"] = 3,
|
||||
["enabler 1 bit down"] = 3,
|
||||
["enabler 2 bit"] = 4,
|
||||
["enabler 2 bit up"] = 4,
|
||||
["enabler 2 bit down"] = 4,
|
||||
["enabler 3 bit"] = 5,
|
||||
["enabler 3 bit up"] = 5,
|
||||
["enabler 3 bit down"] = 5,
|
||||
["enabler 4 bit"] = 6,
|
||||
["enabler 4 bit up"] = 6,
|
||||
["enabler 4 bit down"] = 6,
|
||||
["enabler 5 bit"] = 7,
|
||||
["enabler 5 bit up"] = 7,
|
||||
["enabler 5 bit down"] = 7,
|
||||
["enabler 6 bit"] = 8,
|
||||
["enabler 6 bit up"] = 8,
|
||||
["enabler 6 bit down"] = 8,
|
||||
["enabler 7 bit"] = 9,
|
||||
["enabler 7 bit up"] = 9,
|
||||
["enabler 7 bit down"] = 9,
|
||||
["enabler 8 bit"] = 10,
|
||||
["enabler 8 bit up"] = 10,
|
||||
["enabler 8 bit down"] = 10,
|
||||
["enabler 9 bit"] = 11,
|
||||
["enabler 9 bit up"] = 11,
|
||||
["enabler 9 bit down"] = 11,
|
||||
["enabler 10 bit"] = 12,
|
||||
["enabler 10 bit up"] = 12,
|
||||
["enabler 10 bit down"] = 12,
|
||||
["enabler 11 bit"] = 13,
|
||||
["enabler 11 bit up"] = 13,
|
||||
["enabler 11 bit down"] = 13,
|
||||
["enabler 12 bit"] = 14,
|
||||
["enabler 12 bit up"] = 14,
|
||||
["enabler 12 bit down"] = 14,
|
||||
["enabler 13 bit"] = 15,
|
||||
["enabler 13 bit up"] = 15,
|
||||
["enabler 13 bit down"] = 15,
|
||||
["enabler 14 bit"] = 16,
|
||||
["enabler 14 bit up"] = 16,
|
||||
["enabler 14 bit down"] = 16,
|
||||
["enabler 15 bit"] = 17,
|
||||
["enabler 15 bit up"] = 17,
|
||||
["enabler 15 bit down"] = 17,
|
||||
["enabler 16 bit"] = 18,
|
||||
["enabler 16 bit up"] = 18,
|
||||
["enabler 16 bit down"] = 18,
|
||||
["enabler 24 bit"] = 19,
|
||||
["enabler 24 bit up"] = 19,
|
||||
["enabler 24 bit down"] = 19,
|
||||
["enabler 32 bit"] = 20,
|
||||
["enabler 32 bit up"] = 20,
|
||||
["enabler 32 bit down"] = 20,
|
||||
["enabler 48 bit"] = 21,
|
||||
["enabler 48 bit up"] = 21,
|
||||
["enabler 48 bit down"] = 21,
|
||||
["enabler 64 bit"] = 22,
|
||||
["enabler 64 bit up"] = 22,
|
||||
["enabler 64 bit down"] = 22,
|
||||
["buffer 1 bit"] = 23,
|
||||
["buffer 1 bit up"] = 23,
|
||||
["buffer 1 bit down"] = 23,
|
||||
["buffer 2 bit"] = 24,
|
||||
["buffer 2 bit up"] = 24,
|
||||
["buffer 2 bit down"] = 24,
|
||||
["buffer 3 bit"] = 25,
|
||||
["buffer 3 bit up"] = 25,
|
||||
["buffer 3 bit down"] = 25,
|
||||
["buffer 4 bit"] = 26,
|
||||
["buffer 4 bit up"] = 26,
|
||||
["buffer 4 bit down"] = 26,
|
||||
["buffer 5 bit"] = 27,
|
||||
["buffer 5 bit up"] = 27,
|
||||
["buffer 5 bit down"] = 27,
|
||||
["buffer 6 bit"] = 28,
|
||||
["buffer 6 bit up"] = 28,
|
||||
["buffer 6 bit down"] = 28,
|
||||
["buffer 7 bit"] = 29,
|
||||
["buffer 7 bit up"] = 29,
|
||||
["buffer 7 bit down"] = 29,
|
||||
["buffer 8 bit"] = 30,
|
||||
["buffer 8 bit up"] = 30,
|
||||
["buffer 8 bit down"] = 30,
|
||||
["buffer 9 bit"] = 31,
|
||||
["buffer 9 bit up"] = 31,
|
||||
["buffer 9 bit down"] = 31,
|
||||
["buffer 10 bit"] = 32,
|
||||
["buffer 10 bit up"] = 32,
|
||||
["buffer 10 bit down"] = 32,
|
||||
["buffer 11 bit"] = 33,
|
||||
["buffer 11 bit up"] = 33,
|
||||
["buffer 11 bit down"] = 33,
|
||||
["buffer 12 bit"] = 34,
|
||||
["buffer 12 bit up"] = 34,
|
||||
["buffer 12 bit down"] = 34,
|
||||
["buffer 13 bit"] = 35,
|
||||
["buffer 13 bit up"] = 35,
|
||||
["buffer 13 bit down"] = 35,
|
||||
["buffer 14 bit"] = 36,
|
||||
["buffer 14 bit up"] = 36,
|
||||
["buffer 14 bit down"] = 36,
|
||||
["buffer 15 bit"] = 37,
|
||||
["buffer 15 bit up"] = 37,
|
||||
["buffer 15 bit down"] = 37,
|
||||
["buffer 16 bit"] = 38,
|
||||
["buffer 16 bit up"] = 38,
|
||||
["buffer 16 bit down"] = 38,
|
||||
["buffer 24 bit"] = 39,
|
||||
["buffer 24 bit up"] = 39,
|
||||
["buffer 24 bit down"] = 39,
|
||||
["buffer 32 bit"] = 40,
|
||||
["buffer 32 bit up"] = 40,
|
||||
["buffer 32 bit down"] = 40,
|
||||
["buffer 48 bit"] = 41,
|
||||
["buffer 48 bit up"] = 41,
|
||||
["buffer 48 bit down"] = 41,
|
||||
["buffer 64 bit"] = 42,
|
||||
["buffer 64 bit up"] = 42,
|
||||
["buffer 64 bit down"] = 42,
|
||||
["d flipflop 1 bit"] = 43,
|
||||
["d flipflop 1 bit up"] = 43,
|
||||
["d flipflop 1 bit down"] = 43,
|
||||
["d flipflop 2 bit"] = 44,
|
||||
["d flipflop 2 bit up"] = 44,
|
||||
["d flipflop 2 bit down"] = 44,
|
||||
["d flipflop 3 bit"] = 45,
|
||||
["d flipflop 3 bit up"] = 45,
|
||||
["d flipflop 3 bit down"] = 45,
|
||||
["d flipflop 4 bit"] = 46,
|
||||
["d flipflop 4 bit up"] = 46,
|
||||
["d flipflop 4 bit down"] = 46,
|
||||
["d flipflop 5 bit"] = 47,
|
||||
["d flipflop 5 bit up"] = 47,
|
||||
["d flipflop 5 bit down"] = 47,
|
||||
["d flipflop 6 bit"] = 48,
|
||||
["d flipflop 6 bit up"] = 48,
|
||||
["d flipflop 6 bit down"] = 48,
|
||||
["d flipflop 7 bit"] = 49,
|
||||
["d flipflop 7 bit up"] = 49,
|
||||
["d flipflop 7 bit down"] = 49,
|
||||
["d flipflop 8 bit"] = 50,
|
||||
["d flipflop 8 bit up"] = 50,
|
||||
["d flipflop 8 bit down"] = 50,
|
||||
["d flipflop 9 bit"] = 51,
|
||||
["d flipflop 9 bit up"] = 51,
|
||||
["d flipflop 9 bit down"] = 51,
|
||||
["d flipflop 10 bit"] = 52,
|
||||
["d flipflop 10 bit up"] = 52,
|
||||
["d flipflop 10 bit down"] = 52,
|
||||
["d flipflop 11 bit"] = 53,
|
||||
["d flipflop 11 bit up"] = 53,
|
||||
["d flipflop 11 bit down"] = 53,
|
||||
["d flipflop 12 bit"] = 54,
|
||||
["d flipflop 12 bit up"] = 54,
|
||||
["d flipflop 12 bit down"] = 54,
|
||||
["d flipflop 13 bit"] = 55,
|
||||
["d flipflop 13 bit up"] = 55,
|
||||
["d flipflop 13 bit down"] = 55,
|
||||
["d flipflop 14 bit"] = 56,
|
||||
["d flipflop 14 bit up"] = 56,
|
||||
["d flipflop 14 bit down"] = 56,
|
||||
["d flipflop 15 bit"] = 57,
|
||||
["d flipflop 15 bit up"] = 57,
|
||||
["d flipflop 15 bit down"] = 57,
|
||||
["d flipflop 16 bit"] = 58,
|
||||
["d flipflop 16 bit up"] = 58,
|
||||
["d flipflop 16 bit down"] = 58,
|
||||
["d flipflop 24 bit"] = 59,
|
||||
["d flipflop 24 bit up"] = 59,
|
||||
["d flipflop 24 bit down"] = 59,
|
||||
["d flipflop 32 bit"] = 60,
|
||||
["d flipflop 32 bit up"] = 60,
|
||||
["d flipflop 32 bit down"] = 60,
|
||||
["d flipflop 48 bit"] = 61,
|
||||
["d flipflop 48 bit up"] = 61,
|
||||
["d flipflop 48 bit down"] = 61,
|
||||
["d flipflop 64 bit"] = 62,
|
||||
["d flipflop 64 bit up"] = 62,
|
||||
["d flipflop 64 bit down"] = 62,
|
||||
}
|
||||
|
||||
cDataSizeByName = {
|
||||
["diode"] = 0,
|
||||
["not"] = 0,
|
||||
local cDataSizeByName = {
|
||||
|
||||
}
|
||||
|
||||
return cFuncsByName, cDataSizeByName
|
||||
|
12418
sim/dump.txt
12418
sim/dump.txt
File diff suppressed because it is too large
Load Diff
@ -35,29 +35,48 @@ local function writeFile(fn, data)
|
||||
end
|
||||
|
||||
local function exportGates(gates)
|
||||
local gateList = {}
|
||||
local gateNameList = {}
|
||||
local gateFuncList = {}
|
||||
local gateSizeList = {}
|
||||
local gateAliasList = {}
|
||||
local numGates = 0
|
||||
for k, gate in pairs(gates) do
|
||||
table.insert(gateList, gate.name or error("gate "..k.." has no name"))
|
||||
table.insert(gateNameList, gate.name or error("gate "..k.." has no name"))
|
||||
table.insert(gateFuncList, gate.func or error("gate "..gate.name.." has no c function"))
|
||||
table.insert(gateSizeList, gate.size or 0)
|
||||
numGates = numGates + 1; gate.idx = numGates;
|
||||
for _, name in ipairs(gate.names) do
|
||||
table.insert(gateAliasList, { name = name, idx = gate.idx } )
|
||||
end
|
||||
end
|
||||
|
||||
local function map(t, f) local u = {}; for i, v in ipairs(t) do table.insert(u, f(v, i)) end; return u; end
|
||||
writeFile("compiled_sim_gates.c", string.format(c_code,
|
||||
table.concat(map(gateList, function(v, i) return string.format("\tGateFunc_%s,", v) end), "\n"),
|
||||
table.concat(map(gateList, function(v, i) return string.format("GATEFUNC(%s) {\n\t%s\n}", v, gateFuncList[i]:gsub("\n", "\n\t"):gsub("\n+$", ""):gsub("^\n+", "")) end), "\n"),
|
||||
table.concat(map(gateList, function(v, i) return string.format("\tGATEFUNCID(%s),", v) end), "\n")
|
||||
table.concat(map(gateNameList, function(v, i) return string.format("\tGateFunc_%s,", v) end), "\n"),
|
||||
table.concat(map(gateNameList, function(v, i)
|
||||
local func = gateFuncList[i]
|
||||
local nl = func:find("\n") and "\n" or ""
|
||||
local nt = func:find("\n") and "\t" or ""
|
||||
local ns = func:find("\n") and "" or " "
|
||||
return string.format("GATEFUNC(%s) {"..nl..nt..ns.."%s"..nl..ns.."}", v, gateFuncList[i]:gsub("\n", "\n\t"):gsub("\n+$", ""):gsub("^\n+", ""))
|
||||
end), "\n"),
|
||||
table.concat(map(gateNameList, function(v, i) return string.format("\tGATEFUNCID(%s),", v) end), "\n")
|
||||
))
|
||||
writeFile("compiled_sim_gates.lua", string.format(lua_code,
|
||||
table.concat(map(gateList, function(v, i) return string.format("\t[\"%s\"] = %i,", v:lower(), i) end), "\n"),
|
||||
table.concat(map(gateList, function(v, i) return string.format("\t[\"%s\"] = %i,", v:lower(), gateSizeList[i]) end), "\n")
|
||||
table.concat(map(gateAliasList, function(v, i) return string.format("\t[\"%s\"] = %i,", v.name:lower(), v.idx) end), "\n"),
|
||||
table.concat(map(gateAliasList, function(v, i) if gateSizeList[v.idx]>0 then return string.format("\t[\"%s\"] = %i,", v.name:lower(), gateSizeList[v.idx]) else return nil end end), "\n")
|
||||
))
|
||||
end
|
||||
|
||||
local function createEnabler(n) return { name = "Enabler"..n, names = {"Enabler " ..n.." Bit", "Enabler " ..n.." Bit Up", "Enabler " ..n.." Bit Down"}, func = "if(getport("..(n*2+1)..")) { copyword("..n..", 1, "..(n+1).."); } else { clearword("..n..", "..(n+1).."); }" } end
|
||||
local function createBuffer (n) return { name = "Buffer" ..n, names = {"Buffer " ..n.." Bit", "Buffer " ..n.." Bit Up", "Buffer " ..n.." Bit Down"}, func = "if(getport("..(n*2+1)..")) { copyword("..n..", 1, "..(n+1).."); } else { clearword("..n..", "..(n+1).."); }" } end
|
||||
local function createDFF (n) return { name = "DFF" ..n, names = {"D FlipFlop " ..n.." Bit", "D FlipFlop " ..n.." Bit Up", "D FlipFlop " ..n.." Bit Down"}, func = "if(getport("..(n*2+1)..")) { copyword("..n..", 1, "..(n+1).."); }" } end
|
||||
local gates = {
|
||||
{ name = "Diode", func = "setport(2, getport(1));" },
|
||||
{ name = "Not" , func = "setport(2, !getport(1));" },
|
||||
{ name = "Diode", names = {"Diode", "Diode Up", "Diode Down"}, func = "setport(2, getport(1));" },
|
||||
{ name = "Not" , names = {"Not" , "Not Up" , "Not Down" }, func = "setport(2, !getport(1));" },
|
||||
createEnabler(1), createEnabler(2), createEnabler(3), createEnabler(4), createEnabler(5), createEnabler(6), createEnabler(7), createEnabler(8), createEnabler(9), createEnabler(10), createEnabler(11), createEnabler(12), createEnabler(13), createEnabler(14), createEnabler(15), createEnabler(16), createEnabler(24), createEnabler(32), createEnabler(48), createEnabler(64),
|
||||
createBuffer (1), createBuffer (2), createBuffer (3), createBuffer (4), createBuffer (5), createBuffer (6), createBuffer (7), createBuffer (8), createBuffer (9), createBuffer (10), createBuffer (11), createBuffer (12), createBuffer (13), createBuffer (14), createBuffer (15), createBuffer (16), createBuffer (24), createBuffer (32), createBuffer (48), createBuffer (64),
|
||||
createDFF (1), createDFF (2), createDFF (3), createDFF (4), createDFF (5), createDFF (6), createDFF (7), createDFF (8), createDFF (9), createDFF (10), createDFF (11), createDFF (12), createDFF (13), createDFF (14), createDFF (15), createDFF (16), createDFF (24), createDFF (32), createDFF (48), createDFF (64),
|
||||
}
|
||||
|
||||
exportGates(gates)
|
||||
|
Loading…
x
Reference in New Issue
Block a user