mem: More descriptive DRAM config names

This patch changes the class names of the variuos DRAM configurations
to better reflect what memory they are based on. The speed and
interface width is now part of the name, and also the alias that is
used to select them on the command line.

Some minor changes are done to the actual parameters, to better
reflect the named configurations. As a result of these changes the
regressions change slightly and the stats will be bumped in a separate
patch.
This commit is contained in:
Andreas Hansson 2013-05-30 12:54:14 -04:00
parent 83d99aebb1
commit 3bc4ecdcb4
13 changed files with 42 additions and 44 deletions

View file

@ -50,10 +50,10 @@ _mem_classes = {}
# first available memory controller model in the tuple will be used. # first available memory controller model in the tuple will be used.
_mem_aliases_all = [ _mem_aliases_all = [
("simple_mem", "SimpleMemory"), ("simple_mem", "SimpleMemory"),
("ddr3-1600", "SimpleDDR3"), ("ddr3_1600_x64", "DDR3_1600_x64"),
("lpddr2_s4-1066", "SimpleLPDDR2_S4"), ("lpddr2_s4_1066_x32", "LPDDR2_S4_1066_x32"),
("lpddr3-1600", "SimpleLPDDR3"), ("lpddr3_1600_x32", "LPDDR3_1600_x32"),
("wio-200", "SimpleWideIO"), ("wio_200_x128", "WideIO_200_x128"),
] ]
# Filtered list of aliases. Only aliases for existing memory # Filtered list of aliases. Only aliases for existing memory

View file

@ -172,14 +172,13 @@ class SimpleDRAM(AbstractMemory):
# burst length for an access derived from peerBlockSize # burst length for an access derived from peerBlockSize
# High-level model of a single DDR3 x64 interface (one command and # A single DDR3 x64 interface (one command and address bus), with
# address bus), with default timings based on a DDR3-1600 4 Gbit part, # default timings based on DDR3-1600 4 Gbit parts in an 8x8
# which would amount to 4 Gbyte of memory in 8x8 or 8 GByte in 16x4 # configuration, which would amount to 4 Gbyte of memory.
# configuration. class DDR3_1600_x64(SimpleDRAM):
class SimpleDDR3(SimpleDRAM): # Assuming 64 byte cache lines, and a 1kbyte page size per module
# Assuming 64 byte cache lines, use a 2kbyte page size, this # (this depends on the memory density)
# depends on the memory density lines_per_rowbuffer = 128
lines_per_rowbuffer = 32
# Use two ranks # Use two ranks
ranks_per_channel = 2 ranks_per_channel = 2
@ -192,11 +191,11 @@ class SimpleDDR3(SimpleDRAM):
tCL = '13.75ns' tCL = '13.75ns'
tRP = '13.75ns' tRP = '13.75ns'
# Assuming 64 byte cache lines, across an x64 (8x8 or 16x4) # Assuming 64 byte cache lines, across an x64
# interface, translates to BL8, 4 clocks @ 800 MHz # interface, translates to BL8, 4 clocks @ 800 MHz
tBURST = '5ns' tBURST = '5ns'
# DDR3, 4 Gb has a tRFC of 240 CK and tCK = 1.25 ns # DDR3, 4 Gbit has a tRFC of 240 CK and tCK = 1.25 ns
tRFC = '300ns' tRFC = '300ns'
# DDR3, <=85C, half for >85C # DDR3, <=85C, half for >85C
@ -210,10 +209,10 @@ class SimpleDDR3(SimpleDRAM):
activation_limit = 4 activation_limit = 4
# High-level model of a single LPDDR2-S4 x32 interface (one # A single LPDDR2-S4 x32 interface (one command/address bus), with
# command/address bus), with default timings based on a LPDDR2-1066 # default timings based on a LPDDR2-1066 4 Gbit part in a 1x32
# 4 Gbit part # configuration.
class SimpleLPDDR2_S4(SimpleDRAM): class LPDDR2_S4_1066_x32(SimpleDRAM):
# Assuming 64 byte cache lines, use a 1kbyte page size, this # Assuming 64 byte cache lines, use a 1kbyte page size, this
# depends on the memory density # depends on the memory density
lines_per_rowbuffer = 16 lines_per_rowbuffer = 16
@ -230,8 +229,8 @@ class SimpleLPDDR2_S4(SimpleDRAM):
# 8 CK read latency, 4 CK write latency @ 533 MHz, 1.876 ns cycle time # 8 CK read latency, 4 CK write latency @ 533 MHz, 1.876 ns cycle time
tCL = '15ns' tCL = '15ns'
# Pre-charge one bank 15 ns and all banks 18 ns # Pre-charge one bank 15 ns (all banks 18 ns)
tRP = '18ns' tRP = '15ns'
# Assuming 64 byte cache lines, across a x32 DDR interface # Assuming 64 byte cache lines, across a x32 DDR interface
# translates to two BL8, 8 clocks @ 533 MHz. Note that this is a # translates to two BL8, 8 clocks @ 533 MHz. Note that this is a
@ -249,10 +248,9 @@ class SimpleLPDDR2_S4(SimpleDRAM):
tXAW = '50ns' tXAW = '50ns'
activation_limit = 4 activation_limit = 4
# High-level model of a single WideIO x128 interface (one command and # A single WideIO x128 interface (one command and address bus), with
# address bus), with default timings based on an estimated WIO-200 8 # default timings based on an estimated WIO-200 8 Gbit part.
# Gbit part. class WideIO_200_x128(SimpleDRAM):
class SimpleWideIO(SimpleDRAM):
# Assuming 64 byte cache lines, use a 4kbyte page size, this # Assuming 64 byte cache lines, use a 4kbyte page size, this
# depends on the memory density # depends on the memory density
lines_per_rowbuffer = 64 lines_per_rowbuffer = 64
@ -285,12 +283,12 @@ class SimpleWideIO(SimpleDRAM):
tXAW = '50ns' tXAW = '50ns'
activation_limit = 2 activation_limit = 2
# High-level model of a single LPDDR3 x32 interface (one # A single LPDDR3 x32 interface (one command/address bus), with
# command/address bus), with default timings based on a LPDDR3-1600 4 # default timings based on a LPDDR3-1600 4 Gbit part in a 1x32
# Gbit part # configuration
class SimpleLPDDR3(SimpleDRAM): class LPDDR3_1600_x32(SimpleDRAM):
# 4 Gb and 8 Gb devices use a 1 kByte page size, so ssuming 64 byte # 4 Gbit and 8 Gbit devices use a 1 kByte page size, so ssuming 64
# cache lines, that is 16 lines # byte cache lines, that is 16 lines
lines_per_rowbuffer = 16 lines_per_rowbuffer = 16
# Use a single rank # Use a single rank
@ -305,8 +303,8 @@ class SimpleLPDDR3(SimpleDRAM):
# 12 CK read latency, 6 CK write latency @ 800 MHz, 1.25 ns cycle time # 12 CK read latency, 6 CK write latency @ 800 MHz, 1.25 ns cycle time
tCL = '15ns' tCL = '15ns'
# Pre-charge one bank 15 ns and all banks 18 ns # Pre-charge one bank 15 ns (all banks 18 ns)
tRP = '18ns' tRP = '15ns'
# Assuming 64 byte cache lines, across a x32 DDR interface # Assuming 64 byte cache lines, across a x32 DDR interface
# translates to two bursts of BL8, 8 clocks @ 800 MHz # translates to two bursts of BL8, 8 clocks @ 800 MHz

