add adders to c func

This commit is contained in:
Redo 2022-11-14 14:30:12 -06:00
parent 5ddbb464d5
commit 293ed331bd
5 changed files with 20578 additions and 20223 deletions

Binary file not shown.

View File

@ -80,6 +80,12 @@ enum GateFuncs {
GateFunc_Demux6, GateFunc_Demux6,
GateFunc_Demux7, GateFunc_Demux7,
GateFunc_Demux8, GateFunc_Demux8,
GateFunc_Adder1,
GateFunc_Adder2,
GateFunc_Adder4,
GateFunc_Adder8,
GateFunc_Adder16,
GateFunc_Adder32,
GateFunc_Rom4x1, GateFunc_Rom4x1,
GateFunc_Rom4x4, GateFunc_Rom4x4,
GateFunc_Rom4x8, GateFunc_Rom4x8,
@ -199,6 +205,12 @@ GATEFUNC(Demux5) { int pa = getdata(0); if(getport(38)) { int a = getword(5, 1)
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(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(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(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(Adder1) { int v = getword(1, 1) + getword(1, 2) + getport(4); setword(1, 3, v); setport(4, (v>>1) & 1); }
GATEFUNC(Adder2) { int v = getword(2, 1) + getword(2, 3) + getport(7); setword(2, 5, v); setport(7, (v>>2) & 1); }
GATEFUNC(Adder4) { int v = getword(4, 1) + getword(4, 5) + getport(13); setword(4, 9, v); setport(13, (v>>4) & 1); }
GATEFUNC(Adder8) { int v = getword(8, 1) + getword(8, 9) + getport(25); setword(8, 17, v); setport(25, (v>>8) & 1); }
GATEFUNC(Adder16) { int v = getword(16, 1) + getword(16, 17) + getport(49); setword(16, 33, v); setport(49, (v>>16) & 1); }
GATEFUNC(Adder32) { unsigned long long v = getword(32, 1) + getword(32, 33) + getport(97); setword(32, 65, v); setport(97, (v>>32) & 1); }
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(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(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(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); } }
@ -319,6 +331,12 @@ GateFunc sim_logic_functions[] = {
GATEFUNCID(Demux6), GATEFUNCID(Demux6),
GATEFUNCID(Demux7), GATEFUNCID(Demux7),
GATEFUNCID(Demux8), GATEFUNCID(Demux8),
GATEFUNCID(Adder1),
GATEFUNCID(Adder2),
GATEFUNCID(Adder4),
GATEFUNCID(Adder8),
GATEFUNCID(Adder16),
GATEFUNCID(Adder32),
GATEFUNCID(Rom4x1), GATEFUNCID(Rom4x1),
GATEFUNCID(Rom4x4), GATEFUNCID(Rom4x4),
GATEFUNCID(Rom4x8), GATEFUNCID(Rom4x8),

View File

@ -219,45 +219,51 @@ cFuncsByName = {
["demux 7 bit vertical"] = 77, ["demux 7 bit vertical"] = 77,
["demux 8 bit"] = 78, ["demux 8 bit"] = 78,
["demux 8 bit vertical"] = 78, ["demux 8 bit vertical"] = 78,
["rom 4x4"] = 79, ["adder 1 bit"] = 79,
["rom 4x4x4"] = 80, ["adder 2 bit"] = 80,
["rom 8x2x8"] = 81, ["adder 4 bit"] = 81,
["rom 8x8"] = 82, ["adder 8 bit"] = 82,
["rom 8x8x4"] = 83, ["adder 16 bit"] = 83,
["rom 8x8x8"] = 84, ["adder 32 bit"] = 84,
["rom 16x4x16"] = 85, ["rom 4x4"] = 85,
["rom 32x2x32"] = 86, ["rom 4x4x4"] = 86,
["rom 64x1x48"] = 87, ["rom 8x2x8"] = 87,
["rom 64x1x64"] = 88, ["rom 8x8"] = 88,
["rom 16x16"] = 89, ["rom 8x8x4"] = 89,
["rom 16x16x4"] = 90, ["rom 8x8x8"] = 90,
["rom 16x16x8"] = 91, ["rom 16x4x16"] = 91,
["rom 16x16x16"] = 92, ["rom 32x2x32"] = 92,
["rom 32x8x32"] = 93, ["rom 64x1x48"] = 93,
["rom 64x4x48"] = 94, ["rom 64x1x64"] = 94,
["rom 64x4x64"] = 95, ["rom 16x16"] = 95,
["rom 32x16"] = 96, ["rom 16x16x4"] = 96,
["rom 32x16x4"] = 97, ["rom 16x16x8"] = 97,
["rom 32x16x8"] = 98, ["rom 16x16x16"] = 98,
["rom 32x16x16"] = 99, ["rom 32x8x32"] = 99,
["rom 32x16x32"] = 100, ["rom 64x4x48"] = 100,
["rom 64x8x48"] = 101, ["rom 64x4x64"] = 101,
["rom 64x8x64"] = 102, ["rom 32x16"] = 102,
["rom 32x32x8"] = 103, ["rom 32x16x4"] = 103,
["rom 32x32x16"] = 104, ["rom 32x16x8"] = 104,
["rom 32x32x32"] = 105, ["rom 32x16x16"] = 105,
["rom 64x16x48"] = 106, ["rom 32x16x32"] = 106,
["rom 64x16x64"] = 107, ["rom 64x8x48"] = 107,
["rom 64x32x8"] = 108, ["rom 64x8x64"] = 108,
["rom 64x32x16"] = 109, ["rom 32x32x8"] = 109,
["rom 64x32x32"] = 110, ["rom 32x32x16"] = 110,
["rom 64x32x48"] = 111, ["rom 32x32x32"] = 111,
["rom 64x32x64"] = 112, ["rom 64x16x48"] = 112,
["rom 64x64x8"] = 113, ["rom 64x16x64"] = 113,
["rom 64x64x16"] = 114, ["rom 64x32x8"] = 114,
["rom 64x64x32"] = 115, ["rom 64x32x16"] = 115,
["rom 64x64x48"] = 116, ["rom 64x32x32"] = 116,
["rom 64x64x64"] = 117, ["rom 64x32x48"] = 117,
["rom 64x32x64"] = 118,
["rom 64x64x8"] = 119,
["rom 64x64x16"] = 120,
["rom 64x64x32"] = 121,
["rom 64x64x48"] = 122,
["rom 64x64x64"] = 123,
} }
cDataSizeByName = { cDataSizeByName = {

40691
sim/dump.txt

File diff suppressed because it is too large Load Diff

View File

@ -70,9 +70,10 @@ 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 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 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..(z>1 and ("x"..z) or "")}, 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 function createRom(x, y, z) local w = log2(x*y); return { name = "Rom"..w.."x"..z, names = {"ROM "..x.."x"..y..(z>1 and ("x"..z) or "")}, 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 function createAdder(n) return { name = "Adder"..n, names = {"Adder "..n.." Bit"}, func = (n>=32 and "unsigned long long" or "int").." v = getword("..n..", 1) + getword("..n..", "..(n+1)..") + getport("..(n*3+1).."); setword("..n..", "..(n*2+1)..", v); setport("..(n*3+1)..", (v>>"..n..") & 1);" } end
local romsizes = { -- copied from brick gen 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 -- 1 bit data 4 bit data 8 bit data 16 bit data 32 bit data 48 bit data 64 bit data
@ -92,6 +93,7 @@ local gates = {
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), 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), createDemux(1), createDemux(2), createDemux(3), createDemux(4), createDemux(5), createDemux(6), createDemux(7), createDemux(8),
createAdder(1), createAdder(2), createAdder(4), createAdder(8), createAdder(16), createAdder(32),
} }
for i, size in ipairs(romsizes) do table.insert(gates, createRom(size[1], size[2], size[3] or 1)) end for i, size in ipairs(romsizes) do table.insert(gates, createRom(size[1], size[2], size[3] or 1)) end