add mux, demux, rom
This commit is contained in:
parent
8ccf6db9b8
commit
ff20fdb2d6
Binary file not shown.
@ -64,6 +64,61 @@ enum GateFuncs {
|
|||||||
GateFunc_DFF32,
|
GateFunc_DFF32,
|
||||||
GateFunc_DFF48,
|
GateFunc_DFF48,
|
||||||
GateFunc_DFF64,
|
GateFunc_DFF64,
|
||||||
|
GateFunc_Mux1,
|
||||||
|
GateFunc_Mux2,
|
||||||
|
GateFunc_Mux3,
|
||||||
|
GateFunc_Mux4,
|
||||||
|
GateFunc_Mux5,
|
||||||
|
GateFunc_Mux6,
|
||||||
|
GateFunc_Mux7,
|
||||||
|
GateFunc_Mux8,
|
||||||
|
GateFunc_Demux1,
|
||||||
|
GateFunc_Demux2,
|
||||||
|
GateFunc_Demux3,
|
||||||
|
GateFunc_Demux4,
|
||||||
|
GateFunc_Demux5,
|
||||||
|
GateFunc_Demux6,
|
||||||
|
GateFunc_Demux7,
|
||||||
|
GateFunc_Demux8,
|
||||||
|
GateFunc_Rom4x1,
|
||||||
|
GateFunc_Rom4x4,
|
||||||
|
GateFunc_Rom4x8,
|
||||||
|
GateFunc_Rom6x1,
|
||||||
|
GateFunc_Rom6x4,
|
||||||
|
GateFunc_Rom6x8,
|
||||||
|
GateFunc_Rom6x16,
|
||||||
|
GateFunc_Rom6x32,
|
||||||
|
GateFunc_Rom6x48,
|
||||||
|
GateFunc_Rom6x64,
|
||||||
|
GateFunc_Rom8x1,
|
||||||
|
GateFunc_Rom8x4,
|
||||||
|
GateFunc_Rom8x8,
|
||||||
|
GateFunc_Rom8x16,
|
||||||
|
GateFunc_Rom8x32,
|
||||||
|
GateFunc_Rom8x48,
|
||||||
|
GateFunc_Rom8x64,
|
||||||
|
GateFunc_Rom9x1,
|
||||||
|
GateFunc_Rom9x4,
|
||||||
|
GateFunc_Rom9x8,
|
||||||
|
GateFunc_Rom9x16,
|
||||||
|
GateFunc_Rom9x32,
|
||||||
|
GateFunc_Rom9x48,
|
||||||
|
GateFunc_Rom9x64,
|
||||||
|
GateFunc_Rom10x8,
|
||||||
|
GateFunc_Rom10x16,
|
||||||
|
GateFunc_Rom10x32,
|
||||||
|
GateFunc_Rom10x48,
|
||||||
|
GateFunc_Rom10x64,
|
||||||
|
GateFunc_Rom11x8,
|
||||||
|
GateFunc_Rom11x16,
|
||||||
|
GateFunc_Rom11x32,
|
||||||
|
GateFunc_Rom11x48,
|
||||||
|
GateFunc_Rom11x64,
|
||||||
|
GateFunc_Rom12x8,
|
||||||
|
GateFunc_Rom12x16,
|
||||||
|
GateFunc_Rom12x32,
|
||||||
|
GateFunc_Rom12x48,
|
||||||
|
GateFunc_Rom12x64,
|
||||||
};
|
};
|
||||||
|
|
||||||
GATEFUNC(Diode) { setport(2, getport(1)); }
|
GATEFUNC(Diode) { setport(2, getport(1)); }
|
||||||
@ -128,6 +183,61 @@ GATEFUNC(DFF24) { if(getport(49)) { copyword(24, 1, 25); } }
|
|||||||
GATEFUNC(DFF32) { if(getport(65)) { copyword(32, 1, 33); } }
|
GATEFUNC(DFF32) { if(getport(65)) { copyword(32, 1, 33); } }
|
||||||
GATEFUNC(DFF48) { if(getport(97)) { copyword(48, 1, 49); } }
|
GATEFUNC(DFF48) { if(getport(97)) { copyword(48, 1, 49); } }
|
||||||
GATEFUNC(DFF64) { if(getport(129)) { copyword(64, 1, 65); } }
|
GATEFUNC(DFF64) { if(getport(129)) { copyword(64, 1, 65); } }
|
||||||
|
GATEFUNC(Mux1) { if(getport(4)) { setport(5, getport(getword(1, 1)+2)); } else { setport(5, 0); } }
|
||||||
|
GATEFUNC(Mux2) { if(getport(7)) { setport(8, getport(getword(2, 1)+3)); } else { setport(8, 0); } }
|
||||||
|
GATEFUNC(Mux3) { if(getport(12)) { setport(13, getport(getword(3, 1)+4)); } else { setport(13, 0); } }
|
||||||
|
GATEFUNC(Mux4) { if(getport(21)) { setport(22, getport(getword(4, 1)+5)); } else { setport(22, 0); } }
|
||||||
|
GATEFUNC(Mux5) { if(getport(38)) { setport(39, getport(getword(5, 1)+6)); } else { setport(39, 0); } }
|
||||||
|
GATEFUNC(Mux6) { if(getport(71)) { setport(72, getport(getword(6, 1)+7)); } else { setport(72, 0); } }
|
||||||
|
GATEFUNC(Mux7) { if(getport(136)) { setport(137, getport(getword(7, 1)+8)); } else { setport(137, 0); } }
|
||||||
|
GATEFUNC(Mux8) { if(getport(265)) { setport(266, getport(getword(8, 1)+9)); } else { setport(266, 0); } }
|
||||||
|
GATEFUNC(Demux1) { int pa = getdata(0); if(getport(4)) { int a = getword(1, 1) + 2; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux2) { int pa = getdata(0); if(getport(7)) { int a = getword(2, 1) + 3; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux3) { int pa = getdata(0); if(getport(12)) { int a = getword(3, 1) + 4; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux4) { int pa = getdata(0); if(getport(21)) { int a = getword(4, 1) + 5; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux5) { int pa = getdata(0); if(getport(38)) { int a = getword(5, 1) + 6; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux6) { int pa = getdata(0); if(getport(71)) { int a = getword(6, 1) + 7; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux7) { int pa = getdata(0); if(getport(136)) { int a = getword(7, 1) + 8; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
GATEFUNC(Demux8) { int pa = getdata(0); if(getport(265)) { int a = getword(8, 1) + 9; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } }
|
||||||
|
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); } }
|
||||||
|
GATEFUNC(Rom6x1) { if(getport(8)) { int a = getword(6, 1); for(int i=0; i<1; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(1, 7); } }
|
||||||
|
GATEFUNC(Rom6x4) { if(getport(11)) { int a = getword(6, 1); for(int i=0; i<4; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(4, 7); } }
|
||||||
|
GATEFUNC(Rom6x8) { if(getport(15)) { int a = getword(6, 1); for(int i=0; i<8; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(8, 7); } }
|
||||||
|
GATEFUNC(Rom6x16) { if(getport(23)) { int a = getword(6, 1); for(int i=0; i<16; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(16, 7); } }
|
||||||
|
GATEFUNC(Rom6x32) { if(getport(39)) { int a = getword(6, 1); for(int i=0; i<32; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(32, 7); } }
|
||||||
|
GATEFUNC(Rom6x48) { if(getport(55)) { int a = getword(6, 1); for(int i=0; i<48; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(48, 7); } }
|
||||||
|
GATEFUNC(Rom6x64) { if(getport(71)) { int a = getword(6, 1); for(int i=0; i<64; i++) { setport(7+i, getdata(a + i*64)); } } else { clearword(64, 7); } }
|
||||||
|
GATEFUNC(Rom8x1) { if(getport(10)) { int a = getword(8, 1); for(int i=0; i<1; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(1, 9); } }
|
||||||
|
GATEFUNC(Rom8x4) { if(getport(13)) { int a = getword(8, 1); for(int i=0; i<4; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(4, 9); } }
|
||||||
|
GATEFUNC(Rom8x8) { if(getport(17)) { int a = getword(8, 1); for(int i=0; i<8; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(8, 9); } }
|
||||||
|
GATEFUNC(Rom8x16) { if(getport(25)) { int a = getword(8, 1); for(int i=0; i<16; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(16, 9); } }
|
||||||
|
GATEFUNC(Rom8x32) { if(getport(41)) { int a = getword(8, 1); for(int i=0; i<32; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(32, 9); } }
|
||||||
|
GATEFUNC(Rom8x48) { if(getport(57)) { int a = getword(8, 1); for(int i=0; i<48; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(48, 9); } }
|
||||||
|
GATEFUNC(Rom8x64) { if(getport(73)) { int a = getword(8, 1); for(int i=0; i<64; i++) { setport(9+i, getdata(a + i*256)); } } else { clearword(64, 9); } }
|
||||||
|
GATEFUNC(Rom9x1) { if(getport(11)) { int a = getword(9, 1); for(int i=0; i<1; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(1, 10); } }
|
||||||
|
GATEFUNC(Rom9x4) { if(getport(14)) { int a = getword(9, 1); for(int i=0; i<4; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(4, 10); } }
|
||||||
|
GATEFUNC(Rom9x8) { if(getport(18)) { int a = getword(9, 1); for(int i=0; i<8; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(8, 10); } }
|
||||||
|
GATEFUNC(Rom9x16) { if(getport(26)) { int a = getword(9, 1); for(int i=0; i<16; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(16, 10); } }
|
||||||
|
GATEFUNC(Rom9x32) { if(getport(42)) { int a = getword(9, 1); for(int i=0; i<32; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(32, 10); } }
|
||||||
|
GATEFUNC(Rom9x48) { if(getport(58)) { int a = getword(9, 1); for(int i=0; i<48; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(48, 10); } }
|
||||||
|
GATEFUNC(Rom9x64) { if(getport(74)) { int a = getword(9, 1); for(int i=0; i<64; i++) { setport(10+i, getdata(a + i*512)); } } else { clearword(64, 10); } }
|
||||||
|
GATEFUNC(Rom10x8) { if(getport(19)) { int a = getword(10, 1); for(int i=0; i<8; i++) { setport(11+i, getdata(a + i*1024)); } } else { clearword(8, 11); } }
|
||||||
|
GATEFUNC(Rom10x16) { if(getport(27)) { int a = getword(10, 1); for(int i=0; i<16; i++) { setport(11+i, getdata(a + i*1024)); } } else { clearword(16, 11); } }
|
||||||
|
GATEFUNC(Rom10x32) { if(getport(43)) { int a = getword(10, 1); for(int i=0; i<32; i++) { setport(11+i, getdata(a + i*1024)); } } else { clearword(32, 11); } }
|
||||||
|
GATEFUNC(Rom10x48) { if(getport(59)) { int a = getword(10, 1); for(int i=0; i<48; i++) { setport(11+i, getdata(a + i*1024)); } } else { clearword(48, 11); } }
|
||||||
|
GATEFUNC(Rom10x64) { if(getport(75)) { int a = getword(10, 1); for(int i=0; i<64; i++) { setport(11+i, getdata(a + i*1024)); } } else { clearword(64, 11); } }
|
||||||
|
GATEFUNC(Rom11x8) { if(getport(20)) { int a = getword(11, 1); for(int i=0; i<8; i++) { setport(12+i, getdata(a + i*2048)); } } else { clearword(8, 12); } }
|
||||||
|
GATEFUNC(Rom11x16) { if(getport(28)) { int a = getword(11, 1); for(int i=0; i<16; i++) { setport(12+i, getdata(a + i*2048)); } } else { clearword(16, 12); } }
|
||||||
|
GATEFUNC(Rom11x32) { if(getport(44)) { int a = getword(11, 1); for(int i=0; i<32; i++) { setport(12+i, getdata(a + i*2048)); } } else { clearword(32, 12); } }
|
||||||
|
GATEFUNC(Rom11x48) { if(getport(60)) { int a = getword(11, 1); for(int i=0; i<48; i++) { setport(12+i, getdata(a + i*2048)); } } else { clearword(48, 12); } }
|
||||||
|
GATEFUNC(Rom11x64) { if(getport(76)) { int a = getword(11, 1); for(int i=0; i<64; i++) { setport(12+i, getdata(a + i*2048)); } } else { clearword(64, 12); } }
|
||||||
|
GATEFUNC(Rom12x8) { if(getport(21)) { int a = getword(12, 1); for(int i=0; i<8; i++) { setport(13+i, getdata(a + i*4096)); } } else { clearword(8, 13); } }
|
||||||
|
GATEFUNC(Rom12x16) { if(getport(29)) { int a = getword(12, 1); for(int i=0; i<16; i++) { setport(13+i, getdata(a + i*4096)); } } else { clearword(16, 13); } }
|
||||||
|
GATEFUNC(Rom12x32) { if(getport(45)) { int a = getword(12, 1); for(int i=0; i<32; i++) { setport(13+i, getdata(a + i*4096)); } } else { clearword(32, 13); } }
|
||||||
|
GATEFUNC(Rom12x48) { if(getport(61)) { int a = getword(12, 1); for(int i=0; i<48; i++) { setport(13+i, getdata(a + i*4096)); } } else { clearword(48, 13); } }
|
||||||
|
GATEFUNC(Rom12x64) { if(getport(77)) { int a = getword(12, 1); for(int i=0; i<64; i++) { setport(13+i, getdata(a + i*4096)); } } else { clearword(64, 13); } }
|
||||||
|
|
||||||
GateFunc sim_logic_functions[] = {
|
GateFunc sim_logic_functions[] = {
|
||||||
0,
|
0,
|
||||||
@ -193,5 +303,60 @@ GateFunc sim_logic_functions[] = {
|
|||||||
GATEFUNCID(DFF32),
|
GATEFUNCID(DFF32),
|
||||||
GATEFUNCID(DFF48),
|
GATEFUNCID(DFF48),
|
||||||
GATEFUNCID(DFF64),
|
GATEFUNCID(DFF64),
|
||||||
|
GATEFUNCID(Mux1),
|
||||||
|
GATEFUNCID(Mux2),
|
||||||
|
GATEFUNCID(Mux3),
|
||||||
|
GATEFUNCID(Mux4),
|
||||||
|
GATEFUNCID(Mux5),
|
||||||
|
GATEFUNCID(Mux6),
|
||||||
|
GATEFUNCID(Mux7),
|
||||||
|
GATEFUNCID(Mux8),
|
||||||
|
GATEFUNCID(Demux1),
|
||||||
|
GATEFUNCID(Demux2),
|
||||||
|
GATEFUNCID(Demux3),
|
||||||
|
GATEFUNCID(Demux4),
|
||||||
|
GATEFUNCID(Demux5),
|
||||||
|
GATEFUNCID(Demux6),
|
||||||
|
GATEFUNCID(Demux7),
|
||||||
|
GATEFUNCID(Demux8),
|
||||||
|
GATEFUNCID(Rom4x1),
|
||||||
|
GATEFUNCID(Rom4x4),
|
||||||
|
GATEFUNCID(Rom4x8),
|
||||||
|
GATEFUNCID(Rom6x1),
|
||||||
|
GATEFUNCID(Rom6x4),
|
||||||
|
GATEFUNCID(Rom6x8),
|
||||||
|
GATEFUNCID(Rom6x16),
|
||||||
|
GATEFUNCID(Rom6x32),
|
||||||
|
GATEFUNCID(Rom6x48),
|
||||||
|
GATEFUNCID(Rom6x64),
|
||||||
|
GATEFUNCID(Rom8x1),
|
||||||
|
GATEFUNCID(Rom8x4),
|
||||||
|
GATEFUNCID(Rom8x8),
|
||||||
|
GATEFUNCID(Rom8x16),
|
||||||
|
GATEFUNCID(Rom8x32),
|
||||||
|
GATEFUNCID(Rom8x48),
|
||||||
|
GATEFUNCID(Rom8x64),
|
||||||
|
GATEFUNCID(Rom9x1),
|
||||||
|
GATEFUNCID(Rom9x4),
|
||||||
|
GATEFUNCID(Rom9x8),
|
||||||
|
GATEFUNCID(Rom9x16),
|
||||||
|
GATEFUNCID(Rom9x32),
|
||||||
|
GATEFUNCID(Rom9x48),
|
||||||
|
GATEFUNCID(Rom9x64),
|
||||||
|
GATEFUNCID(Rom10x8),
|
||||||
|
GATEFUNCID(Rom10x16),
|
||||||
|
GATEFUNCID(Rom10x32),
|
||||||
|
GATEFUNCID(Rom10x48),
|
||||||
|
GATEFUNCID(Rom10x64),
|
||||||
|
GATEFUNCID(Rom11x8),
|
||||||
|
GATEFUNCID(Rom11x16),
|
||||||
|
GATEFUNCID(Rom11x32),
|
||||||
|
GATEFUNCID(Rom11x48),
|
||||||
|
GATEFUNCID(Rom11x64),
|
||||||
|
GATEFUNCID(Rom12x8),
|
||||||
|
GATEFUNCID(Rom12x16),
|
||||||
|
GATEFUNCID(Rom12x32),
|
||||||
|
GATEFUNCID(Rom12x48),
|
||||||
|
GATEFUNCID(Rom12x64),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -187,8 +187,133 @@ cFuncsByName = {
|
|||||||
["d flipflop 64 bit"] = 62,
|
["d flipflop 64 bit"] = 62,
|
||||||
["d flipflop 64 bit up"] = 62,
|
["d flipflop 64 bit up"] = 62,
|
||||||
["d flipflop 64 bit down"] = 62,
|
["d flipflop 64 bit down"] = 62,
|
||||||
|
["mux 1 bit"] = 63,
|
||||||
|
["mux 1 bit vertical"] = 63,
|
||||||
|
["mux 2 bit"] = 64,
|
||||||
|
["mux 2 bit vertical"] = 64,
|
||||||
|
["mux 3 bit"] = 65,
|
||||||
|
["mux 3 bit vertical"] = 65,
|
||||||
|
["mux 4 bit"] = 66,
|
||||||
|
["mux 4 bit vertical"] = 66,
|
||||||
|
["mux 5 bit"] = 67,
|
||||||
|
["mux 5 bit vertical"] = 67,
|
||||||
|
["mux 6 bit"] = 68,
|
||||||
|
["mux 6 bit vertical"] = 68,
|
||||||
|
["mux 7 bit"] = 69,
|
||||||
|
["mux 7 bit vertical"] = 69,
|
||||||
|
["mux 8 bit"] = 70,
|
||||||
|
["mux 8 bit vertical"] = 70,
|
||||||
|
["demux 1 bit"] = 71,
|
||||||
|
["demux 1 bit vertical"] = 71,
|
||||||
|
["demux 2 bit"] = 72,
|
||||||
|
["demux 2 bit vertical"] = 72,
|
||||||
|
["demux 3 bit"] = 73,
|
||||||
|
["demux 3 bit vertical"] = 73,
|
||||||
|
["demux 4 bit"] = 74,
|
||||||
|
["demux 4 bit vertical"] = 74,
|
||||||
|
["demux 5 bit"] = 75,
|
||||||
|
["demux 5 bit vertical"] = 75,
|
||||||
|
["demux 6 bit"] = 76,
|
||||||
|
["demux 6 bit vertical"] = 76,
|
||||||
|
["demux 7 bit"] = 77,
|
||||||
|
["demux 7 bit vertical"] = 77,
|
||||||
|
["demux 8 bit"] = 78,
|
||||||
|
["demux 8 bit vertical"] = 78,
|
||||||
|
["rom 4x4x1"] = 79,
|
||||||
|
["rom 4x4x4"] = 80,
|
||||||
|
["rom 8x2x8"] = 81,
|
||||||
|
["rom 8x8x1"] = 82,
|
||||||
|
["rom 8x8x4"] = 83,
|
||||||
|
["rom 8x8x8"] = 84,
|
||||||
|
["rom 16x4x16"] = 85,
|
||||||
|
["rom 32x2x32"] = 86,
|
||||||
|
["rom 64x1x48"] = 87,
|
||||||
|
["rom 64x1x64"] = 88,
|
||||||
|
["rom 16x16x1"] = 89,
|
||||||
|
["rom 16x16x4"] = 90,
|
||||||
|
["rom 16x16x8"] = 91,
|
||||||
|
["rom 16x16x16"] = 92,
|
||||||
|
["rom 32x8x32"] = 93,
|
||||||
|
["rom 64x4x48"] = 94,
|
||||||
|
["rom 64x4x64"] = 95,
|
||||||
|
["rom 32x16x1"] = 96,
|
||||||
|
["rom 32x16x4"] = 97,
|
||||||
|
["rom 32x16x8"] = 98,
|
||||||
|
["rom 32x16x16"] = 99,
|
||||||
|
["rom 32x16x32"] = 100,
|
||||||
|
["rom 64x8x48"] = 101,
|
||||||
|
["rom 64x8x64"] = 102,
|
||||||
|
["rom 32x32x8"] = 103,
|
||||||
|
["rom 32x32x16"] = 104,
|
||||||
|
["rom 32x32x32"] = 105,
|
||||||
|
["rom 64x16x48"] = 106,
|
||||||
|
["rom 64x16x64"] = 107,
|
||||||
|
["rom 64x32x8"] = 108,
|
||||||
|
["rom 64x32x16"] = 109,
|
||||||
|
["rom 64x32x32"] = 110,
|
||||||
|
["rom 64x32x48"] = 111,
|
||||||
|
["rom 64x32x64"] = 112,
|
||||||
|
["rom 64x64x8"] = 113,
|
||||||
|
["rom 64x64x16"] = 114,
|
||||||
|
["rom 64x64x32"] = 115,
|
||||||
|
["rom 64x64x48"] = 116,
|
||||||
|
["rom 64x64x64"] = 117,
|
||||||
}
|
}
|
||||||
|
|
||||||
cDataSizeByName = {
|
cDataSizeByName = {
|
||||||
|
["demux 1 bit"] = 1,
|
||||||
|
["demux 1 bit vertical"] = 1,
|
||||||
|
["demux 2 bit"] = 1,
|
||||||
|
["demux 2 bit vertical"] = 1,
|
||||||
|
["demux 3 bit"] = 1,
|
||||||
|
["demux 3 bit vertical"] = 1,
|
||||||
|
["demux 4 bit"] = 1,
|
||||||
|
["demux 4 bit vertical"] = 1,
|
||||||
|
["demux 5 bit"] = 1,
|
||||||
|
["demux 5 bit vertical"] = 1,
|
||||||
|
["demux 6 bit"] = 1,
|
||||||
|
["demux 6 bit vertical"] = 1,
|
||||||
|
["demux 7 bit"] = 1,
|
||||||
|
["demux 7 bit vertical"] = 1,
|
||||||
|
["demux 8 bit"] = 1,
|
||||||
|
["demux 8 bit vertical"] = 1,
|
||||||
|
["rom 4x4x1"] = 16,
|
||||||
|
["rom 4x4x4"] = 64,
|
||||||
|
["rom 8x2x8"] = 128,
|
||||||
|
["rom 8x8x1"] = 64,
|
||||||
|
["rom 8x8x4"] = 256,
|
||||||
|
["rom 8x8x8"] = 512,
|
||||||
|
["rom 16x4x16"] = 1024,
|
||||||
|
["rom 32x2x32"] = 2048,
|
||||||
|
["rom 64x1x48"] = 3072,
|
||||||
|
["rom 64x1x64"] = 4096,
|
||||||
|
["rom 16x16x1"] = 256,
|
||||||
|
["rom 16x16x4"] = 1024,
|
||||||
|
["rom 16x16x8"] = 2048,
|
||||||
|
["rom 16x16x16"] = 4096,
|
||||||
|
["rom 32x8x32"] = 8192,
|
||||||
|
["rom 64x4x48"] = 12288,
|
||||||
|
["rom 64x4x64"] = 16384,
|
||||||
|
["rom 32x16x1"] = 512,
|
||||||
|
["rom 32x16x4"] = 2048,
|
||||||
|
["rom 32x16x8"] = 4096,
|
||||||
|
["rom 32x16x16"] = 8192,
|
||||||
|
["rom 32x16x32"] = 16384,
|
||||||
|
["rom 64x8x48"] = 24576,
|
||||||
|
["rom 64x8x64"] = 32768,
|
||||||
|
["rom 32x32x8"] = 8192,
|
||||||
|
["rom 32x32x16"] = 16384,
|
||||||
|
["rom 32x32x32"] = 32768,
|
||||||
|
["rom 64x16x48"] = 49152,
|
||||||
|
["rom 64x16x64"] = 65536,
|
||||||
|
["rom 64x32x8"] = 16384,
|
||||||
|
["rom 64x32x16"] = 32768,
|
||||||
|
["rom 64x32x32"] = 65536,
|
||||||
|
["rom 64x32x48"] = 98304,
|
||||||
|
["rom 64x32x64"] = 131072,
|
||||||
|
["rom 64x64x8"] = 32768,
|
||||||
|
["rom 64x64x16"] = 65536,
|
||||||
|
["rom 64x64x32"] = 131072,
|
||||||
|
["rom 64x64x48"] = 196608,
|
||||||
|
["rom 64x64x64"] = 262144,
|
||||||
}
|
}
|
||||||
|
25625
sim/dump.txt
25625
sim/dump.txt
File diff suppressed because it is too large
Load Diff
10
sim/gate.lua
10
sim/gate.lua
@ -86,6 +86,16 @@ function Gate.getdata(gate)
|
|||||||
return gate.data
|
return gate.data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Gate.getcdata(gate, i)
|
||||||
|
assert(i>=0 and i<gate.c.data_size)
|
||||||
|
return gate.c.data[i]
|
||||||
|
end
|
||||||
|
|
||||||
|
function Gate.setcdata(gate, i, v)
|
||||||
|
assert(i>=0 and i<gate.c.data_size)
|
||||||
|
gate.c.data[i] = v
|
||||||
|
end
|
||||||
|
|
||||||
function Gate.getportisrising(gate, index)
|
function Gate.getportisrising(gate, index)
|
||||||
return Port.isrising(gate.ports[index])
|
return Port.isrising(gate.ports[index])
|
||||||
end
|
end
|
||||||
|
@ -66,15 +66,33 @@ local function exportGates(gates)
|
|||||||
))
|
))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function log2(n) return math.log(n)/math.log(2) 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 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 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 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 function createMux(n) return { name = "Mux"..n, names = {"Mux "..n.." Bit", "Mux "..n.." Bit Vertical"}, func = "if(getport("..(n+math.pow(2,n)+1)..")) { setport("..(n+math.pow(2,n)+2)..", getport(getword("..n..", 1)+"..(n+1)..")); } else { setport("..(n+math.pow(2,n)+2)..", 0); }"} end
|
||||||
|
local function createDemux(n) return { name = "Demux"..n, names = {"Demux "..n.." Bit", "Demux "..n.." Bit Vertical"}, size = 1, func = "int pa = getdata(0); if(getport("..(n+math.pow(2,n)+1)..")) { int a = getword("..n..", 1) + "..(n+1).."; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } }"} end
|
||||||
|
local function createRom(x, y, z) local w = log2(x*y); return {name = "Rom"..w.."x"..z, names = {"ROM "..x.."x"..y.."x"..z}, size = x*y*z, func="if(getport("..(w+z+1)..")) { int a = getword("..w..", 1); for(int i=0; i<"..z.."; i++) { setport("..(w+1).."+i, getdata(a + i*"..(x*y)..")); } } else { clearword("..z..", "..(w+1).."); }" } end
|
||||||
|
|
||||||
|
local romsizes = { -- copied from brick gen
|
||||||
|
-- 1 bit data 4 bit data 8 bit data 16 bit data 32 bit data 48 bit data 64 bit data
|
||||||
|
{ 4, 4 }, { 4, 4, 4}, { 8, 2, 8}, -- 4 bit addr
|
||||||
|
{ 8, 8 }, { 8, 8, 4}, { 8, 8, 8}, {16, 4, 16}, {32, 2, 32}, {64, 1, 48}, {64, 1, 64}, -- 6 bit addr
|
||||||
|
{16, 16 }, {16, 16, 4}, {16, 16, 8}, {16, 16, 16}, {32, 8, 32}, {64, 4, 48}, {64, 4, 64}, -- 8 bit addr
|
||||||
|
{32, 16 }, {32, 16, 4}, {32, 16, 8}, {32, 16, 16}, {32, 16, 32}, {64, 8, 48}, {64, 8, 64}, -- 9 bit addr
|
||||||
|
{32, 32, 8}, {32, 32, 16}, {32, 32, 32}, {64, 16, 48}, {64, 16, 64}, -- 10 bit addr
|
||||||
|
{64, 32, 8}, {64, 32, 16}, {64, 32, 32}, {64, 32, 48}, {64, 32, 64}, -- 11 bit addr
|
||||||
|
{64, 64, 8}, {64, 64, 16}, {64, 64, 32}, {64, 64, 48}, {64, 64, 64}, -- 12 bit addr
|
||||||
|
}
|
||||||
local gates = {
|
local gates = {
|
||||||
{ name = "Diode", names = {"Diode", "Diode Up", "Diode Down"}, 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));" },
|
{ 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),
|
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),
|
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),
|
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),
|
||||||
|
createMux (1), createMux (2), createMux (3), createMux (4), createMux (5), createMux (6), createMux (7), createMux (8),
|
||||||
|
createDemux(1), createDemux(2), createDemux(3), createDemux(4), createDemux(5), createDemux(6), createDemux(7), createDemux(8),
|
||||||
}
|
}
|
||||||
|
for i, size in ipairs(romsizes) do table.insert(gates, createRom(size[1], size[2], size[3] or 1)) end
|
||||||
|
|
||||||
exportGates(gates)
|
exportGates(gates)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user