add adders to c func
This commit is contained in:
parent
5ddbb464d5
commit
293ed331bd
Binary file not shown.
@ -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),
|
||||||
|
@ -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
40691
sim/dump.txt
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user