Skip to content

Commit 4d9d232

Browse files
committedJul 15, 2017
integration: add support for memory groups
1 parent bba206f commit 4d9d232

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed
 

‎misoc/integration/builder.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def add_software_package(self, name, src_dir=None):
8787
def _generate_includes(self):
8888
cpu_type = self.soc.cpu_type
8989
memory_regions = self.soc.get_memory_regions()
90+
memory_groups = self.soc.get_memory_groups()
9091
flash_boot_address = getattr(self.soc, "flash_boot_address", None)
9192
csr_regions = self.soc.get_csr_regions()
9293
csr_groups = self.soc.get_csr_groups()
@@ -122,7 +123,7 @@ def define(k, v):
122123
f.write(cpu_interface.get_csr_header(csr_regions, constants))
123124

124125
with WriteGenerated(generated_dir, "mem.rs") as f:
125-
f.write(cpu_interface.get_mem_rust(memory_regions, flash_boot_address))
126+
f.write(cpu_interface.get_mem_rust(memory_regions, memory_groups, flash_boot_address))
126127
with WriteGenerated(generated_dir, "csr.rs") as f:
127128
f.write(cpu_interface.get_csr_rust(csr_regions, csr_groups, constants))
128129
with WriteGenerated(generated_dir, "rust-cfg") as f:

‎misoc/integration/cpu_interface.py

+20-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def get_mem_header(regions, flash_boot_address):
4444
return r
4545

4646

47-
def get_mem_rust(regions, flash_boot_address):
47+
def get_mem_rust(regions, groups, flash_boot_address):
4848
r = "// Include this file as:\n"
4949
r += "// include!(concat!(env!(\"BUILDINC_DIRECTORY\"), \"/generated/mem.rs\"));\n"
5050
r += "#[allow(dead_code)]\n"
@@ -54,9 +54,27 @@ def get_mem_rust(regions, flash_boot_address):
5454
format(name=name.upper(), base=base)
5555
r += " pub const {name}_SIZE: usize = 0x{size:08x};\n\n". \
5656
format(name=name.upper(), size=size)
57+
58+
if groups:
59+
r += " pub struct MemoryRegion {\n"
60+
r += " pub base: usize,\n"
61+
r += " pub size: usize,\n"
62+
r += " }\n\n"
63+
64+
for group_name, group_members in groups:
65+
r += (" pub static " + group_name.upper() +
66+
": [MemoryRegion; " + str(len(group_members)) + "] = [\n")
67+
for member in group_members:
68+
r += " MemoryRegion { "
69+
r += "base: "+member.upper()+"_BASE, "
70+
r += "size: "+member.upper()+"_SIZE, "
71+
r += "},\n"
72+
r += " ];\n\n"
73+
5774
if flash_boot_address is not None:
5875
r += " pub const FLASH_BOOT_ADDRESS: usize = 0x{:08x};\n\n". \
5976
format(flash_boot_address)
77+
6078
r += "}\n"
6179
return r
6280

@@ -229,7 +247,7 @@ def get_csr_rust(regions, groups, constants):
229247
r += " pub " + csr.name + "_read: fn() -> " + rstype + ",\n"
230248
if not is_readonly(csr):
231249
r += " pub " + csr.name + "_write: fn(" + rstype + "),\n";
232-
r += " };\n\n"
250+
r += " }\n\n"
233251

234252
r += (" pub static " + group_name.upper() +
235253
": [" + struct_name + "; " + str(len(group_members)) + "] = [\n")

‎misoc/integration/soc_core.py

+7
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def __init__(self, platform, clk_freq,
6363
"timer0",
6464
"tmpu"
6565
]
66+
self._memory_groups = [] # list of (group_name, (group_member0, group_member1, ...))
6667
self._csr_groups = [] # list of (group_name, (group_member0, group_member1, ...))
6768
self.interrupt_devices = []
6869

@@ -125,6 +126,9 @@ def add_wb_slave(self, origin, length, interface):
125126
def add_memory_region(self, name, origin, length):
126127
self._memory_regions.append((name, origin, length))
127128

129+
def add_memory_group(self, group_name, members):
130+
self._memory_groups.append((group_name, members))
131+
128132
def register_mem(self, name, origin, length, interface):
129133
self.add_wb_slave(origin, length, interface)
130134
self.add_memory_region(name, origin, length)
@@ -138,6 +142,9 @@ def register_rom(self, interface, rom_size=0xa000):
138142
def get_memory_regions(self):
139143
return self._memory_regions
140144

145+
def get_memory_groups(self):
146+
return self._memory_groups
147+
141148
def check_csr_region(self, name, origin):
142149
for n, o, l, obj in self._csr_regions:
143150
if n == name or o == origin:

0 commit comments

Comments
 (0)
Please sign in to comment.