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_DFF48,
|
||||
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)); }
|
||||
@ -128,6 +183,61 @@ 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(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[] = {
|
||||
0,
|
||||
@ -193,5 +303,60 @@ GateFunc sim_logic_functions[] = {
|
||||
GATEFUNCID(DFF32),
|
||||
GATEFUNCID(DFF48),
|
||||
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 up"] = 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 = {
|
||||
|
||||
["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
|
||||
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)
|
||||
return Port.isrising(gate.ports[index])
|
||||
end
|
||||
|
@ -66,15 +66,33 @@ local function exportGates(gates)
|
||||
))
|
||||
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 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 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 = {
|
||||
{ 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),
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user