View file

@ -59,7 +59,7 @@ class LinuxAlphaSystemBuilder(object):
pass pass
def create_system(self): def create_system(self):
system = FSConfig.makeLinuxAlphaSystem(self.mem_mode, SimpleDDR3) system = FSConfig.makeLinuxAlphaSystem(self.mem_mode, DDR3_1600_x64)
self.init_system(system) self.init_system(system)
return system return system

View file

@ -61,7 +61,7 @@ class LinuxArmSystemBuilder(object):
def create_system(self): def create_system(self):
system = FSConfig.makeArmSystem(self.mem_mode, system = FSConfig.makeArmSystem(self.mem_mode,
self.machine_type, self.machine_type,
SimpleDDR3, DDR3_1600_x64,
None, False) None, False)
# We typically want the simulator to panic if the kernel # We typically want the simulator to panic if the kernel

View file

@ -39,7 +39,7 @@ cpu.addTwoLevelCacheHierarchy(L1Cache(size = '128kB'),
cpu.clock = '2GHz' cpu.clock = '2GHz'
system = System(cpu = cpu, system = System(cpu = cpu,
physmem = SimpleDDR3(), physmem = DDR3_1600_x64(),
membus = CoherentBus(), membus = CoherentBus(),
mem_mode = "timing") mem_mode = "timing")
system.system_port = system.membus.slave system.system_port = system.membus.slave

View file

@ -52,7 +52,7 @@ cpu.addTwoLevelCacheHierarchy(L1Cache(size = '128kB'),
cpu.clock = '2GHz' cpu.clock = '2GHz'
system = System(cpu = cpu, system = System(cpu = cpu,
physmem = SimpleDDR3(), physmem = DDR3_1600_x64(),
membus = CoherentBus(), membus = CoherentBus(),
mem_mode = "timing") mem_mode = "timing")
system.system_port = system.membus.slave system.system_port = system.membus.slave

View file

@ -36,7 +36,7 @@ cpus = [ DerivO3CPU(cpu_id=i) for i in xrange(nb_cores) ]
# system simulated # system simulated
system = System(cpu = cpus, system = System(cpu = cpus,
physmem = SimpleDDR3(), physmem = DDR3_1600_x64(),
membus = CoherentBus(), membus = CoherentBus(),
mem_mode = "timing") mem_mode = "timing")

View file

@ -41,7 +41,7 @@ cpu.addTwoLevelCacheHierarchy(L1Cache(size = '128kB'),
cpu.clock = '2GHz' cpu.clock = '2GHz'
system = System(cpu = cpu, system = System(cpu = cpu,
physmem = SimpleDDR3(), physmem = DDR3_1600_x64(),
membus = CoherentBus(), membus = CoherentBus(),
mem_mode = "timing") mem_mode = "timing")
system.system_port = system.membus.slave system.system_port = system.membus.slave

View file

@ -55,7 +55,7 @@ options.num_cpus = 2
#the system #the system
mdesc = SysConfig(disk = 'linux-x86.img') mdesc = SysConfig(disk = 'linux-x86.img')
system = FSConfig.makeLinuxX86System('timing', SimpleDDR3, options.num_cpus, system = FSConfig.makeLinuxX86System('timing', DDR3_1600_x64, options.num_cpus,
mdesc=mdesc, Ruby=True) mdesc=mdesc, Ruby=True)
system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9.smp') system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9.smp')
system.cpu = [TimingSimpleCPU(cpu_id=i) for i in xrange(options.num_cpus)] system.cpu = [TimingSimpleCPU(cpu_id=i) for i in xrange(options.num_cpus)]

View file

@ -32,7 +32,7 @@ m5.util.addToPath('../configs/common')
import FSConfig import FSConfig
cpu = AtomicSimpleCPU(cpu_id=0) cpu = AtomicSimpleCPU(cpu_id=0)
system = FSConfig.makeSparcSystem('atomic', SimpleDDR3) system = FSConfig.makeSparcSystem('atomic', SimpleMemory)
system.cpu = cpu system.cpu = cpu
# create the interrupt controller # create the interrupt controller
cpu.createInterruptController() cpu.createInterruptController()

View file

@ -48,7 +48,7 @@ require_sim_object("CommMonitor")
cpu = TrafficGen(config_file = "tests/quick/se/70.tgen/tgen-simple-dram.cfg") cpu = TrafficGen(config_file = "tests/quick/se/70.tgen/tgen-simple-dram.cfg")
# system simulated # system simulated
system = System(cpu = cpu, physmem = SimpleDDR3(), system = System(cpu = cpu, physmem = DDR3_1600_x64(),
membus = NoncoherentBus(clock="1GHz", width = 16)) membus = NoncoherentBus(clock="1GHz", width = 16))
# add a communication monitor # add a communication monitor

View file

@ -32,7 +32,7 @@ m5.util.addToPath('../configs/common')
from FSConfig import * from FSConfig import *
from Benchmarks import * from Benchmarks import *
test_sys = makeLinuxAlphaSystem('atomic', SimpleDDR3, test_sys = makeLinuxAlphaSystem('atomic', SimpleMemory,
SysConfig('netperf-stream-client.rcS')) SysConfig('netperf-stream-client.rcS'))
test_sys.cpu = AtomicSimpleCPU(cpu_id=0) test_sys.cpu = AtomicSimpleCPU(cpu_id=0)
# create the interrupt controller # create the interrupt controller
@ -46,7 +46,7 @@ test_sys.iobridge = Bridge(delay='50ns', ranges = test_sys.mem_ranges)
test_sys.iobridge.slave = test_sys.iobus.master test_sys.iobridge.slave = test_sys.iobus.master
test_sys.iobridge.master = test_sys.membus.slave test_sys.iobridge.master = test_sys.membus.slave
drive_sys = makeLinuxAlphaSystem('atomic', SimpleDDR3, drive_sys = makeLinuxAlphaSystem('atomic', SimpleMemory,
SysConfig('netperf-server.rcS')) SysConfig('netperf-server.rcS'))
drive_sys.cpu = AtomicSimpleCPU(cpu_id=0) drive_sys.cpu = AtomicSimpleCPU(cpu_id=0)
# create the interrupt controller # create the interrupt controller

View file

@ -58,7 +58,7 @@ class LinuxX86SystemBuilder(object):
def create_system(self): def create_system(self):
mdesc = SysConfig(disk = 'linux-x86.img') mdesc = SysConfig(disk = 'linux-x86.img')
system = FSConfig.makeLinuxX86System(self.mem_mode, system = FSConfig.makeLinuxX86System(self.mem_mode,
SimpleDDR3, DDR3_1600_x64,
numCPUs=self.num_cpus, numCPUs=self.num_cpus,
mdesc=mdesc) mdesc=mdesc)
system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9') system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9')