From WikiChip
Difference between revisions of "Module:microarchitecture"
Line 204: | Line 204: | ||
end | end | ||
add_entry(infobox, 'Extensions', extensions) | add_entry(infobox, 'Extensions', extensions) | ||
+ | end | ||
+ | |||
+ | add_header(infobox, 'Cache') | ||
+ | |||
+ | -- L1 | ||
+ | if string.len(frame.args.l1i or '') > 0 then | ||
+ | add_entry(infobox, 'L1i$', frame.args.l1i .. | ||
+ | string.len(frame.args.l1i_per or '') and ('/' .. frame.args.l1i_per) or '' .. | ||
+ | string.len(frame.args.l1i_desc or '') and ('<br>' .. frame.args.l1i_desc) or '' | ||
+ | ) | ||
end | end | ||
Revision as of 01:17, 25 May 2017
Documentation for this module may be created at Module:microarchitecture/doc
local uarch = {}
function add_header_main(box, str)
box
:tag('tr')
:tag('td')
:attr('class', 'header-main')
:attr('colspan', '2')
:wikitext(str)
end
function add_header(box, str)
box
:tag('tr')
:tag('td')
:attr('class', 'header')
:attr('colspan', '2')
:wikitext(str)
end
function add_entry(box, label, value)
local tag = box:tag('tr')
tag:tag('td')
:attr('class', 'label')
:wikitext(label)
tag:tag('td')
:attr('class', 'value')
:wikitext(value)
end
function uarch.uarch(frame)
local infobox = mw.html.create('table')
infobox
:attr('class', 'infobox')
-- header
if string.len(frame.args.name or '') == 0 then return 'ERROR: "name" is missing!' end
add_header_main(infobox, '[[codename::' .. frame.args.name .. '| ]][[name::' .. frame.args.name .. ']] µarch')
add_header(infobox, 'General Info')
-- arch type
if string.len(frame.args.atype or '') == 0 then return 'ERROR: "atype" is missing!' end
add_entry(infobox, 'Arch Type', frame.args.atype ..
'[[microarchitecture type::' .. frame.args.atype .. '| ]]' ..
'[[Category:' .. string.lower(frame.args.atype) .. ' microarchitectures by ' .. string.lower(frame.args.designer) .. ']]')
-- designer
if string.len(frame.args.designer or '') == 0 then return 'ERROR: "designer" is missing!' end
local devs
devs = '[[designer::' .. string.lower(frame.args.designer) .. '| ]]' .. frame.args.designer
devs = devs .. '[[Category:microarchitectures by ' .. string.lower(frame.args.designer) .. ']]'
for i = 2, 10 do
if string.len(frame.args['designer_' .. i] or '') == 0 then break end
devs = devs .. ', [[designer::' .. string.lower(frame.args['designer_' .. i]) .. '| ]]' ..
frame.args.designer ..
'[[Category:microarchitectures by ' .. string.lower(frame.args['designer_' .. i]) .. ']]'
end
add_entry(infobox, 'Designer', devs)
-- manufacturer
if string.len(frame.args.manufacturer or '') == 0 then return 'ERROR: "manufacturer" is missing!' end
local devs
devs = '[[manufacturer::' .. string.lower(frame.args.manufacturer) .. '| ]]'
.. frame.args.manufacturer
for i = 2, 10 do
if string.len(frame.args['manufacturer_' .. i] or '') == 0 then break end
devs = devs .. ', [[manufacturer::' .. string.lower(frame.args['manufacturer_' .. i]) .. '| ]]'
.. frame.args['manufacturer_' .. i]
end
add_entry(infobox, 'Manufacturer', devs)
-- intro
if string.len(frame.args.introduction or '') > 0 then
add_entry(infobox, 'Introduction', '[[first launched::' .. frame.args.introduction .. ']]')
end
-- phase-out
if string.len(frame.args.phase_out or '') > 0 then
add_entry(infobox, 'Phase-out', '[[phase-out::' .. frame.args.phase_out .. ']]')
end
-- process
if string.len(frame.args.process or '') > 0 then
local proc
proc = '[[process::' .. frame.args.process .. '| ]]' ..
'[[' .. frame.args.process .. ' process|' .. frame.args.process .. ']]'
for i = 2, 10 do
if string.len(frame.args['process_' .. i] or '') == 0 then break end
proc = proc .. ', [[process::' ..frame.args['process_' .. i] .. '| ]]'
.. '[['.. frame.args['process_' .. i] .. ' process|' .. frame.args['process_' .. i] .. ']]'
end
add_entry(infobox, 'Process', proc)
end
-- cores
if string.len(frame.args.cores or '') > 0 then
local core
core = '[[core count::' .. frame.args.cores .. '| ]]'
.. '[[' .. frame.args.cores .. ' cores|' .. frame.args.cores .. ']]'
for i = 2, 10 do
if string.len(frame.args['cores_' .. i] or '') == 0 then break end
core = core .. ', [[core count::' ..frame.args['cores_' .. i] .. '| ]]'
.. '[[' .. frame.args['cores_' .. i] .. ' cores|' .. frame.args['cores_' .. i] .. ']]'
end
add_entry(infobox, 'Core Configs', core)
end
add_header(infobox, 'Pipeline')
-- type
if string.len(frame.args.ptype or '') > 0 then
local ptype
ptype = frame.args.ptype
for i = 2, 10 do
if string.len(frame.args['ptype_' .. i] or '') == 0 then break end
ptype = ptype .. ', ' .. frame.args['ptype_' .. i]
end
add_entry(infobox, 'Type', ptype)
end
-- oooe
if string.len(frame.args.oooe or '') > 0 then
add_entry(infobox, 'OoOE', frame.args.oooe)
end
-- speculative
if string.len(frame.args.speculative or '') > 0 then
add_entry(infobox, 'Speculative', frame.args.speculative)
end
-- reg_renaming
if string.len(frame.args.reg_renaming or '') > 0 then
add_entry(infobox, 'Reg Renaming', frame.args.reg_renaming)
end
-- pstage
if string.len(frame.args.pstage or '') > 0 then
add_entry(infobox, 'Stages', '[[pipeline stages::' .. frame.args.pstage .. ']]')
end
-- pstage min/max
if string.len(frame.args.pstages_min or '') > 0 then
add_entry(infobox, 'Stages',
'[[pipeline stages (min)::' .. frame.args.pstages_min .. ']]'
.. '-[[pipeline stages (max)::' .. frame.args.pstages_max .. ']]')
end
-- decode
if string.len(frame.args.decode or '') > 0 then
add_entry(infobox, 'Decode', frame.args.decode)
end
add_header(infobox, 'Instructions')
-- ISA
if string.len(frame.args.isa or '') > 0 then
local isa
isa = '[[instruction set architecture::' .. frame.args.isa .. ']]'
for i = 2, 10 do
if string.len(frame.args['isa_' .. i] or '') == 0 then break end
isa = isa .. ', ' .. '[[instruction set architecture::' .. frame.args['isa_' .. i] .. ']]'
end
add_entry(infobox, 'ISA', isa)
end
-- features
if string.len(frame.args.features or '') > 0 then
local features
features = frame.args.features
for i = 2, 10 do
if string.len(frame.args['features_' .. i] or '') == 0 then break end
features = features .. ', ' .. frame.args['features_' .. i]
end
add_entry(infobox, 'Features', features)
end
-- extensions
if string.len(frame.args.extensions or '') > 0 then
local extensions
extensions = frame.args.extensions
for i = 2, 40 do
if string.len(frame.args['extensions_' .. i] or '') == 0 then break end
extensions = extensions .. ', ' .. frame.args['extensions_' .. i]
end
add_entry(infobox, 'Extensions', extensions)
end
add_header(infobox, 'Cache')
-- L1
if string.len(frame.args.l1i or '') > 0 then
add_entry(infobox, 'L1i$', frame.args.l1i ..
string.len(frame.args.l1i_per or '') and ('/' .. frame.args.l1i_per) or '' ..
string.len(frame.args.l1i_desc or '') and ('<br>' .. frame.args.l1i_desc) or ''
)
end
return infobox
end
return uarch