gowin: Add HyperRAM integration hack to match Gowin EDA expected pattern.
This commit is contained in:
parent
5519d908e8
commit
9c373242af
|
@ -89,6 +89,27 @@ class GowinToolchain:
|
||||||
self.options = {}
|
self.options = {}
|
||||||
self.clocks = dict()
|
self.clocks = dict()
|
||||||
|
|
||||||
|
def apply_hyperram_integration_hack(self, v_file):
|
||||||
|
# FIXME: Gowin EDA expects a very specific HypeRAM integration pattern, modify generated verilog to match it.
|
||||||
|
|
||||||
|
# Convert to vectors.
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_reset_n", "O_hpram_reset_n[0]")
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_cs_n", "O_hpram_cs_n[0]")
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_rwds", "O_hpram_rwds[0]")
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_ck ", "O_hpram_ck[0] ")
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_ck_n ", "O_hpram_ck_n[0] ")
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_ck,", "O_hpram_ck[0],")
|
||||||
|
tools.replace_in_file(v_file, "O_hpram_ck_n,", "O_hpram_ck_n[0],")
|
||||||
|
tools.replace_in_file(v_file, "wire O_hpram_reset_n[0]", "wire [0:0] O_hpram_reset_n")
|
||||||
|
tools.replace_in_file(v_file, "wire O_hpram_cs_n[0]", "wire [0:0] O_hpram_cs_n")
|
||||||
|
tools.replace_in_file(v_file, "wire IO_hpram_rwds[0]", "wire [0:0] IO_hpram_rwds")
|
||||||
|
tools.replace_in_file(v_file, "wire O_hpram_ck[0]", "wire [0:0] O_hpram_ck")
|
||||||
|
tools.replace_in_file(v_file, "wire O_hpram_ck_n[0]", "wire [0:0] O_hpram_ck_n")
|
||||||
|
|
||||||
|
# Apply Synthesis directives.
|
||||||
|
tools.replace_in_file(v_file, "wire [0:0] IO_hpram_rwds,", "wire [0:0] IO_hpram_rwds, /* synthesis syn_tristate = 1 */")
|
||||||
|
tools.replace_in_file(v_file, "wire [7:0] IO_hpram_dq,", "wire [7:0] IO_hpram_dq, /* synthesis syn_tristate = 1 */")
|
||||||
|
|
||||||
def build(self, platform, fragment,
|
def build(self, platform, fragment,
|
||||||
build_dir = "build",
|
build_dir = "build",
|
||||||
build_name = "top",
|
build_name = "top",
|
||||||
|
@ -99,8 +120,8 @@ class GowinToolchain:
|
||||||
cwd = os.getcwd()
|
cwd = os.getcwd()
|
||||||
os.makedirs(build_dir, exist_ok=True)
|
os.makedirs(build_dir, exist_ok=True)
|
||||||
os.chdir(build_dir)
|
os.chdir(build_dir)
|
||||||
|
|
||||||
# Finalize design
|
# Finalize design
|
||||||
|
|
||||||
if not isinstance(fragment, _Fragment):
|
if not isinstance(fragment, _Fragment):
|
||||||
fragment = fragment.get_fragment()
|
fragment = fragment.get_fragment()
|
||||||
platform.finalize(fragment)
|
platform.finalize(fragment)
|
||||||
|
@ -111,6 +132,7 @@ class GowinToolchain:
|
||||||
v_file = build_name + ".v"
|
v_file = build_name + ".v"
|
||||||
v_output.write(v_file)
|
v_output.write(v_file)
|
||||||
platform.add_source(v_file)
|
platform.add_source(v_file)
|
||||||
|
self.apply_hyperram_integration_hack(v_file)
|
||||||
|
|
||||||
if platform.verilog_include_paths:
|
if platform.verilog_include_paths:
|
||||||
self.options["include_path"] = "{" + ";".join(platform.verilog_include_paths) + "}"
|
self.options["include_path"] = "{" + ";".join(platform.verilog_include_paths) + "}"
|
||||||
|
|
Loading…
Reference in New Issue