@@ -48,6 +48,79 @@ index fc8b3d183..2b94b0d67 100644
4848 //////////////
4949 // MIO Pads //
5050 //////////////
51+ diff --git a/hw/ip/prim/util/primgen.py b/hw/ip/prim/util/primgen.py
52+ index f601d503e..70dd6d438 100755
53+ --- a/hw/ip/prim/util/primgen.py
54+ +++ b/hw/ip/prim/util/primgen.py
55+ @@ -238,6 +238,21 @@ def _generate_prim_pkg(gapi):
56+ shutil.copyfile(prim_pkg_core_src, prim_pkg_core_dest)
57+ print("Core file written to %s." % (prim_pkg_core_dest, ))
58+
59+ + def _instance_sv_ram(prim_name, techlib, parameters, prim_type):
60+ + if not parameters:
61+ + s = " prim_{techlib}_{prim_name} u_impl_{techlib} (\n"
62+ + else:
63+ + s = " prim_{techlib}_{prim_name} #(\n"
64+ + s += ",\n".join(" .{p}({p})".format(p=p) for p in parameters)
65+ + s += "\n ) u_impl_{techlib}_{prim_type} (\n"
66+ + s += " .clk_a_i(clk_{prim_type}_i),\n"
67+ + s += " .a_req_i({prim_type}_req_i),\n"
68+ + s += " .a_write_i({prim_type}_write_i),\n"
69+ + s += " .a_addr_i({prim_type}_addr_i),\n"
70+ + s += " .a_wdata_i({prim_type}_wdata_i),\n"
71+ + s += " .a_rdata_o({prim_type}_rdata_o)\n"
72+ + s += " );\n"
73+ + return s.format(prim_name=prim_name, techlib=techlib, prim_type=prim_type)
74+
75+ def _instance_sv(prim_name, techlib, parameters):
76+ if not parameters:
77+ @@ -246,8 +261,8 @@ def _instance_sv(prim_name, techlib, parameters):
78+ s = " prim_{techlib}_{prim_name} #(\n"
79+ s += ",\n".join(" .{p}({p})".format(p=p) for p in parameters)
80+ s += "\n ) u_impl_{techlib} (\n"
81+ - s += " .*\n" \
82+ - " );\n"
83+ + s += " .*\n"
84+ + s += " );\n"
85+ return s.format(prim_name=prim_name, techlib=techlib)
86+
87+
88+ @@ -258,12 +273,17 @@ def _create_instances(prim_name, techlibs, parameters):
89+ ]
90+ techlibs_generic_last = techlibs_wo_generic + ['generic']
91+
92+ +
93+ if not techlibs_wo_generic:
94+ # Don't output the if/else blocks if there no alternatives exist.
95+ # We still want the generate block to keep hierarchical path names
96+ # stable, even if more than one techlib is found.
97+ s = " if (1) begin : gen_generic\n"
98+ - s += _instance_sv(prim_name, "generic", parameters) + "\n"
99+ + if prim_name == "ram_2p":
100+ + s += _instance_sv_ram("ram_1p", "generic", parameters, "a") + "\n"
101+ + s += _instance_sv_ram("ram_1p", "generic", parameters, "b") + "\n"
102+ + else:
103+ + s += _instance_sv(prim_name, "generic", parameters) + "\n"
104+ s += " end"
105+ return s
106+
107+ @@ -282,8 +302,14 @@ def _create_instances(prim_name, techlibs, parameters):
108+ # TODO: wildcard port lists are against our style guide, but it's safer
109+ # to let the synthesis tool figure out the connectivity than us trying
110+ # to parse the port list into individual signals.
111+ - s += "begin : gen_{techlib}\n" + _instance_sv(prim_name, techlib,
112+ - parameters) + "end"
113+ + s += "begin : gen_{techlib}\n"
114+ + if prim_name == "ram_2p":
115+ + s += _instance_sv_ram("ram_1p", techlib, parameters, "a")
116+ + s += _instance_sv_ram("ram_1p", techlib, parameters, "b")
117+ + else:
118+ + s += _instance_sv(prim_name, techlib, parameters)
119+ +
120+ + s += "end"
121+
122+ if not is_last:
123+ s += " "
51124diff --git a/hw/ip/prim_generic/rtl/prim_generic_pad_wrapper.sv b/hw/ip/prim_generic/rtl/prim_generic_pad_wrapper.sv
52125index 962d3b559..9d5a10c8c 100644
53126--- a/hw/ip/prim_generic/rtl/prim_generic_pad_wrapper.sv
@@ -72,7 +145,7 @@ index 962d3b559..9d5a10c8c 100644
72145 end
73146
74147diff --git a/hw/top_earlgrey/top_earlgrey_nexysvideo.core b/hw/top_earlgrey/top_earlgrey_nexysvideo.core
75- index 8d6cf89b6..1683f0693 100644
148+ index 8d6cf89b6..0e01b5276 100644
76149--- a/hw/top_earlgrey/top_earlgrey_nexysvideo.core
77150+++ b/hw/top_earlgrey/top_earlgrey_nexysvideo.core
78151@@ -56,7 +56,7 @@ targets:
@@ -91,7 +164,7 @@ index 8d6cf89b6..1683f0693 100644
91164+ synth: "yosys"
92165+ yosys_synth_options: ['-iopad', '-family xc7', "frontend=surelog"]
93166+ yosys_read_options: []
94- + surelog_options: ['--disable-feature=parametersubstitution ', '-DSYNTHESIS ']
167+ + surelog_options: ['-DSYNTHESIS ', '-DPRIM_DEFAULT_IMPL=prim_pkg::ImplGeneric ']
95168+ yosys:
96169+ arch: "xilinx"
97170+ yosys_synth_options: ['-iopad', '-family xc7', "frontend=surelog"]
0 commit comments