aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Brewfile1
-rw-r--r--CHANGELOG12
-rw-r--r--Makefile12
-rw-r--r--README.md23
-rw-r--r--backends/aiger/aiger.cc23
-rw-r--r--backends/aiger/xaiger.cc135
-rw-r--r--backends/btor/btor.cc7
-rw-r--r--backends/protobuf/protobuf.cc4
-rw-r--r--backends/smt2/Makefile.inc2
-rw-r--r--frontends/aiger/aigerparse.cc53
-rw-r--r--frontends/ast/ast.cc54
-rw-r--r--frontends/ast/ast.h1
-rw-r--r--frontends/ast/simplify.cc36
-rw-r--r--frontends/rpc/Makefile.inc2
-rw-r--r--frontends/rpc/rpc_frontend.cc589
-rw-r--r--frontends/verilog/const2ast.cc10
-rw-r--r--frontends/verilog/verilog_lexer.l2
-rw-r--r--kernel/register.cc22
-rw-r--r--kernel/register.h4
-rw-r--r--kernel/rtlil.cc2
-rw-r--r--kernel/sigtools.h11
-rw-r--r--libs/json11/json11.cpp788
-rw-r--r--libs/json11/json11.hpp232
-rw-r--r--misc/launcher.c8
-rw-r--r--misc/py_wrap_generator.py2
-rw-r--r--passes/cmds/Makefile.inc1
-rw-r--r--passes/cmds/add.cc18
-rw-r--r--passes/cmds/portlist.cc93
-rw-r--r--passes/cmds/show.cc8
-rw-r--r--passes/equiv/equiv_opt.cc17
-rw-r--r--passes/hierarchy/hierarchy.cc24
-rw-r--r--passes/opt/opt_expr.cc4
-rw-r--r--passes/opt/opt_share.cc7
-rw-r--r--passes/pmgen/.gitignore2
-rw-r--r--passes/pmgen/Makefile.inc9
-rw-r--r--passes/pmgen/README.md2
-rw-r--r--passes/pmgen/ice40_dsp.cc282
-rw-r--r--passes/pmgen/ice40_dsp.pmg625
-rw-r--r--passes/pmgen/peepopt.cc1
-rw-r--r--passes/pmgen/peepopt_dffmux.pmg113
-rw-r--r--passes/pmgen/pmgen.py15
-rw-r--r--passes/pmgen/xilinx_dsp.cc637
-rw-r--r--passes/pmgen/xilinx_dsp.pmg587
-rw-r--r--passes/pmgen/xilinx_dsp_CREG.pmg181
-rw-r--r--passes/pmgen/xilinx_dsp_cascade.pmg336
-rw-r--r--passes/pmgen/xilinx_srl.pmg30
-rw-r--r--passes/sat/async2sync.cc1
-rw-r--r--passes/techmap/Makefile.inc1
-rw-r--r--passes/techmap/abc9.cc79
-rw-r--r--passes/techmap/alumacc.cc19
-rw-r--r--passes/techmap/dff2dffs.cc29
-rw-r--r--passes/techmap/extractinv.cc123
-rw-r--r--passes/techmap/techmap.cc179
-rw-r--r--passes/tests/test_autotb.cc8
-rw-r--r--techlibs/anlogic/cells_sim.v99
-rw-r--r--techlibs/common/Makefile.inc2
-rw-r--r--techlibs/common/dummy.box1
-rw-r--r--techlibs/common/mul2dsp.v296
-rw-r--r--techlibs/ecp5/Makefile.inc4
-rw-r--r--techlibs/ecp5/abc_5g.box18
-rw-r--r--techlibs/ecp5/abc_map.v24
-rw-r--r--techlibs/ecp5/abc_model.v5
-rw-r--r--techlibs/ecp5/abc_unmap.v5
-rw-r--r--techlibs/ecp5/cells_sim.v5
-rw-r--r--techlibs/ecp5/dsp_map.v17
-rw-r--r--techlibs/ecp5/synth_ecp5.cc48
-rw-r--r--techlibs/efinix/cells_sim.v70
-rw-r--r--techlibs/ice40/Makefile.inc1
-rw-r--r--techlibs/ice40/cells_sim.v188
-rw-r--r--techlibs/ice40/dsp_map.v34
-rw-r--r--techlibs/ice40/synth_ice40.cc23
-rw-r--r--techlibs/xilinx/Makefile.inc12
-rw-r--r--techlibs/xilinx/abc_map.v447
-rw-r--r--techlibs/xilinx/abc_model.v190
-rw-r--r--techlibs/xilinx/abc_unmap.v211
-rw-r--r--techlibs/xilinx/abc_xc7.box1141
-rw-r--r--techlibs/xilinx/cells_map.v2
-rw-r--r--techlibs/xilinx/cells_sim.v645
-rw-r--r--techlibs/xilinx/cells_xtra.py547
-rw-r--r--techlibs/xilinx/dsp_map.v49
-rw-r--r--techlibs/xilinx/ff_map.v42
-rw-r--r--techlibs/xilinx/synth_xilinx.cc97
-rw-r--r--techlibs/xilinx/tests/.gitignore5
-rw-r--r--techlibs/xilinx/tests/test_dsp_model.sh14
-rw-r--r--techlibs/xilinx/tests/test_dsp_model.v652
-rw-r--r--techlibs/xilinx/xc6s_cells_xtra.v1829
-rw-r--r--techlibs/xilinx/xc6s_ff_map.v162
-rw-r--r--techlibs/xilinx/xc6v_cells_xtra.v2690
-rw-r--r--techlibs/xilinx/xc7_brams_bb.v26
-rw-r--r--techlibs/xilinx/xc7_cells_xtra.v (renamed from techlibs/xilinx/cells_xtra.v)3660
-rw-r--r--techlibs/xilinx/xc7_ff_map.v116
-rw-r--r--techlibs/xilinx/xcu_cells_xtra.v11768
-rw-r--r--tests/ice40/adffs.v20
-rw-r--r--tests/ice40/adffs.ys13
-rw-r--r--tests/ice40/div_mod.ys2
-rw-r--r--tests/ice40/macc.v34
-rw-r--r--tests/ice40/macc.ys22
-rwxr-xr-xtests/ice40/run-test.sh2
-rw-r--r--tests/opt/opt_expr.ys14
-rw-r--r--tests/rpc/.gitignore1
-rw-r--r--tests/rpc/design.v8
-rw-r--r--tests/rpc/exec.ys5
-rw-r--r--tests/rpc/frontend.py126
-rwxr-xr-xtests/rpc/run-test.sh6
-rw-r--r--tests/rpc/unix.ys6
-rw-r--r--tests/simple/peepopt.v13
-rwxr-xr-xtests/simple/run-test.sh2
-rwxr-xr-xtests/simple_abc9/run-test.sh2
-rw-r--r--tests/techmap/autopurge.ys62
-rw-r--r--tests/techmap/dff2dffs.ys50
-rw-r--r--tests/techmap/extractinv.ys41
-rw-r--r--tests/techmap/wireinit.ys108
-rw-r--r--tests/various/abc9.v4
-rw-r--r--tests/various/equiv_opt_multiclock.ys12
-rw-r--r--tests/various/hierarchy_defer.ys27
-rw-r--r--tests/various/peepopt.ys175
-rw-r--r--tests/xilinx/.gitignore1
-rw-r--r--tests/xilinx/dsp_simd.ys25
-rw-r--r--tests/xilinx/latches.v58
-rw-r--r--tests/xilinx/latches.ys15
-rw-r--r--tests/xilinx/macc.sh3
-rw-r--r--tests/xilinx/macc.v84
-rw-r--r--tests/xilinx/macc.ys31
-rw-r--r--tests/xilinx/macc_tb.v96
-rw-r--r--tests/xilinx/mul_unsigned.v30
-rw-r--r--tests/xilinx/mul_unsigned.ys10
126 files changed, 30034 insertions, 1685 deletions
diff --git a/Brewfile b/Brewfile
index 4ffe50e86..8465d86f9 100644
--- a/Brewfile
+++ b/Brewfile
@@ -7,3 +7,4 @@ brew "graphviz"
brew "pkg-config"
brew "python3"
brew "tcl-tk"
+brew "xdot"
diff --git a/CHANGELOG b/CHANGELOG
index c29429295..c1ffaa44a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -27,6 +27,7 @@ Yosys 0.9 .. Yosys 0.9-dev
- Improve attribute and parameter encoding in JSON to avoid ambiguities between
bit vectors and strings containing [01xz]*
- Added "clkbufmap" pass
+ - Added "extractinv" pass and "invertible_pin" attribute
- Added "synth_xilinx -family xc6s" for Spartan 6 support (experimental)
- Added "synth_xilinx -ise" (experimental)
- Added "synth_xilinx -iopad"
@@ -38,6 +39,17 @@ Yosys 0.9 .. Yosys 0.9-dev
- Improvements in pmgen: slices, choices, define, generate
- Added "xilinx_srl" for Xilinx shift register extraction
- Removed "shregmap -tech xilinx" (superseded by "xilinx_srl")
+ - Added "_TECHMAP_WIREINIT_*_" attribute and "_TECHMAP_REMOVEINIT_*_" wire for "techmap" pass
+ - Added "-match-init" option to "dff2dffs" pass
+ - Added "techmap_autopurge" support to techmap
+ - Added "add -mod <modname[s]>"
+ - Added +/mul2dsp.v for decomposing wide multipliers to custom-sized ones
+ - Added "ice40_dsp" for Lattice iCE40 DSP packing
+ - Added "xilinx_dsp" for Xilinx DSP packing
+ - "synth_xilinx" to now infer DSP blocks (-nodsp to disable)
+ - "synth_ecp5" to now infer DSP blocks (-nodsp to disable, experimental)
+ - "synth_ice40 -dsp" to infer DSP blocks
+ - Added latch support to synth_xilinx
Yosys 0.8 .. Yosys 0.9
----------------------
diff --git a/Makefile b/Makefile
index d4f1d3d68..227c87bbd 100644
--- a/Makefile
+++ b/Makefile
@@ -88,7 +88,7 @@ ifeq ($(OS), Darwin)
PLUGIN_LDFLAGS += -undefined dynamic_lookup
# homebrew search paths
-ifneq ($(shell which brew),)
+ifneq ($(shell :; command -v brew),)
BREW_PREFIX := $(shell brew --prefix)/opt
$(info $$BREW_PREFIX is [${BREW_PREFIX}])
ifeq ($(ENABLE_PYOSYS),1)
@@ -102,8 +102,8 @@ PKG_CONFIG_PATH := $(BREW_PREFIX)/tcl-tk/lib/pkgconfig:$(PKG_CONFIG_PATH)
export PATH := $(BREW_PREFIX)/bison/bin:$(BREW_PREFIX)/gettext/bin:$(BREW_PREFIX)/flex/bin:$(PATH)
# macports search paths
-else ifneq ($(shell which port),)
-PORT_PREFIX := $(patsubst %/bin/port,%,$(shell which port))
+else ifneq ($(shell :; command -v port),)
+PORT_PREFIX := $(patsubst %/bin/port,%,$(shell :; command -v port))
CXXFLAGS += -I$(PORT_PREFIX)/include
LDFLAGS += -L$(PORT_PREFIX)/lib
PKG_CONFIG_PATH := $(PORT_PREFIX)/lib/pkgconfig:$(PKG_CONFIG_PATH)
@@ -115,7 +115,7 @@ LDFLAGS += -rdynamic
LDLIBS += -lrt
endif
-YOSYS_VER := 0.9+36
+YOSYS_VER := 0.9+899
GIT_REV := $(shell cd $(YOSYS_SRC) && git rev-parse --short HEAD 2> /dev/null || echo UNKNOWN)
OBJS = kernel/version_$(GIT_REV).o
@@ -528,6 +528,7 @@ $(eval $(call add_include_file,kernel/satgen.h))
$(eval $(call add_include_file,libs/ezsat/ezsat.h))
$(eval $(call add_include_file,libs/ezsat/ezminisat.h))
$(eval $(call add_include_file,libs/sha1/sha1.h))
+$(eval $(call add_include_file,libs/json11/json11.hpp))
$(eval $(call add_include_file,passes/fsm/fsmdata.h))
$(eval $(call add_include_file,frontends/ast/ast.h))
$(eval $(call add_include_file,backends/ilang/ilang_backend.h))
@@ -545,6 +546,8 @@ OBJS += libs/sha1/sha1.o
ifneq ($(SMALL),1)
+OBJS += libs/json11/json11.o
+
OBJS += libs/subcircuit/subcircuit.o
OBJS += libs/ezsat/ezsat.o
@@ -710,6 +713,7 @@ test: $(TARGETS) $(EXTRA_TARGETS)
+cd tests/aiger && bash run-test.sh $(ABCOPT)
+cd tests/arch && bash run-test.sh
+cd tests/ice40 && bash run-test.sh $(SEEDOPT)
+ +cd tests/rpc && bash run-test.sh
+cd tests/ecp5 && bash run-test.sh $(SEEDOPT)
@echo ""
@echo " Passed \"make test\"."
diff --git a/README.md b/README.md
index e0a95a9d5..fdd4bb410 100644
--- a/README.md
+++ b/README.md
@@ -332,6 +332,10 @@ Verilog Attributes and non-standard features
that represent module parameters or localparams (when the HDL front-end
is run in ``-pwires`` mode).
+- Wires marked with the ``hierconn`` attribute are connected to wires with the
+ same name (format ``cell_name.identifier``) when they are imported from
+ sub-modules by ``flatten``.
+
- The ``clkbuf_driver`` attribute can be set on an output port of a blackbox
module to mark it as a clock buffer output, and thus prevent ``clkbufmap``
from inserting another clock buffer on a net driven by such output.
@@ -343,6 +347,12 @@ Verilog Attributes and non-standard features
automatic clock buffer insertion by ``clkbufmap``. This behaviour can be
overridden by providing a custom selection to ``clkbufmap``.
+- The ``invertible_pin`` attribute can be set on a port to mark it as
+ invertible via a cell parameter. The name of the inversion parameter
+ is specified as the value of this attribute. The value of the inversion
+ parameter must be of the same width as the port, with 1 indicating
+ an inverted bit and 0 indicating a non-inverted bit.
+
- The ``iopad_external_pin`` attribute on a blackbox module's port marks
it as the external-facing pin of an I/O pad, and prevents ``iopadmap``
from inserting another pad cell on it.
@@ -351,19 +361,16 @@ Verilog Attributes and non-standard features
blackbox or whitebox definition to a corresponding entry in a `abc9`
box-file.
-- The port attribute ``abc_scc_break`` indicates a module input port that will
- be treated as a primary output during `abc9` techmapping. Doing so eliminates
- the possibility of a strongly-connected component (i.e. a combinatorial loop)
- existing. Typically, this is specified for sequential inputs on otherwise
- combinatorial boxes -- for example, applying ``abc_scc_break`` onto the `D`
- port of a LUTRAM cell prevents `abc9` from interpreting any `Q` -> `D` paths
- as a combinatorial loop.
-
- The port attribute ``abc_carry`` marks the carry-in (if an input port) and
carry-out (if output port) ports of a box. This information is necessary for
`abc9` to preserve the integrity of carry-chains. Specifying this attribute
onto a bus port will affect only its most significant bit.
+- The port attribute ``abc_arrival`` specifies an integer (for output ports
+ only) to be used as the arrival time of this sequential port. It can be used,
+ for example, to specify the clk-to-Q delay of a flip-flop for consideration
+ during techmapping.
+
- In addition to the ``(* ... *)`` attribute syntax, Yosys supports
the non-standard ``{* ... *}`` attribute syntax to set default attributes
for everything that comes after the ``{* ... *}`` statement. (Reset
diff --git a/backends/aiger/aiger.cc b/backends/aiger/aiger.cc
index 7c851bb91..3e8b14dee 100644
--- a/backends/aiger/aiger.cc
+++ b/backends/aiger/aiger.cc
@@ -101,7 +101,7 @@ struct AigerWriter
return a;
}
- AigerWriter(Module *module, bool zinit_mode, bool imode, bool omode, bool bmode) : module(module), zinit_mode(zinit_mode), sigmap(module)
+ AigerWriter(Module *module, bool zinit_mode, bool imode, bool omode, bool bmode, bool lmode) : module(module), zinit_mode(zinit_mode), sigmap(module)
{
pool<SigBit> undriven_bits;
pool<SigBit> unused_bits;
@@ -367,6 +367,12 @@ struct AigerWriter
aig_latchin.push_back(a);
}
+ if (lmode && aig_l == 0) {
+ aig_m++, aig_l++;
+ aig_latchinit.push_back(0);
+ aig_latchin.push_back(0);
+ }
+
if (!initstate_bits.empty() || !init_inputs.empty())
aig_latchin.push_back(1);
@@ -704,9 +710,9 @@ struct AigerBackend : public Backend {
log(" -vmap <filename>\n");
log(" like -map, but more verbose\n");
log("\n");
- log(" -I, -O, -B\n");
- log(" If the design contains no input/output/assert then create one\n");
- log(" dummy input/output/bad_state pin to make the tools reading the\n");
+ log(" -I, -O, -B, -L\n");
+ log(" If the design contains no input/output/assert/flip-flop then create one\n");
+ log(" dummy input/output/bad_state-pin or latch to make the tools reading the\n");
log(" AIGER file happy.\n");
log("\n");
}
@@ -720,6 +726,7 @@ struct AigerBackend : public Backend {
bool imode = false;
bool omode = false;
bool bmode = false;
+ bool lmode = false;
std::string map_filename;
log_header(design, "Executing AIGER backend.\n");
@@ -764,16 +771,20 @@ struct AigerBackend : public Backend {
bmode = true;
continue;
}
+ if (args[argidx] == "-L") {
+ lmode = true;
+ continue;
+ }
break;
}
- extra_args(f, filename, args, argidx);
+ extra_args(f, filename, args, argidx, !ascii_mode);
Module *top_module = design->top_module();
if (top_module == nullptr)
log_error("Can't find top module in current design!\n");
- AigerWriter writer(top_module, zinit_mode, imode, omode, bmode);
+ AigerWriter writer(top_module, zinit_mode, imode, omode, bmode, lmode);
writer.write_aiger(*f, ascii_mode, miter_mode, symbols_mode);
if (!map_filename.empty()) {
diff --git a/backends/aiger/xaiger.cc b/backends/aiger/xaiger.cc
index e1b84236d..4018cc9de 100644
--- a/backends/aiger/xaiger.cc
+++ b/backends/aiger/xaiger.cc
@@ -83,6 +83,7 @@ struct XAigerWriter
dict<SigBit, pair<SigBit, SigBit>> and_map;
vector<std::tuple<SigBit,RTLIL::Cell*,RTLIL::IdString,int>> ci_bits;
vector<std::tuple<SigBit,RTLIL::Cell*,RTLIL::IdString,int,int>> co_bits;
+ dict<SigBit, float> arrival_times;
vector<pair<int, int>> aig_gates;
vector<int> aig_outputs;
@@ -247,14 +248,15 @@ struct XAigerWriter
if (!holes_mode) {
toposort.node(cell->name);
for (const auto &conn : cell->connections()) {
- if (cell->input(conn.first)) {
+ auto port_wire = inst_module->wire(conn.first);
+ if (port_wire->port_input) {
// Ignore inout for the sake of topographical ordering
- if (cell->output(conn.first)) continue;
+ if (port_wire->port_output) continue;
for (auto bit : sigmap(conn.second))
bit_users[bit].insert(cell->name);
}
- if (cell->output(conn.first))
+ if (port_wire->port_output)
for (auto bit : sigmap(conn.second))
bit_drivers[bit].insert(cell->name);
}
@@ -271,7 +273,7 @@ struct XAigerWriter
log_error("Connection '%s' on cell '%s' (type '%s') not recognised!\n", log_id(c.first), log_id(cell), log_id(cell->type));
if (is_input) {
- for (auto b : c.second.bits()) {
+ for (auto b : c.second) {
Wire *w = b.wire;
if (!w) continue;
if (!w->port_output || !cell_known) {
@@ -287,7 +289,17 @@ struct XAigerWriter
}
}
if (is_output) {
- for (auto b : c.second.bits()) {
+ int arrival = 0;
+ if (port_wire) {
+ auto it = port_wire->attributes.find("\\abc_arrival");
+ if (it != port_wire->attributes.end()) {
+ if (it->second.flags != 0)
+ log_error("Attribute 'abc_arrival' on port '%s' of module '%s' is not an integer.\n", log_id(port_wire), log_id(cell->type));
+ arrival = it->second.as_int();
+ }
+ }
+
+ for (auto b : c.second) {
Wire *w = b.wire;
if (!w) continue;
input_bits.insert(b);
@@ -295,6 +307,9 @@ struct XAigerWriter
if (O != b)
alias_map[O] = b;
undriven_bits.erase(O);
+
+ if (arrival)
+ arrival_times[b] = arrival;
}
}
}
@@ -335,6 +350,8 @@ struct XAigerWriter
if (!box_module || !box_module->attributes.count("\\abc_box_id"))
continue;
+ bool blackbox = box_module->get_blackbox_attribute(true /* ignore_wb */);
+
// Fully pad all unused input connections of this box cell with S0
// Fully pad all undriven output connections of this box cell with anonymous wires
// NB: Assume box_module->ports are sorted alphabetically
@@ -379,7 +396,10 @@ struct XAigerWriter
rhs = it->second;
}
else {
- rhs = module->addWire(NEW_ID, GetSize(w));
+ Wire *wire = module->addWire(NEW_ID, GetSize(w));
+ if (blackbox)
+ wire->set_bool_attribute(ID(abc_padding));
+ rhs = wire;
cell->setPort(port_name, rhs);
}
@@ -390,12 +410,7 @@ struct XAigerWriter
if (O != b)
alias_map[O] = b;
undriven_bits.erase(O);
-
- auto jt = input_bits.find(b);
- if (jt != input_bits.end()) {
- log_assert(keep_bits.count(O));
- input_bits.erase(b);
- }
+ input_bits.erase(b);
}
}
}
@@ -414,7 +429,7 @@ struct XAigerWriter
// inherit existing inout's drivers
if ((wire->port_input && wire->port_output && !undriven_bits.count(bit))
|| keep_bits.count(bit)) {
- RTLIL::IdString wire_name = wire->name.str() + "$inout.out";
+ RTLIL::IdString wire_name = stringf("$%s$inout.out", wire->name.c_str());
RTLIL::Wire *new_wire = module->wire(wire_name);
if (!new_wire)
new_wire = module->addWire(wire_name, GetSize(wire));
@@ -489,16 +504,16 @@ struct XAigerWriter
aig_outputs.push_back(bit2aig(bit));
}
+ if (output_bits.empty()) {
+ output_bits.insert(State::S0);
+ omode = true;
+ }
+
for (auto bit : output_bits) {
ordered_outputs[bit] = aig_o++;
aig_outputs.push_back(bit2aig(bit));
}
- if (output_bits.empty()) {
- aig_o++;
- aig_outputs.push_back(0);
- omode = true;
- }
}
void write_aiger(std::ostream &f, bool ascii_mode)
@@ -560,26 +575,38 @@ struct XAigerWriter
f << "c";
- if (!box_list.empty()) {
- auto write_buffer = [](std::stringstream &buffer, int i32) {
- int32_t i32_be = to_big_endian(i32);
- buffer.write(reinterpret_cast<const char*>(&i32_be), sizeof(i32_be));
- };
-
- std::stringstream h_buffer;
- auto write_h_buffer = std::bind(write_buffer, std::ref(h_buffer), std::placeholders::_1);
- write_h_buffer(1);
- log_debug("ciNum = %d\n", GetSize(input_bits) + GetSize(ci_bits));
- write_h_buffer(input_bits.size() + ci_bits.size());
- log_debug("coNum = %d\n", GetSize(output_bits) + GetSize(co_bits));
- write_h_buffer(output_bits.size() + co_bits.size());
- log_debug("piNum = %d\n", GetSize(input_bits));
- write_h_buffer(input_bits.size());
- log_debug("poNum = %d\n", GetSize(output_bits));
- write_h_buffer(output_bits.size());
- log_debug("boxNum = %d\n", GetSize(box_list));
- write_h_buffer(box_list.size());
+ log_assert(!output_bits.empty());
+ auto write_buffer = [](std::stringstream &buffer, int i32) {
+ int32_t i32_be = to_big_endian(i32);
+ buffer.write(reinterpret_cast<const char*>(&i32_be), sizeof(i32_be));
+ };
+ std::stringstream h_buffer;
+ auto write_h_buffer = std::bind(write_buffer, std::ref(h_buffer), std::placeholders::_1);
+ write_h_buffer(1);
+ log_debug("ciNum = %d\n", GetSize(input_bits) + GetSize(ci_bits));
+ write_h_buffer(input_bits.size() + ci_bits.size());
+ log_debug("coNum = %d\n", GetSize(output_bits) + GetSize(co_bits));
+ write_h_buffer(output_bits.size() + GetSize(co_bits));
+ log_debug("piNum = %d\n", GetSize(input_bits));
+ write_h_buffer(input_bits.size());
+ log_debug("poNum = %d\n", GetSize(output_bits));
+ write_h_buffer(output_bits.size());
+ log_debug("boxNum = %d\n", GetSize(box_list));
+ write_h_buffer(box_list.size());
+
+ auto write_buffer_float = [](std::stringstream &buffer, float f32) {
+ buffer.write(reinterpret_cast<const char*>(&f32), sizeof(f32));
+ };
+ std::stringstream i_buffer;
+ auto write_i_buffer = std::bind(write_buffer_float, std::ref(i_buffer), std::placeholders::_1);
+ for (auto bit : input_bits)
+ write_i_buffer(arrival_times.at(bit, 0));
+ //std::stringstream o_buffer;
+ //auto write_o_buffer = std::bind(write_buffer_float, std::ref(o_buffer), std::placeholders::_1);
+ //for (auto bit : output_bits)
+ // write_o_buffer(0);
+ if (!box_list.empty()) {
RTLIL::Module *holes_module = module->design->addModule("$__holes__");
log_assert(holes_module);
@@ -643,19 +670,12 @@ struct XAigerWriter
write_h_buffer(box_count++);
}
- f << "h";
- std::string buffer_str = h_buffer.str();
- int32_t buffer_size_be = to_big_endian(buffer_str.size());
- f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));
- f.write(buffer_str.data(), buffer_str.size());
-
std::stringstream r_buffer;
auto write_r_buffer = std::bind(write_buffer, std::ref(r_buffer), std::placeholders::_1);
write_r_buffer(0);
-
f << "r";
- buffer_str = r_buffer.str();
- buffer_size_be = to_big_endian(buffer_str.size());
+ std::string buffer_str = r_buffer.str();
+ int32_t buffer_size_be = to_big_endian(buffer_str.size());
f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));
f.write(buffer_str.data(), buffer_str.size());
@@ -709,6 +729,23 @@ struct XAigerWriter
}
}
+ f << "h";
+ std::string buffer_str = h_buffer.str();
+ int32_t buffer_size_be = to_big_endian(buffer_str.size());
+ f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));
+ f.write(buffer_str.data(), buffer_str.size());
+
+ f << "i";
+ buffer_str = i_buffer.str();
+ buffer_size_be = to_big_endian(buffer_str.size());
+ f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));
+ f.write(buffer_str.data(), buffer_str.size());
+ //f << "o";
+ //buffer_str = o_buffer.str();
+ //buffer_size_be = to_big_endian(buffer_str.size());
+ //f.write(reinterpret_cast<const char*>(&buffer_size_be), sizeof(buffer_size_be));
+ //f.write(buffer_str.data(), buffer_str.size());
+
f << stringf("Generated by %s\n", yosys_version_str);
}
@@ -760,11 +797,11 @@ struct XAigerWriter
f << stringf("box %d %d %s\n", box_count++, 0, log_id(cell->name));
output_lines.sort();
+ if (omode)
+ output_lines[State::S0] = "output 0 0 $__dummy__\n";
for (auto &it : output_lines)
f << it.second;
log_assert(output_lines.size() == output_bits.size());
- if (omode && output_bits.empty())
- f << "output " << output_lines.size() << " 0 $__dummy__\n";
wire_lines.sort();
for (auto &it : wire_lines)
@@ -819,7 +856,7 @@ struct XAigerBackend : public Backend {
}
break;
}
- extra_args(f, filename, args, argidx);
+ extra_args(f, filename, args, argidx, !ascii_mode);
Module *top_module = design->top_module();
diff --git a/backends/btor/btor.cc b/backends/btor/btor.cc
index 7c054d655..f617b7ec2 100644
--- a/backends/btor/btor.cc
+++ b/backends/btor/btor.cc
@@ -685,7 +685,7 @@ struct BtorWorker
}
else
{
- int nid_init_val = next_nid++;
+ nid_init_val = next_nid++;
btorf("%d state %d\n", nid_init_val, sid);
for (int i = 0; i < nwords; i++) {
@@ -897,9 +897,12 @@ struct BtorWorker
int sid = get_bv_sid(GetSize(s));
int nid = next_nid++;
- btorf("%d input %d %s\n", nid, sid);
+ btorf("%d input %d\n", nid, sid);
nid_width[nid] = GetSize(s);
+ for (int j = 0; j < GetSize(s); j++)
+ nidbits.push_back(make_pair(nid, j));
+
i += GetSize(s)-1;
continue;
}
diff --git a/backends/protobuf/protobuf.cc b/backends/protobuf/protobuf.cc
index fff110bb0..671686173 100644
--- a/backends/protobuf/protobuf.cc
+++ b/backends/protobuf/protobuf.cc
@@ -266,7 +266,7 @@ struct ProtobufBackend : public Backend {
}
break;
}
- extra_args(f, filename, args, argidx);
+ extra_args(f, filename, args, argidx, !text_mode);
log_header(design, "Executing Protobuf backend.\n");
@@ -338,7 +338,7 @@ struct ProtobufPass : public Pass {
if (!filename.empty()) {
rewrite_filename(filename);
std::ofstream *ff = new std::ofstream;
- ff->open(filename.c_str(), std::ofstream::trunc);
+ ff->open(filename.c_str(), text_mode ? std::ofstream::trunc : (std::ofstream::trunc | std::ofstream::binary));
if (ff->fail()) {
delete ff;
log_error("Can't open file `%s' for writing: %s\n", filename.c_str(), strerror(errno));
diff --git a/backends/smt2/Makefile.inc b/backends/smt2/Makefile.inc
index 92941d4cf..68394a909 100644
--- a/backends/smt2/Makefile.inc
+++ b/backends/smt2/Makefile.inc
@@ -16,7 +16,7 @@ yosys-smtbmc-script.py: backends/smt2/smtbmc.py
-e "s|#!/usr/bin/env python3|#!$(PYTHON)|" < $< > $@
yosys-smtbmc.exe: misc/launcher.c yosys-smtbmc-script.py
- $(P) gcc -DGUI=0 -O -s -o $@ $<
+ $(P) $(CXX) -DGUI=0 -O -s -o $@ $<
# Other targets
else
TARGETS += yosys-smtbmc
diff --git a/frontends/aiger/aigerparse.cc b/frontends/aiger/aigerparse.cc
index 2e1fb8fad..5a1da4db1 100644
--- a/frontends/aiger/aigerparse.cc
+++ b/frontends/aiger/aigerparse.cc
@@ -285,6 +285,8 @@ end_of_header:
}
else if (c == 'c') {
f.ignore(1);
+ if (f.peek() == '\r')
+ f.ignore(1);
if (f.peek() == '\n')
break;
// Else constraint (TODO)
@@ -430,6 +432,7 @@ void AigerReader::parse_xaiger(const dict<int,IdString> &box_lookup)
else if (c == 'r') {
uint32_t dataSize YS_ATTRIBUTE(unused) = parse_xaiger_literal(f);
flopNum = parse_xaiger_literal(f);
+ log_debug("flopNum: %u\n", flopNum);
log_assert(dataSize == (flopNum+1) * sizeof(uint32_t));
f.ignore(flopNum * sizeof(uint32_t));
}
@@ -496,8 +499,7 @@ void AigerReader::parse_aiger_ascii()
// Parse latches
RTLIL::Wire *clk_wire = nullptr;
- if (L > 0) {
- log_assert(clk_name != "");
+ if (L > 0 && !clk_name.empty()) {
clk_wire = module->wire(clk_name);
log_assert(!clk_wire);
log_debug2("Creating %s\n", clk_name.c_str());
@@ -513,7 +515,10 @@ void AigerReader::parse_aiger_ascii()
RTLIL::Wire *q_wire = createWireIfNotExists(module, l1);
RTLIL::Wire *d_wire = createWireIfNotExists(module, l2);
- module->addDffGate(NEW_ID, clk_wire, d_wire, q_wire);
+ if (clk_wire)
+ module->addDffGate(NEW_ID, clk_wire, d_wire, q_wire);
+ else
+ module->addFfGate(NEW_ID, d_wire, q_wire);
// Reset logic is optional in AIGER 1.9
if (f.peek() == ' ') {
@@ -621,8 +626,7 @@ void AigerReader::parse_aiger_binary()
// Parse latches
RTLIL::Wire *clk_wire = nullptr;
- if (L > 0) {
- log_assert(clk_name != "");
+ if (L > 0 && !clk_name.empty()) {
clk_wire = module->wire(clk_name);
log_assert(!clk_wire);
log_debug2("Creating %s\n", clk_name.c_str());
@@ -638,7 +642,10 @@ void AigerReader::parse_aiger_binary()
RTLIL::Wire *q_wire = createWireIfNotExists(module, l1);
RTLIL::Wire *d_wire = createWireIfNotExists(module, l2);
- module->addDff(NEW_ID, clk_wire, d_wire, q_wire);
+ if (clk_wire)
+ module->addDff(NEW_ID, clk_wire, d_wire, q_wire);
+ else
+ module->addFf(NEW_ID, d_wire, q_wire);
// Reset logic is optional in AIGER 1.9
if (f.peek() == ' ') {
@@ -776,19 +783,19 @@ void AigerReader::post_process()
// NB: Assume box_module->ports are sorted alphabetically
// (as RTLIL::Module::fixup_ports() would do)
for (auto port_name : box_module->ports) {
- RTLIL::Wire* w = box_module->wire(port_name);
- log_assert(w);
+ RTLIL::Wire* port = box_module->wire(port_name);
+ log_assert(port);
RTLIL::SigSpec rhs;
- RTLIL::Wire* wire = nullptr;
- for (int i = 0; i < GetSize(w); i++) {
- if (w->port_input) {
+ for (int i = 0; i < GetSize(port); i++) {
+ RTLIL::Wire* wire = nullptr;
+ if (port->port_input) {
log_assert(co_count < outputs.size());
wire = outputs[co_count++];
log_assert(wire);
log_assert(wire->port_output);
wire->port_output = false;
}
- if (w->port_output) {
+ if (port->port_output) {
log_assert((piNum + ci_count) < inputs.size());
wire = inputs[piNum + ci_count++];
log_assert(wire);
@@ -797,6 +804,7 @@ void AigerReader::post_process()
}
rhs.append(wire);
}
+
cell->setPort(port_name, rhs);
}
}
@@ -814,6 +822,7 @@ void AigerReader::post_process()
RTLIL::Wire* wire = inputs[variable];
log_assert(wire);
log_assert(wire->port_input);
+ log_debug("Renaming input %s", log_id(wire));
if (index == 0) {
// Cope with the fact that a CI might be identical
@@ -840,6 +849,7 @@ void AigerReader::post_process()
wire->port_input = false;
}
}
+ log_debug(" -> %s\n", log_id(wire));
}
else if (type == "output") {
log_assert(static_cast<unsigned>(variable + co_count) < outputs.size());
@@ -850,6 +860,7 @@ void AigerReader::post_process()
wire->port_output = false;
continue;
}
+ log_debug("Renaming output %s", log_id(wire));
if (index == 0) {
// Cope with the fact that a CO might be identical
@@ -859,7 +870,7 @@ void AigerReader::post_process()
if (!existing) {
if (escaped_s.ends_with("$inout.out")) {
wire->port_output = false;
- RTLIL::Wire *in_wire = module->wire(escaped_s.substr(0, escaped_s.size()-10));
+ RTLIL::Wire *in_wire = module->wire(escaped_s.substr(1, escaped_s.size()-11));
log_assert(in_wire);
log_assert(in_wire->port_input && !in_wire->port_output);
in_wire->port_output = true;
@@ -871,6 +882,7 @@ void AigerReader::post_process()
else {
wire->port_output = false;
module->connect(wire, existing);
+ wire = existing;
}
}
else if (index > 0) {
@@ -879,7 +891,7 @@ void AigerReader::post_process()
if (!existing) {
if (escaped_s.ends_with("$inout.out")) {
wire->port_output = false;
- RTLIL::Wire *in_wire = module->wire(stringf("%s[%d]", escaped_s.substr(0, escaped_s.size()-10).c_str(), index));
+ RTLIL::Wire *in_wire = module->wire(stringf("%s[%d]", escaped_s.substr(1, escaped_s.size()-11).c_str(), index));
log_assert(in_wire);
log_assert(in_wire->port_input && !in_wire->port_output);
in_wire->port_output = true;
@@ -896,6 +908,7 @@ void AigerReader::post_process()
wire->port_output = false;
}
}
+ log_debug(" -> %s\n", log_id(wire));
}
else if (type == "box") {
RTLIL::Cell* cell = module->cell(stringf("$__box%d__", variable));
@@ -974,7 +987,7 @@ void AigerReader::post_process()
// operate (and run checks on) this one module
RTLIL::Design *mapped_design = new RTLIL::Design;
mapped_design->add(module);
- Pass::call(mapped_design, "clean -purge");
+ Pass::call(mapped_design, "clean");
mapped_design->modules_.erase(module->name);
delete mapped_design;
@@ -1004,8 +1017,8 @@ struct AigerFrontend : public Frontend {
log(" Name of module to be created (default: <filename>)\n");
log("\n");
log(" -clk_name <wire_name>\n");
- log(" AIGER latches to be transformed into posedge DFFs clocked by wire of");
- log(" this name (default: clk)\n");
+ log(" If specified, AIGER latches to be transformed into $_DFF_P_ cells\n");
+ log(" clocked by wire of this name. Otherwise, $_FF_ cells will be used.\n");
log("\n");
log(" -map <filename>\n");
log(" read file with port and latch symbols\n");
@@ -1045,13 +1058,15 @@ struct AigerFrontend : public Frontend {
}
break;
}
- extra_args(f, filename, args, argidx);
+ extra_args(f, filename, args, argidx, true);
if (module_name.empty()) {
#ifdef _WIN32
char fname[_MAX_FNAME];
_splitpath(filename.c_str(), NULL /* drive */, NULL /* dir */, fname, NULL /* ext */);
- module_name = fname;
+ char* bn = strdup(fname);
+ module_name = RTLIL::escape_id(bn);
+ free(bn);
#else
char* bn = strdup(filename.c_str());
module_name = RTLIL::escape_id(bn);
diff --git a/frontends/ast/ast.cc b/frontends/ast/ast.cc
index 82283fb5b..21279cbfa 100644
--- a/frontends/ast/ast.cc
+++ b/frontends/ast/ast.cc
@@ -158,6 +158,11 @@ std::string AST::type2str(AstNodeType type)
X(AST_POSEDGE)
X(AST_NEGEDGE)
X(AST_EDGE)
+ X(AST_INTERFACE)
+ X(AST_INTERFACEPORT)
+ X(AST_INTERFACEPORTTYPE)
+ X(AST_MODPORT)
+ X(AST_MODPORTMEMBER)
X(AST_PACKAGE)
#undef X
default:
@@ -1099,6 +1104,13 @@ static AstModule* process_module(AstNode *ast, bool defer, AstNode *original_ast
ignoreThisSignalsInInitial = RTLIL::SigSpec();
}
+ else {
+ for (auto &attr : ast->attributes) {
+ if (attr.second->type != AST_CONSTANT)
+ continue;
+ current_module->attributes[attr.first] = attr.second->asAttrConst();
+ }
+ }
if (ast->type == AST_INTERFACE)
current_module->set_bool_attribute("\\is_interface");
@@ -1284,6 +1296,8 @@ void AST::explode_interface_port(AstNode *module_ast, RTLIL::Module * intfmodule
// from AST. The interface members are copied into the AST module with the prefix of the interface.
void AstModule::reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Module*> local_interfaces)
{
+ loadconfig();
+
bool is_top = false;
AstNode *new_ast = ast->clone();
for (auto &intf : local_interfaces) {
@@ -1467,24 +1481,7 @@ std::string AstModule::derive_common(RTLIL::Design *design, dict<RTLIL::IdString
stripped_name = stripped_name.substr(9);
log_header(design, "Executing AST frontend in derive mode using pre-parsed AST for module `%s'.\n", stripped_name.c_str());
-
- current_ast = NULL;
- flag_dump_ast1 = false;
- flag_dump_ast2 = false;
- flag_dump_vlog1 = false;
- flag_dump_vlog2 = false;
- flag_nolatches = nolatches;
- flag_nomeminit = nomeminit;
- flag_nomem2reg = nomem2reg;
- flag_mem2reg = mem2reg;
- flag_noblackbox = noblackbox;
- flag_lib = lib;
- flag_nowb = nowb;
- flag_noopt = noopt;
- flag_icells = icells;
- flag_pwires = pwires;
- flag_autowire = autowire;
- use_internal_line_num();
+ loadconfig();
std::string para_info;
AstNode *new_ast = ast->clone();
@@ -1565,6 +1562,27 @@ RTLIL::Module *AstModule::clone() const
return new_mod;
}
+void AstModule::loadconfig() const
+{
+ current_ast = NULL;
+ flag_dump_ast1 = false;
+ flag_dump_ast2 = false;
+ flag_dump_vlog1 = false;
+ flag_dump_vlog2 = false;
+ flag_nolatches = nolatches;
+ flag_nomeminit = nomeminit;
+ flag_nomem2reg = nomem2reg;
+ flag_mem2reg = mem2reg;
+ flag_noblackbox = noblackbox;
+ flag_lib = lib;
+ flag_nowb = nowb;
+ flag_noopt = noopt;
+ flag_icells = icells;
+ flag_pwires = pwires;
+ flag_autowire = autowire;
+ use_internal_line_num();
+}
+
// internal dummy line number callbacks
namespace {
int internal_line_num;
diff --git a/frontends/ast/ast.h b/frontends/ast/ast.h
index 54b2fb319..93fee913e 100644
--- a/frontends/ast/ast.h
+++ b/frontends/ast/ast.h
@@ -299,6 +299,7 @@ namespace AST
std::string derive_common(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Const> parameters, AstNode **new_ast_out, bool mayfail);
void reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Module *> local_interfaces) YS_OVERRIDE;
RTLIL::Module *clone() const YS_OVERRIDE;
+ void loadconfig() const;
};
// this must be set by the language frontend before parsing the sources
diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc
index 86dd80c65..b1ee22f42 100644
--- a/frontends/ast/simplify.cc
+++ b/frontends/ast/simplify.cc
@@ -1530,10 +1530,16 @@ skip_dynamic_range_lvalue_expansion:;
current_scope[wire_en->str] = wire_en;
while (wire_en->simplify(true, false, false, 1, -1, false, false)) { }
- std::vector<RTLIL::State> x_bit;
- x_bit.push_back(RTLIL::State::Sx);
+ AstNode *check_defval;
+ if (type == AST_LIVE || type == AST_FAIR) {
+ check_defval = new AstNode(AST_REDUCE_BOOL, children[0]->clone());
+ } else {
+ std::vector<RTLIL::State> x_bit;
+ x_bit.push_back(RTLIL::State::Sx);
+ check_defval = mkconst_bits(x_bit, false);
+ }
- AstNode *assign_check = new AstNode(AST_ASSIGN_LE, new AstNode(AST_IDENTIFIER), mkconst_bits(x_bit, false));
+ AstNode *assign_check = new AstNode(AST_ASSIGN_LE, new AstNode(AST_IDENTIFIER), check_defval);
assign_check->children[0]->str = id_check;
assign_check->children[0]->was_checked = true;
@@ -1546,9 +1552,13 @@ skip_dynamic_range_lvalue_expansion:;
default_signals->children.push_back(assign_en);
current_top_block->children.insert(current_top_block->children.begin(), default_signals);
- assign_check = new AstNode(AST_ASSIGN_LE, new AstNode(AST_IDENTIFIER), new AstNode(AST_REDUCE_BOOL, children[0]->clone()));
- assign_check->children[0]->str = id_check;
- assign_check->children[0]->was_checked = true;
+ if (type == AST_LIVE || type == AST_FAIR) {
+ assign_check = nullptr;
+ } else {
+ assign_check = new AstNode(AST_ASSIGN_LE, new AstNode(AST_IDENTIFIER), new AstNode(AST_REDUCE_BOOL, children[0]->clone()));
+ assign_check->children[0]->str = id_check;
+ assign_check->children[0]->was_checked = true;
+ }
if (current_always == nullptr || current_always->type != AST_INITIAL) {
assign_en = new AstNode(AST_ASSIGN_LE, new AstNode(AST_IDENTIFIER), mkconst_int(1, false, 1));
@@ -1560,7 +1570,8 @@ skip_dynamic_range_lvalue_expansion:;
assign_en->children[0]->was_checked = true;
newNode = new AstNode(AST_BLOCK);
- newNode->children.push_back(assign_check);
+ if (assign_check != nullptr)
+ newNode->children.push_back(assign_check);
newNode->children.push_back(assign_en);
AstNode *assertnode = new AstNode(type);
@@ -2884,8 +2895,15 @@ AstNode *AstNode::readmem(bool is_readmemh, std::string mem_filename, AstNode *m
void AstNode::expand_genblock(std::string index_var, std::string prefix, std::map<std::string, std::string> &name_map)
{
if (!index_var.empty() && type == AST_IDENTIFIER && str == index_var) {
- current_scope[index_var]->children[0]->cloneInto(this);
- return;
+ if (children.empty()) {
+ current_scope[index_var]->children[0]->cloneInto(this);
+ } else {
+ AstNode *p = new AstNode(AST_LOCALPARAM, current_scope[index_var]->children[0]->clone());
+ p->str = stringf("$genval$%d", autoidx++);
+ current_ast_mod->children.push_back(p);
+ str = p->str;
+ id2ast = p;
+ }
}
if ((type == AST_IDENTIFIER || type == AST_FCALL || type == AST_TCALL) && name_map.count(str) > 0)
diff --git a/frontends/rpc/Makefile.inc b/frontends/rpc/Makefile.inc
new file mode 100644
index 000000000..9af505098
--- /dev/null
+++ b/frontends/rpc/Makefile.inc
@@ -0,0 +1,2 @@
+
+OBJS += frontends/rpc/rpc_frontend.o
diff --git a/frontends/rpc/rpc_frontend.cc b/frontends/rpc/rpc_frontend.cc
new file mode 100644
index 000000000..b4b2fa3a2
--- /dev/null
+++ b/frontends/rpc/rpc_frontend.cc
@@ -0,0 +1,589 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2019 whitequark <whitequark@whitequark.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+// The reason the -path mode of connect_rpc uses byte-oriented and not message-oriented sockets, even though
+// it is a message-oriented interface, is that the system can place various limits on the message size, which
+// are not always transparent or easy to change. Given that generated HDL code get be extremely large, it is
+// unwise to rely on those limits being large enough, and using byte-oriented sockets is guaranteed to work.
+
+#ifndef _WIN32
+#include <unistd.h>
+#include <spawn.h>
+#include <sys/wait.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#endif
+
+#include "libs/json11/json11.hpp"
+#include "libs/sha1/sha1.h"
+#include "kernel/yosys.h"
+
+YOSYS_NAMESPACE_BEGIN
+
+#if defined(_WIN32)
+static std::wstring str2wstr(const std::string &in) {
+ if(in == "") return L"";
+ std::wstring out;
+ out.resize(MultiByteToWideChar(/*CodePage=*/CP_UTF8, /*dwFlags=*/0, /*lpMultiByteStr=*/&in[0], /*cbMultiByte=*/(int)in.length(), /*lpWideCharStr=*/NULL, /*cchWideChar=*/0));
+ int written = MultiByteToWideChar(/*CodePage=*/CP_UTF8, /*dwFlags=*/0, /*lpMultiByteStr=*/&in[0], /*cbMultiByte=*/(int)in.length(), /*lpWideCharStr=*/&out[0], /*cchWideChar=*/(int)out.length());
+ log_assert(written == (int)out.length());
+ return out;
+}
+
+static std::string wstr2str(const std::wstring &in) {
+ if(in == L"") return "";
+ std::string out;
+ out.resize(WideCharToMultiByte(/*CodePage=*/CP_UTF8, /*dwFlags=*/0, /*lpWideCharStr=*/&in[0], /*cchWideChar=*/(int)in.length(), /*lpMultiByteStr=*/NULL, /*cbMultiByte=*/0, /*lpDefaultChar=*/NULL, /*lpUsedDefaultChar=*/NULL));
+ int written = WideCharToMultiByte(/*CodePage=*/CP_UTF8, /*dwFlags=*/0, /*lpWideCharStr=*/&in[0], /*cchWideChar=*/(int)in.length(), /*lpMultiByteStr=*/&out[0], /*cbMultiByte=*/(int)out.length(), /*lpDefaultChar=*/NULL, /*lpUsedDefaultChar=*/NULL);
+ log_assert(written == (int)out.length());
+ return out;
+}
+
+static std::string get_last_error_str() {
+ DWORD last_error = GetLastError();
+ LPWSTR out_w;
+ DWORD size_w = FormatMessageW(/*dwFlags=*/FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_IGNORE_INSERTS, /*lpSource=*/NULL, /*dwMessageId=*/last_error, /*dwLanguageId=*/0, /*lpBuffer=*/(LPWSTR)&out_w, /*nSize=*/0, /*Arguments=*/NULL);
+ if (size_w == 0)
+ return std::to_string(last_error);
+ std::string out = wstr2str(std::wstring(out_w, size_w));
+ LocalFree(out_w);
+ return out;
+}
+#endif
+
+using json11::Json;
+
+struct RpcServer {
+ std::string name;
+
+ RpcServer(const std::string &name) : name(name) { }
+ virtual ~RpcServer() { }
+
+ virtual void write(const std::string &data) = 0;
+ virtual std::string read() = 0;
+
+ Json call(const Json &json_request) {
+ std::string request;
+ json_request.dump(request);
+ request += '\n';
+ log_debug("RPC frontend request: %s", request.c_str());
+ write(request);
+
+ std::string response = read();
+ log_debug("RPC frontend response: %s", response.c_str());
+ std::string error;
+ Json json_response = Json::parse(response, error);
+ if (json_response.is_null())
+ log_cmd_error("parsing JSON failed: %s\n", error.c_str());
+ if (json_response["error"].is_string())
+ log_cmd_error("RPC frontend returned an error: %s\n", json_response["error"].string_value().c_str());
+ return json_response;
+ }
+
+ std::vector<std::string> get_module_names() {
+ Json response = call(Json::object {
+ { "method", "modules" },
+ });
+ bool is_valid = true;
+ std::vector<std::string> modules;
+ if (response["modules"].is_array()) {
+ for (auto &json_module : response["modules"].array_items()) {
+ if (json_module.is_string())
+ modules.push_back(json_module.string_value());
+ else is_valid = false;
+ }
+ } else is_valid = false;
+ if (!is_valid)
+ log_cmd_error("RPC frontend returned malformed response: %s\n", response.dump().c_str());
+ return modules;
+ }
+
+ std::pair<std::string, std::string> derive_module(const std::string &module, const dict<RTLIL::IdString, RTLIL::Const> &parameters) {
+ Json::object json_parameters;
+ for (auto &param : parameters) {
+ std::string type, value;
+ if (param.second.flags & RTLIL::CONST_FLAG_REAL) {
+ type = "real";
+ value = param.second.decode_string();
+ } else if (param.second.flags & RTLIL::CONST_FLAG_STRING) {
+ type = "string";
+ value = param.second.decode_string();
+ } else if ((param.second.flags & ~RTLIL::CONST_FLAG_SIGNED) == RTLIL::CONST_FLAG_NONE) {
+ type = (param.second.flags & RTLIL::CONST_FLAG_SIGNED) ? "signed" : "unsigned";
+ value = param.second.as_string();
+ } else
+ log_cmd_error("Unserializable constant flags 0x%x\n", param.second.flags);
+ json_parameters[param.first.str()] = Json::object {
+ { "type", type },
+ { "value", value },
+ };
+ }
+ Json response = call(Json::object {
+ { "method", "derive" },
+ { "module", module },
+ { "parameters", json_parameters },
+ });
+ bool is_valid = true;
+ std::string frontend, source;
+ if (response["frontend"].is_string())
+ frontend = response["frontend"].string_value();
+ else is_valid = false;
+ if (response["source"].is_string())
+ source = response["source"].string_value();
+ else is_valid = false;
+ if (!is_valid)
+ log_cmd_error("RPC frontend returned malformed response: %s\n", response.dump().c_str());
+ return std::make_pair(frontend, source);
+ }
+};
+
+struct RpcModule : RTLIL::Module {
+ std::shared_ptr<RpcServer> server;
+
+ RTLIL::IdString derive(RTLIL::Design *design, dict<RTLIL::IdString, RTLIL::Const> parameters, bool /*mayfail*/) YS_OVERRIDE {
+ std::string stripped_name = name.str();
+ if (stripped_name.compare(0, 9, "$abstract") == 0)
+ stripped_name = stripped_name.substr(9);
+ log_assert(stripped_name[0] == '\\');
+
+ log_header(design, "Executing RPC frontend `%s' for module `%s'.\n", server->name.c_str(), stripped_name.c_str());
+
+ std::string parameter_info;
+ for (auto &param : parameters) {
+ log("Parameter %s = %s\n", param.first.c_str(), log_signal(RTLIL::SigSpec(param.second)));
+ parameter_info += stringf("%s=%s", param.first.c_str(), log_signal(RTLIL::SigSpec(param.second)));
+ }
+
+ std::string derived_name;
+ if (parameters.empty())
+ derived_name = stripped_name;
+ else if (parameter_info.size() > 60)
+ derived_name = "$paramod$" + sha1(parameter_info) + stripped_name;
+ else
+ derived_name = "$paramod" + stripped_name + parameter_info;
+
+ if (design->has(derived_name)) {
+ log("Found cached RTLIL representation for module `%s'.\n", derived_name.c_str());
+ } else {
+ std::string command, input;
+ std::tie(command, input) = server->derive_module(stripped_name.substr(1), parameters);
+
+ std::istringstream input_stream(input);
+ RTLIL::Design *derived_design = new RTLIL::Design;
+ Frontend::frontend_call(derived_design, &input_stream, "<rpc>" + derived_name.substr(8), command);
+ derived_design->check();
+
+ dict<std::string, std::string> name_mangling;
+ bool found_derived_top = false;
+ for (auto module : derived_design->modules()) {
+ std::string original_name = module->name.str();
+ if (original_name == stripped_name) {
+ found_derived_top = true;
+ name_mangling[original_name] = derived_name;
+ } else {
+ name_mangling[original_name] = derived_name + module->name.str();
+ }
+ }
+ if (!found_derived_top)
+ log_cmd_error("RPC frontend did not return requested module `%s`!\n", stripped_name.c_str());
+
+ for (auto module : derived_design->modules())
+ for (auto cell : module->cells())
+ if (name_mangling.count(cell->type.str()))
+ cell->type = name_mangling[cell->type.str()];
+
+ for (auto module : derived_design->modules_) {
+ std::string mangled_name = name_mangling[module.first.str()];
+
+ log("Importing `%s' as `%s'.\n", log_id(module.first), log_id(mangled_name));
+
+ module.second->name = mangled_name;
+ module.second->design = design;
+ module.second->attributes.erase("\\top");
+ design->modules_[mangled_name] = module.second;
+ derived_design->modules_.erase(module.first);
+ }
+
+ delete derived_design;
+ }
+
+ return derived_name;
+ }
+
+ RTLIL::Module *clone() const YS_OVERRIDE {
+ RpcModule *new_mod = new RpcModule;
+ new_mod->server = server;
+ cloneInto(new_mod);
+ return new_mod;
+ }
+};
+
+#if defined(_WIN32)
+
+struct HandleRpcServer : RpcServer {
+ HANDLE hsend, hrecv;
+
+ HandleRpcServer(const std::string &name, HANDLE hsend, HANDLE hrecv)
+ : RpcServer(name), hsend(hsend), hrecv(hrecv) { }
+
+ void write(const std::string &data) YS_OVERRIDE {
+ log_assert(data.length() >= 1 && data.find('\n') == data.length() - 1);
+ ssize_t offset = 0;
+ do {
+ DWORD data_written;
+ if (!WriteFile(hsend, &data[offset], data.length() - offset, &data_written, /*lpOverlapped=*/NULL))
+ log_cmd_error("WriteFile failed: %s\n", get_last_error_str().c_str());
+ offset += data_written;
+ } while(offset < (ssize_t)data.length());
+ }
+
+ std::string read() YS_OVERRIDE {
+ std::string data;
+ ssize_t offset = 0;
+ while (data.length() == 0 || data[data.length() - 1] != '\n') {
+ data.resize(data.length() + 1024);
+ DWORD data_read;
+ if (!ReadFile(hrecv, &data[offset], data.length() - offset, &data_read, /*lpOverlapped=*/NULL))
+ log_cmd_error("ReadFile failed: %s\n", get_last_error_str().c_str());
+ offset += data_read;
+ data.resize(offset);
+ size_t term_pos = data.find('\n', offset);
+ if (term_pos != data.length() - 1 && term_pos != std::string::npos)
+ log_cmd_error("read failed: more than one response\n");
+ }
+ return data;
+ }
+
+ ~HandleRpcServer() {
+ CloseHandle(hsend);
+ if (hrecv != hsend)
+ CloseHandle(hrecv);
+ }
+};
+
+#else
+
+struct FdRpcServer : RpcServer {
+ int fdsend, fdrecv;
+ pid_t pid;
+
+ FdRpcServer(const std::string &name, int fdsend, int fdrecv, pid_t pid = -1)
+ : RpcServer(name), fdsend(fdsend), fdrecv(fdrecv), pid(pid) { }
+
+ void check_pid() {
+ if (pid == -1) return;
+ // If we're communicating with a process, check that it's still running, or we may get killed with SIGPIPE.
+ pid_t wait_result = ::waitpid(pid, NULL, WNOHANG);
+ if (wait_result == -1)
+ log_cmd_error("waitpid failed: %s\n", strerror(errno));
+ if (wait_result == pid)
+ log_cmd_error("RPC frontend terminated unexpectedly\n");
+ }
+
+ void write(const std::string &data) YS_OVERRIDE {
+ log_assert(data.length() >= 1 && data.find('\n') == data.length() - 1);
+ ssize_t offset = 0;
+ do {
+ check_pid();
+ ssize_t result = ::write(fdsend, &data[offset], data.length() - offset);
+ if (result == -1)
+ log_cmd_error("write failed: %s\n", strerror(errno));
+ offset += result;
+ } while(offset < (ssize_t)data.length());
+ }
+
+ std::string read() YS_OVERRIDE {
+ std::string data;
+ ssize_t offset = 0;
+ while (data.length() == 0 || data[data.length() - 1] != '\n') {
+ data.resize(data.length() + 1024);
+ check_pid();
+ ssize_t result = ::read(fdrecv, &data[offset], data.length() - offset);
+ if (result == -1)
+ log_cmd_error("read failed: %s\n", strerror(errno));
+ offset += result;
+ data.resize(offset);
+ size_t term_pos = data.find('\n', offset);
+ if (term_pos != data.length() - 1 && term_pos != std::string::npos)
+ log_cmd_error("read failed: more than one response\n");
+ }
+ return data;
+ }
+
+ ~FdRpcServer() {
+ close(fdsend);
+ if (fdrecv != fdsend)
+ close(fdrecv);
+ }
+};
+
+#endif
+
+// RpcFrontend does not inherit from Frontend since it does not read files.
+struct RpcFrontend : public Pass {
+ RpcFrontend() : Pass("connect_rpc", "connect to RPC frontend") { }
+ void help() YS_OVERRIDE
+ {
+ // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
+ log("\n");
+ log(" connect_rpc -exec <command> [args...]\n");
+ log(" connect_rpc -path <path>\n");
+ log("\n");
+ log("Load modules using an out-of-process frontend.\n");
+ log("\n");
+ log(" -exec <command> [args...]\n");
+ log(" run <command> with arguments [args...]. send requests on stdin, read\n");
+ log(" responses from stdout.\n");
+ log("\n");
+ log(" -path <path>\n");
+ log(" connect to Unix domain socket at <path>. (Unix)\n");
+ log(" connect to bidirectional byte-type named pipe at <path>. (Windows)\n");
+ log("\n");
+ log("A simple JSON-based, newline-delimited protocol is used for communicating with\n");
+ log("the frontend. Yosys requests data from the frontend by sending exactly 1 line\n");
+ log("of JSON. Frontend responds with data or error message by replying with exactly\n");
+ log("1 line of JSON as well.\n");
+ log("\n");
+ log(" -> {\"method\": \"modules\"}\n");
+ log(" <- {\"modules\": [\"<module-name>\", ...]}\n");
+ log(" <- {\"error\": \"<error-message>\"}\n");
+ log(" request for the list of modules that can be derived by this frontend.\n");
+ log(" the 'hierarchy' command will call back into this frontend if a cell\n");
+ log(" with type <module-name> is instantiated in the design.\n");
+ log("\n");
+ log(" -> {\"method\": \"derive\", \"module\": \"<module-name\">, \"parameters\": {\n");
+ log(" \"<param-name>\": {\"type\": \"[unsigned|signed|string|real]\",\n");
+ log(" \"value\": \"<param-value>\"}, ...}}\n");
+ log(" <- {\"frontend\": \"[ilang|verilog|...]\",\"source\": \"<source>\"}}\n");
+ log(" <- {\"error\": \"<error-message>\"}\n");
+ log(" request for the module <module-name> to be derived for a specific set of\n");
+ log(" parameters. <param-name> starts with \\ for named parameters, and with $\n");
+ log(" for unnamed parameters, which are numbered starting at 1.<param-value>\n");
+ log(" for integer parameters is always specified as a binary string of unlimited\n");
+ log(" precision. the <source> returned by the frontend is hygienically parsed\n");
+ log(" by a built-in Yosys <frontend>, allowing the RPC frontend to return any\n");
+ log(" convenient representation of the module. the derived module is cached,\n");
+ log(" so the response should be the same whenever the same set of parameters\n");
+ log(" is provided.\n");
+ }
+ void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
+ {
+ log_header(design, "Connecting to RPC frontend.\n");
+
+ std::vector<std::string> command;
+ std::string path;
+ size_t argidx;
+ for (argidx = 1; argidx < args.size(); argidx++) {
+ std::string arg = args[argidx];
+ if (arg == "-exec" && argidx+1 < args.size()) {
+ command.insert(command.begin(), args.begin() + argidx + 1, args.end());
+ continue;
+ }
+ if (arg == "-path" && argidx+1 < args.size()) {
+ path = args[argidx+1];
+ continue;
+ }
+ break;
+ }
+ extra_args(args, argidx, design);
+
+ if ((!command.empty()) + (!path.empty()) != 1)
+ log_cmd_error("Exactly one of -exec, -unix must be specified.\n");
+
+ std::shared_ptr<RpcServer> server;
+ if (!command.empty()) {
+ std::string command_line;
+ bool first = true;
+ for (auto &arg : command) {
+ if (!first) command_line += ' ';
+ command_line += arg;
+ first = false;
+ }
+
+#ifdef _WIN32
+ std::wstring command_w = str2wstr(command[0]);
+ std::wstring command_path_w;
+ std::wstring command_line_w = str2wstr(command_line);
+ DWORD command_path_len_w;
+ SECURITY_ATTRIBUTES pipe_attr = {};
+ HANDLE send_r = NULL, send_w = NULL, recv_r = NULL, recv_w = NULL;
+ STARTUPINFOW startup_info = {};
+ PROCESS_INFORMATION proc_info = {};
+
+ command_path_len_w = SearchPathW(/*lpPath=*/NULL, /*lpFileName=*/command_w.c_str(), /*lpExtension=*/L".exe", /*nBufferLength=*/0, /*lpBuffer=*/NULL, /*lpFilePart=*/NULL);
+ if (command_path_len_w == 0) {
+ log_error("SearchPathW failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_exec;
+ }
+ command_path_w.resize(command_path_len_w - 1);
+ command_path_len_w = SearchPathW(/*lpPath=*/NULL, /*lpFileName=*/command_w.c_str(), /*lpExtension=*/L".exe", /*nBufferLength=*/command_path_len_w, /*lpBuffer=*/&command_path_w[0], /*lpFilePart=*/NULL);
+ log_assert(command_path_len_w == command_path_w.length());
+
+ pipe_attr.nLength = sizeof(pipe_attr);
+ pipe_attr.bInheritHandle = TRUE;
+ pipe_attr.lpSecurityDescriptor = NULL;
+ if (!CreatePipe(&send_r, &send_w, &pipe_attr, /*nSize=*/0)) {
+ log_error("CreatePipe failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_exec;
+ }
+ if (!SetHandleInformation(send_w, HANDLE_FLAG_INHERIT, 0)) {
+ log_error("SetHandleInformation failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_exec;
+ }
+ if (!CreatePipe(&recv_r, &recv_w, &pipe_attr, /*nSize=*/0)) {
+ log_error("CreatePipe failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_exec;
+ }
+ if (!SetHandleInformation(recv_r, HANDLE_FLAG_INHERIT, 0)) {
+ log_error("SetHandleInformation failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_exec;
+ }
+
+ startup_info.cb = sizeof(startup_info);
+ startup_info.hStdInput = send_r;
+ startup_info.hStdOutput = recv_w;
+ startup_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
+ startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ if (!CreateProcessW(/*lpApplicationName=*/command_path_w.c_str(), /*lpCommandLine=*/&command_line_w[0], /*lpProcessAttributes=*/NULL, /*lpThreadAttributes=*/NULL, /*bInheritHandles=*/TRUE, /*dwCreationFlags=*/0, /*lpEnvironment=*/NULL, /*lpCurrentDirectory=*/NULL, &startup_info, &proc_info)) {
+ log_error("CreateProcessW failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_exec;
+ }
+ CloseHandle(proc_info.hProcess);
+ CloseHandle(proc_info.hThread);
+
+ server = std::make_shared<HandleRpcServer>(path, send_w, recv_r);
+ send_w = NULL;
+ recv_r = NULL;
+
+cleanup_exec:
+ if (send_r != NULL) CloseHandle(send_r);
+ if (send_w != NULL) CloseHandle(send_w);
+ if (recv_r != NULL) CloseHandle(recv_r);
+ if (recv_w != NULL) CloseHandle(recv_w);
+#else
+ std::vector<char *> argv;
+ int send[2] = {-1,-1}, recv[2] = {-1,-1};
+ posix_spawn_file_actions_t file_actions, *file_actions_p = NULL;
+ pid_t pid;
+
+ for (auto &arg : command)
+ argv.push_back(&arg[0]);
+ argv.push_back(nullptr);
+
+ if (pipe(send) != 0) {
+ log_error("pipe failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+ if (pipe(recv) != 0) {
+ log_error("pipe failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+
+ if (posix_spawn_file_actions_init(&file_actions) != 0) {
+ log_error("posix_spawn_file_actions_init failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+ file_actions_p = &file_actions;
+ if (posix_spawn_file_actions_adddup2(file_actions_p, send[0], STDIN_FILENO) != 0) {
+ log_error("posix_spawn_file_actions_adddup2 failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+ if (posix_spawn_file_actions_addclose(file_actions_p, send[1]) != 0) {
+ log_error("posix_spawn_file_actions_addclose failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+ if (posix_spawn_file_actions_adddup2(file_actions_p, recv[1], STDOUT_FILENO) != 0) {
+ log_error("posix_spawn_file_actions_adddup2 failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+ if (posix_spawn_file_actions_addclose(file_actions_p, recv[0]) != 0) {
+ log_error("posix_spawn_file_actions_addclose failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+
+ if (posix_spawnp(&pid, argv[0], file_actions_p, /*attrp=*/NULL, argv.data(), environ) != 0) {
+ log_error("posix_spawnp failed: %s\n", strerror(errno));
+ goto cleanup_exec;
+ }
+
+ server = std::make_shared<FdRpcServer>(command_line, send[1], recv[0], pid);
+ send[1] = -1;
+ recv[0] = -1;
+
+cleanup_exec:
+ if (send[0] != -1) close(send[0]);
+ if (send[1] != -1) close(send[1]);
+ if (recv[0] != -1) close(recv[0]);
+ if (recv[1] != -1) close(recv[1]);
+ if (file_actions_p != NULL)
+ posix_spawn_file_actions_destroy(file_actions_p);
+#endif
+ } else if (!path.empty()) {
+#ifdef _WIN32
+ std::wstring path_w = str2wstr(path);
+ HANDLE h;
+
+ h = CreateFileW(path_w.c_str(), GENERIC_READ|GENERIC_WRITE, /*dwShareMode=*/0, /*lpSecurityAttributes=*/NULL, /*dwCreationDisposition=*/OPEN_EXISTING, /*dwFlagsAndAttributes=*/0, /*hTemplateFile=*/NULL);
+ if (h == INVALID_HANDLE_VALUE) {
+ log_error("CreateFileW failed: %s\n", get_last_error_str().c_str());
+ goto cleanup_path;
+ }
+
+ server = std::make_shared<HandleRpcServer>(path, h, h);
+
+cleanup_path:
+ ;
+#else
+ struct sockaddr_un addr;
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, path.c_str(), sizeof(addr.sun_path) - 1);
+
+ int fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd == -1) {
+ log_error("socket failed: %s\n", strerror(errno));
+ goto cleanup_path;
+ }
+
+ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
+ log_error("connect failed: %s\n", strerror(errno));
+ goto cleanup_path;
+ }
+
+ server = std::make_shared<FdRpcServer>(path, fd, fd);
+ fd = -1;
+
+cleanup_path:
+ if (fd != -1) close(fd);
+#endif
+ }
+
+ if (!server)
+ log_cmd_error("Failed to connect to RPC frontend.\n");
+
+ for (auto &module_name : server->get_module_names()) {
+ log("Linking module `%s'.\n", module_name.c_str());
+ RpcModule *module = new RpcModule;
+ module->name = "$abstract\\" + module_name;
+ module->server = server;
+ design->add(module);
+ }
+ }
+} RpcFrontend;
+
+YOSYS_NAMESPACE_END
diff --git a/frontends/verilog/const2ast.cc b/frontends/verilog/const2ast.cc
index 4bf5b1cf5..49281f7e7 100644
--- a/frontends/verilog/const2ast.cc
+++ b/frontends/verilog/const2ast.cc
@@ -85,10 +85,8 @@ static void my_strtobin(std::vector<RTLIL::State> &data, const char *str, int le
digits.push_back(10 + *str - 'A');
else if (*str == 'x' || *str == 'X')
digits.push_back(0xf0);
- else if (*str == 'z' || *str == 'Z')
+ else if (*str == 'z' || *str == 'Z' || *str == '?')
digits.push_back(0xf1);
- else if (*str == '?')
- digits.push_back(0xf2);
str++;
}
@@ -112,8 +110,6 @@ static void my_strtobin(std::vector<RTLIL::State> &data, const char *str, int le
data.push_back(case_type == 'x' ? RTLIL::Sa : RTLIL::Sx);
else if (*it == 0xf1)
data.push_back(case_type == 'x' || case_type == 'z' ? RTLIL::Sa : RTLIL::Sz);
- else if (*it == 0xf2)
- data.push_back(RTLIL::Sa);
else
data.push_back((*it & bitmask) ? State::S1 : State::S0);
}
@@ -199,13 +195,13 @@ AstNode *VERILOG_FRONTEND::const2ast(std::string code, char case_type, bool warn
if (str == endptr)
len_in_bits = -1;
- // The "<bits>'s?[bodhBODH]<digits>" syntax
+ // The "<bits>'[sS]?[bodhBODH]<digits>" syntax
if (*endptr == '\'')
{
std::vector<RTLIL::State> data;
bool is_signed = false;
bool is_unsized = len_in_bits < 0;
- if (*(endptr+1) == 's') {
+ if (*(endptr+1) == 's' || *(endptr+1) == 'S') {
is_signed = true;
endptr++;
}
diff --git a/frontends/verilog/verilog_lexer.l b/frontends/verilog/verilog_lexer.l
index 57e55b1f4..4acfb414d 100644
--- a/frontends/verilog/verilog_lexer.l
+++ b/frontends/verilog/verilog_lexer.l
@@ -239,7 +239,7 @@ YOSYS_NAMESPACE_END
return TOK_CONSTVAL;
}
-[0-9]*[ \t]*\'s?[bodhBODH]*[ \t\r\n]*[0-9a-fA-FzxZX?_]+ {
+[0-9]*[ \t]*\'[sS]?[bodhBODH]?[ \t\r\n]*[0-9a-fA-FzxZX?_]+ {
frontend_verilog_yylval.string = new std::string(yytext);
return TOK_CONSTVAL;
}
diff --git a/kernel/register.cc b/kernel/register.cc
index 1fd1bad1d..37f2e5e1b 100644
--- a/kernel/register.cc
+++ b/kernel/register.cc
@@ -48,7 +48,7 @@ using zlib to write gzip-compressed data every time the stream is flushed.
*/
class gzip_ostream : public std::ostream {
public:
- gzip_ostream()
+ gzip_ostream() : std::ostream(nullptr)
{
rdbuf(&outbuf);
}
@@ -71,7 +71,7 @@ private:
str("");
return 0;
}
- ~gzip_streambuf()
+ virtual ~gzip_streambuf()
{
sync();
gzclose(gzf);
@@ -439,7 +439,7 @@ void Frontend::execute(std::vector<std::string> args, RTLIL::Design *design)
FILE *Frontend::current_script_file = NULL;
std::string Frontend::last_here_document;
-void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<std::string> args, size_t argidx)
+void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<std::string> args, size_t argidx, bool bin_input)
{
bool called_with_fp = f != NULL;
@@ -489,7 +489,7 @@ void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<s
next_args.insert(next_args.end(), filenames.begin()+1, filenames.end());
}
std::ifstream *ff = new std::ifstream;
- ff->open(filename.c_str());
+ ff->open(filename.c_str(), bin_input ? std::ifstream::binary : std::ifstream::in);
yosys_input_files.insert(filename);
if (ff->fail())
delete ff;
@@ -498,7 +498,15 @@ void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<s
if (f != NULL) {
// Check for gzip magic
unsigned char magic[3];
- int n = readsome(*ff, reinterpret_cast<char*>(magic), 3);
+ int n = 0;
+ while (n < 3)
+ {
+ int c = ff->get();
+ if (c != EOF) {
+ magic[n] = (unsigned char) c;
+ }
+ n++;
+ }
if (n == 3 && magic[0] == 0x1f && magic[1] == 0x8b) {
#ifdef YOSYS_ENABLE_ZLIB
log("Found gzip magic in file `%s', decompressing using zlib.\n", filename.c_str());
@@ -604,7 +612,7 @@ void Backend::execute(std::vector<std::string> args, RTLIL::Design *design)
delete f;
}
-void Backend::extra_args(std::ostream *&f, std::string &filename, std::vector<std::string> args, size_t argidx)
+void Backend::extra_args(std::ostream *&f, std::string &filename, std::vector<std::string> args, size_t argidx, bool bin_output)
{
bool called_with_fp = f != NULL;
@@ -639,7 +647,7 @@ void Backend::extra_args(std::ostream *&f, std::string &filename, std::vector<st
#endif
} else {
std::ofstream *ff = new std::ofstream;
- ff->open(filename.c_str(), std::ofstream::trunc);
+ ff->open(filename.c_str(), bin_output ? (std::ofstream::trunc | std::ofstream::binary) : std::ofstream::trunc);
yosys_output_files.insert(filename);
if (ff->fail()) {
delete ff;
diff --git a/kernel/register.h b/kernel/register.h
index c74029823..85d552f0d 100644
--- a/kernel/register.h
+++ b/kernel/register.h
@@ -94,7 +94,7 @@ struct Frontend : Pass
virtual void execute(std::istream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) = 0;
static std::vector<std::string> next_args;
- void extra_args(std::istream *&f, std::string &filename, std::vector<std::string> args, size_t argidx);
+ void extra_args(std::istream *&f, std::string &filename, std::vector<std::string> args, size_t argidx, bool bin_input = false);
static void frontend_call(RTLIL::Design *design, std::istream *f, std::string filename, std::string command);
static void frontend_call(RTLIL::Design *design, std::istream *f, std::string filename, std::vector<std::string> args);
@@ -109,7 +109,7 @@ struct Backend : Pass
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE YS_FINAL;
virtual void execute(std::ostream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) = 0;
- void extra_args(std::ostream *&f, std::string &filename, std::vector<std::string> args, size_t argidx);
+ void extra_args(std::ostream *&f, std::string &filename, std::vector<std::string> args, size_t argidx, bool bin_output = false);
static void backend_call(RTLIL::Design *design, std::ostream *f, std::string filename, std::string command);
static void backend_call(RTLIL::Design *design, std::ostream *f, std::string filename, std::vector<std::string> args);
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index 1d380135b..17be28f78 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -3083,6 +3083,7 @@ void RTLIL::SigSpec::replace(const dict<RTLIL::SigBit, RTLIL::SigBit> &rules, RT
log_assert(other != NULL);
log_assert(width_ == other->width_);
+ if (rules.empty()) return;
unpack();
other->unpack();
@@ -3107,6 +3108,7 @@ void RTLIL::SigSpec::replace(const std::map<RTLIL::SigBit, RTLIL::SigBit> &rules
log_assert(other != NULL);
log_assert(width_ == other->width_);
+ if (rules.empty()) return;
unpack();
other->unpack();
diff --git a/kernel/sigtools.h b/kernel/sigtools.h
index 4e97bb775..2517d6de3 100644
--- a/kernel/sigtools.h
+++ b/kernel/sigtools.h
@@ -135,9 +135,11 @@ struct SigPool
}
};
-template <typename T, class Compare = std::less<T>>
+template <typename T, class Compare = void>
struct SigSet
{
+ static_assert(!std::is_same<Compare,void>::value, "Default value for `Compare' class not found for SigSet<T>. Please specify.");
+
struct bitDef_t : public std::pair<RTLIL::Wire*, int> {
bitDef_t() : std::pair<RTLIL::Wire*, int>(NULL, 0) { }
bitDef_t(const RTLIL::SigBit &bit) : std::pair<RTLIL::Wire*, int>(bit.wire, bit.offset) { }
@@ -220,6 +222,13 @@ struct SigSet
}
};
+template<typename T>
+class SigSet<T, typename std::enable_if<!std::is_pointer<T>::value>::type> : public SigSet<T, std::less<T>> {};
+template<typename T>
+using sort_by_name_id_guard = typename std::enable_if<std::is_same<T,RTLIL::Cell*>::value>::type;
+template<typename T>
+class SigSet<T, sort_by_name_id_guard<T>> : public SigSet<T, RTLIL::sort_by_name_id<typename std::remove_pointer<T>::type>> {};
+
struct SigMap
{
mfp<SigBit> database;
diff --git a/libs/json11/json11.cpp b/libs/json11/json11.cpp
new file mode 100644
index 000000000..549463d71
--- /dev/null
+++ b/libs/json11/json11.cpp
@@ -0,0 +1,788 @@
+/* Copyright (c) 2013 Dropbox, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "json11.hpp"
+#include <cassert>
+#include <cmath>
+#include <cstdlib>
+#include <cstdio>
+#include <limits>
+
+namespace json11 {
+
+static const int max_depth = 200;
+
+using std::string;
+using std::vector;
+using std::map;
+using std::make_shared;
+using std::initializer_list;
+using std::move;
+
+/* Helper for representing null - just a do-nothing struct, plus comparison
+ * operators so the helpers in JsonValue work. We can't use nullptr_t because
+ * it may not be orderable.
+ */
+struct NullStruct {
+ bool operator==(NullStruct) const { return true; }
+ bool operator<(NullStruct) const { return false; }
+};
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Serialization
+ */
+
+static void dump(NullStruct, string &out) {
+ out += "null";
+}
+
+static void dump(double value, string &out) {
+ if (std::isfinite(value)) {
+ char buf[32];
+ snprintf(buf, sizeof buf, "%.17g", value);
+ out += buf;
+ } else {
+ out += "null";
+ }
+}
+
+static void dump(int value, string &out) {
+ char buf[32];
+ snprintf(buf, sizeof buf, "%d", value);
+ out += buf;
+}
+
+static void dump(bool value, string &out) {
+ out += value ? "true" : "false";
+}
+
+static void dump(const string &value, string &out) {
+ out += '"';
+ for (size_t i = 0; i < value.length(); i++) {
+ const char ch = value[i];
+ if (ch == '\\') {
+ out += "\\\\";
+ } else if (ch == '"') {
+ out += "\\\"";
+ } else if (ch == '\b') {
+ out += "\\b";
+ } else if (ch == '\f') {
+ out += "\\f";
+ } else if (ch == '\n') {
+ out += "\\n";
+ } else if (ch == '\r') {
+ out += "\\r";
+ } else if (ch == '\t') {
+ out += "\\t";
+ } else if (static_cast<uint8_t>(ch) <= 0x1f) {
+ char buf[8];
+ snprintf(buf, sizeof buf, "\\u%04x", ch);
+ out += buf;
+ } else if (static_cast<uint8_t>(ch) == 0xe2 && static_cast<uint8_t>(value[i+1]) == 0x80
+ && static_cast<uint8_t>(value[i+2]) == 0xa8) {
+ out += "\\u2028";
+ i += 2;
+ } else if (static_cast<uint8_t>(ch) == 0xe2 && static_cast<uint8_t>(value[i+1]) == 0x80
+ && static_cast<uint8_t>(value[i+2]) == 0xa9) {
+ out += "\\u2029";
+ i += 2;
+ } else {
+ out += ch;
+ }
+ }
+ out += '"';
+}
+
+static void dump(const Json::array &values, string &out) {
+ bool first = true;
+ out += "[";
+ for (const auto &value : values) {
+ if (!first)
+ out += ", ";
+ value.dump(out);
+ first = false;
+ }
+ out += "]";
+}
+
+static void dump(const Json::object &values, string &out) {
+ bool first = true;
+ out += "{";
+ for (const auto &kv : values) {
+ if (!first)
+ out += ", ";
+ dump(kv.first, out);
+ out += ": ";
+ kv.second.dump(out);
+ first = false;
+ }
+ out += "}";
+}
+
+void Json::dump(string &out) const {
+ m_ptr->dump(out);
+}
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Value wrappers
+ */
+
+template <Json::Type tag, typename T>
+class Value : public JsonValue {
+protected:
+
+ // Constructors
+ explicit Value(const T &value) : m_value(value) {}
+ explicit Value(T &&value) : m_value(move(value)) {}
+
+ // Get type tag
+ Json::Type type() const override {
+ return tag;
+ }
+
+ // Comparisons
+ bool equals(const JsonValue * other) const override {
+ return m_value == static_cast<const Value<tag, T> *>(other)->m_value;
+ }
+ bool less(const JsonValue * other) const override {
+ return m_value < static_cast<const Value<tag, T> *>(other)->m_value;
+ }
+
+ const T m_value;
+ void dump(string &out) const override { json11::dump(m_value, out); }
+};
+
+class JsonDouble final : public Value<Json::NUMBER, double> {
+ double number_value() const override { return m_value; }
+ int int_value() const override { return static_cast<int>(m_value); }
+ bool equals(const JsonValue * other) const override { return m_value == other->number_value(); }
+ bool less(const JsonValue * other) const override { return m_value < other->number_value(); }
+public:
+ explicit JsonDouble(double value) : Value(value) {}
+};
+
+class JsonInt final : public Value<Json::NUMBER, int> {
+ double number_value() const override { return m_value; }
+ int int_value() const override { return m_value; }
+ bool equals(const JsonValue * other) const override { return m_value == other->number_value(); }
+ bool less(const JsonValue * other) const override { return m_value < other->number_value(); }
+public:
+ explicit JsonInt(int value) : Value(value) {}
+};
+
+class JsonBoolean final : public Value<Json::BOOL, bool> {
+ bool bool_value() const override { return m_value; }
+public:
+ explicit JsonBoolean(bool value) : Value(value) {}
+};
+
+class JsonString final : public Value<Json::STRING, string> {
+ const string &string_value() const override { return m_value; }
+public:
+ explicit JsonString(const string &value) : Value(value) {}
+ explicit JsonString(string &&value) : Value(move(value)) {}
+};
+
+class JsonArray final : public Value<Json::ARRAY, Json::array> {
+ const Json::array &array_items() const override { return m_value; }
+ const Json & operator[](size_t i) const override;
+public:
+ explicit JsonArray(const Json::array &value) : Value(value) {}
+ explicit JsonArray(Json::array &&value) : Value(move(value)) {}
+};
+
+class JsonObject final : public Value<Json::OBJECT, Json::object> {
+ const Json::object &object_items() const override { return m_value; }
+ const Json & operator[](const string &key) const override;
+public:
+ explicit JsonObject(const Json::object &value) : Value(value) {}
+ explicit JsonObject(Json::object &&value) : Value(move(value)) {}
+};
+
+class JsonNull final : public Value<Json::NUL, NullStruct> {
+public:
+ JsonNull() : Value({}) {}
+};
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Static globals - static-init-safe
+ */
+struct Statics {
+ const std::shared_ptr<JsonValue> null = make_shared<JsonNull>();
+ const std::shared_ptr<JsonValue> t = make_shared<JsonBoolean>(true);
+ const std::shared_ptr<JsonValue> f = make_shared<JsonBoolean>(false);
+ const string empty_string;
+ const vector<Json> empty_vector;
+ const map<string, Json> empty_map;
+ Statics() {}
+};
+
+static const Statics & statics() {
+ static const Statics s {};
+ return s;
+}
+
+static const Json & static_null() {
+ // This has to be separate, not in Statics, because Json() accesses statics().null.
+ static const Json json_null;
+ return json_null;
+}
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Constructors
+ */
+
+Json::Json() noexcept : m_ptr(statics().null) {}
+Json::Json(std::nullptr_t) noexcept : m_ptr(statics().null) {}
+Json::Json(double value) : m_ptr(make_shared<JsonDouble>(value)) {}
+Json::Json(int value) : m_ptr(make_shared<JsonInt>(value)) {}
+Json::Json(bool value) : m_ptr(value ? statics().t : statics().f) {}
+Json::Json(const string &value) : m_ptr(make_shared<JsonString>(value)) {}
+Json::Json(string &&value) : m_ptr(make_shared<JsonString>(move(value))) {}
+Json::Json(const char * value) : m_ptr(make_shared<JsonString>(value)) {}
+Json::Json(const Json::array &values) : m_ptr(make_shared<JsonArray>(values)) {}
+Json::Json(Json::array &&values) : m_ptr(make_shared<JsonArray>(move(values))) {}
+Json::Json(const Json::object &values) : m_ptr(make_shared<JsonObject>(values)) {}
+Json::Json(Json::object &&values) : m_ptr(make_shared<JsonObject>(move(values))) {}
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Accessors
+ */
+
+Json::Type Json::type() const { return m_ptr->type(); }
+double Json::number_value() const { return m_ptr->number_value(); }
+int Json::int_value() const { return m_ptr->int_value(); }
+bool Json::bool_value() const { return m_ptr->bool_value(); }
+const string & Json::string_value() const { return m_ptr->string_value(); }
+const vector<Json> & Json::array_items() const { return m_ptr->array_items(); }
+const map<string, Json> & Json::object_items() const { return m_ptr->object_items(); }
+const Json & Json::operator[] (size_t i) const { return (*m_ptr)[i]; }
+const Json & Json::operator[] (const string &key) const { return (*m_ptr)[key]; }
+
+double JsonValue::number_value() const { return 0; }
+int JsonValue::int_value() const { return 0; }
+bool JsonValue::bool_value() const { return false; }
+const string & JsonValue::string_value() const { return statics().empty_string; }
+const vector<Json> & JsonValue::array_items() const { return statics().empty_vector; }
+const map<string, Json> & JsonValue::object_items() const { return statics().empty_map; }
+const Json & JsonValue::operator[] (size_t) const { return static_null(); }
+const Json & JsonValue::operator[] (const string &) const { return static_null(); }
+
+const Json & JsonObject::operator[] (const string &key) const {
+ auto iter = m_value.find(key);
+ return (iter == m_value.end()) ? static_null() : iter->second;
+}
+const Json & JsonArray::operator[] (size_t i) const {
+ if (i >= m_value.size()) return static_null();
+ else return m_value[i];
+}
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Comparison
+ */
+
+bool Json::operator== (const Json &other) const {
+ if (m_ptr == other.m_ptr)
+ return true;
+ if (m_ptr->type() != other.m_ptr->type())
+ return false;
+
+ return m_ptr->equals(other.m_ptr.get());
+}
+
+bool Json::operator< (const Json &other) const {
+ if (m_ptr == other.m_ptr)
+ return false;
+ if (m_ptr->type() != other.m_ptr->type())
+ return m_ptr->type() < other.m_ptr->type();
+
+ return m_ptr->less(other.m_ptr.get());
+}
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Parsing
+ */
+
+/* esc(c)
+ *
+ * Format char c suitable for printing in an error message.
+ */
+static inline string esc(char c) {
+ char buf[12];
+ if (static_cast<uint8_t>(c) >= 0x20 && static_cast<uint8_t>(c) <= 0x7f) {
+ snprintf(buf, sizeof buf, "'%c' (%d)", c, c);
+ } else {
+ snprintf(buf, sizeof buf, "(%d)", c);
+ }
+ return string(buf);
+}
+
+static inline bool in_range(long x, long lower, long upper) {
+ return (x >= lower && x <= upper);
+}
+
+namespace {
+/* JsonParser
+ *
+ * Object that tracks all state of an in-progress parse.
+ */
+struct JsonParser final {
+
+ /* State
+ */
+ const string &str;
+ size_t i;
+ string &err;
+ bool failed;
+ const JsonParse strategy;
+
+ /* fail(msg, err_ret = Json())
+ *
+ * Mark this parse as failed.
+ */
+ Json fail(string &&msg) {
+ return fail(move(msg), Json());
+ }
+
+ template <typename T>
+ T fail(string &&msg, const T err_ret) {
+ if (!failed)
+ err = std::move(msg);
+ failed = true;
+ return err_ret;
+ }
+
+ /* consume_whitespace()
+ *
+ * Advance until the current character is non-whitespace.
+ */
+ void consume_whitespace() {
+ while (str[i] == ' ' || str[i] == '\r' || str[i] == '\n' || str[i] == '\t')
+ i++;
+ }
+
+ /* consume_comment()
+ *
+ * Advance comments (c-style inline and multiline).
+ */
+ bool consume_comment() {
+ bool comment_found = false;
+ if (str[i] == '/') {
+ i++;
+ if (i == str.size())
+ return fail("unexpected end of input after start of comment", false);
+ if (str[i] == '/') { // inline comment
+ i++;
+ // advance until next line, or end of input
+ while (i < str.size() && str[i] != '\n') {
+ i++;
+ }
+ comment_found = true;
+ }
+ else if (str[i] == '*') { // multiline comment
+ i++;
+ if (i > str.size()-2)
+ return fail("unexpected end of input inside multi-line comment", false);
+ // advance until closing tokens
+ while (!(str[i] == '*' && str[i+1] == '/')) {
+ i++;
+ if (i > str.size()-2)
+ return fail(
+ "unexpected end of input inside multi-line comment", false);
+ }
+ i += 2;
+ comment_found = true;
+ }
+ else
+ return fail("malformed comment", false);
+ }
+ return comment_found;
+ }
+
+ /* consume_garbage()
+ *
+ * Advance until the current character is non-whitespace and non-comment.
+ */
+ void consume_garbage() {
+ consume_whitespace();
+ if(strategy == JsonParse::COMMENTS) {
+ bool comment_found = false;
+ do {
+ comment_found = consume_comment();
+ if (failed) return;
+ consume_whitespace();
+ }
+ while(comment_found);
+ }
+ }
+
+ /* get_next_token()
+ *
+ * Return the next non-whitespace character. If the end of the input is reached,
+ * flag an error and return 0.
+ */
+ char get_next_token() {
+ consume_garbage();
+ if (failed) return static_cast<char>(0);
+ if (i == str.size())
+ return fail("unexpected end of input", static_cast<char>(0));
+
+ return str[i++];
+ }
+
+ /* encode_utf8(pt, out)
+ *
+ * Encode pt as UTF-8 and add it to out.
+ */
+ void encode_utf8(long pt, string & out) {
+ if (pt < 0)
+ return;
+
+ if (pt < 0x80) {
+ out += static_cast<char>(pt);
+ } else if (pt < 0x800) {
+ out += static_cast<char>((pt >> 6) | 0xC0);
+ out += static_cast<char>((pt & 0x3F) | 0x80);
+ } else if (pt < 0x10000) {
+ out += static_cast<char>((pt >> 12) | 0xE0);
+ out += static_cast<char>(((pt >> 6) & 0x3F) | 0x80);
+ out += static_cast<char>((pt & 0x3F) | 0x80);
+ } else {
+ out += static_cast<char>((pt >> 18) | 0xF0);
+ out += static_cast<char>(((pt >> 12) & 0x3F) | 0x80);
+ out += static_cast<char>(((pt >> 6) & 0x3F) | 0x80);
+ out += static_cast<char>((pt & 0x3F) | 0x80);
+ }
+ }
+
+ /* parse_string()
+ *
+ * Parse a string, starting at the current position.
+ */
+ string parse_string() {
+ string out;
+ long last_escaped_codepoint = -1;
+ while (true) {
+ if (i == str.size())
+ return fail("unexpected end of input in string", "");
+
+ char ch = str[i++];
+
+ if (ch == '"') {
+ encode_utf8(last_escaped_codepoint, out);
+ return out;
+ }
+
+ if (in_range(ch, 0, 0x1f))
+ return fail("unescaped " + esc(ch) + " in string", "");
+
+ // The usual case: non-escaped characters
+ if (ch != '\\') {
+ encode_utf8(last_escaped_codepoint, out);
+ last_escaped_codepoint = -1;
+ out += ch;
+ continue;
+ }
+
+ // Handle escapes
+ if (i == str.size())
+ return fail("unexpected end of input in string", "");
+
+ ch = str[i++];
+
+ if (ch == 'u') {
+ // Extract 4-byte escape sequence
+ string esc = str.substr(i, 4);
+ // Explicitly check length of the substring. The following loop
+ // relies on std::string returning the terminating NUL when
+ // accessing str[length]. Checking here reduces brittleness.
+ if (esc.length() < 4) {
+ return fail("bad \\u escape: " + esc, "");
+ }
+ for (size_t j = 0; j < 4; j++) {
+ if (!in_range(esc[j], 'a', 'f') && !in_range(esc[j], 'A', 'F')
+ && !in_range(esc[j], '0', '9'))
+ return fail("bad \\u escape: " + esc, "");
+ }
+
+ long codepoint = strtol(esc.data(), nullptr, 16);
+
+ // JSON specifies that characters outside the BMP shall be encoded as a pair
+ // of 4-hex-digit \u escapes encoding their surrogate pair components. Check
+ // whether we're in the middle of such a beast: the previous codepoint was an
+ // escaped lead (high) surrogate, and this is a trail (low) surrogate.
+ if (in_range(last_escaped_codepoint, 0xD800, 0xDBFF)
+ && in_range(codepoint, 0xDC00, 0xDFFF)) {
+ // Reassemble the two surrogate pairs into one astral-plane character, per
+ // the UTF-16 algorithm.
+ encode_utf8((((last_escaped_codepoint - 0xD800) << 10)
+ | (codepoint - 0xDC00)) + 0x10000, out);
+ last_escaped_codepoint = -1;
+ } else {
+ encode_utf8(last_escaped_codepoint, out);
+ last_escaped_codepoint = codepoint;
+ }
+
+ i += 4;
+ continue;
+ }
+
+ encode_utf8(last_escaped_codepoint, out);
+ last_escaped_codepoint = -1;
+
+ if (ch == 'b') {
+ out += '\b';
+ } else if (ch == 'f') {
+ out += '\f';
+ } else if (ch == 'n') {
+ out += '\n';
+ } else if (ch == 'r') {
+ out += '\r';
+ } else if (ch == 't') {
+ out += '\t';
+ } else if (ch == '"' || ch == '\\' || ch == '/') {
+ out += ch;
+ } else {
+ return fail("invalid escape character " + esc(ch), "");
+ }
+ }
+ }
+
+ /* parse_number()
+ *
+ * Parse a double.
+ */
+ Json parse_number() {
+ size_t start_pos = i;
+
+ if (str[i] == '-')
+ i++;
+
+ // Integer part
+ if (str[i] == '0') {
+ i++;
+ if (in_range(str[i], '0', '9'))
+ return fail("leading 0s not permitted in numbers");
+ } else if (in_range(str[i], '1', '9')) {
+ i++;
+ while (in_range(str[i], '0', '9'))
+ i++;
+ } else {
+ return fail("invalid " + esc(str[i]) + " in number");
+ }
+
+ if (str[i] != '.' && str[i] != 'e' && str[i] != 'E'
+ && (i - start_pos) <= static_cast<size_t>(std::numeric_limits<int>::digits10)) {
+ return std::atoi(str.c_str() + start_pos);
+ }
+
+ // Decimal part
+ if (str[i] == '.') {
+ i++;
+ if (!in_range(str[i], '0', '9'))
+ return fail("at least one digit required in fractional part");
+
+ while (in_range(str[i], '0', '9'))
+ i++;
+ }
+
+ // Exponent part
+ if (str[i] == 'e' || str[i] == 'E') {
+ i++;
+
+ if (str[i] == '+' || str[i] == '-')
+ i++;
+
+ if (!in_range(str[i], '0', '9'))
+ return fail("at least one digit required in exponent");
+
+ while (in_range(str[i], '0', '9'))
+ i++;
+ }
+
+ return std::strtod(str.c_str() + start_pos, nullptr);
+ }
+
+ /* expect(str, res)
+ *
+ * Expect that 'str' starts at the character that was just read. If it does, advance
+ * the input and return res. If not, flag an error.
+ */
+ Json expect(const string &expected, Json res) {
+ assert(i != 0);
+ i--;
+ if (str.compare(i, expected.length(), expected) == 0) {
+ i += expected.length();
+ return res;
+ } else {
+ return fail("parse error: expected " + expected + ", got " + str.substr(i, expected.length()));
+ }
+ }
+
+ /* parse_json()
+ *
+ * Parse a JSON object.
+ */
+ Json parse_json(int depth) {
+ if (depth > max_depth) {
+ return fail("exceeded maximum nesting depth");
+ }
+
+ char ch = get_next_token();
+ if (failed)
+ return Json();
+
+ if (ch == '-' || (ch >= '0' && ch <= '9')) {
+ i--;
+ return parse_number();
+ }
+
+ if (ch == 't')
+ return expect("true", true);
+
+ if (ch == 'f')
+ return expect("false", false);
+
+ if (ch == 'n')
+ return expect("null", Json());
+
+ if (ch == '"')
+ return parse_string();
+
+ if (ch == '{') {
+ map<string, Json> data;
+ ch = get_next_token();
+ if (ch == '}')
+ return data;
+
+ while (1) {
+ if (ch != '"')
+ return fail("expected '\"' in object, got " + esc(ch));
+
+ string key = parse_string();
+ if (failed)
+ return Json();
+
+ ch = get_next_token();
+ if (ch != ':')
+ return fail("expected ':' in object, got " + esc(ch));
+
+ data[std::move(key)] = parse_json(depth + 1);
+ if (failed)
+ return Json();
+
+ ch = get_next_token();
+ if (ch == '}')
+ break;
+ if (ch != ',')
+ return fail("expected ',' in object, got " + esc(ch));
+
+ ch = get_next_token();
+ }
+ return data;
+ }
+
+ if (ch == '[') {
+ vector<Json> data;
+ ch = get_next_token();
+ if (ch == ']')
+ return data;
+
+ while (1) {
+ i--;
+ data.push_back(parse_json(depth + 1));
+ if (failed)
+ return Json();
+
+ ch = get_next_token();
+ if (ch == ']')
+ break;
+ if (ch != ',')
+ return fail("expected ',' in list, got " + esc(ch));
+
+ ch = get_next_token();
+ (void)ch;
+ }
+ return data;
+ }
+
+ return fail("expected value, got " + esc(ch));
+ }
+};
+}//namespace {
+
+Json Json::parse(const string &in, string &err, JsonParse strategy) {
+ JsonParser parser { in, 0, err, false, strategy };
+ Json result = parser.parse_json(0);
+
+ // Check for any trailing garbage
+ parser.consume_garbage();
+ if (parser.failed)
+ return Json();
+ if (parser.i != in.size())
+ return parser.fail("unexpected trailing " + esc(in[parser.i]));
+
+ return result;
+}
+
+// Documented in json11.hpp
+vector<Json> Json::parse_multi(const string &in,
+ std::string::size_type &parser_stop_pos,
+ string &err,
+ JsonParse strategy) {
+ JsonParser parser { in, 0, err, false, strategy };
+ parser_stop_pos = 0;
+ vector<Json> json_vec;
+ while (parser.i != in.size() && !parser.failed) {
+ json_vec.push_back(parser.parse_json(0));
+ if (parser.failed)
+ break;
+
+ // Check for another object
+ parser.consume_garbage();
+ if (parser.failed)
+ break;
+ parser_stop_pos = parser.i;
+ }
+ return json_vec;
+}
+
+/* * * * * * * * * * * * * * * * * * * *
+ * Shape-checking
+ */
+
+bool Json::has_shape(const shape & types, string & err) const {
+ if (!is_object()) {
+ err = "expected JSON object, got " + dump();
+ return false;
+ }
+
+ for (auto & item : types) {
+ if ((*this)[item.first].type() != item.second) {
+ err = "bad type for " + item.first + " in " + dump();
+ return false;
+ }
+ }
+
+ return true;
+}
+
+} // namespace json11
diff --git a/libs/json11/json11.hpp b/libs/json11/json11.hpp
new file mode 100644
index 000000000..0c47d0509
--- /dev/null
+++ b/libs/json11/json11.hpp
@@ -0,0 +1,232 @@
+/* json11
+ *
+ * json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.
+ *
+ * The core object provided by the library is json11::Json. A Json object represents any JSON
+ * value: null, bool, number (int or double), string (std::string), array (std::vector), or
+ * object (std::map).
+ *
+ * Json objects act like values: they can be assigned, copied, moved, compared for equality or
+ * order, etc. There are also helper methods Json::dump, to serialize a Json to a string, and
+ * Json::parse (static) to parse a std::string as a Json object.
+ *
+ * Internally, the various types of Json object are represented by the JsonValue class
+ * hierarchy.
+ *
+ * A note on numbers - JSON specifies the syntax of number formatting but not its semantics,
+ * so some JSON implementations distinguish between integers and floating-point numbers, while
+ * some don't. In json11, we choose the latter. Because some JSON implementations (namely
+ * Javascript itself) treat all numbers as the same type, distinguishing the two leads
+ * to JSON that will be *silently* changed by a round-trip through those implementations.
+ * Dangerous! To avoid that risk, json11 stores all numbers as double internally, but also
+ * provides integer helpers.
+ *
+ * Fortunately, double-precision IEEE754 ('double') can precisely store any integer in the
+ * range +/-2^53, which includes every 'int' on most systems. (Timestamps often use int64
+ * or long long to avoid the Y2038K problem; a double storing microseconds since some epoch
+ * will be exact for +/- 275 years.)
+ */
+
+/* Copyright (c) 2013 Dropbox, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <map>
+#include <memory>
+#include <initializer_list>
+
+#ifdef _MSC_VER
+ #if _MSC_VER <= 1800 // VS 2013
+ #ifndef noexcept
+ #define noexcept throw()
+ #endif
+
+ #ifndef snprintf
+ #define snprintf _snprintf_s
+ #endif
+ #endif
+#endif
+
+namespace json11 {
+
+enum JsonParse {
+ STANDARD, COMMENTS
+};
+
+class JsonValue;
+
+class Json final {
+public:
+ // Types
+ enum Type {
+ NUL, NUMBER, BOOL, STRING, ARRAY, OBJECT
+ };
+
+ // Array and object typedefs
+ typedef std::vector<Json> array;
+ typedef std::map<std::string, Json> object;
+
+ // Constructors for the various types of JSON value.
+ Json() noexcept; // NUL
+ Json(std::nullptr_t) noexcept; // NUL
+ Json(double value); // NUMBER
+ Json(int value); // NUMBER
+ Json(bool value); // BOOL
+ Json(const std::string &value); // STRING
+ Json(std::string &&value); // STRING
+ Json(const char * value); // STRING
+ Json(const array &values); // ARRAY
+ Json(array &&values); // ARRAY
+ Json(const object &values); // OBJECT
+ Json(object &&values); // OBJECT
+
+ // Implicit constructor: anything with a to_json() function.
+ template <class T, class = decltype(&T::to_json)>
+ Json(const T & t) : Json(t.to_json()) {}
+
+ // Implicit constructor: map-like objects (std::map, std::unordered_map, etc)
+ template <class M, typename std::enable_if<
+ std::is_constructible<std::string, decltype(std::declval<M>().begin()->first)>::value
+ && std::is_constructible<Json, decltype(std::declval<M>().begin()->second)>::value,
+ int>::type = 0>
+ Json(const M & m) : Json(object(m.begin(), m.end())) {}
+
+ // Implicit constructor: vector-like objects (std::list, std::vector, std::set, etc)
+ template <class V, typename std::enable_if<
+ std::is_constructible<Json, decltype(*std::declval<V>().begin())>::value,
+ int>::type = 0>
+ Json(const V & v) : Json(array(v.begin(), v.end())) {}
+
+ // This prevents Json(some_pointer) from accidentally producing a bool. Use
+ // Json(bool(some_pointer)) if that behavior is desired.
+ Json(void *) = delete;
+
+ // Accessors
+ Type type() const;
+
+ bool is_null() const { return type() == NUL; }
+ bool is_number() const { return type() == NUMBER; }
+ bool is_bool() const { return type() == BOOL; }
+ bool is_string() const { return type() == STRING; }
+ bool is_array() const { return type() == ARRAY; }
+ bool is_object() const { return type() == OBJECT; }
+
+ // Return the enclosed value if this is a number, 0 otherwise. Note that json11 does not
+ // distinguish between integer and non-integer numbers - number_value() and int_value()
+ // can both be applied to a NUMBER-typed object.
+ double number_value() const;
+ int int_value() const;
+
+ // Return the enclosed value if this is a boolean, false otherwise.
+ bool bool_value() const;
+ // Return the enclosed string if this is a string, "" otherwise.
+ const std::string &string_value() const;
+ // Return the enclosed std::vector if this is an array, or an empty vector otherwise.
+ const array &array_items() const;
+ // Return the enclosed std::map if this is an object, or an empty map otherwise.
+ const object &object_items() const;
+
+ // Return a reference to arr[i] if this is an array, Json() otherwise.
+ const Json & operator[](size_t i) const;
+ // Return a reference to obj[key] if this is an object, Json() otherwise.
+ const Json & operator[](const std::string &key) const;
+
+ // Serialize.
+ void dump(std::string &out) const;
+ std::string dump() const {
+ std::string out;
+ dump(out);
+ return out;
+ }
+
+ // Parse. If parse fails, return Json() and assign an error message to err.
+ static Json parse(const std::string & in,
+ std::string & err,
+ JsonParse strategy = JsonParse::STANDARD);
+ static Json parse(const char * in,
+ std::string & err,
+ JsonParse strategy = JsonParse::STANDARD) {
+ if (in) {
+ return parse(std::string(in), err, strategy);
+ } else {
+ err = "null input";
+ return nullptr;
+ }
+ }
+ // Parse multiple objects, concatenated or separated by whitespace
+ static std::vector<Json> parse_multi(
+ const std::string & in,
+ std::string::size_type & parser_stop_pos,
+ std::string & err,
+ JsonParse strategy = JsonParse::STANDARD);
+
+ static inline std::vector<Json> parse_multi(
+ const std::string & in,
+ std::string & err,
+ JsonParse strategy = JsonParse::STANDARD) {
+ std::string::size_type parser_stop_pos;
+ return parse_multi(in, parser_stop_pos, err, strategy);
+ }
+
+ bool operator== (const Json &rhs) const;
+ bool operator< (const Json &rhs) const;
+ bool operator!= (const Json &rhs) const { return !(*this == rhs); }
+ bool operator<= (const Json &rhs) const { return !(rhs < *this); }
+ bool operator> (const Json &rhs) const { return (rhs < *this); }
+ bool operator>= (const Json &rhs) const { return !(*this < rhs); }
+
+ /* has_shape(types, err)
+ *
+ * Return true if this is a JSON object and, for each item in types, has a field of
+ * the given type. If not, return false and set err to a descriptive message.
+ */
+ typedef std::initializer_list<std::pair<std::string, Type>> shape;
+ bool has_shape(const shape & types, std::string & err) const;
+
+private:
+ std::shared_ptr<JsonValue> m_ptr;
+};
+
+// Internal class hierarchy - JsonValue objects are not exposed to users of this API.
+class JsonValue {
+protected:
+ friend class Json;
+ friend class JsonInt;
+ friend class JsonDouble;
+ virtual Json::Type type() const = 0;
+ virtual bool equals(const JsonValue * other) const = 0;
+ virtual bool less(const JsonValue * other) const = 0;
+ virtual void dump(std::string &out) const = 0;
+ virtual double number_value() const;
+ virtual int int_value() const;
+ virtual bool bool_value() const;
+ virtual const std::string &string_value() const;
+ virtual const Json::array &array_items() const;
+ virtual const Json &operator[](size_t i) const;
+ virtual const Json::object &object_items() const;
+ virtual const Json &operator[](const std::string &key) const;
+ virtual ~JsonValue() {}
+};
+
+} // namespace json11
diff --git a/misc/launcher.c b/misc/launcher.c
index e0d8208f1..49d6414e7 100644
--- a/misc/launcher.c
+++ b/misc/launcher.c
@@ -65,7 +65,7 @@ SOFTWARE. */
int child_pid=0;
-int fail(char *format, char *data) {
+int fail(const char *format, const char *data) {
/* Print error message to stderr and return 2 */
fprintf(stderr, format, data);
return 2;
@@ -76,7 +76,7 @@ char *quoted(char *data) {
/* We allocate twice as much space as needed to deal with worse-case
of having to escape everything. */
- char *result = calloc(ln*2+3, sizeof(char));
+ char *result = (char *)calloc(ln*2+3, sizeof(char));
char *presult = result;
*presult++ = '"';
@@ -120,7 +120,7 @@ char *loadable_exe(char *exename) {
if (!hPython) return NULL; */
/* Return the absolute filename for spawnv */
- result = calloc(MAX_PATH, sizeof(char));
+ result = (char *)calloc(MAX_PATH, sizeof(char));
strncpy(result, exename, MAX_PATH);
/*if (result) GetModuleFileNameA(hPython, result, MAX_PATH);
@@ -158,7 +158,7 @@ char **parse_argv(char *cmdline, int *argc)
{
/* Parse a command line in-place using MS C rules */
- char **result = calloc(strlen(cmdline), sizeof(char *));
+ char **result = (char **)calloc(strlen(cmdline), sizeof(char *));
char *output = cmdline;
char c;
int nb = 0;
diff --git a/misc/py_wrap_generator.py b/misc/py_wrap_generator.py
index 2bf364470..4ce8e947e 100644
--- a/misc/py_wrap_generator.py
+++ b/misc/py_wrap_generator.py
@@ -1081,6 +1081,8 @@ class WConstructor:
con.args = []
con.duplicate = False
con.protected = protected
+ if str.startswith(str_def, "inline "):
+ str_def = str_def[7:]
if not str.startswith(str_def, class_.name + "("):
return None
str_def = str_def[len(class_.name)+1:]
diff --git a/passes/cmds/Makefile.inc b/passes/cmds/Makefile.inc
index c8067a8be..cf9663d1d 100644
--- a/passes/cmds/Makefile.inc
+++ b/passes/cmds/Makefile.inc
@@ -25,6 +25,7 @@ OBJS += passes/cmds/plugin.o
OBJS += passes/cmds/check.o
OBJS += passes/cmds/qwp.o
OBJS += passes/cmds/edgetypes.o
+OBJS += passes/cmds/portlist.o
OBJS += passes/cmds/chformal.o
OBJS += passes/cmds/chtype.o
OBJS += passes/cmds/blackbox.o
diff --git a/passes/cmds/add.cc b/passes/cmds/add.cc
index af6f7043d..dd05ac81f 100644
--- a/passes/cmds/add.cc
+++ b/passes/cmds/add.cc
@@ -105,6 +105,11 @@ struct AddPass : public Pass {
log("Like 'add -input', but also connect the signal between instances of the\n");
log("selected modules.\n");
log("\n");
+ log("\n");
+ log(" add -mod <name[s]>\n");
+ log("\n");
+ log("Add module[s] with the specified name[s].\n");
+ log("\n");
}
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
{
@@ -113,6 +118,7 @@ struct AddPass : public Pass {
bool arg_flag_input = false;
bool arg_flag_output = false;
bool arg_flag_global = false;
+ bool mod_mode = false;
int arg_width = 0;
size_t argidx;
@@ -133,8 +139,20 @@ struct AddPass : public Pass {
arg_width = atoi(args[++argidx].c_str());
continue;
}
+ if (arg == "-mod") {
+ mod_mode = true;
+ argidx++;
+ break;
+ }
break;
}
+
+ if (mod_mode) {
+ for (; argidx < args.size(); argidx++)
+ design->addModule(RTLIL::escape_id(args[argidx]));
+ return;
+ }
+
extra_args(args, argidx, design);
for (auto &mod : design->modules_)
diff --git a/passes/cmds/portlist.cc b/passes/cmds/portlist.cc
new file mode 100644
index 000000000..38c4a8597
--- /dev/null
+++ b/passes/cmds/portlist.cc
@@ -0,0 +1,93 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#include "kernel/yosys.h"
+#include "kernel/sigtools.h"
+
+USING_YOSYS_NAMESPACE
+PRIVATE_NAMESPACE_BEGIN
+
+struct PortlistPass : public Pass {
+ PortlistPass() : Pass("portlist", "list (top-level) ports") { }
+ void help() YS_OVERRIDE
+ {
+ // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
+ log("\n");
+ log(" portlist [options] [selection]\n");
+ log("\n");
+ log("This command lists all module ports found in the selected modules.\n");
+ log("\n");
+ log("If no selection is provided then it lists the ports on the top module.\n");
+ log("\n");
+ log(" -m\n");
+ log(" print verilog blackbox module definitions instead of port lists\n");
+ log("\n");
+ }
+ void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
+ {
+ bool m_mode = false;
+
+ size_t argidx;
+ for (argidx = 1; argidx < args.size(); argidx++) {
+ if (args[argidx] == "-m") {
+ m_mode = true;
+ continue;
+ }
+ break;
+ }
+
+ bool first_module = true;
+
+ auto handle_module = [&](RTLIL::Module *module) {
+ vector<string> ports;
+ if (first_module)
+ first_module = false;
+ else
+ log("\n");
+ for (auto port : module->ports) {
+ auto *w = module->wire(port);
+ ports.push_back(stringf("%s [%d:%d] %s", w->port_input ? w->port_output ? "inout" : "input" : "output",
+ w->upto ? w->start_offset : w->start_offset + w->width - 1,
+ w->upto ? w->start_offset + w->width - 1 : w->start_offset,
+ log_id(w)));
+ }
+ log("module %s%s\n", log_id(module), m_mode ? " (" : "");
+ for (int i = 0; i < GetSize(ports); i++)
+ log("%s%s\n", ports[i].c_str(), m_mode && i+1 < GetSize(ports) ? "," : "");
+ if (m_mode)
+ log(");\nendmodule\n");
+ };
+
+ if (argidx == args.size())
+ {
+ auto *top = design->top_module();
+ if (top == nullptr)
+ log_cmd_error("Can't find top module in current design!\n");
+ handle_module(top);
+ }
+ else
+ {
+ extra_args(args, argidx, design);
+ for (auto module : design->selected_modules())
+ handle_module(module);
+ }
+ }
+} PortlistPass;
+
+PRIVATE_NAMESPACE_END
diff --git a/passes/cmds/show.cc b/passes/cmds/show.cc
index 2e9fc72af..a3e969ef1 100644
--- a/passes/cmds/show.cc
+++ b/passes/cmds/show.cc
@@ -26,6 +26,10 @@
# include <dirent.h>
#endif
+#ifdef __APPLE__
+# include <unistd.h>
+#endif
+
#ifdef YOSYS_ENABLE_READLINE
# include <readline/readline.h>
#endif
@@ -866,7 +870,11 @@ struct ShowPass : public Pass {
log_cmd_error("Shell command failed!\n");
} else
if (format.empty()) {
+ #ifdef __APPLE__
+ std::string cmd = stringf("ps -fu %d | grep -q '[ ]%s' || xdot '%s' &", getuid(), dot_file.c_str(), dot_file.c_str());
+ #else
std::string cmd = stringf("{ test -f '%s.pid' && fuser -s '%s.pid'; } || ( echo $$ >&3; exec xdot '%s'; ) 3> '%s.pid' &", dot_file.c_str(), dot_file.c_str(), dot_file.c_str(), dot_file.c_str());
+ #endif
log("Exec: %s\n", cmd.c_str());
if (run_command(cmd) != 0)
log_cmd_error("Shell command failed!\n");
diff --git a/passes/equiv/equiv_opt.cc b/passes/equiv/equiv_opt.cc
index 19d1c25ac..4ab5b1a3e 100644
--- a/passes/equiv/equiv_opt.cc
+++ b/passes/equiv/equiv_opt.cc
@@ -32,7 +32,8 @@ struct EquivOptPass:public ScriptPass
log("\n");
log(" equiv_opt [options] [command]\n");
log("\n");
- log("This command checks circuit equivalence before and after an optimization pass.\n");
+ log("This command uses temporal induction to check circuit equivalence before and\n");
+ log("after an optimization pass.\n");
log("\n");
log(" -run <from_label>:<to_label>\n");
log(" only run the commands between the labels (see below). an empty\n");
@@ -46,6 +47,9 @@ struct EquivOptPass:public ScriptPass
log(" -assert\n");
log(" produce an error if the circuits are not equivalent.\n");
log("\n");
+ log(" -multiclock\n");
+ log(" run clk2fflogic before equivalence checking.\n");
+ log("\n");
log(" -undef\n");
log(" enable modelling of undef states during equiv_induct.\n");
log("\n");
@@ -55,7 +59,7 @@ struct EquivOptPass:public ScriptPass
}
std::string command, techmap_opts;
- bool assert, undef;
+ bool assert, undef, multiclock;
void clear_flags() YS_OVERRIDE
{
@@ -63,6 +67,7 @@ struct EquivOptPass:public ScriptPass
techmap_opts = "";
assert = false;
undef = false;
+ multiclock = false;
}
void execute(std::vector < std::string > args, RTLIL::Design * design) YS_OVERRIDE
@@ -92,6 +97,10 @@ struct EquivOptPass:public ScriptPass
undef = true;
continue;
}
+ if (args[argidx] == "-multiclock") {
+ multiclock = true;
+ continue;
+ }
break;
}
@@ -146,6 +155,10 @@ struct EquivOptPass:public ScriptPass
}
if (check_label("prove")) {
+ if (multiclock || help_mode)
+ run("clk2fflogic", "(only with -multiclock)");
+ if (!multiclock || help_mode)
+ run("async2sync", "(only without -multiclock)");
run("equiv_make gold gate equiv");
if (help_mode)
run("equiv_induct [-undef] equiv");
diff --git a/passes/hierarchy/hierarchy.cc b/passes/hierarchy/hierarchy.cc
index fd95b94b2..d8a628448 100644
--- a/passes/hierarchy/hierarchy.cc
+++ b/passes/hierarchy/hierarchy.cc
@@ -808,6 +808,30 @@ struct HierarchyPass : public Pass {
if (mod_it.second->get_bool_attribute("\\top"))
top_mod = mod_it.second;
+ if (top_mod != nullptr && top_mod->name.begins_with("$abstract")) {
+ IdString top_name = top_mod->name.substr(strlen("$abstract"));
+
+ dict<RTLIL::IdString, RTLIL::Const> top_parameters;
+ for (auto &para : parameters) {
+ SigSpec sig_value;
+ if (!RTLIL::SigSpec::parse(sig_value, NULL, para.second))
+ log_cmd_error("Can't decode value '%s'!\n", para.second.c_str());
+ top_parameters[RTLIL::escape_id(para.first)] = sig_value.as_const();
+ }
+
+ top_mod = design->module(top_mod->derive(design, top_parameters));
+
+ if (top_mod != nullptr && top_mod->name != top_name) {
+ Module *m = top_mod->clone();
+ m->name = top_name;
+ Module *old_mod = design->module(top_name);
+ if (old_mod)
+ design->remove(old_mod);
+ design->add(m);
+ top_mod = m;
+ }
+ }
+
if (top_mod == nullptr && auto_top_mode) {
log_header(design, "Finding top of design hierarchy..\n");
dict<Module*, int> db;
diff --git a/passes/opt/opt_expr.cc b/passes/opt/opt_expr.cc
index 00d7d6063..6cf66fb95 100644
--- a/passes/opt/opt_expr.cc
+++ b/passes/opt/opt_expr.cc
@@ -953,6 +953,10 @@ void replace_const_cells(RTLIL::Design *design, RTLIL::Module *module, bool cons
}
if (b.is_fully_const()) {
+ if (b.is_fully_undef()) {
+ RTLIL::SigSpec input = b;
+ ACTION_DO(ID::Y, Const(State::Sx, GetSize(cell->getPort(ID::Y))));
+ } else
if (b.as_bool() == (cell->type == ID($eq))) {
RTLIL::SigSpec input = b;
ACTION_DO(ID::Y, cell->getPort(ID::A));
diff --git a/passes/opt/opt_share.cc b/passes/opt/opt_share.cc
index c53fb3113..2c456705c 100644
--- a/passes/opt/opt_share.cc
+++ b/passes/opt/opt_share.cc
@@ -108,12 +108,13 @@ bool cell_supported(RTLIL::Cell *cell)
return false;
}
-std::map<IdString, IdString> mergeable_type_map{
- {ID($sub), ID($add)},
-};
+std::map<IdString, IdString> mergeable_type_map;
bool mergeable(RTLIL::Cell *a, RTLIL::Cell *b)
{
+ if (mergeable_type_map.empty()) {
+ mergeable_type_map.insert({ID($sub), ID($add)});
+ }
auto a_type = a->type;
if (mergeable_type_map.count(a_type))
a_type = mergeable_type_map.at(a_type);
diff --git a/passes/pmgen/.gitignore b/passes/pmgen/.gitignore
index 6b319b8c3..e52f3282f 100644
--- a/passes/pmgen/.gitignore
+++ b/passes/pmgen/.gitignore
@@ -1 +1 @@
-/*_pm.h \ No newline at end of file
+/*_pm.h
diff --git a/passes/pmgen/Makefile.inc b/passes/pmgen/Makefile.inc
index 4989c582a..366c37943 100644
--- a/passes/pmgen/Makefile.inc
+++ b/passes/pmgen/Makefile.inc
@@ -21,12 +21,21 @@ $(eval $(call add_extra_objs,passes/pmgen/ice40_wrapcarry_pm.h))
# --------------------------------------
+OBJS += passes/pmgen/xilinx_dsp.o
+passes/pmgen/xilinx_dsp.o: passes/pmgen/xilinx_dsp_pm.h passes/pmgen/xilinx_dsp_CREG_pm.h passes/pmgen/xilinx_dsp_cascade_pm.h
+$(eval $(call add_extra_objs,passes/pmgen/xilinx_dsp_pm.h))
+$(eval $(call add_extra_objs,passes/pmgen/xilinx_dsp_CREG_pm.h))
+$(eval $(call add_extra_objs,passes/pmgen/xilinx_dsp_cascade_pm.h))
+
+# --------------------------------------
+
OBJS += passes/pmgen/peepopt.o
passes/pmgen/peepopt.o: passes/pmgen/peepopt_pm.h
$(eval $(call add_extra_objs,passes/pmgen/peepopt_pm.h))
PEEPOPT_PATTERN = passes/pmgen/peepopt_shiftmul.pmg
PEEPOPT_PATTERN += passes/pmgen/peepopt_muldiv.pmg
+PEEPOPT_PATTERN += passes/pmgen/peepopt_dffmux.pmg
passes/pmgen/peepopt_pm.h: passes/pmgen/pmgen.py $(PEEPOPT_PATTERN)
$(P) mkdir -p passes/pmgen && python3 $< -o $@ -p peepopt $(filter-out $<,$^)
diff --git a/passes/pmgen/README.md b/passes/pmgen/README.md
index 0856c9ba3..2f5b8d0b2 100644
--- a/passes/pmgen/README.md
+++ b/passes/pmgen/README.md
@@ -352,7 +352,7 @@ state variables used to pass arguments.
subpattern tail
...
-Subpatterns cann be called recursively.
+Subpatterns can be called recursively.
If a `subpattern` statement is preceded by a `fallthrough` statement, this is
equivalent to calling the subpattern at the end of the preceding block.
diff --git a/passes/pmgen/ice40_dsp.cc b/passes/pmgen/ice40_dsp.cc
index 16bfe537f..f60e67158 100644
--- a/passes/pmgen/ice40_dsp.cc
+++ b/passes/pmgen/ice40_dsp.cc
@@ -29,19 +29,19 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
{
auto &st = pm.st_ice40_dsp;
-#if 0
- log("\n");
- log("ffA: %s\n", log_id(st.ffA, "--"));
- log("ffB: %s\n", log_id(st.ffB, "--"));
- log("mul: %s\n", log_id(st.mul, "--"));
- log("ffY: %s\n", log_id(st.ffY, "--"));
- log("addAB: %s\n", log_id(st.addAB, "--"));
- log("muxAB: %s\n", log_id(st.muxAB, "--"));
- log("ffS: %s\n", log_id(st.ffS, "--"));
-#endif
-
log("Checking %s.%s for iCE40 DSP inference.\n", log_id(pm.module), log_id(st.mul));
+ log_debug("ffA: %s %s %s\n", log_id(st.ffA, "--"), log_id(st.ffAholdmux, "--"), log_id(st.ffArstmux, "--"));
+ log_debug("ffB: %s %s %s\n", log_id(st.ffB, "--"), log_id(st.ffBholdmux, "--"), log_id(st.ffBrstmux, "--"));
+ log_debug("ffCD: %s %s\n", log_id(st.ffCD, "--"), log_id(st.ffCDholdmux, "--"));
+ log_debug("mul: %s\n", log_id(st.mul, "--"));
+ log_debug("ffFJKG: %s\n", log_id(st.ffFJKG, "--"));
+ log_debug("ffH: %s\n", log_id(st.ffH, "--"));
+ log_debug("add: %s\n", log_id(st.add, "--"));
+ log_debug("mux: %s\n", log_id(st.mux, "--"));
+ log_debug("ffO: %s %s %s\n", log_id(st.ffO, "--"), log_id(st.ffOholdmux, "--"), log_id(st.ffOrstmux, "--"));
+ log_debug("\n");
+
if (GetSize(st.sigA) > 16) {
log(" input A (%s) is too large (%d > 16).\n", log_signal(st.sigA), GetSize(st.sigA));
return;
@@ -52,59 +52,85 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
return;
}
- if (GetSize(st.sigS) > 32) {
- log(" accumulator (%s) is too large (%d > 32).\n", log_signal(st.sigS), GetSize(st.sigS));
+ if (GetSize(st.sigO) > 33) {
+ log(" adder/accumulator (%s) is too large (%d > 33).\n", log_signal(st.sigO), GetSize(st.sigO));
return;
}
- if (GetSize(st.sigY) > 32) {
- log(" output (%s) is too large (%d > 32).\n", log_signal(st.sigY), GetSize(st.sigY));
+ if (GetSize(st.sigH) > 32) {
+ log(" output (%s) is too large (%d > 32).\n", log_signal(st.sigH), GetSize(st.sigH));
return;
}
- bool mul_signed = st.mul->getParam("\\A_SIGNED").as_bool();
+ Cell *cell = st.mul;
+ if (cell->type == ID($mul)) {
+ log(" replacing %s with SB_MAC16 cell.\n", log_id(st.mul->type));
- log(" replacing $mul with SB_MAC16 cell.\n");
-
- Cell *cell = pm.module->addCell(NEW_ID, "\\SB_MAC16");
- pm.module->swap_names(cell, st.mul);
+ cell = pm.module->addCell(NEW_ID, ID(SB_MAC16));
+ pm.module->swap_names(cell, st.mul);
+ }
+ else log_assert(cell->type == ID(SB_MAC16));
// SB_MAC16 Input Interface
-
SigSpec A = st.sigA;
- A.extend_u0(16, mul_signed);
+ A.extend_u0(16, st.mul->getParam(ID(A_SIGNED)).as_bool());
+ log_assert(GetSize(A) == 16);
SigSpec B = st.sigB;
- B.extend_u0(16, mul_signed);
-
- SigSpec CD;
- if (st.muxA)
- CD = st.muxA->getPort("\\B");
- if (st.muxB)
- CD = st.muxB->getPort("\\A");
- CD.extend_u0(32, mul_signed);
+ B.extend_u0(16, st.mul->getParam(ID(B_SIGNED)).as_bool());
+ log_assert(GetSize(B) == 16);
- cell->setPort("\\A", A);
- cell->setPort("\\B", B);
- cell->setPort("\\C", CD.extract(0, 16));
- cell->setPort("\\D", CD.extract(16, 16));
+ SigSpec CD = st.sigCD;
+ if (CD.empty())
+ CD = RTLIL::Const(0, 32);
+ else
+ log_assert(GetSize(CD) == 32);
- cell->setParam("\\A_REG", st.ffA ? State::S1 : State::S0);
- cell->setParam("\\B_REG", st.ffB ? State::S1 : State::S0);
+ cell->setPort(ID::A, A);
+ cell->setPort(ID::B, B);
+ cell->setPort(ID(C), CD.extract(16, 16));
+ cell->setPort(ID(D), CD.extract(0, 16));
- cell->setPort("\\AHOLD", State::S0);
- cell->setPort("\\BHOLD", State::S0);
- cell->setPort("\\CHOLD", State::S0);
- cell->setPort("\\DHOLD", State::S0);
+ cell->setParam(ID(A_REG), st.ffA ? State::S1 : State::S0);
+ cell->setParam(ID(B_REG), st.ffB ? State::S1 : State::S0);
+ cell->setParam(ID(C_REG), st.ffCD ? State::S1 : State::S0);
+ cell->setParam(ID(D_REG), st.ffCD ? State::S1 : State::S0);
- cell->setPort("\\IRSTTOP", State::S0);
- cell->setPort("\\IRSTBOT", State::S0);
+ SigSpec AHOLD, BHOLD, CDHOLD;
+ if (st.ffAholdmux)
+ AHOLD = st.ffAholdpol ? st.ffAholdmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffAholdmux->getPort(ID(S)));
+ else
+ AHOLD = State::S0;
+ if (st.ffBholdmux)
+ BHOLD = st.ffBholdpol ? st.ffBholdmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffBholdmux->getPort(ID(S)));
+ else
+ BHOLD = State::S0;
+ if (st.ffCDholdmux)
+ CDHOLD = st.ffCDholdpol ? st.ffCDholdmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffCDholdmux->getPort(ID(S)));
+ else
+ CDHOLD = State::S0;
+ cell->setPort(ID(AHOLD), AHOLD);
+ cell->setPort(ID(BHOLD), BHOLD);
+ cell->setPort(ID(CHOLD), CDHOLD);
+ cell->setPort(ID(DHOLD), CDHOLD);
+
+ SigSpec IRSTTOP, IRSTBOT;
+ if (st.ffArstmux)
+ IRSTTOP = st.ffArstpol ? st.ffArstmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffArstmux->getPort(ID(S)));
+ else
+ IRSTTOP = State::S0;
+ if (st.ffBrstmux)
+ IRSTBOT = st.ffBrstpol ? st.ffBrstmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffBrstmux->getPort(ID(S)));
+ else
+ IRSTBOT = State::S0;
+ cell->setPort(ID(IRSTTOP), IRSTTOP);
+ cell->setPort(ID(IRSTBOT), IRSTBOT);
- if (st.clock_vld)
+ if (st.clock != SigBit())
{
- cell->setPort("\\CLK", st.clock);
- cell->setPort("\\CE", State::S1);
- cell->setParam("\\NEG_TRIGGER", st.clock_pol ? State::S0 : State::S1);
+ cell->setPort(ID(CLK), st.clock);
+ cell->setPort(ID(CE), State::S1);
+ cell->setParam(ID(NEG_TRIGGER), st.clock_pol ? State::S0 : State::S1);
log(" clock: %s (%s)", log_signal(st.clock), st.clock_pol ? "posedge" : "negedge");
@@ -114,91 +140,137 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
if (st.ffB)
log(" ffB:%s", log_id(st.ffB));
- if (st.ffY)
- log(" ffY:%s", log_id(st.ffY));
+ if (st.ffCD)
+ log(" ffCD:%s", log_id(st.ffCD));
+
+ if (st.ffFJKG)
+ log(" ffFJKG:%s", log_id(st.ffFJKG));
+
+ if (st.ffH)
+ log(" ffH:%s", log_id(st.ffH));
- if (st.ffS)
- log(" ffS:%s", log_id(st.ffS));
+ if (st.ffO)
+ log(" ffO:%s", log_id(st.ffO));
log("\n");
}
else
{
- cell->setPort("\\CLK", State::S0);
- cell->setPort("\\CE", State::S0);
- cell->setParam("\\NEG_TRIGGER", State::S0);
+ cell->setPort(ID(CLK), State::S0);
+ cell->setPort(ID(CE), State::S0);
+ cell->setParam(ID(NEG_TRIGGER), State::S0);
}
// SB_MAC16 Cascade Interface
- cell->setPort("\\SIGNEXTIN", State::Sx);
- cell->setPort("\\SIGNEXTOUT", pm.module->addWire(NEW_ID));
+ cell->setPort(ID(SIGNEXTIN), State::Sx);
+ cell->setPort(ID(SIGNEXTOUT), pm.module->addWire(NEW_ID));
- cell->setPort("\\CI", State::Sx);
- cell->setPort("\\CO", pm.module->addWire(NEW_ID));
+ cell->setPort(ID(CI), State::Sx);
- cell->setPort("\\ACCUMCI", State::Sx);
- cell->setPort("\\ACCUMCO", pm.module->addWire(NEW_ID));
+ cell->setPort(ID(ACCUMCI), State::Sx);
+ cell->setPort(ID(ACCUMCO), pm.module->addWire(NEW_ID));
// SB_MAC16 Output Interface
- SigSpec O = st.ffS ? st.sigS : st.sigY;
+ SigSpec O = st.sigO;
+ int O_width = GetSize(O);
+ if (O_width == 33) {
+ log_assert(st.add);
+ // If we have a signed multiply-add, then perform sign extension
+ if (st.add->getParam(ID(A_SIGNED)).as_bool() && st.add->getParam(ID(B_SIGNED)).as_bool())
+ pm.module->connect(O[32], O[31]);
+ else
+ cell->setPort(ID(CO), O[32]);
+ O.remove(O_width-1);
+ }
+ else
+ cell->setPort(ID(CO), pm.module->addWire(NEW_ID));
+ log_assert(GetSize(O) <= 32);
if (GetSize(O) < 32)
O.append(pm.module->addWire(NEW_ID, 32-GetSize(O)));
- cell->setPort("\\O", O);
-
- if (st.addAB) {
- log(" accumulator %s (%s)\n", log_id(st.addAB), log_id(st.addAB->type));
- cell->setPort("\\ADDSUBTOP", st.addAB->type == "$add" ? State::S0 : State::S1);
- cell->setPort("\\ADDSUBBOT", st.addAB->type == "$add" ? State::S0 : State::S1);
+ cell->setPort(ID(O), O);
+
+ bool accum = false;
+ if (st.add) {
+ accum = (st.ffO && st.add->getPort(st.addAB == ID::A ? ID::B : ID::A) == st.sigO);
+ if (accum)
+ log(" accumulator %s (%s)\n", log_id(st.add), log_id(st.add->type));
+ else
+ log(" adder %s (%s)\n", log_id(st.add), log_id(st.add->type));
+ cell->setPort(ID(ADDSUBTOP), st.add->type == ID($add) ? State::S0 : State::S1);
+ cell->setPort(ID(ADDSUBBOT), st.add->type == ID($add) ? State::S0 : State::S1);
} else {
- cell->setPort("\\ADDSUBTOP", State::S0);
- cell->setPort("\\ADDSUBBOT", State::S0);
+ cell->setPort(ID(ADDSUBTOP), State::S0);
+ cell->setPort(ID(ADDSUBBOT), State::S0);
}
- cell->setPort("\\ORSTTOP", State::S0);
- cell->setPort("\\ORSTBOT", State::S0);
+ SigSpec OHOLD;
+ if (st.ffOholdmux)
+ OHOLD = st.ffOholdpol ? st.ffOholdmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffOholdmux->getPort(ID(S)));
+ else
+ OHOLD = State::S0;
+ cell->setPort(ID(OHOLDTOP), OHOLD);
+ cell->setPort(ID(OHOLDBOT), OHOLD);
- cell->setPort("\\OHOLDTOP", State::S0);
- cell->setPort("\\OHOLDBOT", State::S0);
+ SigSpec ORST;
+ if (st.ffOrstmux)
+ ORST = st.ffOrstpol ? st.ffOrstmux->getPort(ID(S)) : pm.module->Not(NEW_ID, st.ffOrstmux->getPort(ID(S)));
+ else
+ ORST = State::S0;
+ cell->setPort(ID(ORSTTOP), ORST);
+ cell->setPort(ID(ORSTBOT), ORST);
SigSpec acc_reset = State::S0;
- if (st.muxA)
- acc_reset = st.muxA->getPort("\\S");
- if (st.muxB)
- acc_reset = pm.module->Not(NEW_ID, st.muxB->getPort("\\S"));
-
- cell->setPort("\\OLOADTOP", acc_reset);
- cell->setPort("\\OLOADBOT", acc_reset);
+ if (st.mux) {
+ if (st.muxAB == ID::A)
+ acc_reset = st.mux->getPort(ID(S));
+ else
+ acc_reset = pm.module->Not(NEW_ID, st.mux->getPort(ID(S)));
+ }
+ cell->setPort(ID(OLOADTOP), acc_reset);
+ cell->setPort(ID(OLOADBOT), acc_reset);
// SB_MAC16 Remaining Parameters
- cell->setParam("\\C_REG", State::S0);
- cell->setParam("\\D_REG", State::S0);
+ cell->setParam(ID(TOP_8x8_MULT_REG), st.ffFJKG ? State::S1 : State::S0);
+ cell->setParam(ID(BOT_8x8_MULT_REG), st.ffFJKG ? State::S1 : State::S0);
+ cell->setParam(ID(PIPELINE_16x16_MULT_REG1), st.ffFJKG ? State::S1 : State::S0);
+ cell->setParam(ID(PIPELINE_16x16_MULT_REG2), st.ffH ? State::S1 : State::S0);
- cell->setParam("\\TOP_8x8_MULT_REG", st.ffY ? State::S1 : State::S0);
- cell->setParam("\\BOT_8x8_MULT_REG", st.ffY ? State::S1 : State::S0);
- cell->setParam("\\PIPELINE_16x16_MULT_REG1", st.ffY ? State::S1 : State::S0);
- cell->setParam("\\PIPELINE_16x16_MULT_REG2", State::S0);
+ cell->setParam(ID(TOPADDSUB_LOWERINPUT), Const(2, 2));
+ cell->setParam(ID(TOPADDSUB_UPPERINPUT), accum ? State::S0 : State::S1);
+ cell->setParam(ID(TOPADDSUB_CARRYSELECT), Const(3, 2));
- cell->setParam("\\TOPOUTPUT_SELECT", Const(st.ffS ? 1 : 3, 2));
- cell->setParam("\\TOPADDSUB_LOWERINPUT", Const(2, 2));
- cell->setParam("\\TOPADDSUB_UPPERINPUT", State::S0);
- cell->setParam("\\TOPADDSUB_CARRYSELECT", Const(3, 2));
+ cell->setParam(ID(BOTADDSUB_LOWERINPUT), Const(2, 2));
+ cell->setParam(ID(BOTADDSUB_UPPERINPUT), accum ? State::S0 : State::S1);
+ cell->setParam(ID(BOTADDSUB_CARRYSELECT), Const(0, 2));
- cell->setParam("\\BOTOUTPUT_SELECT", Const(st.ffS ? 1 : 3, 2));
- cell->setParam("\\BOTADDSUB_LOWERINPUT", Const(2, 2));
- cell->setParam("\\BOTADDSUB_UPPERINPUT", State::S0);
- cell->setParam("\\BOTADDSUB_CARRYSELECT", Const(0, 2));
+ cell->setParam(ID(MODE_8x8), State::S0);
+ cell->setParam(ID(A_SIGNED), st.mul->getParam(ID(A_SIGNED)).as_bool());
+ cell->setParam(ID(B_SIGNED), st.mul->getParam(ID(B_SIGNED)).as_bool());
- cell->setParam("\\MODE_8x8", State::S0);
- cell->setParam("\\A_SIGNED", mul_signed ? State::S1 : State::S0);
- cell->setParam("\\B_SIGNED", mul_signed ? State::S1 : State::S0);
+ if (st.ffO) {
+ if (st.o_lo)
+ cell->setParam(ID(TOPOUTPUT_SELECT), Const(st.add ? 0 : 3, 2));
+ else
+ cell->setParam(ID(TOPOUTPUT_SELECT), Const(1, 2));
- pm.autoremove(st.mul);
- pm.autoremove(st.ffY);
- pm.autoremove(st.ffS);
+ st.ffO->connections_.at(ID(Q)).replace(O, pm.module->addWire(NEW_ID, GetSize(O)));
+ cell->setParam(ID(BOTOUTPUT_SELECT), Const(1, 2));
+ }
+ else {
+ cell->setParam(ID(TOPOUTPUT_SELECT), Const(st.add ? 0 : 3, 2));
+ cell->setParam(ID(BOTOUTPUT_SELECT), Const(st.add ? 0 : 3, 2));
+ }
+
+ if (cell != st.mul)
+ pm.autoremove(st.mul);
+ else
+ pm.blacklist(st.mul);
+ pm.autoremove(st.ffFJKG);
+ pm.autoremove(st.add);
}
struct Ice40DspPass : public Pass {
@@ -209,7 +281,17 @@ struct Ice40DspPass : public Pass {
log("\n");
log(" ice40_dsp [options] [selection]\n");
log("\n");
- log("Map multipliers and multiply-accumulate blocks to iCE40 DSP resources.\n");
+ log("Map multipliers ($mul/SB_MAC16) and multiply-accumulate ($mul/SB_MAC16 + $add)\n");
+ log("cells into iCE40 DSP resources.\n");
+ log("Currently, only the 16x16 multiply mode is supported and not the 2 x 8x8 mode.\n");
+ log("\n");
+ log("Pack input registers (A, B, {C,D}; with optional hold), pipeline registers\n");
+ log("({F,J,K,G}, H), output registers (O -- full 32-bits or lower 16-bits only; with\n");
+ log("optional hold), and post-adder into into the SB_MAC16 resource.\n");
+ log("\n");
+ log("Multiply-accumulate operations using the post-adder with feedback on the {C,D}\n");
+ log("input will be folded into the DSP. In this scenario only, resetting the\n");
+ log("the accumulator to an arbitrary value can be inferred to use the {C,D} input.\n");
log("\n");
}
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
diff --git a/passes/pmgen/ice40_dsp.pmg b/passes/pmgen/ice40_dsp.pmg
index 7003092bb..6b6d2b56f 100644
--- a/passes/pmgen/ice40_dsp.pmg
+++ b/passes/pmgen/ice40_dsp.pmg
@@ -1,163 +1,574 @@
pattern ice40_dsp
state <SigBit> clock
-state <bool> clock_pol clock_vld
-state <SigSpec> sigA sigB sigY sigS
-state <Cell*> addAB muxAB
+state <bool> clock_pol cd_signed o_lo
+state <SigSpec> sigA sigB sigCD sigH sigO
+state <Cell*> add mux
+state <IdString> addAB muxAB
+
+state <bool> ffAholdpol ffBholdpol ffCDholdpol ffOholdpol
+state <bool> ffArstpol ffBrstpol ffCDrstpol ffOrstpol
+
+state <Cell*> ffA ffAholdmux ffArstmux ffB ffBholdmux ffBrstmux ffCD ffCDholdmux
+state <Cell*> ffFJKG ffH ffO ffOholdmux ffOrstmux
+
+// subpattern
+state <SigSpec> argQ argD
+state <bool> ffholdpol ffrstpol
+state <int> ffoffset
+udata <SigSpec> dffD dffQ
+udata <SigBit> dffclock
+udata <Cell*> dff dffholdmux dffrstmux
+udata <bool> dffholdpol dffrstpol dffclock_pol
match mul
- select mul->type.in($mul)
+ select mul->type.in($mul, \SB_MAC16)
select GetSize(mul->getPort(\A)) + GetSize(mul->getPort(\B)) > 10
- select GetSize(mul->getPort(\Y)) > 10
endmatch
-match ffA
- select ffA->type.in($dff)
- // select nusers(port(ffA, \Q)) == 2
- index <SigSpec> port(ffA, \Q) === port(mul, \A)
- optional
-endmatch
+code sigA sigB sigH
+ auto unextend = [](const SigSpec &sig) {
+ int i;
+ for (i = GetSize(sig)-1; i > 0; i--)
+ if (sig[i] != sig[i-1])
+ break;
+ // Do not remove non-const sign bit
+ if (sig[i].wire)
+ ++i;
+ return sig.extract(0, i);
+ };
+ sigA = unextend(port(mul, \A));
+ sigB = unextend(port(mul, \B));
-code sigA clock clock_pol clock_vld
- sigA = port(mul, \A);
+ SigSpec O;
+ if (mul->type == $mul)
+ O = mul->getPort(\Y);
+ else if (mul->type == \SB_MAC16)
+ O = mul->getPort(\O);
+ else log_abort();
+ if (GetSize(O) <= 10)
+ reject;
- if (ffA) {
- sigA = port(ffA, \D);
+ // Only care about those bits that are used
+ int i;
+ for (i = 0; i < GetSize(O); i++) {
+ if (nusers(O[i]) <= 1)
+ break;
+ sigH.append(O[i]);
+ }
+ log_assert(nusers(O.extract_end(i)) <= 1);
+endcode
- clock = port(ffA, \CLK).as_bit();
- clock_pol = param(ffA, \CLK_POLARITY).as_bool();
- clock_vld = true;
+code argQ ffA ffAholdmux ffArstmux ffAholdpol ffArstpol sigA clock clock_pol
+ if (mul->type != \SB_MAC16 || !param(mul, \A_REG).as_bool()) {
+ argQ = sigA;
+ subpattern(in_dffe);
+ if (dff) {
+ ffA = dff;
+ clock = dffclock;
+ clock_pol = dffclock_pol;
+ if (dffrstmux) {
+ ffArstmux = dffrstmux;
+ ffArstpol = dffrstpol;
+ }
+ if (dffholdmux) {
+ ffAholdmux = dffholdmux;
+ ffAholdpol = dffholdpol;
+ }
+ sigA = dffD;
+ }
}
endcode
-match ffB
- select ffB->type.in($dff)
- // select nusers(port(ffB, \Q)) == 2
- index <SigSpec> port(ffB, \Q) === port(mul, \B)
- optional
-endmatch
+code argQ ffB ffBholdmux ffBrstmux ffBholdpol ffBrstpol sigB clock clock_pol
+ if (mul->type != \SB_MAC16 || !param(mul, \B_REG).as_bool()) {
+ argQ = sigB;
+ subpattern(in_dffe);
+ if (dff) {
+ ffB = dff;
+ clock = dffclock;
+ clock_pol = dffclock_pol;
+ if (dffrstmux) {
+ ffBrstmux = dffrstmux;
+ ffBrstpol = dffrstpol;
+ }
+ if (dffholdmux) {
+ ffBholdmux = dffholdmux;
+ ffBholdpol = dffholdpol;
+ }
+ sigB = dffD;
+ }
+ }
+endcode
-code sigB clock clock_pol clock_vld
- sigB = port(mul, \B);
+code argD ffFJKG sigH clock clock_pol
+ if (nusers(sigH) == 2 &&
+ (mul->type != \SB_MAC16 ||
+ (!param(mul, \TOP_8x8_MULT_REG).as_bool() && !param(mul, \BOT_8x8_MULT_REG).as_bool() && !param(mul, \PIPELINE_16x16_MULT_REG1).as_bool() && !param(mul, \PIPELINE_16x16_MULT_REG1).as_bool()))) {
+ argD = sigH;
+ subpattern(out_dffe);
+ if (dff) {
+ // F/J/K/G do not have a CE-like (hold) input
+ if (dffholdmux)
+ goto reject_ffFJKG;
- if (ffB) {
- sigB = port(ffB, \D);
- SigBit c = port(ffB, \CLK).as_bit();
- bool cp = param(ffB, \CLK_POLARITY).as_bool();
+ // Reset signal of F/J (IRSTTOP) and K/G (IRSTBOT)
+ // shared with A and B
+ if ((ffArstmux != NULL) != (dffrstmux != NULL))
+ goto reject_ffFJKG;
+ if ((ffBrstmux != NULL) != (dffrstmux != NULL))
+ goto reject_ffFJKG;
+ if (ffArstmux) {
+ if (port(ffArstmux, \S) != port(dffrstmux, \S))
+ goto reject_ffFJKG;
+ if (ffArstpol != dffrstpol)
+ goto reject_ffFJKG;
+ }
+ if (ffBrstmux) {
+ if (port(ffBrstmux, \S) != port(dffrstmux, \S))
+ goto reject_ffFJKG;
+ if (ffBrstpol != dffrstpol)
+ goto reject_ffFJKG;
+ }
- if (clock_vld && (c != clock || cp != clock_pol))
- reject;
+ ffFJKG = dff;
+ clock = dffclock;
+ clock_pol = dffclock_pol;
+ sigH = dffQ;
+
+reject_ffFJKG: ;
+ }
+ }
+endcode
+
+code argD ffH sigH sigO clock clock_pol
+ if (ffFJKG && nusers(sigH) == 2 &&
+ (mul->type != \SB_MAC16 || !param(mul, \PIPELINE_16x16_MULT_REG2).as_bool())) {
+ argD = sigH;
+ subpattern(out_dffe);
+ if (dff) {
+ // H does not have a CE-like (hold) input
+ if (dffholdmux)
+ goto reject_ffH;
+
+ // Reset signal of H (IRSTBOT) shared with B
+ if ((ffBrstmux != NULL) != (dffrstmux != NULL))
+ goto reject_ffH;
+ if (ffBrstmux) {
+ if (port(ffBrstmux, \S) != port(dffrstmux, \S))
+ goto reject_ffH;
+ if (ffBrstpol != dffrstpol)
+ goto reject_ffH;
+ }
- clock = c;
- clock_pol = cp;
- clock_vld = true;
+ ffH = dff;
+ clock = dffclock;
+ clock_pol = dffclock_pol;
+ sigH = dffQ;
+
+reject_ffH: ;
+ }
}
+
+ sigO = sigH;
endcode
-match ffY
- select ffY->type.in($dff)
- select nusers(port(ffY, \D)) == 2
- index <SigSpec> port(ffY, \D) === port(mul, \Y)
+match add
+ if mul->type != \SB_MAC16 || (param(mul, \TOPOUTPUT_SELECT).as_int() == 3 && param(mul, \BOTOUTPUT_SELECT).as_int() == 3)
+
+ select add->type.in($add)
+ choice <IdString> AB {\A, \B}
+ select nusers(port(add, AB)) == 2
+
+ index <SigBit> port(add, AB)[0] === sigH[0]
+ filter GetSize(port(add, AB)) <= GetSize(sigH)
+ filter port(add, AB) == sigH.extract(0, GetSize(port(add, AB)))
+ filter nusers(sigH.extract_end(GetSize(port(add, AB)))) <= 1
+ set addAB AB
optional
endmatch
-code sigY clock clock_pol clock_vld
- sigY = port(mul, \Y);
+code sigCD sigO cd_signed
+ if (add) {
+ sigCD = port(add, addAB == \A ? \B : \A);
+ cd_signed = param(add, addAB == \A ? \B_SIGNED : \A_SIGNED).as_bool();
- if (ffY) {
- sigY = port(ffY, \Q);
- SigBit c = port(ffY, \CLK).as_bit();
- bool cp = param(ffY, \CLK_POLARITY).as_bool();
+ int natural_mul_width = GetSize(sigA) + GetSize(sigB);
+ int actual_mul_width = GetSize(sigH);
+ int actual_acc_width = GetSize(sigCD);
- if (clock_vld && (c != clock || cp != clock_pol))
+ if ((actual_acc_width > actual_mul_width) && (natural_mul_width > actual_mul_width))
+ reject;
+ // If accumulator, check adder width and signedness
+ if (sigCD == sigH && (actual_acc_width != actual_mul_width) && (param(mul, \A_SIGNED).as_bool() != param(add, \A_SIGNED).as_bool()))
reject;
- clock = c;
- clock_pol = cp;
- clock_vld = true;
+ sigO = port(add, \Y);
}
endcode
-match addA
- select addA->type.in($add)
- select nusers(port(addA, \A)) == 2
- index <SigSpec> port(addA, \A) === sigY
+match mux
+ select mux->type == $mux
+ choice <IdString> AB {\A, \B}
+ select nusers(port(mux, AB)) == 2
+ index <SigSpec> port(mux, AB) === sigO
+ set muxAB AB
optional
endmatch
-match addB
- if !addA
- select addB->type.in($add, $sub)
- select nusers(port(addB, \B)) == 2
- index <SigSpec> port(addB, \B) === sigY
- optional
-endmatch
+code sigO
+ if (mux)
+ sigO = port(mux, \Y);
+endcode
+
+code argD ffO ffOholdmux ffOrstmux ffOholdpol ffOrstpol sigO sigCD clock clock_pol cd_signed o_lo
+ if (mul->type != \SB_MAC16 ||
+ // Ensure that register is not already used
+ ((param(mul, \TOPOUTPUT_SELECT, 0).as_int() != 1 && param(mul, \BOTOUTPUT_SELECT, 0).as_int() != 1) &&
+ // Ensure that OLOADTOP/OLOADBOT is unused or zero
+ (port(mul, \OLOADTOP, State::S0).is_fully_zero() && port(mul, \OLOADBOT, State::S0).is_fully_zero()))) {
+
+ dff = nullptr;
+
+ // First try entire sigO
+ if (nusers(sigO) == 2) {
+ argD = sigO;
+ subpattern(out_dffe);
+ }
+
+ // Otherwise try just its least significant 16 bits
+ if (!dff && GetSize(sigO) > 16) {
+ argD = sigO.extract(0, 16);
+ if (nusers(argD) == 2) {
+ subpattern(out_dffe);
+ o_lo = dff;
+ }
+ }
+
+ if (dff) {
+ ffO = dff;
+ clock = dffclock;
+ clock_pol = dffclock_pol;
+ if (dffrstmux) {
+ ffOrstmux = dffrstmux;
+ ffOrstpol = dffrstpol;
+ }
+ if (dffholdmux) {
+ ffOholdmux = dffholdmux;
+ ffOholdpol = dffholdpol;
+ }
+
+ sigO.replace(sigO.extract(0, GetSize(dffQ)), dffQ);
+ }
-code addAB sigS
- if (addA) {
- addAB = addA;
- sigS = port(addA, \B);
+ // Loading value into output register is not
+ // supported unless using accumulator
+ if (mux) {
+ if (sigCD != sigO)
+ reject;
+ sigCD = port(mux, muxAB == \B ? \A : \B);
+
+ cd_signed = add && param(add, \A_SIGNED).as_bool() && param(add, \B_SIGNED).as_bool();
+ }
}
- if (addB) {
- addAB = addB;
- sigS = port(addB, \A);
+endcode
+
+code argQ ffCD ffCDholdmux ffCDholdpol ffCDrstpol sigCD clock clock_pol
+ if (!sigCD.empty() && sigCD != sigO &&
+ (mul->type != \SB_MAC16 || (!param(mul, \C_REG).as_bool() && !param(mul, \D_REG).as_bool()))) {
+ argQ = sigCD;
+ subpattern(in_dffe);
+ if (dff) {
+ if (dffholdmux) {
+ ffCDholdmux = dffholdmux;
+ ffCDholdpol = dffholdpol;
+ }
+
+ // Reset signal of C (IRSTTOP) and D (IRSTBOT)
+ // shared with A and B
+ if ((ffArstmux != NULL) != (dffrstmux != NULL))
+ goto reject_ffCD;
+ if ((ffBrstmux != NULL) != (dffrstmux != NULL))
+ goto reject_ffCD;
+ if (ffArstmux) {
+ if (port(ffArstmux, \S) != port(dffrstmux, \S))
+ goto reject_ffCD;
+ if (ffArstpol != dffrstpol)
+ goto reject_ffCD;
+ }
+ if (ffBrstmux) {
+ if (port(ffBrstmux, \S) != port(dffrstmux, \S))
+ goto reject_ffCD;
+ if (ffBrstpol != dffrstpol)
+ goto reject_ffCD;
+ }
+
+ ffCD = dff;
+ clock = dffclock;
+ clock_pol = dffclock_pol;
+ sigCD = dffD;
+
+reject_ffCD: ;
+ }
}
- if (addAB) {
- int natural_mul_width = GetSize(sigA) + GetSize(sigB);
- int actual_mul_width = GetSize(sigY);
- int actual_acc_width = GetSize(sigS);
+endcode
- if ((actual_acc_width > actual_mul_width) && (natural_mul_width > actual_mul_width))
+code sigCD
+ sigCD.extend_u0(32, cd_signed);
+endcode
+
+code
+ accept;
+endcode
+
+// #######################
+
+subpattern in_dffe
+arg argD argQ clock clock_pol
+
+code
+ dff = nullptr;
+ for (auto c : argQ.chunks()) {
+ if (!c.wire)
+ reject;
+ if (c.wire->get_bool_attribute(\keep))
reject;
- if ((actual_acc_width != actual_mul_width) && (param(mul, \A_SIGNED).as_bool() != param(addAB, \A_SIGNED).as_bool()))
+ Const init = c.wire->attributes.at(\init, State::Sx);
+ if (!init.is_fully_undef() && !init.is_fully_zero())
reject;
}
endcode
-match muxA
- if addAB
- select muxA->type.in($mux)
- select nusers(port(muxA, \A)) == 2
- index <SigSpec> port(muxA, \A) === port(addAB, \Y)
- optional
+match ff
+ select ff->type.in($dff)
+ // DSP48E1 does not support clock inversion
+ select param(ff, \CLK_POLARITY).as_bool()
+
+ slice offset GetSize(port(ff, \D))
+ index <SigBit> port(ff, \Q)[offset] === argQ[0]
+
+ // Check that the rest of argQ is present
+ filter GetSize(port(ff, \Q)) >= offset + GetSize(argQ)
+ filter port(ff, \Q).extract(offset, GetSize(argQ)) == argQ
+
+ set ffoffset offset
endmatch
-match muxB
- if addAB
- if !muxA
- select muxB->type.in($mux)
- select nusers(port(muxB, \B)) == 2
- index <SigSpec> port(muxB, \B) === port(addAB, \Y)
- optional
+code argQ argD
+{
+ if (clock != SigBit()) {
+ if (port(ff, \CLK) != clock)
+ reject;
+ if (param(ff, \CLK_POLARITY).as_bool() != clock_pol)
+ reject;
+ }
+
+ SigSpec Q = port(ff, \Q);
+ dff = ff;
+ dffclock = port(ff, \CLK);
+ dffclock_pol = param(ff, \CLK_POLARITY).as_bool();
+ dffD = argQ;
+ argD = port(ff, \D);
+ argQ = Q;
+ dffD.replace(argQ, argD);
+ // Only search for ffrstmux if dffD only
+ // has two (ff, ffrstmux) users
+ if (nusers(dffD) > 2)
+ argD = SigSpec();
+}
+endcode
+
+match ffrstmux
+ if false /* TODO: ice40 resets are actually async */
+
+ if !argD.empty()
+ select ffrstmux->type.in($mux)
+ index <SigSpec> port(ffrstmux, \Y) === argD
+
+ choice <IdString> BA {\B, \A}
+ // DSP48E1 only supports reset to zero
+ select port(ffrstmux, BA).is_fully_zero()
+
+ define <bool> pol (BA == \B)
+ set ffrstpol pol
+ semioptional
endmatch
-code muxAB
- muxAB = addAB;
- if (muxA)
- muxAB = muxA;
- if (muxB)
- muxAB = muxB;
+code argD
+ if (ffrstmux) {
+ dffrstmux = ffrstmux;
+ dffrstpol = ffrstpol;
+ argD = port(ffrstmux, ffrstpol ? \A : \B);
+ dffD.replace(port(ffrstmux, \Y), argD);
+
+ // Only search for ffholdmux if argQ has at
+ // least 3 users (ff, <upstream>, ffrstmux) and
+ // dffD only has two (ff, ffrstmux)
+ if (!(nusers(argQ) >= 3 && nusers(dffD) == 2))
+ argD = SigSpec();
+ }
+ else
+ dffrstmux = nullptr;
endcode
-match ffS
- if muxAB
- select ffS->type.in($dff)
- select nusers(port(ffS, \D)) == 2
- index <SigSpec> port(ffS, \D) === port(muxAB, \Y)
- index <SigSpec> port(ffS, \Q) === sigS
+match ffholdmux
+ if !argD.empty()
+ select ffholdmux->type.in($mux)
+ index <SigSpec> port(ffholdmux, \Y) === argD
+ choice <IdString> BA {\B, \A}
+ index <SigSpec> port(ffholdmux, BA) === argQ
+ define <bool> pol (BA == \B)
+ set ffholdpol pol
+ semioptional
endmatch
-code clock clock_pol clock_vld
- if (ffS) {
- SigBit c = port(ffS, \CLK).as_bit();
- bool cp = param(ffS, \CLK_POLARITY).as_bool();
+code argD
+ if (ffholdmux) {
+ dffholdmux = ffholdmux;
+ dffholdpol = ffholdpol;
+ argD = port(ffholdmux, ffholdpol ? \A : \B);
+ dffD.replace(port(ffholdmux, \Y), argD);
+ }
+ else
+ dffholdmux = nullptr;
+endcode
- if (clock_vld && (c != clock || cp != clock_pol))
+// #######################
+
+subpattern out_dffe
+arg argD argQ clock clock_pol
+
+code
+ dff = nullptr;
+ for (auto c : argD.chunks())
+ if (c.wire->get_bool_attribute(\keep))
reject;
+endcode
- clock = c;
- clock_pol = cp;
- clock_vld = true;
+match ffholdmux
+ select ffholdmux->type.in($mux)
+ // ffholdmux output must have two users: ffholdmux and ff.D
+ select nusers(port(ffholdmux, \Y)) == 2
+
+ choice <IdString> BA {\B, \A}
+ // keep-last-value net must have at least three users: ffholdmux, ff, downstream sink(s)
+ select nusers(port(ffholdmux, BA)) >= 3
+
+ slice offset GetSize(port(ffholdmux, \Y))
+ define <IdString> AB (BA == \B ? \A : \B)
+ index <SigBit> port(ffholdmux, AB)[offset] === argD[0]
+
+ // Check that the rest of argD is present
+ filter GetSize(port(ffholdmux, AB)) >= offset + GetSize(argD)
+ filter port(ffholdmux, AB).extract(offset, GetSize(argD)) == argD
+
+ set ffoffset offset
+ define <bool> pol (BA == \B)
+ set ffholdpol pol
+
+ semioptional
+endmatch
+
+code argD argQ
+ dffholdmux = ffholdmux;
+ if (ffholdmux) {
+ SigSpec AB = port(ffholdmux, ffholdpol ? \A : \B);
+ SigSpec Y = port(ffholdmux, \Y);
+ argQ = argD;
+ argD.replace(AB, Y);
+ argQ.replace(AB, port(ffholdmux, ffholdpol ? \B : \A));
+
+ dffholdmux = ffholdmux;
+ dffholdpol = ffholdpol;
}
- accept;
+endcode
+
+match ffrstmux
+ if false /* TODO: ice40 resets are actually async */
+
+ select ffrstmux->type.in($mux)
+ // ffrstmux output must have two users: ffrstmux and ff.D
+ select nusers(port(ffrstmux, \Y)) == 2
+
+ choice <IdString> BA {\B, \A}
+ // DSP48E1 only supports reset to zero
+ select port(ffrstmux, BA).is_fully_zero()
+
+ slice offset GetSize(port(ffrstmux, \Y))
+ define <IdString> AB (BA == \B ? \A : \B)
+ index <SigBit> port(ffrstmux, AB)[offset] === argD[0]
+
+ // Check that offset is consistent
+ filter !ffholdmux || ffoffset == offset
+ // Check that the rest of argD is present
+ filter GetSize(port(ffrstmux, AB)) >= offset + GetSize(argD)
+ filter port(ffrstmux, AB).extract(offset, GetSize(argD)) == argD
+
+ set ffoffset offset
+ define <bool> pol (AB == \A)
+ set ffrstpol pol
+
+ semioptional
+endmatch
+
+code argD argQ
+ dffrstmux = ffrstmux;
+ if (ffrstmux) {
+ SigSpec AB = port(ffrstmux, ffrstpol ? \A : \B);
+ SigSpec Y = port(ffrstmux, \Y);
+ argD.replace(AB, Y);
+
+ dffrstmux = ffrstmux;
+ dffrstpol = ffrstpol;
+ }
+endcode
+
+match ff
+ select ff->type.in($dff)
+ // DSP48E1 does not support clock inversion
+ select param(ff, \CLK_POLARITY).as_bool()
+
+ slice offset GetSize(port(ff, \D))
+ index <SigBit> port(ff, \D)[offset] === argD[0]
+
+ // Check that offset is consistent
+ filter (!ffholdmux && !ffrstmux) || ffoffset == offset
+ // Check that the rest of argD is present
+ filter GetSize(port(ff, \D)) >= offset + GetSize(argD)
+ filter port(ff, \D).extract(offset, GetSize(argD)) == argD
+ // Check that FF.Q is connected to CE-mux
+ filter !ffholdmux || port(ff, \Q).extract(offset, GetSize(argQ)) == argQ
+
+ set ffoffset offset
+endmatch
+
+code argQ
+ if (ff) {
+ if (clock != SigBit()) {
+ if (port(ff, \CLK) != clock)
+ reject;
+ if (param(ff, \CLK_POLARITY).as_bool() != clock_pol)
+ reject;
+ }
+ SigSpec D = port(ff, \D);
+ SigSpec Q = port(ff, \Q);
+ if (!ffholdmux) {
+ argQ = argD;
+ argQ.replace(D, Q);
+ }
+
+ for (auto c : argQ.chunks()) {
+ Const init = c.wire->attributes.at(\init, State::Sx);
+ if (!init.is_fully_undef() && !init.is_fully_zero())
+ reject;
+ }
+
+ dff = ff;
+ dffQ = argQ;
+ dffclock = port(ff, \CLK);
+ dffclock_pol = param(ff, \CLK_POLARITY).as_bool();
+ }
+ // No enable/reset mux possible without flop
+ else if (dffholdmux || dffrstmux)
+ reject;
endcode
diff --git a/passes/pmgen/peepopt.cc b/passes/pmgen/peepopt.cc
index e7f95cf85..72b02127a 100644
--- a/passes/pmgen/peepopt.cc
+++ b/passes/pmgen/peepopt.cc
@@ -60,6 +60,7 @@ struct PeepoptPass : public Pass {
peepopt_pm pm(module, module->selected_cells());
pm.run_shiftmul();
pm.run_muldiv();
+ pm.run_dffmux();
}
}
}
diff --git a/passes/pmgen/peepopt_dffmux.pmg b/passes/pmgen/peepopt_dffmux.pmg
new file mode 100644
index 000000000..c88a52226
--- /dev/null
+++ b/passes/pmgen/peepopt_dffmux.pmg
@@ -0,0 +1,113 @@
+pattern dffmux
+
+state <IdString> cemuxAB rstmuxBA
+state <SigSpec> sigD
+
+match dff
+ select dff->type == $dff
+ select GetSize(port(dff, \D)) > 1
+endmatch
+
+match rstmux
+ select rstmux->type == $mux
+ select GetSize(port(rstmux, \Y)) > 1
+ index <SigSpec> port(rstmux, \Y) === port(dff, \D)
+ choice <IdString> BA {\B, \A}
+ select port(rstmux, BA).is_fully_const()
+ set rstmuxBA BA
+ optional
+endmatch
+
+code sigD
+ if (rstmux)
+ sigD = port(rstmux, rstmuxBA == \B ? \A : \B);
+ else
+ sigD = port(dff, \D);
+endcode
+
+match cemux
+ select cemux->type == $mux
+ select GetSize(port(cemux, \Y)) > 1
+ index <SigSpec> port(cemux, \Y) === sigD
+ choice <IdString> AB {\A, \B}
+ index <SigSpec> port(cemux, AB) === port(dff, \Q)
+ set cemuxAB AB
+endmatch
+
+code
+ SigSpec D = port(cemux, cemuxAB == \A ? \B : \A);
+ SigSpec Q = port(dff, \Q);
+ Const rst;
+ if (rstmux)
+ rst = port(rstmux, rstmuxBA).as_const();
+ int width = GetSize(D);
+
+ SigSpec &ceA = cemux->connections_.at(\A);
+ SigSpec &ceB = cemux->connections_.at(\B);
+ SigSpec &ceY = cemux->connections_.at(\Y);
+ SigSpec &dffD = dff->connections_.at(\D);
+ SigSpec &dffQ = dff->connections_.at(\Q);
+
+ if (D[width-1] == D[width-2]) {
+ did_something = true;
+
+ SigBit sign = D[width-1];
+ bool is_signed = sign.wire;
+ int i;
+ for (i = width-1; i >= 2; i--) {
+ if (!is_signed) {
+ module->connect(Q[i], sign);
+ if (D[i-1] != sign || (rst.size() && rst[i-1] != rst[width-1]))
+ break;
+ }
+ else {
+ module->connect(Q[i], Q[i-1]);
+ if (D[i-2] != sign || (rst.size() && rst[i-1] != rst[width-1]))
+ break;
+ }
+ }
+
+ ceA.remove(i, width-i);
+ ceB.remove(i, width-i);
+ ceY.remove(i, width-i);
+ cemux->fixup_parameters();
+ dffD.remove(i, width-i);
+ dffQ.remove(i, width-i);
+ dff->fixup_parameters();
+
+ log("dffcemux pattern in %s: dff=%s, cemux=%s; removed top %d bits.\n", log_id(module), log_id(dff), log_id(cemux), width-i);
+ accept;
+ }
+ else {
+ int count = 0;
+ for (int i = width-1; i >= 0; i--) {
+ if (D[i].wire)
+ continue;
+ Wire *w = Q[i].wire;
+ auto it = w->attributes.find(\init);
+ State init;
+ if (it != w->attributes.end())
+ init = it->second[Q[i].offset];
+ else
+ init = State::Sx;
+
+ if (init == State::Sx || init == D[i].data) {
+ count++;
+ module->connect(Q[i], D[i]);
+ ceA.remove(i);
+ ceB.remove(i);
+ ceY.remove(i);
+ dffD.remove(i);
+ dffQ.remove(i);
+ }
+ }
+ if (count > 0) {
+ did_something = true;
+ cemux->fixup_parameters();
+ dff->fixup_parameters();
+ log("dffcemux pattern in %s: dff=%s, cemux=%s; removed %d constant bits.\n", log_id(module), log_id(dff), log_id(cemux), count);
+ }
+
+ accept;
+ }
+endcode
diff --git a/passes/pmgen/pmgen.py b/passes/pmgen/pmgen.py
index 573722d68..39a09991d 100644
--- a/passes/pmgen/pmgen.py
+++ b/passes/pmgen/pmgen.py
@@ -286,7 +286,7 @@ def process_pmgfile(f, filename):
block["gencode"].append(rewrite_cpp(l.rstrip()))
break
- assert False
+ raise RuntimeError("'%s' statement not recognised on line %d" % (a[0], linenr))
if block["optional"]:
assert not block["semioptional"]
@@ -305,7 +305,8 @@ def process_pmgfile(f, filename):
block["states"] = set()
for s in line.split()[1:]:
- assert s in state_types[current_pattern]
+ if s not in state_types[current_pattern]:
+ raise RuntimeError("'%s' not in state_types" % s)
block["states"].add(s)
codetype = "code"
@@ -327,7 +328,7 @@ def process_pmgfile(f, filename):
blocks.append(block)
continue
- assert False
+ raise RuntimeError("'%s' command not recognised" % cmd)
for fn in pmgfiles:
with open(fn, "r") as f:
@@ -452,11 +453,19 @@ with open(outfile, "w") as f:
print(" return sigmap(cell->getPort(portname));", file=f)
print(" }", file=f)
print("", file=f)
+ print(" SigSpec port(Cell *cell, IdString portname, const SigSpec& defval) {", file=f)
+ print(" return sigmap(cell->connections_.at(portname, defval));", file=f)
+ print(" }", file=f)
+ print("", file=f)
print(" Const param(Cell *cell, IdString paramname) {", file=f)
print(" return cell->getParam(paramname);", file=f)
print(" }", file=f)
print("", file=f)
+ print(" Const param(Cell *cell, IdString paramname, const Const& defval) {", file=f)
+ print(" return cell->parameters.at(paramname, defval);", file=f)
+ print(" }", file=f)
+ print("", file=f)
print(" int nusers(const SigSpec &sig) {", file=f)
print(" pool<Cell*> users;", file=f)
diff --git a/passes/pmgen/xilinx_dsp.cc b/passes/pmgen/xilinx_dsp.cc
new file mode 100644
index 000000000..11c7e5ea8
--- /dev/null
+++ b/passes/pmgen/xilinx_dsp.cc
@@ -0,0 +1,637 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ * 2019 Eddie Hung <eddie@fpgeh.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#include "kernel/yosys.h"
+#include "kernel/sigtools.h"
+
+USING_YOSYS_NAMESPACE
+PRIVATE_NAMESPACE_BEGIN
+
+#include "passes/pmgen/xilinx_dsp_pm.h"
+#include "passes/pmgen/xilinx_dsp_CREG_pm.h"
+#include "passes/pmgen/xilinx_dsp_cascade_pm.h"
+
+static Cell* addDsp(Module *module) {
+ Cell *cell = module->addCell(NEW_ID, ID(DSP48E1));
+ cell->setParam(ID(ACASCREG), 0);
+ cell->setParam(ID(ADREG), 0);
+ cell->setParam(ID(A_INPUT), Const("DIRECT"));
+ cell->setParam(ID(ALUMODEREG), 0);
+ cell->setParam(ID(AREG), 0);
+ cell->setParam(ID(BCASCREG), 0);
+ cell->setParam(ID(B_INPUT), Const("DIRECT"));
+ cell->setParam(ID(BREG), 0);
+ cell->setParam(ID(CARRYINREG), 0);
+ cell->setParam(ID(CARRYINSELREG), 0);
+ cell->setParam(ID(CREG), 0);
+ cell->setParam(ID(DREG), 0);
+ cell->setParam(ID(INMODEREG), 0);
+ cell->setParam(ID(MREG), 0);
+ cell->setParam(ID(OPMODEREG), 0);
+ cell->setParam(ID(PREG), 0);
+ cell->setParam(ID(USE_MULT), Const("NONE"));
+ cell->setParam(ID(USE_SIMD), Const("ONE48"));
+ cell->setParam(ID(USE_DPORT), Const("FALSE"));
+
+ cell->setPort(ID(D), Const(0, 25));
+ cell->setPort(ID(INMODE), Const(0, 5));
+ cell->setPort(ID(ALUMODE), Const(0, 4));
+ cell->setPort(ID(OPMODE), Const(0, 7));
+ cell->setPort(ID(CARRYINSEL), Const(0, 3));
+ cell->setPort(ID(ACIN), Const(0, 30));
+ cell->setPort(ID(BCIN), Const(0, 18));
+ cell->setPort(ID(PCIN), Const(0, 48));
+ cell->setPort(ID(CARRYIN), Const(0, 1));
+ return cell;
+}
+
+void xilinx_simd_pack(Module *module, const std::vector<Cell*> &selected_cells)
+{
+ std::deque<Cell*> simd12_add, simd12_sub;
+ std::deque<Cell*> simd24_add, simd24_sub;
+
+ for (auto cell : selected_cells) {
+ if (!cell->type.in(ID($add), ID($sub)))
+ continue;
+ SigSpec Y = cell->getPort(ID(Y));
+ if (!Y.is_chunk())
+ continue;
+ if (!Y.as_chunk().wire->get_strpool_attribute(ID(use_dsp)).count("simd"))
+ continue;
+ if (GetSize(Y) > 25)
+ continue;
+ SigSpec A = cell->getPort(ID(A));
+ SigSpec B = cell->getPort(ID(B));
+ if (GetSize(Y) <= 13) {
+ if (GetSize(A) > 12)
+ continue;
+ if (GetSize(B) > 12)
+ continue;
+ if (cell->type == ID($add))
+ simd12_add.push_back(cell);
+ else if (cell->type == ID($sub))
+ simd12_sub.push_back(cell);
+ }
+ else if (GetSize(Y) <= 25) {
+ if (GetSize(A) > 24)
+ continue;
+ if (GetSize(B) > 24)
+ continue;
+ if (cell->type == ID($add))
+ simd24_add.push_back(cell);
+ else if (cell->type == ID($sub))
+ simd24_sub.push_back(cell);
+ }
+ else
+ log_abort();
+ }
+
+ auto f12 = [module](SigSpec &AB, SigSpec &C, SigSpec &P, SigSpec &CARRYOUT, Cell *lane) {
+ SigSpec A = lane->getPort(ID(A));
+ SigSpec B = lane->getPort(ID(B));
+ SigSpec Y = lane->getPort(ID(Y));
+ A.extend_u0(12, lane->getParam(ID(A_SIGNED)).as_bool());
+ B.extend_u0(12, lane->getParam(ID(B_SIGNED)).as_bool());
+ AB.append(A);
+ C.append(B);
+ if (GetSize(Y) < 13)
+ Y.append(module->addWire(NEW_ID, 13-GetSize(Y)));
+ else
+ log_assert(GetSize(Y) == 13);
+ P.append(Y.extract(0, 12));
+ CARRYOUT.append(Y[12]);
+ };
+ auto g12 = [&f12,module](std::deque<Cell*> &simd12) {
+ while (simd12.size() > 1) {
+ SigSpec AB, C, P, CARRYOUT;
+
+ Cell *lane1 = simd12.front();
+ simd12.pop_front();
+ Cell *lane2 = simd12.front();
+ simd12.pop_front();
+ Cell *lane3 = nullptr;
+ Cell *lane4 = nullptr;
+
+ if (!simd12.empty()) {
+ lane3 = simd12.front();
+ simd12.pop_front();
+ if (!simd12.empty()) {
+ lane4 = simd12.front();
+ simd12.pop_front();
+ }
+ }
+
+ log("Analysing %s.%s for Xilinx DSP SIMD12 packing.\n", log_id(module), log_id(lane1));
+
+ Cell *cell = addDsp(module);
+ cell->setParam(ID(USE_SIMD), Const("FOUR12"));
+ // X = A:B
+ // Y = 0
+ // Z = C
+ cell->setPort(ID(OPMODE), Const::from_string("0110011"));
+
+ log_assert(lane1);
+ log_assert(lane2);
+ f12(AB, C, P, CARRYOUT, lane1);
+ f12(AB, C, P, CARRYOUT, lane2);
+ if (lane3) {
+ f12(AB, C, P, CARRYOUT, lane3);
+ if (lane4)
+ f12(AB, C, P, CARRYOUT, lane4);
+ else {
+ AB.append(Const(0, 12));
+ C.append(Const(0, 12));
+ P.append(module->addWire(NEW_ID, 12));
+ CARRYOUT.append(module->addWire(NEW_ID, 1));
+ }
+ }
+ else {
+ AB.append(Const(0, 24));
+ C.append(Const(0, 24));
+ P.append(module->addWire(NEW_ID, 24));
+ CARRYOUT.append(module->addWire(NEW_ID, 2));
+ }
+ log_assert(GetSize(AB) == 48);
+ log_assert(GetSize(C) == 48);
+ log_assert(GetSize(P) == 48);
+ log_assert(GetSize(CARRYOUT) == 4);
+ cell->setPort(ID(A), AB.extract(18, 30));
+ cell->setPort(ID(B), AB.extract(0, 18));
+ cell->setPort(ID(C), C);
+ cell->setPort(ID(P), P);
+ cell->setPort(ID(CARRYOUT), CARRYOUT);
+ if (lane1->type == ID($sub))
+ cell->setPort(ID(ALUMODE), Const::from_string("0011"));
+
+ module->remove(lane1);
+ module->remove(lane2);
+ if (lane3) module->remove(lane3);
+ if (lane4) module->remove(lane4);
+
+ module->design->select(module, cell);
+ }
+ };
+ g12(simd12_add);
+ g12(simd12_sub);
+
+ auto f24 = [module](SigSpec &AB, SigSpec &C, SigSpec &P, SigSpec &CARRYOUT, Cell *lane) {
+ SigSpec A = lane->getPort(ID(A));
+ SigSpec B = lane->getPort(ID(B));
+ SigSpec Y = lane->getPort(ID(Y));
+ A.extend_u0(24, lane->getParam(ID(A_SIGNED)).as_bool());
+ B.extend_u0(24, lane->getParam(ID(B_SIGNED)).as_bool());
+ C.append(A);
+ AB.append(B);
+ if (GetSize(Y) < 25)
+ Y.append(module->addWire(NEW_ID, 25-GetSize(Y)));
+ else
+ log_assert(GetSize(Y) == 25);
+ P.append(Y.extract(0, 24));
+ CARRYOUT.append(module->addWire(NEW_ID)); // TWO24 uses every other bit
+ CARRYOUT.append(Y[24]);
+ };
+ auto g24 = [&f24,module](std::deque<Cell*> &simd24) {
+ while (simd24.size() > 1) {
+ SigSpec AB;
+ SigSpec C;
+ SigSpec P;
+ SigSpec CARRYOUT;
+
+ Cell *lane1 = simd24.front();
+ simd24.pop_front();
+ Cell *lane2 = simd24.front();
+ simd24.pop_front();
+
+ log("Analysing %s.%s for Xilinx DSP SIMD24 packing.\n", log_id(module), log_id(lane1));
+
+ Cell *cell = addDsp(module);
+ cell->setParam(ID(USE_SIMD), Const("TWO24"));
+ // X = A:B
+ // Y = 0
+ // Z = C
+ cell->setPort(ID(OPMODE), Const::from_string("0110011"));
+
+ log_assert(lane1);
+ log_assert(lane2);
+ f24(AB, C, P, CARRYOUT, lane1);
+ f24(AB, C, P, CARRYOUT, lane2);
+ log_assert(GetSize(AB) == 48);
+ log_assert(GetSize(C) == 48);
+ log_assert(GetSize(P) == 48);
+ log_assert(GetSize(CARRYOUT) == 4);
+ cell->setPort(ID(A), AB.extract(18, 30));
+ cell->setPort(ID(B), AB.extract(0, 18));
+ cell->setPort(ID(C), C);
+ cell->setPort(ID(P), P);
+ cell->setPort(ID(CARRYOUT), CARRYOUT);
+ if (lane1->type == ID($sub))
+ cell->setPort(ID(ALUMODE), Const::from_string("0011"));
+
+ module->remove(lane1);
+ module->remove(lane2);
+
+ module->design->select(module, cell);
+ }
+ };
+ g24(simd24_add);
+ g24(simd24_sub);
+}
+
+void xilinx_dsp_pack(xilinx_dsp_pm &pm)
+{
+ auto &st = pm.st_xilinx_dsp_pack;
+
+ log("Analysing %s.%s for Xilinx DSP packing.\n", log_id(pm.module), log_id(st.dsp));
+
+ log_debug("preAdd: %s\n", log_id(st.preAdd, "--"));
+ log_debug("ffAD: %s %s %s\n", log_id(st.ffAD, "--"), log_id(st.ffADcemux, "--"), log_id(st.ffADrstmux, "--"));
+ log_debug("ffA2: %s %s %s\n", log_id(st.ffA2, "--"), log_id(st.ffA2cemux, "--"), log_id(st.ffA2rstmux, "--"));
+ log_debug("ffA1: %s %s %s\n", log_id(st.ffA1, "--"), log_id(st.ffA1cemux, "--"), log_id(st.ffA1rstmux, "--"));
+ log_debug("ffB2: %s %s %s\n", log_id(st.ffB2, "--"), log_id(st.ffB2cemux, "--"), log_id(st.ffB2rstmux, "--"));
+ log_debug("ffB1: %s %s %s\n", log_id(st.ffB1, "--"), log_id(st.ffB1cemux, "--"), log_id(st.ffB1rstmux, "--"));
+ log_debug("ffD: %s %s %s\n", log_id(st.ffD, "--"), log_id(st.ffDcemux, "--"), log_id(st.ffDrstmux, "--"));
+ log_debug("dsp: %s\n", log_id(st.dsp, "--"));
+ log_debug("ffM: %s %s %s\n", log_id(st.ffM, "--"), log_id(st.ffMcemux, "--"), log_id(st.ffMrstmux, "--"));
+ log_debug("postAdd: %s\n", log_id(st.postAdd, "--"));
+ log_debug("postAddMux: %s\n", log_id(st.postAddMux, "--"));
+ log_debug("ffP: %s %s %s\n", log_id(st.ffP, "--"), log_id(st.ffPcemux, "--"), log_id(st.ffPrstmux, "--"));
+ log_debug("overflow: %s\n", log_id(st.overflow, "--"));
+
+ Cell *cell = st.dsp;
+
+ if (st.preAdd) {
+ log(" preadder %s (%s)\n", log_id(st.preAdd), log_id(st.preAdd->type));
+ bool A_SIGNED = st.preAdd->getParam(ID(A_SIGNED)).as_bool();
+ bool D_SIGNED = st.preAdd->getParam(ID(B_SIGNED)).as_bool();
+ if (st.sigA == st.preAdd->getPort(ID(B)))
+ std::swap(A_SIGNED, D_SIGNED);
+ st.sigA.extend_u0(30, A_SIGNED);
+ st.sigD.extend_u0(25, D_SIGNED);
+ cell->setPort(ID(A), st.sigA);
+ cell->setPort(ID(D), st.sigD);
+ cell->setPort(ID(INMODE), Const::from_string("00100"));
+
+ if (st.ffAD) {
+ if (st.ffADcemux) {
+ SigSpec S = st.ffADcemux->getPort(ID(S));
+ cell->setPort(ID(CEAD), st.ffADcepol ? S : pm.module->Not(NEW_ID, S));
+ }
+ else
+ cell->setPort(ID(CEAD), State::S1);
+ cell->setParam(ID(ADREG), 1);
+ }
+
+ cell->setParam(ID(USE_DPORT), Const("TRUE"));
+
+ pm.autoremove(st.preAdd);
+ }
+ if (st.postAdd) {
+ log(" postadder %s (%s)\n", log_id(st.postAdd), log_id(st.postAdd->type));
+
+ SigSpec &opmode = cell->connections_.at(ID(OPMODE));
+ if (st.postAddMux) {
+ log_assert(st.ffP);
+ opmode[4] = st.postAddMux->getPort(ID(S));
+ pm.autoremove(st.postAddMux);
+ }
+ else if (st.ffP && st.sigC == st.sigP)
+ opmode[4] = State::S0;
+ else
+ opmode[4] = State::S1;
+ opmode[6] = State::S0;
+ opmode[5] = State::S1;
+
+ if (opmode[4] != State::S0) {
+ if (st.postAddMuxAB == ID(A))
+ st.sigC.extend_u0(48, st.postAdd->getParam(ID(B_SIGNED)).as_bool());
+ else
+ st.sigC.extend_u0(48, st.postAdd->getParam(ID(A_SIGNED)).as_bool());
+ cell->setPort(ID(C), st.sigC);
+ }
+
+ pm.autoremove(st.postAdd);
+ }
+ if (st.overflow) {
+ log(" overflow %s (%s)\n", log_id(st.overflow), log_id(st.overflow->type));
+ cell->setParam(ID(USE_PATTERN_DETECT), Const("PATDET"));
+ cell->setParam(ID(SEL_PATTERN), Const("PATTERN"));
+ cell->setParam(ID(SEL_MASK), Const("MASK"));
+
+ if (st.overflow->type == ID($ge)) {
+ Const B = st.overflow->getPort(ID(B)).as_const();
+ log_assert(std::count(B.bits.begin(), B.bits.end(), State::S1) == 1);
+ // Since B is an exact power of 2, subtract 1
+ // by inverting all bits up until hitting
+ // that one hi bit
+ for (auto &b : B.bits)
+ if (b == State::S0) b = State::S1;
+ else if (b == State::S1) {
+ b = State::S0;
+ break;
+ }
+ B.extu(48);
+
+ cell->setParam(ID(MASK), B);
+ cell->setParam(ID(PATTERN), Const(0, 48));
+ cell->setPort(ID(OVERFLOW), st.overflow->getPort(ID(Y)));
+ }
+ else log_abort();
+
+ pm.autoremove(st.overflow);
+ }
+
+ if (st.clock != SigBit())
+ {
+ cell->setPort(ID(CLK), st.clock);
+
+ auto f = [&pm,cell](SigSpec &A, Cell* ff, Cell* cemux, bool cepol, IdString ceport, Cell* rstmux, bool rstpol, IdString rstport) {
+ SigSpec D = ff->getPort(ID(D));
+ SigSpec Q = pm.sigmap(ff->getPort(ID(Q)));
+ if (!A.empty())
+ A.replace(Q, D);
+ if (rstmux) {
+ SigSpec Y = rstmux->getPort(ID(Y));
+ SigSpec AB = rstmux->getPort(rstpol ? ID(A) : ID(B));
+ if (!A.empty())
+ A.replace(Y, AB);
+ if (rstport != IdString()) {
+ SigSpec S = rstmux->getPort(ID(S));
+ cell->setPort(rstport, rstpol ? S : pm.module->Not(NEW_ID, S));
+ }
+ }
+ else if (rstport != IdString())
+ cell->setPort(rstport, State::S0);
+ if (cemux) {
+ SigSpec Y = cemux->getPort(ID(Y));
+ SigSpec BA = cemux->getPort(cepol ? ID(B) : ID(A));
+ SigSpec S = cemux->getPort(ID(S));
+ if (!A.empty())
+ A.replace(Y, BA);
+ cell->setPort(ceport, cepol ? S : pm.module->Not(NEW_ID, S));
+ }
+ else
+ cell->setPort(ceport, State::S1);
+
+ for (auto c : Q.chunks()) {
+ auto it = c.wire->attributes.find(ID(init));
+ if (it == c.wire->attributes.end())
+ continue;
+ for (int i = c.offset; i < c.offset+c.width; i++) {
+ log_assert(it->second[i] == State::S0 || it->second[i] == State::Sx);
+ it->second[i] = State::Sx;
+ }
+ }
+ };
+
+ if (st.ffA2) {
+ SigSpec A = cell->getPort(ID(A));
+ f(A, st.ffA2, st.ffA2cemux, st.ffA2cepol, ID(CEA2), st.ffA2rstmux, st.ffArstpol, ID(RSTA));
+ if (st.ffA1) {
+ f(A, st.ffA1, st.ffA1cemux, st.ffA1cepol, ID(CEA1), st.ffA1rstmux, st.ffArstpol, IdString());
+ cell->setParam(ID(AREG), 2);
+ cell->setParam(ID(ACASCREG), 2);
+ }
+ else {
+ cell->setParam(ID(AREG), 1);
+ cell->setParam(ID(ACASCREG), 1);
+ }
+ pm.add_siguser(A, cell);
+ cell->setPort(ID(A), A);
+ }
+ if (st.ffB2) {
+ SigSpec B = cell->getPort(ID(B));
+ f(B, st.ffB2, st.ffB2cemux, st.ffB2cepol, ID(CEB2), st.ffB2rstmux, st.ffBrstpol, ID(RSTB));
+ if (st.ffB1) {
+ f(B, st.ffB1, st.ffB1cemux, st.ffB1cepol, ID(CEB1), st.ffB1rstmux, st.ffBrstpol, IdString());
+ cell->setParam(ID(BREG), 2);
+ cell->setParam(ID(BCASCREG), 2);
+ }
+ else {
+ cell->setParam(ID(BREG), 1);
+ cell->setParam(ID(BCASCREG), 1);
+ }
+ pm.add_siguser(B, cell);
+ cell->setPort(ID(B), B);
+ }
+ if (st.ffD) {
+ SigSpec D = cell->getPort(ID(D));
+ f(D, st.ffD, st.ffDcemux, st.ffDcepol, ID(CED), st.ffDrstmux, st.ffDrstpol, ID(RSTD));
+ pm.add_siguser(D, cell);
+ cell->setPort(ID(D), D);
+ cell->setParam(ID(DREG), 1);
+ }
+ if (st.ffM) {
+ SigSpec M; // unused
+ f(M, st.ffM, st.ffMcemux, st.ffMcepol, ID(CEM), st.ffMrstmux, st.ffMrstpol, ID(RSTM));
+ st.ffM->connections_.at(ID(Q)).replace(st.sigM, pm.module->addWire(NEW_ID, GetSize(st.sigM)));
+ cell->setParam(ID(MREG), State::S1);
+ }
+ if (st.ffP) {
+ SigSpec P; // unused
+ f(P, st.ffP, st.ffPcemux, st.ffPcepol, ID(CEP), st.ffPrstmux, st.ffPrstpol, ID(RSTP));
+ st.ffP->connections_.at(ID(Q)).replace(st.sigP, pm.module->addWire(NEW_ID, GetSize(st.sigP)));
+ cell->setParam(ID(PREG), State::S1);
+ }
+
+ log(" clock: %s (%s)", log_signal(st.clock), "posedge");
+
+ if (st.ffA2) {
+ log(" ffA2:%s", log_id(st.ffA2));
+ if (st.ffA1)
+ log(" ffA1:%s", log_id(st.ffA1));
+ }
+
+ if (st.ffAD)
+ log(" ffAD:%s", log_id(st.ffAD));
+
+ if (st.ffB2) {
+ log(" ffB2:%s", log_id(st.ffB2));
+ if (st.ffB1)
+ log(" ffB1:%s", log_id(st.ffB1));
+ }
+
+ if (st.ffD)
+ log(" ffD:%s", log_id(st.ffD));
+
+ if (st.ffM)
+ log(" ffM:%s", log_id(st.ffM));
+
+ if (st.ffP)
+ log(" ffP:%s", log_id(st.ffP));
+ }
+ log("\n");
+
+ SigSpec P = st.sigP;
+ if (GetSize(P) < 48)
+ P.append(pm.module->addWire(NEW_ID, 48-GetSize(P)));
+ cell->setPort(ID(P), P);
+
+ pm.blacklist(cell);
+}
+
+void xilinx_dsp_packC(xilinx_dsp_CREG_pm &pm)
+{
+ auto &st = pm.st_xilinx_dsp_packC;
+
+ log_debug("Analysing %s.%s for Xilinx DSP packing (CREG).\n", log_id(pm.module), log_id(st.dsp));
+ log_debug("ffC: %s %s %s\n", log_id(st.ffC, "--"), log_id(st.ffCcemux, "--"), log_id(st.ffCrstmux, "--"));
+
+ Cell *cell = st.dsp;
+
+ if (st.clock != SigBit())
+ {
+ cell->setPort(ID(CLK), st.clock);
+
+ auto f = [&pm,cell](SigSpec &A, Cell* ff, Cell* cemux, bool cepol, IdString ceport, Cell* rstmux, bool rstpol, IdString rstport) {
+ SigSpec D = ff->getPort(ID(D));
+ SigSpec Q = pm.sigmap(ff->getPort(ID(Q)));
+ if (!A.empty())
+ A.replace(Q, D);
+ if (rstmux) {
+ SigSpec Y = rstmux->getPort(ID(Y));
+ SigSpec AB = rstmux->getPort(rstpol ? ID(A) : ID(B));
+ if (!A.empty())
+ A.replace(Y, AB);
+ if (rstport != IdString()) {
+ SigSpec S = rstmux->getPort(ID(S));
+ cell->setPort(rstport, rstpol ? S : pm.module->Not(NEW_ID, S));
+ }
+ }
+ else if (rstport != IdString())
+ cell->setPort(rstport, State::S0);
+ if (cemux) {
+ SigSpec Y = cemux->getPort(ID(Y));
+ SigSpec BA = cemux->getPort(cepol ? ID(B) : ID(A));
+ SigSpec S = cemux->getPort(ID(S));
+ if (!A.empty())
+ A.replace(Y, BA);
+ cell->setPort(ceport, cepol ? S : pm.module->Not(NEW_ID, S));
+ }
+ else
+ cell->setPort(ceport, State::S1);
+
+ for (auto c : Q.chunks()) {
+ auto it = c.wire->attributes.find(ID(init));
+ if (it == c.wire->attributes.end())
+ continue;
+ for (int i = c.offset; i < c.offset+c.width; i++) {
+ log_assert(it->second[i] == State::S0 || it->second[i] == State::Sx);
+ it->second[i] = State::Sx;
+ }
+ }
+ };
+
+ if (st.ffC) {
+ SigSpec C = cell->getPort(ID(C));
+ f(C, st.ffC, st.ffCcemux, st.ffCcepol, ID(CEC), st.ffCrstmux, st.ffCrstpol, ID(RSTC));
+ pm.add_siguser(C, cell);
+ cell->setPort(ID(C), C);
+ cell->setParam(ID(CREG), 1);
+ }
+
+ log(" clock: %s (%s)", log_signal(st.clock), "posedge");
+
+ if (st.ffC)
+ log(" ffC:%s", log_id(st.ffC));
+ log("\n");
+ }
+
+ pm.blacklist(cell);
+}
+
+struct XilinxDspPass : public Pass {
+ XilinxDspPass() : Pass("xilinx_dsp", "Xilinx: pack resources into DSPs") { }
+ void help() YS_OVERRIDE
+ {
+ // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
+ log("\n");
+ log(" xilinx_dsp [options] [selection]\n");
+ log("\n");
+ log("Pack input registers (A2, A1, B2, B1, C, D, AD; with optional enable/reset),\n");
+ log("pipeline registers (M; with optional enable/reset), output registers (P; with\n");
+ log("optional enable/reset), pre-adder and/or post-adder into Xilinx DSP resources.\n");
+ log("\n");
+ log("Multiply-accumulate operations using the post-adder with feedback on the 'C'\n");
+ log("input will be folded into the DSP. In this scenario only, the 'C' input can be\n");
+ log("used to override the current accumulation result with a new value, which will\n");
+ log("be added to the multiplier result to form the next accumulation result.\n");
+ log("\n");
+ log("Use of the dedicated 'PCOUT' -> 'PCIN' cascade path is detected for 'P' -> 'C'\n");
+ log("connections (optionally, where 'P' is right-shifted by 17-bits and used as an\n");
+ log("input to the post-adder -- a pattern common for summing partial products to\n");
+ log("implement wide multipliers). Limited support also exists for similar cascading\n");
+ log("for A and B using '[AB]COUT' -> '[AB]CIN'. Currently, cascade chains are limited\n");
+ log("to a maximum length of 20 cells, corresponding to the smallest Xilinx 7 Series\n");
+ log("device.\n");
+ log("\n");
+ log("\n");
+ log("Experimental feature: addition/subtractions less than 12 or 24 bits with the\n");
+ log("'(* use_dsp=\"simd\" *)' attribute attached to the output wire or attached to\n");
+ log("the add/subtract operator will cause those operations to be implemented using\n");
+ log("the 'SIMD' feature of DSPs.\n");
+ log("\n");
+ log("Experimental feature: the presence of a `$ge' cell attached to the registered\n");
+ log("P output implementing the operation \"(P >= <power-of-2>)\" will be transformed\n");
+ log("into using the DSP48E1's pattern detector feature for overflow detection.\n");
+ log("\n");
+ }
+ void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
+ {
+ log_header(design, "Executing XILINX_DSP pass (pack resources into DSPs).\n");
+
+ size_t argidx;
+ for (argidx = 1; argidx < args.size(); argidx++)
+ {
+ // if (args[argidx] == "-singleton") {
+ // singleton_mode = true;
+ // continue;
+ // }
+ break;
+ }
+ extra_args(args, argidx, design);
+
+ for (auto module : design->selected_modules()) {
+ xilinx_simd_pack(module, module->selected_cells());
+
+ {
+ xilinx_dsp_pm pm(module, module->selected_cells());
+ pm.run_xilinx_dsp_pack(xilinx_dsp_pack);
+ }
+ // Separating out CREG packing is necessary since there
+ // is no guarantee that the cell ordering corresponds
+ // to the "expected" case (i.e. the order in which
+ // they appear in the source) thus the possiblity
+ // existed that a register got packed as CREG into a
+ // downstream DSP that should have otherwise been a
+ // PREG of an upstream DSP that had not been pattern
+ // matched yet
+ {
+ xilinx_dsp_CREG_pm pm(module, module->selected_cells());
+ pm.run_xilinx_dsp_packC(xilinx_dsp_packC);
+ }
+ {
+ xilinx_dsp_cascade_pm pm(module, module->selected_cells());
+ pm.run_xilinx_dsp_cascade();
+ }
+ }
+ }
+} XilinxDspPass;
+
+PRIVATE_NAMESPACE_END
diff --git a/passes/pmgen/xilinx_dsp.pmg b/passes/pmgen/xilinx_dsp.pmg
new file mode 100644
index 000000000..3d0b1f2c3
--- /dev/null
+++ b/passes/pmgen/xilinx_dsp.pmg
@@ -0,0 +1,587 @@
+pattern xilinx_dsp_pack
+
+state <SigBit> clock
+state <SigSpec> sigA sigB sigC sigD sigM sigP
+state <IdString> postAddAB postAddMuxAB
+state <bool> ffA1cepol ffA2cepol ffADcepol ffB1cepol ffB2cepol ffDcepol ffMcepol ffPcepol
+state <bool> ffArstpol ffADrstpol ffBrstpol ffDrstpol ffMrstpol ffPrstpol
+
+state <Cell*> ffAD ffADcemux ffADrstmux ffA1 ffA1cemux ffA1rstmux ffA2 ffA2cemux ffA2rstmux
+state <Cell*> ffB1 ffB1cemux ffB1rstmux ffB2 ffB2cemux ffB2rstmux
+state <Cell*> ffD ffDcemux ffDrstmux ffM ffMcemux ffMrstmux ffP ffPcemux ffPrstmux
+
+// subpattern
+state <SigSpec> argQ argD
+state <bool> ffcepol ffrstpol
+state <int> ffoffset
+udata <SigSpec> dffD dffQ
+udata <SigBit> dffclock
+udata <Cell*> dff dffcemux dffrstmux
+udata <bool> dffcepol dffrstpol
+
+match dsp
+ select dsp->type.in(\DSP48E1)
+endmatch
+
+code sigA sigB sigC sigD sigM clock
+ auto unextend = [](const SigSpec &sig) {
+ int i;
+ for (i = GetSize(sig)-1; i > 0; i--)
+ if (sig[i] != sig[i-1])
+ break;
+ // Do not remove non-const sign bit
+ if (sig[i].wire)
+ ++i;
+ return sig.extract(0, i);
+ };
+ sigA = unextend(port(dsp, \A));
+ sigB = unextend(port(dsp, \B));
+
+ sigC = port(dsp, \C, SigSpec());
+ sigD = port(dsp, \D, SigSpec());
+
+ SigSpec P = port(dsp, \P);
+ if (param(dsp, \USE_MULT, Const("MULTIPLY")).decode_string() == "MULTIPLY") {
+ // Only care about those bits that are used
+ int i;
+ for (i = 0; i < GetSize(P); i++) {
+ if (nusers(P[i]) <= 1)
+ break;
+ sigM.append(P[i]);
+ }
+ log_assert(nusers(P.extract_end(i)) <= 1);
+ }
+ else
+ sigM = P;
+ // This sigM could have no users if downstream $add
+ // is narrower than $mul result, for example
+ if (sigM.empty())
+ reject;
+
+ clock = port(dsp, \CLK, SigBit());
+endcode
+
+code argQ ffAD ffADcemux ffADrstmux ffADcepol ffADrstpol sigA clock
+ if (param(dsp, \ADREG).as_int() == 0) {
+ argQ = sigA;
+ subpattern(in_dffe);
+ if (dff) {
+ ffAD = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffADrstmux = dffrstmux;
+ ffADrstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffADcemux = dffcemux;
+ ffADcepol = dffcepol;
+ }
+ sigA = dffD;
+ }
+ }
+endcode
+
+match preAdd
+ if sigD.empty() || sigD.is_fully_zero()
+ // Ensure that preAdder not already used
+ if param(dsp, \USE_DPORT, Const("FALSE")).decode_string() == "FALSE"
+ if port(dsp, \INMODE, Const(0, 5)).is_fully_zero()
+
+ select preAdd->type.in($add)
+ // Output has to be 25 bits or less
+ select GetSize(port(preAdd, \Y)) <= 25
+ select nusers(port(preAdd, \Y)) == 2
+ choice <IdString> AB {\A, \B}
+ // A port has to be 30 bits or less
+ select GetSize(port(preAdd, AB)) <= 30
+ define <IdString> BA (AB == \A ? \B : \A)
+ // D port has to be 25 bits or less
+ select GetSize(port(preAdd, BA)) <= 25
+ index <SigSpec> port(preAdd, \Y) === sigA
+
+ optional
+endmatch
+
+code sigA sigD
+ if (preAdd) {
+ sigA = port(preAdd, \A);
+ sigD = port(preAdd, \B);
+ if (GetSize(sigA) < GetSize(sigD))
+ std::swap(sigA, sigD);
+ }
+endcode
+
+code argQ ffAD ffADcemux ffADrstmux ffADcepol ffADrstpol sigA clock ffA2 ffA2cemux ffA2rstmux ffA2cepol ffArstpol ffA1 ffA1cemux ffA1rstmux ffA1cepol
+ // Only search for ffA2 if there was a pre-adder
+ // (otherwise ffA2 would have been matched as ffAD)
+ if (preAdd) {
+ if (param(dsp, \AREG).as_int() == 0) {
+ argQ = sigA;
+ subpattern(in_dffe);
+ if (dff) {
+ ffA2 = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffA2rstmux = dffrstmux;
+ ffArstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffA2cepol = dffcepol;
+ ffA2cemux = dffcemux;
+ }
+ sigA = dffD;
+ }
+ }
+ }
+ // And if there wasn't a pre-adder,
+ // move AD register to A
+ else if (ffAD) {
+ log_assert(!ffA2 && !ffA2cemux && !ffA2rstmux);
+ std::swap(ffA2, ffAD);
+ std::swap(ffA2cemux, ffADcemux);
+ std::swap(ffA2rstmux, ffADrstmux);
+ ffA2cepol = ffADcepol;
+ ffArstpol = ffADrstpol;
+ }
+
+ // Now attempt to match A1
+ if (ffA2) {
+ argQ = sigA;
+ subpattern(in_dffe);
+ if (dff) {
+ if ((ffA2rstmux != nullptr) ^ (dffrstmux != nullptr))
+ goto ffA1_end;
+ if (dffrstmux) {
+ if (ffArstpol != dffrstpol)
+ goto ffA1_end;
+ if (port(ffA2rstmux, \S) != port(dffrstmux, \S))
+ goto ffA1_end;
+ ffA1rstmux = dffrstmux;
+ }
+
+ ffA1 = dff;
+ clock = dffclock;
+
+ if (dffcemux) {
+ ffA1cemux = dffcemux;
+ ffA1cepol = dffcepol;
+ }
+ sigA = dffD;
+
+ffA1_end: ;
+ }
+ }
+endcode
+
+code argQ ffB2 ffB2cemux ffB2rstmux ffB2cepol ffBrstpol sigB clock ffB1 ffB1cemux ffB1rstmux ffB1cepol
+ if (param(dsp, \BREG).as_int() == 0) {
+ argQ = sigB;
+ subpattern(in_dffe);
+ if (dff) {
+ ffB2 = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffB2rstmux = dffrstmux;
+ ffBrstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffB2cemux = dffcemux;
+ ffB2cepol = dffcepol;
+ }
+ sigB = dffD;
+
+ // Now attempt to match B1
+ if (ffB2) {
+ argQ = sigB;
+ subpattern(in_dffe);
+ if (dff) {
+ if ((ffB2rstmux != nullptr) ^ (dffrstmux != nullptr))
+ goto ffB1_end;
+ if (dffrstmux) {
+ if (ffBrstpol != dffrstpol)
+ goto ffB1_end;
+ if (port(ffB2rstmux, \S) != port(dffrstmux, \S))
+ goto ffB1_end;
+ ffB1rstmux = dffrstmux;
+ }
+
+ ffB1 = dff;
+ clock = dffclock;
+
+ if (dffcemux) {
+ ffB1cemux = dffcemux;
+ ffB1cepol = dffcepol;
+ }
+ sigB = dffD;
+
+ffB1_end: ;
+ }
+ }
+
+ }
+ }
+endcode
+
+code argQ ffD ffDcemux ffDrstmux ffDcepol ffDrstpol sigD clock
+ if (param(dsp, \DREG).as_int() == 0) {
+ argQ = sigD;
+ subpattern(in_dffe);
+ if (dff) {
+ ffD = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffDrstmux = dffrstmux;
+ ffDrstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffDcemux = dffcemux;
+ ffDcepol = dffcepol;
+ }
+ sigD = dffD;
+ }
+ }
+endcode
+
+code argD ffM ffMcemux ffMrstmux ffMcepol ffMrstpol sigM sigP clock
+ if (param(dsp, \MREG).as_int() == 0 && nusers(sigM) == 2) {
+ argD = sigM;
+ subpattern(out_dffe);
+ if (dff) {
+ ffM = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffMrstmux = dffrstmux;
+ ffMrstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffMcemux = dffcemux;
+ ffMcepol = dffcepol;
+ }
+ sigM = dffQ;
+ }
+ }
+ sigP = sigM;
+endcode
+
+match postAdd
+ // Ensure that Z mux is not already used
+ if port(dsp, \OPMODE, SigSpec()).extract(4,3).is_fully_zero()
+
+ select postAdd->type.in($add)
+ select GetSize(port(postAdd, \Y)) <= 48
+ choice <IdString> AB {\A, \B}
+ select nusers(port(postAdd, AB)) <= 3
+ filter ffMcemux || nusers(port(postAdd, AB)) == 2
+ filter !ffMcemux || nusers(port(postAdd, AB)) == 3
+
+ index <SigBit> port(postAdd, AB)[0] === sigP[0]
+ filter GetSize(port(postAdd, AB)) >= GetSize(sigP)
+ filter port(postAdd, AB).extract(0, GetSize(sigP)) == sigP
+ filter port(postAdd, AB).extract_end(GetSize(sigP)) == SigSpec(sigP[GetSize(sigP)-1], GetSize(port(postAdd, AB))-GetSize(sigP))
+ set postAddAB AB
+ optional
+endmatch
+
+code sigC sigP
+ if (postAdd) {
+ sigC = port(postAdd, postAddAB == \A ? \B : \A);
+ sigP = port(postAdd, \Y);
+ }
+endcode
+
+code argD ffP ffPcemux ffPrstmux ffPcepol ffPrstpol sigP clock
+ if (param(dsp, \PREG).as_int() == 0) {
+ int users = 2;
+ // If ffMcemux and no postAdd new-value net must have three users: ffMcemux, ffM and ffPcemux
+ if (ffMcemux && !postAdd) users++;
+ if (nusers(sigP) == users) {
+ argD = sigP;
+ subpattern(out_dffe);
+ if (dff) {
+ ffP = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffPrstmux = dffrstmux;
+ ffPrstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffPcemux = dffcemux;
+ ffPcepol = dffcepol;
+ }
+ sigP = dffQ;
+ }
+ }
+ }
+endcode
+
+match postAddMux
+ if postAdd
+ if ffP
+ select postAddMux->type.in($mux)
+ select nusers(port(postAddMux, \Y)) == 2
+ choice <IdString> AB {\A, \B}
+ index <SigSpec> port(postAddMux, AB) === sigP
+ index <SigSpec> port(postAddMux, \Y) === sigC
+ set postAddMuxAB AB
+ optional
+endmatch
+
+code sigC
+ if (postAddMux)
+ sigC = port(postAddMux, postAddMuxAB == \A ? \B : \A);
+endcode
+
+match overflow
+ if ffP
+ if param(dsp, \USE_PATTERN_DETECT, Const("NO_PATDET")).decode_string() == "NO_PATDET"
+ select overflow->type.in($ge)
+ select GetSize(port(overflow, \Y)) <= 48
+ select port(overflow, \B).is_fully_const()
+ define <Const> B port(overflow, \B).as_const()
+ select std::count(B.bits.begin(), B.bits.end(), State::S1) == 1
+ index <SigSpec> port(overflow, \A) === sigP
+ optional
+endmatch
+
+code
+ accept;
+endcode
+
+// #######################
+
+subpattern in_dffe
+arg argD argQ clock
+
+code
+ dff = nullptr;
+ for (auto c : argQ.chunks()) {
+ if (!c.wire)
+ reject;
+ if (c.wire->get_bool_attribute(\keep))
+ reject;
+ Const init = c.wire->attributes.at(\init, State::Sx);
+ if (!init.is_fully_undef() && !init.is_fully_zero())
+ reject;
+ }
+endcode
+
+match ff
+ select ff->type.in($dff)
+ // DSP48E1 does not support clock inversion
+ select param(ff, \CLK_POLARITY).as_bool()
+
+ slice offset GetSize(port(ff, \D))
+ index <SigBit> port(ff, \Q)[offset] === argQ[0]
+
+ // Check that the rest of argQ is present
+ filter GetSize(port(ff, \Q)) >= offset + GetSize(argQ)
+ filter port(ff, \Q).extract(offset, GetSize(argQ)) == argQ
+
+ set ffoffset offset
+endmatch
+
+code argQ argD
+{
+ if (clock != SigBit() && port(ff, \CLK) != clock)
+ reject;
+
+ SigSpec Q = port(ff, \Q);
+ dff = ff;
+ dffclock = port(ff, \CLK);
+ dffD = argQ;
+ argD = port(ff, \D);
+ argQ = Q;
+ dffD.replace(argQ, argD);
+ // Only search for ffrstmux if dffD only
+ // has two (ff, ffrstmux) users
+ if (nusers(dffD) > 2)
+ argD = SigSpec();
+}
+endcode
+
+match ffrstmux
+ if !argD.empty()
+ select ffrstmux->type.in($mux)
+ index <SigSpec> port(ffrstmux, \Y) === argD
+
+ choice <IdString> BA {\B, \A}
+ // DSP48E1 only supports reset to zero
+ select port(ffrstmux, BA).is_fully_zero()
+
+ define <bool> pol (BA == \B)
+ set ffrstpol pol
+ semioptional
+endmatch
+
+code argD
+ if (ffrstmux) {
+ dffrstmux = ffrstmux;
+ dffrstpol = ffrstpol;
+ argD = port(ffrstmux, ffrstpol ? \A : \B);
+ dffD.replace(port(ffrstmux, \Y), argD);
+
+ // Only search for ffcemux if argQ has at
+ // least 3 users (ff, <upstream>, ffrstmux) and
+ // dffD only has two (ff, ffrstmux)
+ if (!(nusers(argQ) >= 3 && nusers(dffD) == 2))
+ argD = SigSpec();
+ }
+ else
+ dffrstmux = nullptr;
+endcode
+
+match ffcemux
+ if !argD.empty()
+ select ffcemux->type.in($mux)
+ index <SigSpec> port(ffcemux, \Y) === argD
+ choice <IdString> AB {\A, \B}
+ index <SigSpec> port(ffcemux, AB) === argQ
+ define <bool> pol (AB == \A)
+ set ffcepol pol
+ semioptional
+endmatch
+
+code argD
+ if (ffcemux) {
+ dffcemux = ffcemux;
+ dffcepol = ffcepol;
+ argD = port(ffcemux, ffcepol ? \B : \A);
+ dffD.replace(port(ffcemux, \Y), argD);
+ }
+ else
+ dffcemux = nullptr;
+endcode
+
+// #######################
+
+subpattern out_dffe
+arg argD argQ clock
+
+code
+ dff = nullptr;
+ for (auto c : argD.chunks())
+ if (c.wire->get_bool_attribute(\keep))
+ reject;
+endcode
+
+match ffcemux
+ select ffcemux->type.in($mux)
+ // ffcemux output must have two users: ffcemux and ff.D
+ select nusers(port(ffcemux, \Y)) == 2
+
+ choice <IdString> AB {\A, \B}
+ // keep-last-value net must have at least three users: ffcemux, ff, downstream sink(s)
+ select nusers(port(ffcemux, AB)) >= 3
+
+ slice offset GetSize(port(ffcemux, \Y))
+ define <IdString> BA (AB == \A ? \B : \A)
+ index <SigBit> port(ffcemux, BA)[offset] === argD[0]
+
+ // Check that the rest of argD is present
+ filter GetSize(port(ffcemux, BA)) >= offset + GetSize(argD)
+ filter port(ffcemux, BA).extract(offset, GetSize(argD)) == argD
+
+ set ffoffset offset
+ define <bool> pol (AB == \A)
+ set ffcepol pol
+
+ semioptional
+endmatch
+
+code argD argQ
+ dffcemux = ffcemux;
+ if (ffcemux) {
+ SigSpec BA = port(ffcemux, ffcepol ? \B : \A);
+ SigSpec Y = port(ffcemux, \Y);
+ argQ = argD;
+ argD.replace(BA, Y);
+ argQ.replace(BA, port(ffcemux, ffcepol ? \A : \B));
+
+ dffcemux = ffcemux;
+ dffcepol = ffcepol;
+ }
+endcode
+
+match ffrstmux
+ select ffrstmux->type.in($mux)
+ // ffrstmux output must have two users: ffrstmux and ff.D
+ select nusers(port(ffrstmux, \Y)) == 2
+
+ choice <IdString> BA {\B, \A}
+ // DSP48E1 only supports reset to zero
+ select port(ffrstmux, BA).is_fully_zero()
+
+ slice offset GetSize(port(ffrstmux, \Y))
+ define <IdString> AB (BA == \B ? \A : \B)
+ index <SigBit> port(ffrstmux, AB)[offset] === argD[0]
+
+ // Check that offset is consistent
+ filter !ffcemux || ffoffset == offset
+ // Check that the rest of argD is present
+ filter GetSize(port(ffrstmux, AB)) >= offset + GetSize(argD)
+ filter port(ffrstmux, AB).extract(offset, GetSize(argD)) == argD
+
+ set ffoffset offset
+ define <bool> pol (AB == \A)
+ set ffrstpol pol
+
+ semioptional
+endmatch
+
+code argD argQ
+ dffrstmux = ffrstmux;
+ if (ffrstmux) {
+ SigSpec AB = port(ffrstmux, ffrstpol ? \A : \B);
+ SigSpec Y = port(ffrstmux, \Y);
+ argD.replace(AB, Y);
+
+ dffrstmux = ffrstmux;
+ dffrstpol = ffrstpol;
+ }
+endcode
+
+match ff
+ select ff->type.in($dff)
+ // DSP48E1 does not support clock inversion
+ select param(ff, \CLK_POLARITY).as_bool()
+
+ slice offset GetSize(port(ff, \D))
+ index <SigBit> port(ff, \D)[offset] === argD[0]
+
+ // Check that offset is consistent
+ filter (!ffcemux && !ffrstmux) || ffoffset == offset
+ // Check that the rest of argD is present
+ filter GetSize(port(ff, \D)) >= offset + GetSize(argD)
+ filter port(ff, \D).extract(offset, GetSize(argD)) == argD
+ // Check that FF.Q is connected to CE-mux
+ filter !ffcemux || port(ff, \Q).extract(offset, GetSize(argQ)) == argQ
+
+ set ffoffset offset
+endmatch
+
+code argQ
+ if (ff) {
+ if (clock != SigBit() && port(ff, \CLK) != clock)
+ reject;
+
+ SigSpec D = port(ff, \D);
+ SigSpec Q = port(ff, \Q);
+ if (!ffcemux) {
+ argQ = argD;
+ argQ.replace(D, Q);
+ }
+
+ for (auto c : argQ.chunks()) {
+ Const init = c.wire->attributes.at(\init, State::Sx);
+ if (!init.is_fully_undef() && !init.is_fully_zero())
+ reject;
+ }
+
+ dff = ff;
+ dffQ = argQ;
+ dffclock = port(ff, \CLK);
+ }
+ // No enable/reset mux possible without flop
+ else if (dffcemux || dffrstmux)
+ reject;
+endcode
diff --git a/passes/pmgen/xilinx_dsp_CREG.pmg b/passes/pmgen/xilinx_dsp_CREG.pmg
new file mode 100644
index 000000000..a31dc80bf
--- /dev/null
+++ b/passes/pmgen/xilinx_dsp_CREG.pmg
@@ -0,0 +1,181 @@
+pattern xilinx_dsp_packC
+
+udata <std::function<SigSpec(const SigSpec&)>> unextend
+state <SigBit> clock
+state <SigSpec> sigC sigP
+state <bool> ffCcepol ffCrstpol
+state <Cell*> ffC ffCcemux ffCrstmux
+
+// subpattern
+state <SigSpec> argQ argD
+state <bool> ffcepol ffrstpol
+state <int> ffoffset
+udata <SigSpec> dffD dffQ
+udata <SigBit> dffclock
+udata <Cell*> dff dffcemux dffrstmux
+udata <bool> dffcepol dffrstpol
+
+match dsp
+ select dsp->type.in(\DSP48E1)
+ select param(dsp, \CREG, 1).as_int() == 0
+ select nusers(port(dsp, \C, SigSpec())) > 1
+endmatch
+
+code argQ ffC ffCcemux ffCrstmux ffCcepol ffCrstpol sigC sigP clock
+ unextend = [](const SigSpec &sig) {
+ int i;
+ for (i = GetSize(sig)-1; i > 0; i--)
+ if (sig[i] != sig[i-1])
+ break;
+ // Do not remove non-const sign bit
+ if (sig[i].wire)
+ ++i;
+ return sig.extract(0, i);
+ };
+ sigC = unextend(port(dsp, \C, SigSpec()));
+
+ SigSpec P = port(dsp, \P);
+ if (param(dsp, \USE_MULT, Const("MULTIPLY")).decode_string() == "MULTIPLY") {
+ // Only care about those bits that are used
+ int i;
+ for (i = 0; i < GetSize(P); i++) {
+ if (nusers(P[i]) <= 1)
+ break;
+ sigP.append(P[i]);
+ }
+ log_assert(nusers(P.extract_end(i)) <= 1);
+ }
+ else
+ sigP = P;
+
+ if (sigC == sigP)
+ reject;
+
+ clock = port(dsp, \CLK, SigBit());
+
+ argQ = sigC;
+ subpattern(in_dffe);
+ if (dff) {
+ ffC = dff;
+ clock = dffclock;
+ if (dffrstmux) {
+ ffCrstmux = dffrstmux;
+ ffCrstpol = dffrstpol;
+ }
+ if (dffcemux) {
+ ffCcemux = dffcemux;
+ ffCcepol = dffcepol;
+ }
+ sigC = dffD;
+ }
+endcode
+
+code
+ if (ffC)
+ accept;
+endcode
+
+// #######################
+
+subpattern in_dffe
+arg argD argQ clock
+
+code
+ dff = nullptr;
+ for (auto c : argQ.chunks()) {
+ if (!c.wire)
+ reject;
+ if (c.wire->get_bool_attribute(\keep))
+ reject;
+ Const init = c.wire->attributes.at(\init, State::Sx);
+ if (!init.is_fully_undef() && !init.is_fully_zero())
+ reject;
+ }
+endcode
+
+match ff
+ select ff->type.in($dff)
+ // DSP48E1 does not support clock inversion
+ select param(ff, \CLK_POLARITY).as_bool()
+
+ slice offset GetSize(port(ff, \D))
+ index <SigBit> port(ff, \Q)[offset] === argQ[0]
+
+ // Check that the rest of argQ is present
+ filter GetSize(port(ff, \Q)) >= offset + GetSize(argQ)
+ filter port(ff, \Q).extract(offset, GetSize(argQ)) == argQ
+
+ set ffoffset offset
+endmatch
+
+code argQ argD
+{
+ if (clock != SigBit() && port(ff, \CLK) != clock)
+ reject;
+
+ SigSpec Q = port(ff, \Q);
+ dff = ff;
+ dffclock = port(ff, \CLK);
+ dffD = argQ;
+ argD = port(ff, \D);
+ argQ = Q;
+ dffD.replace(argQ, argD);
+ // Only search for ffrstmux if dffD only
+ // has two (ff, ffrstmux) users
+ if (nusers(dffD) > 2)
+ argD = SigSpec();
+}
+endcode
+
+match ffrstmux
+ if !argD.empty()
+ select ffrstmux->type.in($mux)
+ index <SigSpec> port(ffrstmux, \Y) === argD
+
+ choice <IdString> BA {\B, \A}
+ // DSP48E1 only supports reset to zero
+ select port(ffrstmux, BA).is_fully_zero()
+
+ define <bool> pol (BA == \B)
+ set ffrstpol pol
+ semioptional
+endmatch
+
+code argD
+ if (ffrstmux) {
+ dffrstmux = ffrstmux;
+ dffrstpol = ffrstpol;
+ argD = port(ffrstmux, ffrstpol ? \A : \B);
+ dffD.replace(port(ffrstmux, \Y), argD);
+
+ // Only search for ffcemux if argQ has at
+ // least 3 users (ff, <upstream>, ffrstmux) and
+ // dffD only has two (ff, ffrstmux)
+ if (!(nusers(argQ) >= 3 && nusers(dffD) == 2))
+ argD = SigSpec();
+ }
+ else
+ dffrstmux = nullptr;
+endcode
+
+match ffcemux
+ if !argD.empty()
+ select ffcemux->type.in($mux)
+ index <SigSpec> port(ffcemux, \Y) === argD
+ choice <IdString> AB {\A, \B}
+ index <SigSpec> port(ffcemux, AB) === argQ
+ define <bool> pol (AB == \A)
+ set ffcepol pol
+ semioptional
+endmatch
+
+code argD
+ if (ffcemux) {
+ dffcemux = ffcemux;
+ dffcepol = ffcepol;
+ argD = port(ffcemux, ffcepol ? \B : \A);
+ dffD.replace(port(ffcemux, \Y), argD);
+ }
+ else
+ dffcemux = nullptr;
+endcode
diff --git a/passes/pmgen/xilinx_dsp_cascade.pmg b/passes/pmgen/xilinx_dsp_cascade.pmg
new file mode 100644
index 000000000..6f4ac5849
--- /dev/null
+++ b/passes/pmgen/xilinx_dsp_cascade.pmg
@@ -0,0 +1,336 @@
+pattern xilinx_dsp_cascade
+
+udata <std::function<SigSpec(const SigSpec&)>> unextend
+udata <vector<std::tuple<Cell*,int,int,int>>> chain longest_chain
+state <Cell*> next
+state <SigSpec> clock
+state <int> AREG BREG
+
+// subpattern
+state <SigSpec> argQ argD
+state <bool> ffcepol ffrstpol
+state <int> ffoffset
+udata <SigSpec> dffD dffQ
+udata <SigBit> dffclock
+udata <Cell*> dff dffcemux dffrstmux
+udata <bool> dffcepol dffrstpol
+
+code
+#define MAX_DSP_CASCADE 20
+endcode
+
+match first
+ select first->type.in(\DSP48E1)
+ select port(first, \OPMODE, Const(0, 7)).extract(4,3) == Const::from_string("000")
+ select nusers(port(first, \PCOUT, SigSpec())) <= 1
+endmatch
+
+code
+ longest_chain.clear();
+ chain.emplace_back(first, -1, -1, -1);
+ subpattern(tail);
+finally
+ chain.pop_back();
+ log_assert(chain.empty());
+ if (GetSize(longest_chain) > 1) {
+ Cell *dsp = std::get<0>(longest_chain.front());
+
+ Cell *dsp_pcin;
+ int P, AREG, BREG;
+ for (int i = 1; i < GetSize(longest_chain); i++) {
+ std::tie(dsp_pcin,P,AREG,BREG) = longest_chain[i];
+
+ if (i % MAX_DSP_CASCADE > 0) {
+ if (P >= 0) {
+ Wire *cascade = module->addWire(NEW_ID, 48);
+ dsp_pcin->setPort(ID(C), Const(0, 48));
+ dsp_pcin->setPort(ID(PCIN), cascade);
+ dsp->setPort(ID(PCOUT), cascade);
+ add_siguser(cascade, dsp_pcin);
+ add_siguser(cascade, dsp);
+
+ SigSpec opmode = port(dsp_pcin, \OPMODE, Const(0, 7));
+ if (P == 17)
+ opmode[6] = State::S1;
+ else if (P == 0)
+ opmode[6] = State::S0;
+ else log_abort();
+
+ opmode[5] = State::S0;
+ opmode[4] = State::S1;
+ dsp_pcin->setPort(\OPMODE, opmode);
+
+ log_debug("PCOUT -> PCIN cascade for %s -> %s\n", log_id(dsp), log_id(dsp_pcin));
+ }
+ if (AREG >= 0) {
+ Wire *cascade = module->addWire(NEW_ID, 30);
+ dsp_pcin->setPort(ID(A), Const(0, 30));
+ dsp_pcin->setPort(ID(ACIN), cascade);
+ dsp->setPort(ID(ACOUT), cascade);
+ add_siguser(cascade, dsp_pcin);
+ add_siguser(cascade, dsp);
+
+ dsp->setParam(ID(ACASCREG), AREG);
+ dsp_pcin->setParam(ID(A_INPUT), Const("CASCADE"));
+
+ log_debug("ACOUT -> ACIN cascade for %s -> %s\n", log_id(dsp), log_id(dsp_pcin));
+ }
+ if (BREG >= 0) {
+ Wire *cascade = module->addWire(NEW_ID, 18);
+ dsp_pcin->setPort(ID(B), Const(0, 18));
+ dsp_pcin->setPort(ID(BCIN), cascade);
+ dsp->setPort(ID(BCOUT), cascade);
+ add_siguser(cascade, dsp_pcin);
+ add_siguser(cascade, dsp);
+
+ dsp->setParam(ID(BCASCREG), BREG);
+ dsp_pcin->setParam(ID(B_INPUT), Const("CASCADE"));
+
+ log_debug("BCOUT -> BCIN cascade for %s -> %s\n", log_id(dsp), log_id(dsp_pcin));
+ }
+ }
+ else {
+ log_debug(" Blocking %s -> %s cascade (exceeds max: %d)\n", log_id(dsp), log_id(dsp_pcin), MAX_DSP_CASCADE);
+ }
+
+ dsp = dsp_pcin;
+ }
+
+ accept;
+ }
+endcode
+
+// ------------------------------------------------------------------
+
+subpattern tail
+arg first
+arg next
+
+match nextP
+ select nextP->type.in(\DSP48E1)
+ select !param(nextP, \CREG, State::S1).as_bool()
+ select port(nextP, \OPMODE, Const(0, 7)).extract(4,3) == Const::from_string("011")
+ select nusers(port(nextP, \C, SigSpec())) > 1
+ select nusers(port(nextP, \PCIN, SigSpec())) == 0
+ index <SigBit> port(nextP, \C)[0] === port(std::get<0>(chain.back()), \P)[0]
+ semioptional
+endmatch
+
+match nextP_shift17
+ if !nextP
+ select nextP_shift17->type.in(\DSP48E1)
+ select !param(nextP_shift17, \CREG, State::S1).as_bool()
+ select port(nextP_shift17, \OPMODE, Const(0, 7)).extract(4,3) == Const::from_string("011")
+ select nusers(port(nextP_shift17, \C, SigSpec())) > 1
+ select nusers(port(nextP_shift17, \PCIN, SigSpec())) == 0
+ index <SigBit> port(nextP_shift17, \C)[0] === port(std::get<0>(chain.back()), \P)[17]
+ semioptional
+endmatch
+
+code next
+ next = nextP;
+ if (!nextP)
+ next = nextP_shift17;
+ if (next) {
+ unextend = [](const SigSpec &sig) {
+ int i;
+ for (i = GetSize(sig)-1; i > 0; i--)
+ if (sig[i] != sig[i-1])
+ break;
+ // Do not remove non-const sign bit
+ if (sig[i].wire)
+ ++i;
+ return sig.extract(0, i);
+ };
+ }
+endcode
+
+code argQ clock AREG
+ AREG = -1;
+ if (next) {
+ Cell *prev = std::get<0>(chain.back());
+ if (param(prev, \AREG, 2).as_int() > 0 &&
+ param(next, \AREG, 2).as_int() > 0 &&
+ param(next, \A_INPUT, Const("DIRECT")).decode_string() == "DIRECT" &&
+ port(next, \ACIN, SigSpec()).is_fully_zero() &&
+ nusers(port(prev, \ACOUT, SigSpec())) <= 1) {
+ argQ = unextend(port(next, \A));
+ clock = port(prev, \CLK);
+ subpattern(in_dffe);
+ if (dff) {
+ if (!dffrstmux && port(prev, \RSTA, State::S0) != State::S0)
+ goto reject_AREG;
+ if (dffrstmux && port(dffrstmux, \S) != port(prev, \RSTA, State::S0))
+ goto reject_AREG;
+ if (!dffcemux && port(prev, \CEA2, State::S0) != State::S0)
+ goto reject_AREG;
+ if (dffcemux && port(dffcemux, \S) != port(prev, \CEA2, State::S0))
+ goto reject_AREG;
+ if (dffD == unextend(port(prev, \A)))
+ AREG = 1;
+reject_AREG: ;
+ }
+ }
+ }
+endcode
+
+code argQ clock BREG
+ BREG = -1;
+ if (next) {
+ Cell *prev = std::get<0>(chain.back());
+ if (param(prev, \BREG, 2).as_int() > 0 &&
+ param(next, \BREG, 2).as_int() > 0 &&
+ param(next, \B_INPUT, Const("DIRECT")).decode_string() == "DIRECT" &&
+ port(next, \BCIN, SigSpec()).is_fully_zero() &&
+ nusers(port(prev, \BCOUT, SigSpec())) <= 1) {
+ argQ = unextend(port(next, \B));
+ clock = port(prev, \CLK);
+ subpattern(in_dffe);
+ if (dff) {
+ if (!dffrstmux && port(prev, \RSTB, State::S0) != State::S0)
+ goto reject_BREG;
+ if (dffrstmux && port(dffrstmux, \S) != port(prev, \RSTB, State::S0))
+ goto reject_BREG;
+ if (!dffcemux && port(prev, \CEB2, State::S0) != State::S0)
+ goto reject_BREG;
+ if (dffcemux && port(dffcemux, \S) != port(prev, \CEB2, State::S0))
+ goto reject_BREG;
+ if (dffD == unextend(port(prev, \B)))
+ BREG = 1;
+reject_BREG: ;
+ }
+ }
+ }
+endcode
+
+code
+ if (next) {
+ chain.emplace_back(next, nextP_shift17 ? 17 : nextP ? 0 : -1, AREG, BREG);
+
+ SigSpec sigC = unextend(port(next, \C));
+
+ // TODO: Cannot use 'reject' since semioptional
+ if (nextP_shift17) {
+ if (GetSize(sigC)+17 <= GetSize(port(std::get<0>(chain.back()), \P)) &&
+ port(std::get<0>(chain.back()), \P).extract(17, GetSize(sigC)) != sigC)
+ subpattern(tail);
+ }
+ else {
+ if (GetSize(sigC) <= GetSize(port(std::get<0>(chain.back()), \P)) &&
+ port(std::get<0>(chain.back()), \P).extract(0, GetSize(sigC)) != sigC)
+ subpattern(tail);
+
+ }
+ } else {
+ if (GetSize(chain) > GetSize(longest_chain))
+ longest_chain = chain;
+ }
+finally
+ if (next)
+ chain.pop_back();
+endcode
+
+// #######################
+
+subpattern in_dffe
+arg argD argQ clock
+
+code
+ dff = nullptr;
+ for (auto c : argQ.chunks()) {
+ if (!c.wire)
+ reject;
+ if (c.wire->get_bool_attribute(\keep))
+ reject;
+ Const init = c.wire->attributes.at(\init, State::Sx);
+ if (!init.is_fully_undef() && !init.is_fully_zero())
+ reject;
+ }
+endcode
+
+match ff
+ select ff->type.in($dff)
+ // DSP48E1 does not support clock inversion
+ select param(ff, \CLK_POLARITY).as_bool()
+
+ slice offset GetSize(port(ff, \D))
+ index <SigBit> port(ff, \Q)[offset] === argQ[0]
+
+ // Check that the rest of argQ is present
+ filter GetSize(port(ff, \Q)) >= offset + GetSize(argQ)
+ filter port(ff, \Q).extract(offset, GetSize(argQ)) == argQ
+
+ set ffoffset offset
+endmatch
+
+code argQ argD
+{
+ if (clock != SigBit() && port(ff, \CLK) != clock)
+ reject;
+
+ SigSpec Q = port(ff, \Q);
+ dff = ff;
+ dffclock = port(ff, \CLK);
+ dffD = argQ;
+ argD = port(ff, \D);
+ argQ = Q;
+ dffD.replace(argQ, argD);
+ // Only search for ffrstmux if dffD only
+ // has two (ff, ffrstmux) users
+ if (nusers(dffD) > 2)
+ argD = SigSpec();
+}
+endcode
+
+match ffrstmux
+ if !argD.empty()
+ select ffrstmux->type.in($mux)
+ index <SigSpec> port(ffrstmux, \Y) === argD
+
+ choice <IdString> BA {\B, \A}
+ // DSP48E1 only supports reset to zero
+ select port(ffrstmux, BA).is_fully_zero()
+
+ define <bool> pol (BA == \B)
+ set ffrstpol pol
+ semioptional
+endmatch
+
+code argD
+ if (ffrstmux) {
+ dffrstmux = ffrstmux;
+ dffrstpol = ffrstpol;
+ argD = port(ffrstmux, ffrstpol ? \A : \B);
+ dffD.replace(port(ffrstmux, \Y), argD);
+
+ // Only search for ffcemux if argQ has at
+ // least 3 users (ff, <upstream>, ffrstmux) and
+ // dffD only has two (ff, ffrstmux)
+ if (!(nusers(argQ) >= 3 && nusers(dffD) == 2))
+ argD = SigSpec();
+ }
+ else
+ dffrstmux = nullptr;
+endcode
+
+match ffcemux
+ if !argD.empty()
+ select ffcemux->type.in($mux)
+ index <SigSpec> port(ffcemux, \Y) === argD
+ choice <IdString> AB {\A, \B}
+ index <SigSpec> port(ffcemux, AB) === argQ
+ define <bool> pol (AB == \A)
+ set ffcepol pol
+ semioptional
+endmatch
+
+code argD
+ if (ffcemux) {
+ dffcemux = ffcemux;
+ dffcepol = ffcepol;
+ argD = port(ffcemux, ffcepol ? \B : \A);
+ dffD.replace(port(ffcemux, \Y), argD);
+ }
+ else
+ dffcemux = nullptr;
+endcode
diff --git a/passes/pmgen/xilinx_srl.pmg b/passes/pmgen/xilinx_srl.pmg
index b18119b87..535b3dfdc 100644
--- a/passes/pmgen/xilinx_srl.pmg
+++ b/passes/pmgen/xilinx_srl.pmg
@@ -13,9 +13,9 @@ endcode
match first
select first->type.in($_DFF_N_, $_DFF_P_, $_DFFE_NN_, $_DFFE_NP_, $_DFFE_PN_, $_DFFE_PP_, \FDRE, \FDRE_1)
select !first->has_keep_attr()
- select !first->type.in(\FDRE) || !first->parameters.at(\IS_R_INVERTED, State::S0).as_bool()
- select !first->type.in(\FDRE) || !first->parameters.at(\IS_D_INVERTED, State::S0).as_bool()
- select !first->type.in(\FDRE, \FDRE_1) || first->connections_.at(\R, State::S0).is_fully_zero()
+ select !first->type.in(\FDRE) || !param(first, \IS_R_INVERTED, State::S0).as_bool()
+ select !first->type.in(\FDRE) || !param(first, \IS_D_INVERTED, State::S0).as_bool()
+ select !first->type.in(\FDRE, \FDRE_1) || port(first, \R, State::S0).is_fully_zero()
filter !non_first_cells.count(first)
generate
SigSpec C = module->addWire(NEW_ID);
@@ -84,9 +84,9 @@ arg en_port
match first
select first->type.in($_DFF_N_, $_DFF_P_, $_DFFE_NN_, $_DFFE_NP_, $_DFFE_PN_, $_DFFE_PP_, \FDRE, \FDRE_1)
select !first->has_keep_attr()
- select !first->type.in(\FDRE) || !first->parameters.at(\IS_R_INVERTED, State::S0).as_bool()
- select !first->type.in(\FDRE) || !first->parameters.at(\IS_D_INVERTED, State::S0).as_bool()
- select !first->type.in(\FDRE, \FDRE_1) || first->connections_.at(\R, State::S0).is_fully_zero()
+ select !first->type.in(\FDRE) || !param(first, \IS_R_INVERTED, State::S0).as_bool()
+ select !first->type.in(\FDRE) || !param(first, \IS_D_INVERTED, State::S0).as_bool()
+ select !first->type.in(\FDRE, \FDRE_1) || port(first, \R, State::S0).is_fully_zero()
endmatch
code clk_port en_port
@@ -111,10 +111,10 @@ match next
index <SigBit> port(next, \Q) === port(first, \D)
filter port(next, clk_port) == port(first, clk_port)
filter en_port == IdString() || port(next, en_port) == port(first, en_port)
- filter !first->type.in(\FDRE) || next->parameters.at(\IS_C_INVERTED, State::S0).as_bool() == first->parameters.at(\IS_C_INVERTED, State::S0).as_bool()
- filter !first->type.in(\FDRE) || next->parameters.at(\IS_D_INVERTED, State::S0).as_bool() == first->parameters.at(\IS_D_INVERTED, State::S0).as_bool()
- filter !first->type.in(\FDRE) || next->parameters.at(\IS_R_INVERTED, State::S0).as_bool() == first->parameters.at(\IS_R_INVERTED, State::S0).as_bool()
- filter !first->type.in(\FDRE, \FDRE_1) || next->connections_.at(\R, State::S0).is_fully_zero()
+ filter !first->type.in(\FDRE) || param(next, \IS_C_INVERTED, State::S0).as_bool() == param(first, \IS_C_INVERTED, State::S0).as_bool()
+ filter !first->type.in(\FDRE) || param(next, \IS_D_INVERTED, State::S0).as_bool() == param(first, \IS_D_INVERTED, State::S0).as_bool()
+ filter !first->type.in(\FDRE) || param(next, \IS_R_INVERTED, State::S0).as_bool() == param(first, \IS_R_INVERTED, State::S0).as_bool()
+ filter !first->type.in(\FDRE, \FDRE_1) || port(next, \R, State::S0).is_fully_zero()
endmatch
code
@@ -138,10 +138,10 @@ match next
index <SigBit> port(next, \Q) === port(chain.back(), \D)
filter port(next, clk_port) == port(first, clk_port)
filter en_port == IdString() || port(next, en_port) == port(first, en_port)
- filter !first->type.in(\FDRE) || next->parameters.at(\IS_C_INVERTED, State::S0).as_bool() == first->parameters.at(\IS_C_INVERTED, State::S0).as_bool()
- filter !first->type.in(\FDRE) || next->parameters.at(\IS_D_INVERTED, State::S0).as_bool() == first->parameters.at(\IS_D_INVERTED, State::S0).as_bool()
- filter !first->type.in(\FDRE) || next->parameters.at(\IS_R_INVERTED, State::S0).as_bool() == first->parameters.at(\IS_R_INVERTED, State::S0).as_bool()
- filter !first->type.in(\FDRE, \FDRE_1) || next->connections_.at(\R, State::S0).is_fully_zero()
+ filter !first->type.in(\FDRE) || param(next, \IS_C_INVERTED, State::S0).as_bool() == param(first, \IS_C_INVERTED, State::S0).as_bool()
+ filter !first->type.in(\FDRE) || param(next, \IS_D_INVERTED, State::S0).as_bool() == param(first, \IS_D_INVERTED, State::S0).as_bool()
+ filter !first->type.in(\FDRE) || param(next, \IS_R_INVERTED, State::S0).as_bool() == param(first, \IS_R_INVERTED, State::S0).as_bool()
+ filter !first->type.in(\FDRE, \FDRE_1) || port(next, \R, State::S0).is_fully_zero()
generate
Cell *cell = module->addCell(NEW_ID, chain.back()->type);
cell->setPort(\C, chain.back()->getPort(\C));
@@ -149,7 +149,7 @@ generate
cell->setPort(\Q, chain.back()->getPort(\D));
if (cell->type == \FDRE) {
if (rng(2) == 0)
- cell->setPort(\R, chain.back()->connections_.at(\R, State::S0));
+ cell->setPort(\R, port(chain.back(), \R, State::S0));
cell->setPort(\CE, chain.back()->getPort(\CE));
}
else if (cell->type.begins_with("$_DFFE_"))
diff --git a/passes/sat/async2sync.cc b/passes/sat/async2sync.cc
index 24ae6e448..740248545 100644
--- a/passes/sat/async2sync.cc
+++ b/passes/sat/async2sync.cc
@@ -198,6 +198,7 @@ struct Async2syncPass : public Pass {
module->addMux(NEW_ID, sig_d, new_q, sig_en, sig_q);
}
+ cell->setPort("\\D", sig_q);
cell->setPort("\\Q", new_q);
cell->unsetPort("\\EN");
cell->unsetParam("\\EN_POLARITY");
diff --git a/passes/techmap/Makefile.inc b/passes/techmap/Makefile.inc
index 631a80aa5..cd357d72a 100644
--- a/passes/techmap/Makefile.inc
+++ b/passes/techmap/Makefile.inc
@@ -40,6 +40,7 @@ OBJS += passes/techmap/attrmap.o
OBJS += passes/techmap/zinit.o
OBJS += passes/techmap/dff2dffs.o
OBJS += passes/techmap/flowmap.o
+OBJS += passes/techmap/extractinv.o
endif
GENFILES += passes/techmap/techmap.inc
diff --git a/passes/techmap/abc9.cc b/passes/techmap/abc9.cc
index 6fdf987f0..09d6e9670 100644
--- a/passes/techmap/abc9.cc
+++ b/passes/techmap/abc9.cc
@@ -76,8 +76,7 @@ inline std::string remap_name(RTLIL::IdString abc_name)
return stringf("$abc$%d$%s", map_autoidx, abc_name.c_str()+1);
}
-void handle_loops(RTLIL::Design *design,
- const dict<IdString,pool<IdString>> &scc_break_inputs)
+void handle_loops(RTLIL::Design *design)
{
Pass::call(design, "scc -set_attr abc_scc_id {}");
@@ -114,30 +113,6 @@ void handle_loops(RTLIL::Design *design,
}
cell->attributes.erase(it);
}
-
- auto jt = scc_break_inputs.find(cell->type);
- if (jt != scc_break_inputs.end())
- for (auto port_name : jt->second) {
- RTLIL::SigSpec sig;
- auto &rhs = cell->connections_.at(port_name);
- for (auto b : rhs) {
- Wire *w = b.wire;
- if (!w) continue;
- w->port_output = true;
- w->set_bool_attribute(ID(abc_scc_break));
- w = module->wire(stringf("%s.abci", w->name.c_str()));
- if (!w) {
- w = module->addWire(stringf("%s.abci", b.wire->name.c_str()), GetSize(b.wire));
- w->port_input = true;
- }
- else {
- log_assert(b.offset < GetSize(w));
- log_assert(w->port_input);
- }
- sig.append(RTLIL::SigBit(w, b.offset));
- }
- rhs = sig;
- }
}
module->fixup_ports();
@@ -272,8 +247,7 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri
bool cleanup, vector<int> lut_costs, bool dff_mode, std::string clk_str,
bool /*keepff*/, std::string delay_target, std::string /*lutin_shared*/, bool fast_mode,
bool show_tempdir, std::string box_file, std::string lut_file,
- std::string wire_delay, const dict<int,IdString> &box_lookup,
- const dict<IdString,pool<IdString>> &scc_break_inputs
+ std::string wire_delay, const dict<int,IdString> &box_lookup
)
{
module = current_module;
@@ -413,7 +387,7 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri
RTLIL::Selection& sel = design->selection_stack.back();
sel.select(module);
- handle_loops(design, scc_break_inputs);
+ handle_loops(design);
Pass::call(design, "aigmap");
@@ -497,7 +471,7 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri
log_error("ABC: execution of command \"%s\" failed: return code %d.\n", buffer.c_str(), ret);
buffer = stringf("%s/%s", tempdir_name.c_str(), "output.aig");
- ifs.open(buffer);
+ ifs.open(buffer, std::ifstream::binary);
if (ifs.fail())
log_error("Can't open ABC output file `%s'.\n", buffer.c_str());
@@ -632,7 +606,6 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri
existing_cell = module->cell(c->name);
log_assert(existing_cell);
cell = module->addCell(remap_name(c->name), c->type);
- module->swap_names(cell, existing_cell);
}
if (markgroups) cell->attributes[ID(abcgroup)] = map_autoidx;
@@ -668,8 +641,22 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *current_module, std::stri
}
}
- for (auto cell : boxes)
- module->remove(cell);
+ for (auto existing_cell : boxes) {
+ Cell *cell = module->cell(remap_name(existing_cell->name));
+ if (cell) {
+ for (auto &conn : existing_cell->connections()) {
+ if (!conn.second.is_wire())
+ continue;
+ Wire *wire = conn.second.as_wire();
+ if (!wire->get_bool_attribute(ID(abc_padding)))
+ continue;
+ cell->unsetPort(conn.first);
+ log_debug("Dropping padded port connection for %s (%s) .%s (%s )\n", log_id(cell), cell->type.c_str(), log_id(conn.first), log_signal(conn.second));
+ }
+ module->swap_names(cell, existing_cell);
+ }
+ module->remove(existing_cell);
+ }
// Copy connections (and rename) from mapped_mod to module
for (auto conn : mapped_mod->connections()) {
@@ -1050,9 +1037,6 @@ struct Abc9Pass : public Pass {
}
if (arg == "-box" && argidx+1 < args.size()) {
box_file = args[++argidx];
- rewrite_filename(box_file);
- if (!box_file.empty() && !is_absolute_path(box_file))
- box_file = std::string(pwd) + "/" + box_file;
continue;
}
if (arg == "-W" && argidx+1 < args.size()) {
@@ -1063,8 +1047,15 @@ struct Abc9Pass : public Pass {
}
extra_args(args, argidx, design);
+ // ABC expects a box file for XAIG
+ if (box_file.empty())
+ box_file = "+/dummy.box";
+
+ rewrite_filename(box_file);
+ if (!box_file.empty() && !is_absolute_path(box_file))
+ box_file = std::string(pwd) + "/" + box_file;
+
dict<int,IdString> box_lookup;
- dict<IdString,pool<IdString>> scc_break_inputs;
for (auto m : design->modules()) {
auto it = m->attributes.find(ID(abc_box_id));
if (it == m->attributes.end())
@@ -1082,17 +1073,13 @@ struct Abc9Pass : public Pass {
for (auto p : m->ports) {
auto w = m->wire(p);
log_assert(w);
- if (w->port_input) {
- if (w->attributes.count(ID(abc_scc_break)))
- scc_break_inputs[m->name].insert(p);
- if (w->attributes.count(ID(abc_carry))) {
+ if (w->attributes.count(ID(abc_carry))) {
+ if (w->port_input) {
if (carry_in)
log_error("Module '%s' contains more than one 'abc_carry' input port.\n", log_id(m));
carry_in = w;
}
- }
- if (w->port_output) {
- if (w->attributes.count(ID(abc_carry))) {
+ else if (w->port_output) {
if (carry_out)
log_error("Module '%s' contains more than one 'abc_carry' input port.\n", log_id(m));
carry_out = w;
@@ -1144,7 +1131,7 @@ struct Abc9Pass : public Pass {
if (!dff_mode || !clk_str.empty()) {
abc9_module(design, mod, script_file, exe_file, cleanup, lut_costs, dff_mode, clk_str, keepff,
delay_target, lutin_shared, fast_mode, show_tempdir,
- box_file, lut_file, wire_delay, box_lookup, scc_break_inputs);
+ box_file, lut_file, wire_delay, box_lookup);
continue;
}
@@ -1290,7 +1277,7 @@ struct Abc9Pass : public Pass {
en_sig = assign_map(std::get<3>(it.first));
abc9_module(design, mod, script_file, exe_file, cleanup, lut_costs, !clk_sig.empty(), "$",
keepff, delay_target, lutin_shared, fast_mode, show_tempdir,
- box_file, lut_file, wire_delay, box_lookup, scc_break_inputs);
+ box_file, lut_file, wire_delay, box_lookup);
assign_map.set(mod);
}
}
diff --git a/passes/techmap/alumacc.cc b/passes/techmap/alumacc.cc
index 5b168d524..034731b87 100644
--- a/passes/techmap/alumacc.cc
+++ b/passes/techmap/alumacc.cc
@@ -48,14 +48,25 @@ struct AlumaccWorker
RTLIL::SigSpec cached_cf, cached_of, cached_sf;
RTLIL::SigSpec get_lt() {
- if (GetSize(cached_lt) == 0)
- cached_lt = is_signed ? alu_cell->module->Xor(NEW_ID, get_of(), get_sf()) : get_cf();
+ if (GetSize(cached_lt) == 0) {
+ if (is_signed) {
+ get_of();
+ get_sf();
+ cached_lt = alu_cell->module->Xor(NEW_ID, cached_of, cached_sf);
+ }
+ else
+ cached_lt = get_cf();
+ }
return cached_lt;
}
RTLIL::SigSpec get_gt() {
- if (GetSize(cached_gt) == 0)
- cached_gt = alu_cell->module->Not(NEW_ID, alu_cell->module->Or(NEW_ID, get_lt(), get_eq()), false, alu_cell->get_src_attribute());
+ if (GetSize(cached_gt) == 0) {
+ get_lt();
+ get_eq();
+ SigSpec Or = alu_cell->module->Or(NEW_ID, cached_lt, cached_eq);
+ cached_gt = alu_cell->module->Not(NEW_ID, Or, false, alu_cell->get_src_attribute());
+ }
return cached_gt;
}
diff --git a/passes/techmap/dff2dffs.cc b/passes/techmap/dff2dffs.cc
index 0ea033513..3fa1ed5cf 100644
--- a/passes/techmap/dff2dffs.cc
+++ b/passes/techmap/dff2dffs.cc
@@ -34,11 +34,16 @@ struct Dff2dffsPass : public Pass {
log("Merge synchronous set/reset $_MUX_ cells to create $__DFFS_[NP][NP][01], to be run before\n");
log("dff2dffe for SR over CE priority.\n");
log("\n");
+ log(" -match-init\n");
+ log(" Disallow merging synchronous set/reset that has polarity opposite of the\n");
+ log(" output wire's init attribute (if any).\n");
+ log("\n");
}
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
{
log_header(design, "Executing dff2dffs pass (merge synchronous set/reset into FF cells).\n");
+ bool match_init = false;
size_t argidx;
for (argidx = 1; argidx < args.size(); argidx++)
{
@@ -46,6 +51,10 @@ struct Dff2dffsPass : public Pass {
// singleton_mode = true;
// continue;
// }
+ if (args[argidx] == "-match-init") {
+ match_init = true;
+ continue;
+ }
break;
}
extra_args(args, argidx, design);
@@ -96,9 +105,6 @@ struct Dff2dffsPass : public Pass {
SigBit bit_b = sigmap(mux_cell->getPort(ID::B));
SigBit bit_s = sigmap(mux_cell->getPort(ID(S)));
- log(" Merging %s (A=%s, B=%s, S=%s) into %s (%s).\n", log_id(mux_cell),
- log_signal(bit_a), log_signal(bit_b), log_signal(bit_s), log_id(cell), log_id(cell->type));
-
SigBit sr_val, sr_sig;
bool invert_sr;
sr_sig = bit_s;
@@ -113,6 +119,23 @@ struct Dff2dffsPass : public Pass {
invert_sr = false;
}
+ if (match_init) {
+ SigBit bit_q = cell->getPort(ID(Q));
+ if (bit_q.wire) {
+ auto it = bit_q.wire->attributes.find(ID(init));
+ if (it != bit_q.wire->attributes.end()) {
+ auto init_val = it->second[bit_q.offset];
+ if (init_val == State::S1 && sr_val != State::S1)
+ continue;
+ if (init_val == State::S0 && sr_val != State::S0)
+ continue;
+ }
+ }
+ }
+
+ log(" Merging %s (A=%s, B=%s, S=%s) into %s (%s).\n", log_id(mux_cell),
+ log_signal(bit_a), log_signal(bit_b), log_signal(bit_s), log_id(cell), log_id(cell->type));
+
if (sr_val == State::S1) {
if (cell->type == ID($_DFF_N_)) {
if (invert_sr) cell->type = ID($__DFFS_NN1_);
diff --git a/passes/techmap/extractinv.cc b/passes/techmap/extractinv.cc
new file mode 100644
index 000000000..dda71f12a
--- /dev/null
+++ b/passes/techmap/extractinv.cc
@@ -0,0 +1,123 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ * Copyright (C) 2019 Marcin Kościelnicki <mwk@0x04.net>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#include "kernel/yosys.h"
+#include "kernel/sigtools.h"
+
+USING_YOSYS_NAMESPACE
+PRIVATE_NAMESPACE_BEGIN
+
+void split_portname_pair(std::string &port1, std::string &port2)
+{
+ size_t pos = port1.find_first_of(':');
+ if (pos != std::string::npos) {
+ port2 = port1.substr(pos+1);
+ port1 = port1.substr(0, pos);
+ }
+}
+
+struct ExtractinvPass : public Pass {
+ ExtractinvPass() : Pass("extractinv", "extract explicit inverter cells for invertible cell pins") { }
+ void help() YS_OVERRIDE
+ {
+ // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
+ log("\n");
+ log(" extractinv [options] [selection]\n");
+ log("\n");
+ log("Searches the design for all cells with invertible pins controlled by a cell\n");
+ log("parameter (eg. IS_CLK_INVERTED on many Xilinx cells) and removes the parameter.\n");
+ log("If the parameter was set to 1, inserts an explicit inverter cell in front of\n");
+ log("the pin instead. Normally used for output to ISE, which does not support the\n");
+ log("inversion parameters.\n");
+ log("\n");
+ log("To mark a cell port as invertible, use (* invertible_pin = \"param_name\" *)\n");
+ log("on the wire in the blackbox module. The parameter value should have\n");
+ log("the same width as the port, and will be effectively XORed with it.\n");
+ log("\n");
+ log(" -inv <celltype> <portname_out>:<portname_in>\n");
+ log(" Specifies the cell type to use for the inverters and its port names.\n");
+ log(" This option is required.\n");
+ log("\n");
+ }
+
+ void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
+ {
+ log_header(design, "Executing EXTRACTINV pass (extracting pin inverters).\n");
+
+ std::string inv_celltype, inv_portname, inv_portname2;
+
+ size_t argidx;
+ for (argidx = 1; argidx < args.size(); argidx++)
+ {
+ std::string arg = args[argidx];
+ if (arg == "-inv" && argidx+2 < args.size()) {
+ inv_celltype = args[++argidx];
+ inv_portname = args[++argidx];
+ split_portname_pair(inv_portname, inv_portname2);
+ continue;
+ }
+ break;
+ }
+ extra_args(args, argidx, design);
+
+ if (inv_celltype.empty())
+ log_error("The -inv option is required.\n");
+
+ for (auto module : design->selected_modules())
+ {
+ for (auto cell : module->selected_cells())
+ for (auto port : cell->connections()) {
+ auto cell_module = design->module(cell->type);
+ if (!cell_module)
+ continue;
+ auto cell_wire = cell_module->wire(port.first);
+ if (!cell_wire)
+ continue;
+ auto it = cell_wire->attributes.find("\\invertible_pin");
+ if (it == cell_wire->attributes.end())
+ continue;
+ IdString param_name = RTLIL::escape_id(it->second.decode_string());
+ auto it2 = cell->parameters.find(param_name);
+ // Inversion not used -- skip.
+ if (it2 == cell->parameters.end())
+ continue;
+ SigSpec sig = port.second;
+ if (it2->second.size() != sig.size())
+ log_error("The inversion parameter needs to be the same width as the port (%s.%s port %s parameter %s)", log_id(module->name), log_id(cell->type), log_id(port.first), log_id(param_name));
+ RTLIL::Const invmask = it2->second;
+ cell->parameters.erase(param_name);
+ if (invmask.is_fully_zero())
+ continue;
+ Wire *iwire = module->addWire(NEW_ID, sig.size());
+ for (int i = 0; i < sig.size(); i++)
+ if (invmask[i] == State::S1) {
+ RTLIL::Cell *icell = module->addCell(NEW_ID, RTLIL::escape_id(inv_celltype));
+ icell->setPort(RTLIL::escape_id(inv_portname), SigSpec(iwire, i));
+ icell->setPort(RTLIL::escape_id(inv_portname2), sig[i]);
+ log("Inserting %s on %s.%s.%s[%d].\n", inv_celltype.c_str(), log_id(module), log_id(cell->type), log_id(port.first), i);
+ sig[i] = SigBit(iwire, i);
+ }
+ cell->setPort(port.first, sig);
+ }
+ }
+ }
+} ExtractinvPass;
+
+PRIVATE_NAMESPACE_END
diff --git a/passes/techmap/techmap.cc b/passes/techmap/techmap.cc
index c4496f76f..08a1af2d5 100644
--- a/passes/techmap/techmap.cc
+++ b/passes/techmap/techmap.cc
@@ -205,20 +205,57 @@ struct TechmapWorker
}
std::map<RTLIL::IdString, RTLIL::IdString> positional_ports;
+ dict<Wire*, IdString> temp_renamed_wires;
+ pool<SigBit> autopurge_tpl_bits;
- for (auto &it : tpl->wires_) {
+ for (auto &it : tpl->wires_)
+ {
if (it.second->port_id > 0)
- positional_ports[stringf("$%d", it.second->port_id)] = it.first;
+ {
+ IdString posportname = stringf("$%d", it.second->port_id);
+ positional_ports[posportname] = it.first;
+
+ if (!flatten_mode && it.second->get_bool_attribute(ID(techmap_autopurge)) &&
+ (!cell->hasPort(it.second->name) || !GetSize(cell->getPort(it.second->name))) &&
+ (!cell->hasPort(posportname) || !GetSize(cell->getPort(posportname))))
+ {
+ if (sigmaps.count(tpl) == 0)
+ sigmaps[tpl].set(tpl);
+
+ for (auto bit : sigmaps.at(tpl)(it.second))
+ if (bit.wire != nullptr)
+ autopurge_tpl_bits.insert(bit);
+ }
+ }
IdString w_name = it.second->name;
apply_prefix(cell->name, w_name);
- RTLIL::Wire *w = module->addWire(w_name, it.second);
- w->port_input = false;
- w->port_output = false;
- w->port_id = 0;
- if (it.second->get_bool_attribute(ID(_techmap_special_)))
- w->attributes.clear();
- if (w->attributes.count(ID(src)))
- w->add_strpool_attribute(ID(src), extra_src_attrs);
+ RTLIL::Wire *w = module->wire(w_name);
+ if (w != nullptr) {
+ if (!flatten_mode || !w->get_bool_attribute(ID(hierconn))) {
+ temp_renamed_wires[w] = w->name;
+ module->rename(w, NEW_ID);
+ w = nullptr;
+ } else {
+ w->attributes.erase(ID(hierconn));
+ if (GetSize(w) < GetSize(it.second)) {
+ log_warning("Widening signal %s.%s to match size of %s.%s (via %s.%s).\n", log_id(module), log_id(w),
+ log_id(tpl), log_id(it.second), log_id(module), log_id(cell));
+ w->width = GetSize(it.second);
+ }
+ }
+ }
+ if (w == nullptr) {
+ w = module->addWire(w_name, it.second);
+ w->port_input = false;
+ w->port_output = false;
+ w->port_id = 0;
+ if (!flatten_mode)
+ w->attributes.erase(ID(techmap_autopurge));
+ if (it.second->get_bool_attribute(ID(_techmap_special_)))
+ w->attributes.clear();
+ if (w->attributes.count(ID(src)))
+ w->add_strpool_attribute(ID(src), extra_src_attrs);
+ }
design->select(module, w);
}
@@ -322,6 +359,12 @@ struct TechmapWorker
for (auto &attr : w->attributes) {
if (attr.first == ID(src))
continue;
+ auto lhs = GetSize(extra_connect.first);
+ auto rhs = GetSize(extra_connect.second);
+ if (lhs > rhs)
+ extra_connect.first.remove(rhs, lhs-rhs);
+ else if (rhs > lhs)
+ extra_connect.second.remove(lhs, rhs-lhs);
module->connect(extra_connect);
break;
}
@@ -344,11 +387,31 @@ struct TechmapWorker
if (!flatten_mode && c->type.begins_with("\\$"))
c->type = c->type.substr(1);
- for (auto &it2 : c->connections_) {
- apply_prefix(cell->name, it2.second, module);
- port_signal_map.apply(it2.second);
+ vector<IdString> autopurge_ports;
+
+ for (auto &it2 : c->connections_)
+ {
+ bool autopurge = false;
+ if (!autopurge_tpl_bits.empty()) {
+ autopurge = GetSize(it2.second) != 0;
+ for (auto &bit : sigmaps.at(tpl)(it2.second))
+ if (!autopurge_tpl_bits.count(bit)) {
+ autopurge = false;
+ break;
+ }
+ }
+
+ if (autopurge) {
+ autopurge_ports.push_back(it2.first);
+ } else {
+ apply_prefix(cell->name, it2.second, module);
+ port_signal_map.apply(it2.second);
+ }
}
+ for (auto &it2 : autopurge_ports)
+ c->unsetPort(it2);
+
if (c->type.in(ID($memrd), ID($memwr), ID($meminit))) {
IdString memid = c->getParam(ID(MEMID)).decode_string();
log_assert(memory_renames.count(memid) != 0);
@@ -380,6 +443,16 @@ struct TechmapWorker
}
module->remove(cell);
+
+ for (auto &it : temp_renamed_wires)
+ {
+ Wire *w = it.first;
+ IdString name = it.second;
+ IdString altname = module->uniquify(name);
+ Wire *other_w = module->wire(name);
+ module->rename(other_w, altname);
+ module->rename(w, name);
+ }
}
bool techmap_module(RTLIL::Design *design, RTLIL::Module *module, RTLIL::Design *map, std::set<RTLIL::Cell*> &handled_cells,
@@ -396,6 +469,18 @@ struct TechmapWorker
SigMap sigmap(module);
+ dict<SigBit, State> init_bits;
+ pool<SigBit> remove_init_bits;
+
+ for (auto wire : module->wires()) {
+ if (wire->attributes.count("\\init")) {
+ Const value = wire->attributes.at("\\init");
+ for (int i = 0; i < min(GetSize(value), GetSize(wire)); i++)
+ if (value[i] != State::Sx)
+ init_bits[sigmap(SigBit(wire, i))] = value[i];
+ }
+ }
+
TopoSort<RTLIL::Cell*, RTLIL::IdString::compare_ptr_by_name<RTLIL::Cell>> cells;
std::map<RTLIL::Cell*, std::set<RTLIL::SigBit>> cell_to_inbit;
std::map<RTLIL::SigBit, std::set<RTLIL::Cell*>> outbit_to_cell;
@@ -633,6 +718,17 @@ struct TechmapWorker
bit = RTLIL::SigBit(RTLIL::State::Sx);
parameters[stringf("\\_TECHMAP_CONSTVAL_%s_", RTLIL::id2cstr(conn.first))] = RTLIL::SigSpec(v).as_const();
}
+ if (tpl->avail_parameters.count(stringf("\\_TECHMAP_WIREINIT_%s_", RTLIL::id2cstr(conn.first))) != 0) {
+ auto sig = sigmap(conn.second);
+ RTLIL::Const value(State::Sx, sig.size());
+ for (int i = 0; i < sig.size(); i++) {
+ auto it = init_bits.find(sig[i]);
+ if (it != init_bits.end()) {
+ value[i] = it->second;
+ }
+ }
+ parameters[stringf("\\_TECHMAP_WIREINIT_%s_", RTLIL::id2cstr(conn.first))] = value;
+ }
}
int unique_bit_id_counter = 0;
@@ -833,7 +929,7 @@ struct TechmapWorker
TechmapWires twd = techmap_find_special_wires(tpl);
for (auto &it : twd) {
- if (it.first != "_TECHMAP_FAIL_" && it.first.substr(0, 12) != "_TECHMAP_DO_" && it.first.substr(0, 14) != "_TECHMAP_DONE_")
+ if (it.first != "_TECHMAP_FAIL_" && (it.first.substr(0, 20) != "_TECHMAP_REMOVEINIT_" || it.first[it.first.size()-1] != '_') && it.first.substr(0, 12) != "_TECHMAP_DO_" && it.first.substr(0, 14) != "_TECHMAP_DONE_")
log_error("Techmap yielded unknown config wire %s.\n", it.first.c_str());
if (techmap_do_cache[tpl])
for (auto &it2 : it.second)
@@ -864,6 +960,23 @@ struct TechmapWorker
mkdebug.off();
}
+ TechmapWires twd = techmap_find_special_wires(tpl);
+ for (auto &it : twd) {
+ if (it.first.substr(0, 20) == "_TECHMAP_REMOVEINIT_") {
+ for (auto &it2 : it.second) {
+ auto val = it2.value.as_const();
+ auto wirename = RTLIL::escape_id(it.first.substr(20, it.first.size() - 20 - 1));
+ auto it = cell->connections().find(wirename);
+ if (it != cell->connections().end()) {
+ auto sig = sigmap(it->second);
+ for (int i = 0; i < sig.size(); i++)
+ if (val[i] == State::S1)
+ remove_init_bits.insert(sig[i]);
+ }
+ }
+ }
+ }
+
if (extern_mode && !in_recursion)
{
std::string m_name = stringf("$extern:%s", log_id(tpl));
@@ -907,6 +1020,25 @@ struct TechmapWorker
handled_cells.insert(cell);
}
+ if (!remove_init_bits.empty()) {
+ for (auto wire : module->wires())
+ if (wire->attributes.count("\\init")) {
+ Const &value = wire->attributes.at("\\init");
+ bool do_cleanup = true;
+ for (int i = 0; i < min(GetSize(value), GetSize(wire)); i++) {
+ SigBit bit = sigmap(SigBit(wire, i));
+ if (remove_init_bits.count(bit))
+ value[i] = State::Sx;
+ else if (value[i] != State::Sx)
+ do_cleanup = false;
+ }
+ if (do_cleanup) {
+ log("Removing init attribute from wire %s.%s.\n", log_id(module), log_id(wire));
+ wire->attributes.erase("\\init");
+ }
+ }
+ }
+
if (log_continue) {
log_header(design, "Continuing TECHMAP pass.\n");
log_continue = false;
@@ -981,6 +1113,11 @@ struct TechmapPass : public Pass {
log("will create a wrapper for the cell and then run the command string that the\n");
log("attribute is set to on the wrapper module.\n");
log("\n");
+ log("When a port on a module in the map file has the 'techmap_autopurge' attribute\n");
+ log("set, and that port is not connected in the instantiation that is mapped, then\n");
+ log("then a cell port connected only to such wires will be omitted in the mapped\n");
+ log("version of the circuit.\n");
+ log("\n");
log("All wires in the modules from the map file matching the pattern _TECHMAP_*\n");
log("or *._TECHMAP_* are special wires that are used to pass instructions from\n");
log("the mapping module to the techmap command. At the moment the following special\n");
@@ -1019,6 +1156,13 @@ struct TechmapPass : public Pass {
log("\n");
log(" It is possible to combine both prefixes to 'RECURSION; CONSTMAP; '.\n");
log("\n");
+ log(" _TECHMAP_REMOVEINIT_<port-name>_\n");
+ log(" When this wire is set to a constant value, the init attribute of the wire(s)\n");
+ log(" connected to this port will be consumed. This wire must have the same\n");
+ log(" width as the given port, and for every bit that is set to 1 in the value,\n");
+ log(" the corresponding init attribute bit will be changed to 1'bx. If all\n");
+ log(" bits of an init attribute are left as x, it will be removed.\n");
+ log("\n");
log("In addition to this special wires, techmap also supports special parameters in\n");
log("modules in the map file:\n");
log("\n");
@@ -1032,6 +1176,13 @@ struct TechmapPass : public Pass {
log(" former has a 1-bit for each constant input bit and the latter has the\n");
log(" value for this bit. The unused bits of the latter are set to undef (x).\n");
log("\n");
+ log(" _TECHMAP_WIREINIT_<port-name>_\n");
+ log(" When a parameter with this name exists, it will be set to the initial\n");
+ log(" value of the wire(s) connected to the given port, as specified by the init\n");
+ log(" attribute. If the attribute doesn't exist, x will be filled for the\n");
+ log(" missing bits. To remove the init attribute bits used, use the\n");
+ log(" _TECHMAP_REMOVEINIT_*_ wires.\n");
+ log("\n");
log(" _TECHMAP_BITS_CONNMAP_\n");
log(" _TECHMAP_CONNMAP_<port-name>_\n");
log(" For an N-bit port, the _TECHMAP_CONNMAP_<port-name>_ parameter, if it\n");
diff --git a/passes/tests/test_autotb.cc b/passes/tests/test_autotb.cc
index bfb1d6642..2b6a86c25 100644
--- a/passes/tests/test_autotb.cc
+++ b/passes/tests/test_autotb.cc
@@ -345,9 +345,17 @@ struct TestAutotbBackend : public Backend {
log("value after initialization. This can e.g. be used to force a reset signal\n");
log("low in order to explore more inner states in a state machine.\n");
log("\n");
+ log("The attribute 'gentb_skip' can be attached to modules to suppress testbench\n");
+ log("generation.\n");
+ log("\n");
log(" -n <int>\n");
log(" number of iterations the test bench should run (default = 1000)\n");
log("\n");
+ log(" -seed <int>\n");
+ log(" seed used for pseudo-random number generation (default = 0).\n");
+ log(" a value of 0 will cause an arbitrary seed to be chosen, based on\n");
+ log(" the current system time.\n");
+ log("\n");
}
void execute(std::ostream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
{
diff --git a/techlibs/anlogic/cells_sim.v b/techlibs/anlogic/cells_sim.v
index 058e76605..0fba43572 100644
--- a/techlibs/anlogic/cells_sim.v
+++ b/techlibs/anlogic/cells_sim.v
@@ -1,5 +1,5 @@
module AL_MAP_SEQ (
- output q,
+ output reg q,
input ce,
input clk,
input sr,
@@ -9,6 +9,71 @@ module AL_MAP_SEQ (
parameter REGSET = "RESET"; //RESET/SET
parameter SRMUX = "SR"; //SR/INV
parameter SRMODE = "SYNC"; //SYNC/ASYNC
+
+ wire clk_ce;
+ assign clk_ce = ce ? clk : 1'b0;
+
+ wire srmux;
+ generate
+ case (SRMUX)
+ "SR": assign srmux = sr;
+ "INV": assign srmux = ~sr;
+ default: assign srmux = sr;
+ endcase
+ endgenerate
+
+ wire regset;
+ generate
+ case (REGSET)
+ "RESET": assign regset = 1'b0;
+ "SET": assign regset = 1'b1;
+ default: assign regset = 1'b0;
+ endcase
+ endgenerate
+
+ initial q = regset;
+
+ generate
+ if (DFFMODE == "FF")
+ begin
+ if (SRMODE == "ASYNC")
+ begin
+ always @(posedge clk_ce, posedge srmux)
+ if (srmux)
+ q <= regset;
+ else
+ q <= d;
+ end
+ else
+ begin
+ always @(posedge clk_ce)
+ if (srmux)
+ q <= regset;
+ else
+ q <= d;
+ end
+ end
+ else
+ begin
+ // DFFMODE == "LATCH"
+ if (SRMODE == "ASYNC")
+ begin
+ always @(clk_ce, srmux)
+ if (srmux)
+ q <= regset;
+ else
+ q <= d;
+ end
+ else
+ begin
+ always @(clk_ce)
+ if (srmux)
+ q <= regset;
+ else
+ q <= d;
+ end
+ end
+ endgenerate
endmodule
module AL_MAP_LUT1 (
@@ -17,7 +82,8 @@ module AL_MAP_LUT1 (
);
parameter [1:0] INIT = 2'h0;
parameter EQN = "(A)";
- assign o = INIT >> a;
+
+ assign o = a ? INIT[1] : INIT[0];
endmodule
module AL_MAP_LUT2 (
@@ -27,7 +93,9 @@ module AL_MAP_LUT2 (
);
parameter [3:0] INIT = 4'h0;
parameter EQN = "(A)";
- assign o = INIT >> {b, a};
+
+ wire [1:0] s1 = b ? INIT[ 3:2] : INIT[1:0];
+ assign o = a ? s1[1] : s1[0];
endmodule
module AL_MAP_LUT3 (
@@ -38,7 +106,10 @@ module AL_MAP_LUT3 (
);
parameter [7:0] INIT = 8'h0;
parameter EQN = "(A)";
- assign o = INIT >> {c, b, a};
+
+ wire [3:0] s2 = c ? INIT[ 7:4] : INIT[3:0];
+ wire [1:0] s1 = b ? s2[ 3:2] : s2[1:0];
+ assign o = a ? s1[1] : s1[0];
endmodule
module AL_MAP_LUT4 (
@@ -50,7 +121,11 @@ module AL_MAP_LUT4 (
);
parameter [15:0] INIT = 16'h0;
parameter EQN = "(A)";
- assign o = INIT >> {d, c, b, a};
+
+ wire [7:0] s3 = d ? INIT[15:8] : INIT[7:0];
+ wire [3:0] s2 = c ? s3[ 7:4] : s3[3:0];
+ wire [1:0] s1 = b ? s2[ 3:2] : s2[1:0];
+ assign o = a ? s1[1] : s1[0];
endmodule
module AL_MAP_LUT5 (
@@ -100,4 +175,18 @@ module AL_MAP_ADDER (
output [1:0] o
);
parameter ALUTYPE = "ADD";
+
+ generate
+ case (ALUTYPE)
+ "ADD": assign o = a + b + c;
+ "SUB": assign o = a - b - c;
+ "A_LE_B": assign o = a - b - c;
+
+ "ADD_CARRY": assign o = { a, 1'b0 };
+ "SUB_CARRY": assign o = { ~a, 1'b0 };
+ "A_LE_B_CARRY": assign o = { a, 1'b0 };
+ default: assign o = a + b + c;
+ endcase
+ endgenerate
+
endmodule
diff --git a/techlibs/common/Makefile.inc b/techlibs/common/Makefile.inc
index 0e05620bc..6c0a4fe66 100644
--- a/techlibs/common/Makefile.inc
+++ b/techlibs/common/Makefile.inc
@@ -28,3 +28,5 @@ $(eval $(call add_share_file,share,techlibs/common/dff2ff.v))
$(eval $(call add_share_file,share,techlibs/common/gate2lut.v))
$(eval $(call add_share_file,share,techlibs/common/cmp2lut.v))
$(eval $(call add_share_file,share,techlibs/common/cells.lib))
+$(eval $(call add_share_file,share,techlibs/common/mul2dsp.v))
+$(eval $(call add_share_file,share,techlibs/common/dummy.box))
diff --git a/techlibs/common/dummy.box b/techlibs/common/dummy.box
new file mode 100644
index 000000000..0c18070a0
--- /dev/null
+++ b/techlibs/common/dummy.box
@@ -0,0 +1 @@
+(dummy) 1 0 0 0
diff --git a/techlibs/common/mul2dsp.v b/techlibs/common/mul2dsp.v
new file mode 100644
index 000000000..4cabb4453
--- /dev/null
+++ b/techlibs/common/mul2dsp.v
@@ -0,0 +1,296 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ * 2019 Eddie Hung <eddie@fpgeh.com>
+ * 2019 David Shah <dave@ds0.me>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * ---
+ *
+ * Tech-mapping rules for decomposing arbitrarily-sized $mul cells
+ * into an equivalent collection of smaller `DSP_NAME cells (with the
+ * same interface as $mul) no larger than `DSP_[AB]_MAXWIDTH, attached
+ * to $shl and $add cells.
+ *
+ */
+
+`ifndef DSP_A_MAXWIDTH
+$fatal(1, "Macro DSP_A_MAXWIDTH must be defined");
+`endif
+`ifndef DSP_B_MAXWIDTH
+$fatal(1, "Macro DSP_B_MAXWIDTH must be defined");
+`endif
+`ifndef DSP_B_MAXWIDTH
+$fatal(1, "Macro DSP_B_MAXWIDTH must be defined");
+`endif
+`ifndef DSP_A_MAXWIDTH_PARTIAL
+`define DSP_A_MAXWIDTH_PARTIAL `DSP_A_MAXWIDTH
+`endif
+`ifndef DSP_B_MAXWIDTH_PARTIAL
+`define DSP_B_MAXWIDTH_PARTIAL `DSP_B_MAXWIDTH
+`endif
+
+`ifndef DSP_NAME
+$fatal(1, "Macro DSP_NAME must be defined");
+`endif
+
+`define MAX(a,b) (a > b ? a : b)
+`define MIN(a,b) (a < b ? a : b)
+
+(* techmap_celltype = "$mul $__mul" *)
+module _80_mul (A, B, Y);
+ parameter A_SIGNED = 0;
+ parameter B_SIGNED = 0;
+ parameter A_WIDTH = 1;
+ parameter B_WIDTH = 1;
+ parameter Y_WIDTH = 1;
+
+ input [A_WIDTH-1:0] A;
+ input [B_WIDTH-1:0] B;
+ output [Y_WIDTH-1:0] Y;
+
+ parameter _TECHMAP_CELLTYPE_ = "";
+
+ generate
+ if (0) begin end
+`ifdef DSP_A_MINWIDTH
+ else if (A_WIDTH < `DSP_A_MINWIDTH)
+ wire _TECHMAP_FAIL_ = 1;
+`endif
+`ifdef DSP_B_MINWIDTH
+ else if (B_WIDTH < `DSP_B_MINWIDTH)
+ wire _TECHMAP_FAIL_ = 1;
+`endif
+`ifdef DSP_Y_MINWIDTH
+ else if (Y_WIDTH < `DSP_Y_MINWIDTH)
+ wire _TECHMAP_FAIL_ = 1;
+`endif
+`ifdef DSP_SIGNEDONLY
+ else if (_TECHMAP_CELLTYPE_ == "$mul" && !A_SIGNED && !B_SIGNED)
+ \$mul #(
+ .A_SIGNED(1),
+ .B_SIGNED(1),
+ .A_WIDTH(A_WIDTH + 1),
+ .B_WIDTH(B_WIDTH + 1),
+ .Y_WIDTH(Y_WIDTH)
+ ) _TECHMAP_REPLACE_ (
+ .A({1'b0, A}),
+ .B({1'b0, B}),
+ .Y(Y)
+ );
+`endif
+ else if (_TECHMAP_CELLTYPE_ == "$mul" && A_WIDTH < B_WIDTH)
+ \$mul #(
+ .A_SIGNED(B_SIGNED),
+ .B_SIGNED(A_SIGNED),
+ .A_WIDTH(B_WIDTH),
+ .B_WIDTH(A_WIDTH),
+ .Y_WIDTH(Y_WIDTH)
+ ) _TECHMAP_REPLACE_ (
+ .A(B),
+ .B(A),
+ .Y(Y)
+ );
+ else begin
+ wire [1023:0] _TECHMAP_DO_ = "proc; clean";
+
+`ifdef DSP_SIGNEDONLY
+ localparam sign_headroom = 1;
+`else
+ localparam sign_headroom = 0;
+`endif
+
+ genvar i;
+ if (A_WIDTH > `DSP_A_MAXWIDTH) begin
+ localparam n = (A_WIDTH-`DSP_A_MAXWIDTH+`DSP_A_MAXWIDTH_PARTIAL-sign_headroom-1) / (`DSP_A_MAXWIDTH_PARTIAL-sign_headroom);
+ localparam partial_Y_WIDTH = `MIN(Y_WIDTH, B_WIDTH+`DSP_A_MAXWIDTH_PARTIAL);
+ localparam last_A_WIDTH = A_WIDTH-n*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom);
+ localparam last_Y_WIDTH = B_WIDTH+last_A_WIDTH;
+ if (A_SIGNED && B_SIGNED) begin
+ wire signed [partial_Y_WIDTH-1:0] partial [n-1:0];
+ wire signed [last_Y_WIDTH-1:0] last_partial;
+ wire signed [Y_WIDTH-1:0] partial_sum [n:0];
+ end
+ else begin
+ wire [partial_Y_WIDTH-1:0] partial [n-1:0];
+ wire [last_Y_WIDTH-1:0] last_partial;
+ wire [Y_WIDTH-1:0] partial_sum [n:0];
+ end
+
+ for (i = 0; i < n; i=i+1) begin:sliceA
+ \$__mul #(
+ .A_SIGNED(sign_headroom),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(`DSP_A_MAXWIDTH_PARTIAL),
+ .B_WIDTH(B_WIDTH),
+ .Y_WIDTH(partial_Y_WIDTH)
+ ) mul (
+ .A({{sign_headroom{1'b0}}, A[i*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom) +: `DSP_A_MAXWIDTH_PARTIAL-sign_headroom]}),
+ .B(B),
+ .Y(partial[i])
+ );
+ // TODO: Currently a 'cascade' approach to summing the partial
+ // products is taken here, but a more efficient 'binary
+ // reduction' approach also exists...
+ if (i == 0)
+ assign partial_sum[i] = partial[i];
+ else
+ assign partial_sum[i] = (partial[i] << (* mul2dsp *) i*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) partial_sum[i-1];
+ end
+
+ \$__mul #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(last_A_WIDTH),
+ .B_WIDTH(B_WIDTH),
+ .Y_WIDTH(last_Y_WIDTH)
+ ) sliceA.last (
+ .A(A[A_WIDTH-1 -: last_A_WIDTH]),
+ .B(B),
+ .Y(last_partial)
+ );
+ assign partial_sum[n] = (last_partial << (* mul2dsp *) n*(`DSP_A_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) partial_sum[n-1];
+ assign Y = partial_sum[n];
+ end
+ else if (B_WIDTH > `DSP_B_MAXWIDTH) begin
+ localparam n = (B_WIDTH-`DSP_B_MAXWIDTH+`DSP_B_MAXWIDTH_PARTIAL-sign_headroom-1) / (`DSP_B_MAXWIDTH_PARTIAL-sign_headroom);
+ localparam partial_Y_WIDTH = `MIN(Y_WIDTH, A_WIDTH+`DSP_B_MAXWIDTH_PARTIAL);
+ localparam last_B_WIDTH = B_WIDTH-n*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom);
+ localparam last_Y_WIDTH = A_WIDTH+last_B_WIDTH;
+ if (A_SIGNED && B_SIGNED) begin
+ wire signed [partial_Y_WIDTH-1:0] partial [n-1:0];
+ wire signed [last_Y_WIDTH-1:0] last_partial;
+ wire signed [Y_WIDTH-1:0] partial_sum [n:0];
+ end
+ else begin
+ wire [partial_Y_WIDTH-1:0] partial [n-1:0];
+ wire [last_Y_WIDTH-1:0] last_partial;
+ wire [Y_WIDTH-1:0] partial_sum [n:0];
+ end
+
+ for (i = 0; i < n; i=i+1) begin:sliceB
+ \$__mul #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(sign_headroom),
+ .A_WIDTH(A_WIDTH),
+ .B_WIDTH(`DSP_B_MAXWIDTH_PARTIAL),
+ .Y_WIDTH(partial_Y_WIDTH)
+ ) mul (
+ .A(A),
+ .B({{sign_headroom{1'b0}}, B[i*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom) +: `DSP_B_MAXWIDTH_PARTIAL-sign_headroom]}),
+ .Y(partial[i])
+ );
+ // TODO: Currently a 'cascade' approach to summing the partial
+ // products is taken here, but a more efficient 'binary
+ // reduction' approach also exists...
+ if (i == 0)
+ assign partial_sum[i] = partial[i];
+ else
+ assign partial_sum[i] = (partial[i] << (* mul2dsp *) i*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) partial_sum[i-1];
+ end
+
+ \$__mul #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(A_WIDTH),
+ .B_WIDTH(last_B_WIDTH),
+ .Y_WIDTH(last_Y_WIDTH)
+ ) mul_sliceB_last (
+ .A(A),
+ .B(B[B_WIDTH-1 -: last_B_WIDTH]),
+ .Y(last_partial)
+ );
+ assign partial_sum[n] = (last_partial << (* mul2dsp *) n*(`DSP_B_MAXWIDTH_PARTIAL-sign_headroom)) + (* mul2dsp *) partial_sum[n-1];
+ assign Y = partial_sum[n];
+ end
+ else begin
+ if (A_SIGNED)
+ wire signed [`DSP_A_MAXWIDTH-1:0] Aext = $signed(A);
+ else
+ wire [`DSP_A_MAXWIDTH-1:0] Aext = A;
+ if (B_SIGNED)
+ wire signed [`DSP_B_MAXWIDTH-1:0] Bext = $signed(B);
+ else
+ wire [`DSP_B_MAXWIDTH-1:0] Bext = B;
+
+ `DSP_NAME #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(`DSP_A_MAXWIDTH),
+ .B_WIDTH(`DSP_B_MAXWIDTH),
+ .Y_WIDTH(`MIN(Y_WIDTH,`DSP_A_MAXWIDTH+`DSP_B_MAXWIDTH)),
+ ) _TECHMAP_REPLACE_ (
+ .A(Aext),
+ .B(Bext),
+ .Y(Y)
+ );
+ end
+ end
+ endgenerate
+endmodule
+
+(* techmap_celltype = "$mul $__mul" *)
+module _90_soft_mul (A, B, Y);
+ parameter A_SIGNED = 0;
+ parameter B_SIGNED = 0;
+ parameter A_WIDTH = 1;
+ parameter B_WIDTH = 1;
+ parameter Y_WIDTH = 1;
+
+ input [A_WIDTH-1:0] A;
+ input [B_WIDTH-1:0] B;
+ output [Y_WIDTH-1:0] Y;
+
+ // Indirection necessary since mapping
+ // back to $mul will cause recursion
+ generate
+ if (A_SIGNED && !B_SIGNED)
+ \$__soft_mul #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(1),
+ .A_WIDTH(A_WIDTH),
+ .B_WIDTH(B_WIDTH+1),
+ .Y_WIDTH(Y_WIDTH)
+ ) _TECHMAP_REPLACE_ (
+ .A(A),
+ .B({1'b0,B}),
+ .Y(Y)
+ );
+ else if (!A_SIGNED && B_SIGNED)
+ \$__soft_mul #(
+ .A_SIGNED(1),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(A_WIDTH+1),
+ .B_WIDTH(B_WIDTH),
+ .Y_WIDTH(Y_WIDTH)
+ ) _TECHMAP_REPLACE_ (
+ .A({1'b0,A}),
+ .B(B),
+ .Y(Y)
+ );
+ else
+ \$__soft_mul #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(A_WIDTH),
+ .B_WIDTH(B_WIDTH),
+ .Y_WIDTH(Y_WIDTH)
+ ) _TECHMAP_REPLACE_ (
+ .A(A),
+ .B(B),
+ .Y(Y)
+ );
+ endgenerate
+endmodule
diff --git a/techlibs/ecp5/Makefile.inc b/techlibs/ecp5/Makefile.inc
index 2143acae6..80eee5004 100644
--- a/techlibs/ecp5/Makefile.inc
+++ b/techlibs/ecp5/Makefile.inc
@@ -13,7 +13,11 @@ $(eval $(call add_share_file,share/ecp5,techlibs/ecp5/brams_map.v))
$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/bram.txt))
$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/arith_map.v))
$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/latches_map.v))
+$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/dsp_map.v))
+$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/abc_map.v))
+$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/abc_unmap.v))
+$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/abc_model.v))
$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/abc_5g.box))
$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/abc_5g.lut))
$(eval $(call add_share_file,share/ecp5,techlibs/ecp5/abc_5g_nowide.lut))
diff --git a/techlibs/ecp5/abc_5g.box b/techlibs/ecp5/abc_5g.box
index c757d137d..a336b4a85 100644
--- a/techlibs/ecp5/abc_5g.box
+++ b/techlibs/ecp5/abc_5g.box
@@ -15,16 +15,16 @@ CCU2C 1 1 9 3
630 379 630 379 526 275 392 141 273
516 516 516 516 412 412 278 278 43
-# Box 2 : TRELLIS_DPR16X4 (16x4 dist ram)
+# Box 2 : TRELLIS_DPR16X4_COMB (16x4 dist ram)
# Outputs: DO0, DO1, DO2, DO3
-# name ID w/b ins outs
-TRELLIS_DPR16X4 2 0 14 4
-
-#DI0 DI1 DI2 DI3 RAD0 RAD1 RAD2 RAD3 WAD0 WAD1 WAD2 WAD3 WCK WRE
-- - - - 141 379 275 379 - - - - - -
-- - - - 141 379 275 379 - - - - - -
-- - - - 141 379 275 379 - - - - - -
-- - - - 141 379 275 379 - - - - - -
+# name ID w/b ins outs
+$__ABC_DPR16X4_COMB 2 0 8 4
+
+#A0 A1 A2 A3 RAD0 RAD1 RAD2 RAD3
+0 0 0 0 141 379 275 379
+0 0 0 0 141 379 275 379
+0 0 0 0 141 379 275 379
+0 0 0 0 141 379 275 379
# Box 3 : PFUMX (MUX2)
# Outputs: Z
diff --git a/techlibs/ecp5/abc_map.v b/techlibs/ecp5/abc_map.v
new file mode 100644
index 000000000..ffd25f06d
--- /dev/null
+++ b/techlibs/ecp5/abc_map.v
@@ -0,0 +1,24 @@
+// ---------------------------------------
+
+module TRELLIS_DPR16X4 (
+ input [3:0] DI,
+ input [3:0] WAD,
+ input WRE,
+ input WCK,
+ input [3:0] RAD,
+ output [3:0] DO
+);
+ parameter WCKMUX = "WCK";
+ parameter WREMUX = "WRE";
+ parameter [63:0] INITVAL = 64'h0000000000000000;
+ wire [3:0] \$DO ;
+
+ TRELLIS_DPR16X4 #(
+ .WCKMUX(WCKMUX), .WREMUX(WREMUX), .INITVAL(INITVAL)
+ ) _TECHMAP_REPLACE_ (
+ .DI(DI), .WAD(WAD), .WRE(WRE), .WCK(WCK),
+ .RAD(RAD), .DO(\$DO )
+ );
+
+ \$__ABC_DPR16X4_COMB do (.A(\$DO ), .S(RAD), .Y(DO));
+endmodule
diff --git a/techlibs/ecp5/abc_model.v b/techlibs/ecp5/abc_model.v
new file mode 100644
index 000000000..56a733b75
--- /dev/null
+++ b/techlibs/ecp5/abc_model.v
@@ -0,0 +1,5 @@
+// ---------------------------------------
+
+(* abc_box_id=2 *)
+module \$__ABC_DPR16X4_COMB (input [3:0] A, S, output [3:0] Y);
+endmodule
diff --git a/techlibs/ecp5/abc_unmap.v b/techlibs/ecp5/abc_unmap.v
new file mode 100644
index 000000000..d43cdd93f
--- /dev/null
+++ b/techlibs/ecp5/abc_unmap.v
@@ -0,0 +1,5 @@
+// ---------------------------------------
+
+module \$__ABC_DPR16X4_COMB (input [3:0] A, S, output [3:0] Y);
+ assign Y = A;
+endmodule
diff --git a/techlibs/ecp5/cells_sim.v b/techlibs/ecp5/cells_sim.v
index 5bdb8395e..db77dc127 100644
--- a/techlibs/ecp5/cells_sim.v
+++ b/techlibs/ecp5/cells_sim.v
@@ -109,16 +109,13 @@ module PFUMX (input ALUT, BLUT, C0, output Z);
endmodule
// ---------------------------------------
-//(* abc_box_id=2 *)
module TRELLIS_DPR16X4 (
- (* abc_scc_break *)
input [3:0] DI,
- (* abc_scc_break *)
input [3:0] WAD,
- (* abc_scc_break *)
input WRE,
input WCK,
input [3:0] RAD,
+ /* (* abc_arrival=<TODO> *) */
output [3:0] DO
);
parameter WCKMUX = "WCK";
diff --git a/techlibs/ecp5/dsp_map.v b/techlibs/ecp5/dsp_map.v
new file mode 100644
index 000000000..cb95ddb1c
--- /dev/null
+++ b/techlibs/ecp5/dsp_map.v
@@ -0,0 +1,17 @@
+module \$__MUL18X18 (input [17:0] A, input [17:0] B, output [35:0] Y);
+
+ parameter A_WIDTH = 18;
+ parameter B_WIDTH = 18;
+ parameter Y_WIDTH = 36;
+ parameter A_SIGNED = 0;
+ parameter B_SIGNED = 0;
+
+ MULT18X18D _TECHMAP_REPLACE_ (
+ .A0(A[0]), .A1(A[1]), .A2(A[2]), .A3(A[3]), .A4(A[4]), .A5(A[5]), .A6(A[6]), .A7(A[7]), .A8(A[8]), .A9(A[9]), .A10(A[10]), .A11(A[11]), .A12(A[12]), .A13(A[13]), .A14(A[14]), .A15(A[15]), .A16(A[16]), .A17(A[17]),
+ .B0(B[0]), .B1(B[1]), .B2(B[2]), .B3(B[3]), .B4(B[4]), .B5(B[5]), .B6(B[6]), .B7(B[7]), .B8(B[8]), .B9(B[9]), .B10(B[10]), .B11(B[11]), .B12(B[12]), .B13(B[13]), .B14(B[14]), .B15(B[15]), .B16(B[16]), .B17(B[17]),
+ .C17(1'b0), .C16(1'b0), .C15(1'b0), .C14(1'b0), .C13(1'b0), .C12(1'b0), .C11(1'b0), .C10(1'b0), .C9(1'b0), .C8(1'b0), .C7(1'b0), .C6(1'b0), .C5(1'b0), .C4(1'b0), .C3(1'b0), .C2(1'b0), .C1(1'b0), .C0(1'b0),
+ .SIGNEDA(A_SIGNED), .SIGNEDB(B_SIGNED), .SOURCEA(1'b0), .SOURCEB(1'b0),
+
+ .P0(Y[0]), .P1(Y[1]), .P2(Y[2]), .P3(Y[3]), .P4(Y[4]), .P5(Y[5]), .P6(Y[6]), .P7(Y[7]), .P8(Y[8]), .P9(Y[9]), .P10(Y[10]), .P11(Y[11]), .P12(Y[12]), .P13(Y[13]), .P14(Y[14]), .P15(Y[15]), .P16(Y[16]), .P17(Y[17]), .P18(Y[18]), .P19(Y[19]), .P20(Y[20]), .P21(Y[21]), .P22(Y[22]), .P23(Y[23]), .P24(Y[24]), .P25(Y[25]), .P26(Y[26]), .P27(Y[27]), .P28(Y[28]), .P29(Y[29]), .P30(Y[30]), .P31(Y[31]), .P32(Y[32]), .P33(Y[33]), .P34(Y[34]), .P35(Y[35])
+ );
+endmodule
diff --git a/techlibs/ecp5/synth_ecp5.cc b/techlibs/ecp5/synth_ecp5.cc
index a8075e86e..1f5b1cb6b 100644
--- a/techlibs/ecp5/synth_ecp5.cc
+++ b/techlibs/ecp5/synth_ecp5.cc
@@ -89,6 +89,9 @@ struct SynthEcp5Pass : public ScriptPass
log(" generate an output netlist (and BLIF file) suitable for VPR\n");
log(" (this feature is experimental and incomplete)\n");
log("\n");
+ log(" -nodsp\n");
+ log(" do not map multipliers to MULT18X18D\n");
+ log("\n");
log("\n");
log("The following commands are executed by this synthesis command:\n");
help_script();
@@ -96,7 +99,7 @@ struct SynthEcp5Pass : public ScriptPass
}
string top_opt, blif_file, edif_file, json_file;
- bool noccu2, nodffe, nobram, nolutram, nowidelut, flatten, retime, abc2, abc9, vpr;
+ bool noccu2, nodffe, nobram, nolutram, nowidelut, flatten, retime, abc2, abc9, nodsp, vpr;
void clear_flags() YS_OVERRIDE
{
@@ -114,6 +117,7 @@ struct SynthEcp5Pass : public ScriptPass
abc2 = false;
vpr = false;
abc9 = false;
+ nodsp = false;
}
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
@@ -192,6 +196,10 @@ struct SynthEcp5Pass : public ScriptPass
abc9 = true;
continue;
}
+ if (args[argidx] == "-nodsp") {
+ nodsp = true;
+ continue;
+ }
break;
}
extra_args(args, argidx, design);
@@ -218,17 +226,34 @@ struct SynthEcp5Pass : public ScriptPass
run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
}
- if (flatten && check_label("flatten", "(unless -noflatten)"))
+ if (check_label("coarse"))
{
run("proc");
- run("flatten");
+ if (flatten || help_mode)
+ run("flatten");
run("tribuf -logic");
run("deminout");
- }
-
- if (check_label("coarse"))
- {
- run("synth -run coarse");
+ run("opt_expr");
+ run("opt_clean");
+ run("check");
+ run("opt");
+ run("wreduce");
+ run("peepopt");
+ run("opt_clean");
+ run("share");
+ run("techmap -map +/cmp2lut.v -D LUT_WIDTH=4");
+ run("opt_expr");
+ run("opt_clean");
+ if (!nodsp) {
+ run("techmap -map +/mul2dsp.v -map +/ecp5/dsp_map.v -D DSP_A_MAXWIDTH=18 -D DSP_B_MAXWIDTH=18 -D DSP_A_MINWIDTH=2 -D DSP_B_MINWIDTH=2 -D DSP_NAME=$__MUL18X18", "(unless -nodsp)");
+ run("chtype -set $mul t:$__soft_mul", "(unless -nodsp)");
+ }
+ run("alumacc");
+ run("opt");
+ run("fsm");
+ run("opt -fast");
+ run("memory -nomap");
+ run("opt_clean");
}
if (!nobram && check_label("map_bram", "(skip if -nobram)"))
@@ -280,12 +305,17 @@ struct SynthEcp5Pass : public ScriptPass
if (abc2 || help_mode) {
run("abc", " (only if -abc2)");
}
- run("techmap -map +/ecp5/latches_map.v");
+ std::string techmap_args = "-map +/ecp5/latches_map.v";
+ if (abc9)
+ techmap_args += " -map +/ecp5/abc_map.v -max_iter 1";
+ run("techmap " + techmap_args);
+
if (abc9) {
if (nowidelut)
run("abc9 -lut +/ecp5/abc_5g_nowide.lut -box +/ecp5/abc_5g.box -W 200");
else
run("abc9 -lut +/ecp5/abc_5g.lut -box +/ecp5/abc_5g.box -W 200");
+ run("techmap -map +/ecp5/abc_unmap.v");
} else {
if (nowidelut)
run("abc -lut 4 -dress");
diff --git a/techlibs/efinix/cells_sim.v b/techlibs/efinix/cells_sim.v
index 8c8f6afaa..2fc2034a6 100644
--- a/techlibs/efinix/cells_sim.v
+++ b/techlibs/efinix/cells_sim.v
@@ -5,7 +5,12 @@ module EFX_LUT4(
input I2,
input I3
);
- parameter LUTMASK = 16'h0000;
+ parameter LUTMASK = 16'h0000;
+
+ wire [7:0] s3 = I3 ? LUTMASK[15:8] : LUTMASK[7:0];
+ wire [3:0] s2 = I2 ? s3[ 7:4] : s3[3:0];
+ wire [1:0] s1 = I1 ? s2[ 3:2] : s2[1:0];
+ assign O = I0 ? s1[1] : s1[0];
endmodule
module EFX_ADD(
@@ -17,10 +22,18 @@ module EFX_ADD(
);
parameter I0_POLARITY = 1;
parameter I1_POLARITY = 1;
+
+ wire i0;
+ wire i1;
+
+ assign i0 = I0_POLARITY ? I0 : ~I0;
+ assign i1 = I1_POLARITY ? I1 : ~I1;
+
+ assign {CO, O} = i0 + i1 + CI;
endmodule
module EFX_FF(
- output Q,
+ output reg Q,
input D,
input CE,
input CLK,
@@ -33,6 +46,53 @@ module EFX_FF(
parameter SR_VALUE = 0;
parameter SR_SYNC_PRIORITY = 0;
parameter D_POLARITY = 1;
+
+ wire clk;
+ wire ce;
+ wire sr;
+ wire d;
+ wire prio;
+ wire sync;
+ wire async;
+
+ assign clk = CLK_POLARITY ? CLK : ~CLK;
+ assign ce = CE_POLARITY ? CE : ~CE;
+ assign sr = SR_POLARITY ? SR : ~SR;
+ assign d = D_POLARITY ? D : ~D;
+
+ generate
+ if (SR_SYNC == 1)
+ begin
+ if (SR_SYNC_PRIORITY == 1)
+ begin
+ always @(posedge clk)
+ if (sr)
+ Q <= SR_VALUE;
+ else if (ce)
+ Q <= d;
+ end
+ else
+ begin
+ always @(posedge clk)
+ if (ce)
+ begin
+ if (sr)
+ Q <= SR_VALUE;
+ else
+ Q <= d;
+ end
+ end
+ end
+ else
+ begin
+ always @(posedge clk or posedge sr)
+ if (sr)
+ Q <= SR_VALUE;
+ else if (ce)
+ Q <= d;
+
+ end
+ endgenerate
endmodule
module EFX_GBUFCE(
@@ -41,6 +101,12 @@ module EFX_GBUFCE(
output O
);
parameter CE_POLARITY = 1'b1;
+
+ wire ce;
+ assign ce = CE_POLARITY ? CE : ~CE;
+
+ assign O = I & ce;
+
endmodule
module EFX_RAM_5K(
diff --git a/techlibs/ice40/Makefile.inc b/techlibs/ice40/Makefile.inc
index 76a89b107..92a9956ea 100644
--- a/techlibs/ice40/Makefile.inc
+++ b/techlibs/ice40/Makefile.inc
@@ -27,6 +27,7 @@ $(eval $(call add_share_file,share/ice40,techlibs/ice40/cells_sim.v))
$(eval $(call add_share_file,share/ice40,techlibs/ice40/latches_map.v))
$(eval $(call add_share_file,share/ice40,techlibs/ice40/brams.txt))
$(eval $(call add_share_file,share/ice40,techlibs/ice40/brams_map.v))
+$(eval $(call add_share_file,share/ice40,techlibs/ice40/dsp_map.v))
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc_hx.box))
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc_hx.lut))
$(eval $(call add_share_file,share/ice40,techlibs/ice40/abc_lp.box))
diff --git a/techlibs/ice40/cells_sim.v b/techlibs/ice40/cells_sim.v
index 2a7487f6b..8e5e0358e 100644
--- a/techlibs/ice40/cells_sim.v
+++ b/techlibs/ice40/cells_sim.v
@@ -2,6 +2,10 @@
`define SB_DFF_REG reg Q = 0
// `define SB_DFF_REG reg Q
+`define ABC_ARRIVAL_HX(TIME) `ifdef ICE40_HX (* abc_arrival=TIME *) `endif
+`define ABC_ARRIVAL_LP(TIME) `ifdef ICE40_LP (* abc_arrival=TIME *) `endif
+`define ABC_ARRIVAL_U(TIME) `ifdef ICE40_U (* abc_arrival=TIME *) `endif
+
// SiliconBlue IO Cells
module SB_IO (
@@ -169,20 +173,42 @@ module \$__ICE40_CARRY_WRAPPER (
);
endmodule
+// Max delay from: https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L90
+// https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L90
+// https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L102
+
// Positive Edge SiliconBlue FF Cells
-module SB_DFF (output `SB_DFF_REG, input C, D);
+module SB_DFF (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, D
+);
always @(posedge C)
Q <= D;
endmodule
-module SB_DFFE (output `SB_DFF_REG, input C, E, D);
+module SB_DFFE (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, D
+);
always @(posedge C)
if (E)
Q <= D;
endmodule
-module SB_DFFSR (output `SB_DFF_REG, input C, R, D);
+module SB_DFFSR (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, R, D
+);
always @(posedge C)
if (R)
Q <= 0;
@@ -190,7 +216,13 @@ module SB_DFFSR (output `SB_DFF_REG, input C, R, D);
Q <= D;
endmodule
-module SB_DFFR (output `SB_DFF_REG, input C, R, D);
+module SB_DFFR (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, R, D
+);
always @(posedge C, posedge R)
if (R)
Q <= 0;
@@ -198,7 +230,13 @@ module SB_DFFR (output `SB_DFF_REG, input C, R, D);
Q <= D;
endmodule
-module SB_DFFSS (output `SB_DFF_REG, input C, S, D);
+module SB_DFFSS (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, S, D
+);
always @(posedge C)
if (S)
Q <= 1;
@@ -206,7 +244,13 @@ module SB_DFFSS (output `SB_DFF_REG, input C, S, D);
Q <= D;
endmodule
-module SB_DFFS (output `SB_DFF_REG, input C, S, D);
+module SB_DFFS (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, S, D
+);
always @(posedge C, posedge S)
if (S)
Q <= 1;
@@ -214,7 +258,13 @@ module SB_DFFS (output `SB_DFF_REG, input C, S, D);
Q <= D;
endmodule
-module SB_DFFESR (output `SB_DFF_REG, input C, E, R, D);
+module SB_DFFESR (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, R, D
+);
always @(posedge C)
if (E) begin
if (R)
@@ -224,7 +274,13 @@ module SB_DFFESR (output `SB_DFF_REG, input C, E, R, D);
end
endmodule
-module SB_DFFER (output `SB_DFF_REG, input C, E, R, D);
+module SB_DFFER (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, R, D
+);
always @(posedge C, posedge R)
if (R)
Q <= 0;
@@ -232,7 +288,13 @@ module SB_DFFER (output `SB_DFF_REG, input C, E, R, D);
Q <= D;
endmodule
-module SB_DFFESS (output `SB_DFF_REG, input C, E, S, D);
+module SB_DFFESS (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, S, D
+);
always @(posedge C)
if (E) begin
if (S)
@@ -242,7 +304,13 @@ module SB_DFFESS (output `SB_DFF_REG, input C, E, S, D);
end
endmodule
-module SB_DFFES (output `SB_DFF_REG, input C, E, S, D);
+module SB_DFFES (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, S, D
+);
always @(posedge C, posedge S)
if (S)
Q <= 1;
@@ -252,18 +320,36 @@ endmodule
// Negative Edge SiliconBlue FF Cells
-module SB_DFFN (output `SB_DFF_REG, input C, D);
+module SB_DFFN (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, D
+);
always @(negedge C)
Q <= D;
endmodule
-module SB_DFFNE (output `SB_DFF_REG, input C, E, D);
+module SB_DFFNE (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, D
+);
always @(negedge C)
if (E)
Q <= D;
endmodule
-module SB_DFFNSR (output `SB_DFF_REG, input C, R, D);
+module SB_DFFNSR (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, R, D
+);
always @(negedge C)
if (R)
Q <= 0;
@@ -271,7 +357,13 @@ module SB_DFFNSR (output `SB_DFF_REG, input C, R, D);
Q <= D;
endmodule
-module SB_DFFNR (output `SB_DFF_REG, input C, R, D);
+module SB_DFFNR (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, R, D
+);
always @(negedge C, posedge R)
if (R)
Q <= 0;
@@ -279,7 +371,13 @@ module SB_DFFNR (output `SB_DFF_REG, input C, R, D);
Q <= D;
endmodule
-module SB_DFFNSS (output `SB_DFF_REG, input C, S, D);
+module SB_DFFNSS (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, S, D
+);
always @(negedge C)
if (S)
Q <= 1;
@@ -287,7 +385,13 @@ module SB_DFFNSS (output `SB_DFF_REG, input C, S, D);
Q <= D;
endmodule
-module SB_DFFNS (output `SB_DFF_REG, input C, S, D);
+module SB_DFFNS (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, S, D
+);
always @(negedge C, posedge S)
if (S)
Q <= 1;
@@ -295,7 +399,13 @@ module SB_DFFNS (output `SB_DFF_REG, input C, S, D);
Q <= D;
endmodule
-module SB_DFFNESR (output `SB_DFF_REG, input C, E, R, D);
+module SB_DFFNESR (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, R, D
+);
always @(negedge C)
if (E) begin
if (R)
@@ -305,7 +415,13 @@ module SB_DFFNESR (output `SB_DFF_REG, input C, E, R, D);
end
endmodule
-module SB_DFFNER (output `SB_DFF_REG, input C, E, R, D);
+module SB_DFFNER (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, R, D
+);
always @(negedge C, posedge R)
if (R)
Q <= 0;
@@ -313,7 +429,13 @@ module SB_DFFNER (output `SB_DFF_REG, input C, E, R, D);
Q <= D;
endmodule
-module SB_DFFNESS (output `SB_DFF_REG, input C, E, S, D);
+module SB_DFFNESS (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, S, D
+);
always @(negedge C)
if (E) begin
if (S)
@@ -323,7 +445,13 @@ module SB_DFFNESS (output `SB_DFF_REG, input C, E, S, D);
end
endmodule
-module SB_DFFNES (output `SB_DFF_REG, input C, E, S, D);
+module SB_DFFNES (
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output `SB_DFF_REG,
+ input C, E, S, D
+);
always @(negedge C, posedge S)
if (S)
Q <= 1;
@@ -334,6 +462,9 @@ endmodule
// SiliconBlue RAM Cells
module SB_RAM40_4K (
+ `ABC_ARRIVAL_HX(2146) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401
+ `ABC_ARRIVAL_LP(3163) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401
+ `ABC_ARRIVAL_U(1179) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026
output [15:0] RDATA,
input RCLK, RCLKE, RE,
input [10:0] RADDR,
@@ -502,6 +633,9 @@ module SB_RAM40_4K (
endmodule
module SB_RAM40_4KNR (
+ `ABC_ARRIVAL_HX(2146) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401
+ `ABC_ARRIVAL_LP(3163) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401
+ `ABC_ARRIVAL_U(1179) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026
output [15:0] RDATA,
input RCLKN, RCLKE, RE,
input [10:0] RADDR,
@@ -567,6 +701,9 @@ module SB_RAM40_4KNR (
endmodule
module SB_RAM40_4KNW (
+ `ABC_ARRIVAL_HX(2146) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401
+ `ABC_ARRIVAL_LP(3163) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401
+ `ABC_ARRIVAL_U(1179) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026
output [15:0] RDATA,
input RCLK, RCLKE, RE,
input [10:0] RADDR,
@@ -632,6 +769,9 @@ module SB_RAM40_4KNW (
endmodule
module SB_RAM40_4KNRNW (
+ `ABC_ARRIVAL_HX(2146) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_hx1k.txt#L401
+ `ABC_ARRIVAL_LP(3163) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_lp1k.txt#L401
+ `ABC_ARRIVAL_U(1179) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026
output [15:0] RDATA,
input RCLKN, RCLKE, RE,
input [10:0] RADDR,
@@ -700,7 +840,12 @@ endmodule
module ICESTORM_LC (
input I0, I1, I2, I3, CIN, CLK, CEN, SR,
- output LO, O, COUT
+ output LO,
+ `ABC_ARRIVAL_HX(540)
+ `ABC_ARRIVAL_LP(796)
+ `ABC_ARRIVAL_U(1391)
+ output O,
+ output COUT
);
parameter [15:0] LUT_INIT = 0;
@@ -1300,6 +1445,7 @@ module SB_MAC16 (
input ADDSUBTOP, ADDSUBBOT,
input OHOLDTOP, OHOLDBOT,
input CI, ACCUMCI, SIGNEXTIN,
+ //`ABC_ARRIVAL_U(1984) // https://github.com/cliffordwolf/icestorm/blob/95949315364f8d9b0c693386aefadf44b28e2cf6/icefuzz/timings_up5k.txt#L13026
output [31:0] O,
output CO, ACCUMCO, SIGNEXTOUT
);
diff --git a/techlibs/ice40/dsp_map.v b/techlibs/ice40/dsp_map.v
new file mode 100644
index 000000000..06fa73956
--- /dev/null
+++ b/techlibs/ice40/dsp_map.v
@@ -0,0 +1,34 @@
+module \$__MUL16X16 (input [15:0] A, input [15:0] B, output [31:0] Y);
+ parameter A_SIGNED = 0;
+ parameter B_SIGNED = 0;
+ parameter A_WIDTH = 0;
+ parameter B_WIDTH = 0;
+ parameter Y_WIDTH = 0;
+
+ SB_MAC16 #(
+ .NEG_TRIGGER(1'b0),
+ .C_REG(1'b0),
+ .A_REG(1'b0),
+ .B_REG(1'b0),
+ .D_REG(1'b0),
+ .TOP_8x8_MULT_REG(1'b0),
+ .BOT_8x8_MULT_REG(1'b0),
+ .PIPELINE_16x16_MULT_REG1(1'b0),
+ .PIPELINE_16x16_MULT_REG2(1'b0),
+ .TOPOUTPUT_SELECT(2'b11),
+ .TOPADDSUB_LOWERINPUT(2'b0),
+ .TOPADDSUB_UPPERINPUT(1'b0),
+ .TOPADDSUB_CARRYSELECT(2'b0),
+ .BOTOUTPUT_SELECT(2'b11),
+ .BOTADDSUB_LOWERINPUT(2'b0),
+ .BOTADDSUB_UPPERINPUT(1'b0),
+ .BOTADDSUB_CARRYSELECT(2'b0),
+ .MODE_8x8(1'b0),
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(B_SIGNED)
+ ) _TECHMAP_REPLACE_ (
+ .A(A),
+ .B(B),
+ .O(Y),
+ );
+endmodule
diff --git a/techlibs/ice40/synth_ice40.cc b/techlibs/ice40/synth_ice40.cc
index c6de81bd9..841f10244 100644
--- a/techlibs/ice40/synth_ice40.cc
+++ b/techlibs/ice40/synth_ice40.cc
@@ -238,7 +238,14 @@ struct SynthIce40Pass : public ScriptPass
{
if (check_label("begin"))
{
- run("read_verilog -icells -lib +/ice40/cells_sim.v");
+ std::string define;
+ if (device_opt == "lp")
+ define = "-D ICE40_LP";
+ else if (device_opt == "u")
+ define = "-D ICE40_U";
+ else
+ define = "-D ICE40_HX";
+ run("read_verilog -icells " + define + " -lib +/ice40/cells_sim.v");
run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
run("proc");
}
@@ -265,8 +272,18 @@ struct SynthIce40Pass : public ScriptPass
run("techmap -map +/cmp2lut.v -D LUT_WIDTH=4");
run("opt_expr");
run("opt_clean");
- if (help_mode || dsp)
- run("ice40_dsp", "(if -dsp)");
+ if (help_mode || dsp) {
+ run("techmap -map +/mul2dsp.v -map +/ice40/dsp_map.v -D DSP_A_MAXWIDTH=16 -D DSP_B_MAXWIDTH=16 "
+ "-D DSP_A_MINWIDTH=2 -D DSP_B_MINWIDTH=2 -D DSP_Y_MINWIDTH=11 "
+ "-D DSP_NAME=$__MUL16X16", "(if -dsp)");
+ run("select a:mul2dsp", " (if -dsp)");
+ run("setattr -unset mul2dsp", " (if -dsp)");
+ run("opt_expr -fine", " (if -dsp)");
+ run("wreduce", " (if -dsp)");
+ run("select -clear", " (if -dsp)");
+ run("ice40_dsp", " (if -dsp)");
+ run("chtype -set $mul t:$__soft_mul", "(if -dsp)");
+ }
run("alumacc");
run("opt");
run("fsm");
diff --git a/techlibs/xilinx/Makefile.inc b/techlibs/xilinx/Makefile.inc
index 2b1af289c..ae82311a9 100644
--- a/techlibs/xilinx/Makefile.inc
+++ b/techlibs/xilinx/Makefile.inc
@@ -25,7 +25,10 @@ techlibs/xilinx/brams_init_8.vh: techlibs/xilinx/brams_init.mk
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/cells_map.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/cells_sim.v))
-$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/cells_xtra.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_cells_xtra.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6v_cells_xtra.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_cells_xtra.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xcu_cells_xtra.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams.txt))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams_map.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams_bb.v))
@@ -35,10 +38,15 @@ $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_brams_bb.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/lutrams.txt))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/lutrams_map.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/arith_map.v))
-$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/ff_map.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_ff_map.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_ff_map.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/lut_map.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/mux_map.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/dsp_map.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/abc_map.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/abc_unmap.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/abc_model.v))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/abc_xc7.box))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/abc_xc7.lut))
$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/abc_xc7_nowide.lut))
diff --git a/techlibs/xilinx/abc_map.v b/techlibs/xilinx/abc_map.v
new file mode 100644
index 000000000..e4976092c
--- /dev/null
+++ b/techlibs/xilinx/abc_map.v
@@ -0,0 +1,447 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ * 2019 Eddie Hung <eddie@fpgeh.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+// ============================================================================
+
+module RAM32X1D (
+ output DPO, SPO,
+ (* techmap_autopurge *) input D,
+ (* techmap_autopurge *) input WCLK,
+ (* techmap_autopurge *) input WE,
+ (* techmap_autopurge *) input A0, A1, A2, A3, A4,
+ (* techmap_autopurge *) input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4
+);
+ parameter INIT = 32'h0;
+ parameter IS_WCLK_INVERTED = 1'b0;
+ wire \$DPO , \$SPO ;
+ RAM32X1D #(
+ .INIT(INIT), .IS_WCLK_INVERTED(IS_WCLK_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .DPO(\$DPO ), .SPO(\$SPO ),
+ .D(D), .WCLK(WCLK), .WE(WE),
+ .A0(A0), .A1(A1), .A2(A2), .A3(A3), .A4(A4),
+ .DPRA0(DPRA0), .DPRA1(DPRA1), .DPRA2(DPRA2), .DPRA3(DPRA3), .DPRA4(DPRA4)
+ );
+ \$__ABC_LUT6 dpo (.A(\$DPO ), .S({1'b0, A0, A1, A2, A3, A4}), .Y(DPO));
+ \$__ABC_LUT6 spo (.A(\$SPO ), .S({1'b0, A0, A1, A2, A3, A4}), .Y(SPO));
+endmodule
+
+module RAM64X1D (
+ output DPO, SPO,
+ (* techmap_autopurge *) input D,
+ (* techmap_autopurge *) input WCLK,
+ (* techmap_autopurge *) input WE,
+ (* techmap_autopurge *) input A0, A1, A2, A3, A4, A5,
+ (* techmap_autopurge *) input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5
+);
+ parameter INIT = 64'h0;
+ parameter IS_WCLK_INVERTED = 1'b0;
+ wire \$DPO , \$SPO ;
+ RAM64X1D #(
+ .INIT(INIT), .IS_WCLK_INVERTED(IS_WCLK_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .DPO(\$DPO ), .SPO(\$SPO ),
+ .D(D), .WCLK(WCLK), .WE(WE),
+ .A0(A0), .A1(A1), .A2(A2), .A3(A3), .A4(A4), .A5(A5),
+ .DPRA0(DPRA0), .DPRA1(DPRA1), .DPRA2(DPRA2), .DPRA3(DPRA3), .DPRA4(DPRA4), .DPRA5(DPRA5)
+ );
+ \$__ABC_LUT6 dpo (.A(\$DPO ), .S({A0, A1, A2, A3, A4, A5}), .Y(DPO));
+ \$__ABC_LUT6 spo (.A(\$SPO ), .S({A0, A1, A2, A3, A4, A5}), .Y(SPO));
+endmodule
+
+module RAM128X1D (
+ output DPO, SPO,
+ (* techmap_autopurge *) input D,
+ (* techmap_autopurge *) input WCLK,
+ (* techmap_autopurge *) input WE,
+ (* techmap_autopurge *) input [6:0] A, DPRA
+);
+ parameter INIT = 128'h0;
+ parameter IS_WCLK_INVERTED = 1'b0;
+ wire \$DPO , \$SPO ;
+ RAM128X1D #(
+ .INIT(INIT), .IS_WCLK_INVERTED(IS_WCLK_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .DPO(\$DPO ), .SPO(\$SPO ),
+ .D(D), .WCLK(WCLK), .WE(WE),
+ .A(A),
+ .DPRA(DPRA)
+ );
+ \$__ABC_LUT7 dpo (.A(\$DPO ), .S(A), .Y(DPO));
+ \$__ABC_LUT7 spo (.A(\$SPO ), .S(A), .Y(SPO));
+endmodule
+
+module SRL16E (
+ output Q,
+ (* techmap_autopurge *) input A0, A1, A2, A3, CE, CLK, D
+);
+ parameter [15:0] INIT = 16'h0000;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ wire \$Q ;
+ SRL16E #(
+ .INIT(INIT), .IS_CLK_INVERTED(IS_CLK_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .Q(\$Q ),
+ .A0(A0), .A1(A1), .A2(A2), .A3(A3), .CE(CE), .CLK(CLK), .D(D)
+ );
+ \$__ABC_LUT6 q (.A(\$Q ), .S({1'b1, A0, A1, A2, A3, 1'b1}), .Y(Q));
+endmodule
+
+module SRLC32E (
+ output Q,
+ output Q31,
+ (* techmap_autopurge *) input [4:0] A,
+ (* techmap_autopurge *) input CE, CLK, D
+);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ wire \$Q ;
+ SRLC32E #(
+ .INIT(INIT), .IS_CLK_INVERTED(IS_CLK_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .Q(\$Q ), .Q31(Q31),
+ .A(A), .CE(CE), .CLK(CLK), .D(D)
+ );
+ \$__ABC_LUT6 q (.A(\$Q ), .S({1'b1, A}), .Y(Q));
+endmodule
+
+module DSP48E1 (
+ (* techmap_autopurge *) output [29:0] ACOUT,
+ (* techmap_autopurge *) output [17:0] BCOUT,
+ (* techmap_autopurge *) output reg CARRYCASCOUT,
+ (* techmap_autopurge *) output reg [3:0] CARRYOUT,
+ (* techmap_autopurge *) output reg MULTSIGNOUT,
+ (* techmap_autopurge *) output OVERFLOW,
+ (* techmap_autopurge *) output reg signed [47:0] P,
+ (* techmap_autopurge *) output PATTERNBDETECT,
+ (* techmap_autopurge *) output PATTERNDETECT,
+ (* techmap_autopurge *) output [47:0] PCOUT,
+ (* techmap_autopurge *) output UNDERFLOW,
+ (* techmap_autopurge *) input signed [29:0] A,
+ (* techmap_autopurge *) input [29:0] ACIN,
+ (* techmap_autopurge *) input [3:0] ALUMODE,
+ (* techmap_autopurge *) input signed [17:0] B,
+ (* techmap_autopurge *) input [17:0] BCIN,
+ (* techmap_autopurge *) input [47:0] C,
+ (* techmap_autopurge *) input CARRYCASCIN,
+ (* techmap_autopurge *) input CARRYIN,
+ (* techmap_autopurge *) input [2:0] CARRYINSEL,
+ (* techmap_autopurge *) input CEA1,
+ (* techmap_autopurge *) input CEA2,
+ (* techmap_autopurge *) input CEAD,
+ (* techmap_autopurge *) input CEALUMODE,
+ (* techmap_autopurge *) input CEB1,
+ (* techmap_autopurge *) input CEB2,
+ (* techmap_autopurge *) input CEC,
+ (* techmap_autopurge *) input CECARRYIN,
+ (* techmap_autopurge *) input CECTRL,
+ (* techmap_autopurge *) input CED,
+ (* techmap_autopurge *) input CEINMODE,
+ (* techmap_autopurge *) input CEM,
+ (* techmap_autopurge *) input CEP,
+ (* techmap_autopurge *) input CLK,
+ (* techmap_autopurge *) input [24:0] D,
+ (* techmap_autopurge *) input [4:0] INMODE,
+ (* techmap_autopurge *) input MULTSIGNIN,
+ (* techmap_autopurge *) input [6:0] OPMODE,
+ (* techmap_autopurge *) input [47:0] PCIN,
+ (* techmap_autopurge *) input RSTA,
+ (* techmap_autopurge *) input RSTALLCARRYIN,
+ (* techmap_autopurge *) input RSTALUMODE,
+ (* techmap_autopurge *) input RSTB,
+ (* techmap_autopurge *) input RSTC,
+ (* techmap_autopurge *) input RSTCTRL,
+ (* techmap_autopurge *) input RSTD,
+ (* techmap_autopurge *) input RSTINMODE,
+ (* techmap_autopurge *) input RSTM,
+ (* techmap_autopurge *) input RSTP
+);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+
+ parameter _TECHMAP_CELLTYPE_ = "";
+ localparam techmap_guard = (_TECHMAP_CELLTYPE_ != "");
+
+`define DSP48E1_INST(__CELL__) """
+__CELL__ #(
+ .ACASCREG(ACASCREG),
+ .ADREG(ADREG),
+ .ALUMODEREG(ALUMODEREG),
+ .AREG(AREG),
+ .AUTORESET_PATDET(AUTORESET_PATDET),
+ .A_INPUT(A_INPUT),
+ .BCASCREG(BCASCREG),
+ .BREG(BREG),
+ .B_INPUT(B_INPUT),
+ .CARRYINREG(CARRYINREG),
+ .CARRYINSELREG(CARRYINSELREG),
+ .CREG(CREG),
+ .DREG(DREG),
+ .INMODEREG(INMODEREG),
+ .MREG(MREG),
+ .OPMODEREG(OPMODEREG),
+ .PREG(PREG),
+ .SEL_MASK(SEL_MASK),
+ .SEL_PATTERN(SEL_PATTERN),
+ .USE_DPORT(USE_DPORT),
+ .USE_MULT(USE_MULT),
+ .USE_PATTERN_DETECT(USE_PATTERN_DETECT),
+ .USE_SIMD(USE_SIMD),
+ .MASK(MASK),
+ .PATTERN(PATTERN),
+ .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED),
+ .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED),
+ .IS_CLK_INVERTED(IS_CLK_INVERTED),
+ .IS_INMODE_INVERTED(IS_INMODE_INVERTED),
+ .IS_OPMODE_INVERTED(IS_OPMODE_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .ACOUT(ACOUT),
+ .BCOUT(BCOUT),
+ .CARRYCASCOUT(CARRYCASCOUT),
+ .CARRYOUT(CARRYOUT),
+ .MULTSIGNOUT(MULTSIGNOUT),
+ .OVERFLOW(OVERFLOW),
+ .P(oP),
+ .PATTERNBDETECT(PATTERNBDETECT),
+ .PATTERNDETECT(PATTERNDETECT),
+ .PCOUT(oPCOUT),
+ .UNDERFLOW(UNDERFLOW),
+ .A(iA),
+ .ACIN(ACIN),
+ .ALUMODE(ALUMODE),
+ .B(iB),
+ .BCIN(BCIN),
+ .C(iC),
+ .CARRYCASCIN(CARRYCASCIN),
+ .CARRYIN(CARRYIN),
+ .CARRYINSEL(CARRYINSEL),
+ .CEA1(CEA1),
+ .CEA2(CEA2),
+ .CEAD(CEAD),
+ .CEALUMODE(CEALUMODE),
+ .CEB1(CEB1),
+ .CEB2(CEB2),
+ .CEC(CEC),
+ .CECARRYIN(CECARRYIN),
+ .CECTRL(CECTRL),
+ .CED(CED),
+ .CEINMODE(CEINMODE),
+ .CEM(CEM),
+ .CEP(CEP),
+ .CLK(CLK),
+ .D(iD),
+ .INMODE(INMODE),
+ .MULTSIGNIN(MULTSIGNIN),
+ .OPMODE(OPMODE),
+ .PCIN(PCIN),
+ .RSTA(RSTA),
+ .RSTALLCARRYIN(RSTALLCARRYIN),
+ .RSTALUMODE(RSTALUMODE),
+ .RSTB(RSTB),
+ .RSTC(RSTC),
+ .RSTCTRL(RSTCTRL),
+ .RSTD(RSTD),
+ .RSTINMODE(RSTINMODE),
+ .RSTM(RSTM),
+ .RSTP(RSTP)
+ );
+"""
+
+ wire [29:0] iA;
+ wire [17:0] iB;
+ wire [47:0] iC;
+ wire [24:0] iD;
+
+ wire pA, pB, pC, pD, pAD, pM, pP;
+ wire [47:0] oP, mP;
+ wire [47:0] oPCOUT, mPCOUT;
+
+ generate
+ if (USE_MULT == "MULTIPLY" && USE_DPORT == "FALSE") begin
+ // Disconnect the A-input if MREG is enabled, since
+ // combinatorial path is broken
+ if (AREG == 0 && MREG == 0 && PREG == 0)
+ assign iA = A, pA = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
+ if (BREG == 0 && MREG == 0 && PREG == 0)
+ assign iB = B, pB = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
+ if (CREG == 0 && PREG == 0)
+ assign iC = C, pC = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
+ if (DREG == 0)
+ assign iD = D;
+ else if (techmap_guard)
+ $error("Invalid DSP48E1 configuration: DREG enabled but USE_DPORT == \"FALSE\"");
+ assign pD = 1'bx;
+ if (ADREG == 1 && techmap_guard)
+ $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
+ assign pAD = 1'bx;
+ if (PREG == 0) begin
+ if (MREG == 1)
+ \$__ABC_REG rM (.Q(pM));
+ else
+ assign pM = 1'bx;
+ assign pP = 1'bx;
+ end else begin
+ assign pM = 1'bx;
+ \$__ABC_REG rP (.Q(pP));
+ end
+
+ if (MREG == 0 && PREG == 0)
+ assign mP = oP, mPCOUT = oPCOUT;
+ else
+ assign mP = 1'bx, mPCOUT = 1'bx;
+ \$__ABC_DSP48E1_MULT_P_MUX muxP (
+ .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
+ );
+ \$__ABC_DSP48E1_MULT_PCOUT_MUX muxPCOUT (
+ .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
+ );
+
+ `DSP48E1_INST(\$__ABC_DSP48E1_MULT )
+ end
+ else if (USE_MULT == "MULTIPLY" && USE_DPORT == "TRUE") begin
+ // Disconnect the A-input if MREG is enabled, since
+ // combinatorial path is broken
+ if (AREG == 0 && ADREG == 0 && MREG == 0 && PREG == 0)
+ assign iA = A, pA = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
+ if (BREG == 0 && MREG == 0 && PREG == 0)
+ assign iB = B, pB = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
+ if (CREG == 0 && PREG == 0)
+ assign iC = C, pC = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
+ if (DREG == 0 && ADREG == 0)
+ assign iD = D, pD = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(25)) rD (.I(D), .O(iD), .Q(pD));
+ if (PREG == 0) begin
+ if (MREG == 1) begin
+ assign pAD = 1'bx;
+ \$__ABC_REG rM (.Q(pM));
+ end else begin
+ if (ADREG == 1)
+ \$__ABC_REG rAD (.Q(pAD));
+ else
+ assign pAD = 1'bx;
+ assign pM = 1'bx;
+ end
+ assign pP = 1'bx;
+ end else begin
+ assign pAD = 1'bx, pM = 1'bx;
+ \$__ABC_REG rP (.Q(pP));
+ end
+
+ if (MREG == 0 && PREG == 0)
+ assign mP = oP, mPCOUT = oPCOUT;
+ else
+ assign mP = 1'bx, mPCOUT = 1'bx;
+ \$__ABC_DSP48E1_MULT_DPORT_P_MUX muxP (
+ .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
+ );
+ \$__ABC_DSP48E1_MULT_DPORT_PCOUT_MUX muxPCOUT (
+ .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
+ );
+
+ `DSP48E1_INST(\$__ABC_DSP48E1_MULT_DPORT )
+ end
+ else if (USE_MULT == "NONE" && USE_DPORT == "FALSE") begin
+ // Disconnect the A-input if MREG is enabled, since
+ // combinatorial path is broken
+ if (AREG == 0 && PREG == 0)
+ assign iA = A, pA = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(30)) rA (.I(A), .O(iA), .Q(pA));
+ if (BREG == 0 && PREG == 0)
+ assign iB = B, pB = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(18)) rB (.I(B), .O(iB), .Q(pB));
+ if (CREG == 0 && PREG == 0)
+ assign iC = C, pC = 1'bx;
+ else
+ \$__ABC_REG #(.WIDTH(48)) rC (.I(C), .O(iC), .Q(pC));
+ if (DREG == 1 && techmap_guard)
+ $error("Invalid DSP48E1 configuration: DREG enabled but USE_DPORT == \"FALSE\"");
+ assign pD = 1'bx;
+ if (ADREG == 1 && techmap_guard)
+ $error("Invalid DSP48E1 configuration: ADREG enabled but USE_DPORT == \"FALSE\"");
+ assign pAD = 1'bx;
+ if (MREG == 1 && techmap_guard)
+ $error("Invalid DSP48E1 configuration: MREG enabled but USE_MULT == \"NONE\"");
+ assign pM = 1'bx;
+ if (PREG == 1)
+ \$__ABC_REG rP (.Q(pP));
+ else
+ assign pP = 1'bx;
+
+ if (MREG == 0 && PREG == 0)
+ assign mP = oP, mPCOUT = oPCOUT;
+ else
+ assign mP = 1'bx, mPCOUT = 1'bx;
+ \$__ABC_DSP48E1_P_MUX muxP (
+ .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oP), .Mq(pM), .P(mP), .Pq(pP), .O(P)
+ );
+ \$__ABC_DSP48E1_PCOUT_MUX muxPCOUT (
+ .Aq(pA), .Bq(pB), .Cq(pC), .Dq(pD), .ADq(pAD), .I(oPCOUT), .Mq(pM), .P(mPCOUT), .Pq(pP), .O(PCOUT)
+ );
+
+ `DSP48E1_INST(\$__ABC_DSP48E1 )
+ end
+ else
+ $error("Invalid DSP48E1 configuration");
+ endgenerate
+ `undef DSP48E1_INST
+endmodule
diff --git a/techlibs/xilinx/abc_model.v b/techlibs/xilinx/abc_model.v
new file mode 100644
index 000000000..f19235a27
--- /dev/null
+++ b/techlibs/xilinx/abc_model.v
@@ -0,0 +1,190 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ * 2019 Eddie Hung <eddie@fpgeh.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+// ============================================================================
+
+// Box containing MUXF7.[AB] + MUXF8,
+// Necessary to make these an atomic unit so that
+// ABC cannot optimise just one of the MUXF7 away
+// and expect to save on its delay
+(* abc_box_id = 3, lib_whitebox *)
+module \$__XILINX_MUXF78 (output O, input I0, I1, I2, I3, S0, S1);
+ assign O = S1 ? (S0 ? I3 : I2)
+ : (S0 ? I1 : I0);
+endmodule
+
+// Box to emulate comb/seq behaviour of RAMD{32,64} and SRL{16,32}
+// Necessary since RAMD* and SRL* have both combinatorial (i.e.
+// same-cycle read operation) and sequential (write operation
+// is only committed on the next clock edge).
+// To model the combinatorial path, such cells have to be split
+// into comb and seq parts, with this box modelling only the former.
+(* abc_box_id=2000 *)
+module \$__ABC_LUT6 (input A, input [5:0] S, output Y);
+endmodule
+// Box to emulate comb/seq behaviour of RAMD128
+(* abc_box_id=2001 *)
+module \$__ABC_LUT7 (input A, input [6:0] S, output Y);
+endmodule
+
+
+// Modules used to model the comb/seq behaviour of DSP48E1
+// With abc_map.v responsible for splicing the below modules
+// between the combinatorial DSP48E1 box (e.g. disconnecting
+// A when AREG, MREG or PREG is enabled and splicing in the
+// "$__ABC_DSP48E1_REG" blackbox as "REG" in the diagram below)
+// this acts to first disables the combinatorial path (as there
+// is no connectivity through REG), and secondly, since this is
+// blackbox a new PI will be introduced with an arrival time of
+// zero.
+// Note: Since these "$__ABC_DSP48E1_REG" modules are of a
+// sequential nature, they are not passed as a box to ABC and
+// (desirably) represented as PO/PIs.
+//
+// At the DSP output, we place a blackbox mux ("M" in the diagram
+// below) to capture the fact that the critical-path could come
+// from any one of its inputs.
+// In contrast to "REG", the "$__ABC_DSP48E1_*_MUX" modules are
+// combinatorial blackboxes that do get passed to ABC.
+// The propagation delay through this box (specified in the box
+// file) captures the arrival time of the register (i.e.
+// propagation from AREG to P after clock edge), or zero delay
+// for the combinatorial path from the DSP.
+//
+// Doing so should means that ABC is able to analyse the
+// worst-case delay through to P, regardless of if it was
+// through any combinatorial paths (e.g. B, below) or an
+// internal register (A2REG).
+// However, the true value of being as complete as this is
+// questionable since if AREG=1 and BREG=0 (as below)
+// then the worse-case path would very likely be through B
+// and very unlikely to be through AREG.Q...?
+//
+// In graphical form:
+//
+// +-----+
+// +------>> REG >>----+
+// | +-----+ |
+// | |
+// | +---------+ | __
+// A >>-+X X-| | +--| \
+// | DSP48E1 |P | M |--->> P
+// | AREG=1 |-------|__/
+// B >>------| |
+// +---------+
+//
+`define ABC_DSP48E1_MUX(__NAME__) """
+module __NAME__ (input Aq, ADq, Bq, Cq, Dq, input [47:0] I, input Mq, input [47:0] P, input Pq, output [47:0] O);
+endmodule
+"""
+(* abc_box_id=2100 *) `ABC_DSP48E1_MUX(\$__ABC_DSP48E1_MULT_P_MUX )
+(* abc_box_id=2101 *) `ABC_DSP48E1_MUX(\$__ABC_DSP48E1_MULT_PCOUT_MUX )
+(* abc_box_id=2102 *) `ABC_DSP48E1_MUX(\$__ABC_DSP48E1_MULT_DPORT_P_MUX )
+(* abc_box_id=2103 *) `ABC_DSP48E1_MUX(\$__ABC_DSP48E1_MULT_DPORT_PCOUT_MUX )
+(* abc_box_id=2104 *) `ABC_DSP48E1_MUX(\$__ABC_DSP48E1_P_MUX )
+(* abc_box_id=2105 *) `ABC_DSP48E1_MUX(\$__ABC_DSP48E1_PCOUT_MUX )
+
+`define ABC_DSP48E1(__NAME__) """
+module __NAME__ (
+ output [29:0] ACOUT,
+ output [17:0] BCOUT,
+ output reg CARRYCASCOUT,
+ output reg [3:0] CARRYOUT,
+ output reg MULTSIGNOUT,
+ output OVERFLOW,
+ output reg signed [47:0] P,
+ output PATTERNBDETECT,
+ output PATTERNDETECT,
+ output [47:0] PCOUT,
+ output UNDERFLOW,
+ input signed [29:0] A,
+ input [29:0] ACIN,
+ input [3:0] ALUMODE,
+ input signed [17:0] B,
+ input [17:0] BCIN,
+ input [47:0] C,
+ input CARRYCASCIN,
+ input CARRYIN,
+ input [2:0] CARRYINSEL,
+ input CEA1,
+ input CEA2,
+ input CEAD,
+ input CEALUMODE,
+ input CEB1,
+ input CEB2,
+ input CEC,
+ input CECARRYIN,
+ input CECTRL,
+ input CED,
+ input CEINMODE,
+ input CEM,
+ input CEP,
+ input CLK,
+ input [24:0] D,
+ input [4:0] INMODE,
+ input MULTSIGNIN,
+ input [6:0] OPMODE,
+ input [47:0] PCIN,
+ input RSTA,
+ input RSTALLCARRYIN,
+ input RSTALUMODE,
+ input RSTB,
+ input RSTC,
+ input RSTCTRL,
+ input RSTD,
+ input RSTINMODE,
+ input RSTM,
+ input RSTP
+);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+endmodule
+"""
+(* abc_box_id=3000 *) `ABC_DSP48E1(\$__ABC_DSP48E1_MULT )
+(* abc_box_id=3001 *) `ABC_DSP48E1(\$__ABC_DSP48E1_MULT_DPORT )
+(* abc_box_id=3002 *) `ABC_DSP48E1(\$__ABC_DSP48E1 )
diff --git a/techlibs/xilinx/abc_unmap.v b/techlibs/xilinx/abc_unmap.v
new file mode 100644
index 000000000..8bd0579ed
--- /dev/null
+++ b/techlibs/xilinx/abc_unmap.v
@@ -0,0 +1,211 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ * 2019 Eddie Hung <eddie@fpgeh.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+// ============================================================================
+
+module \$__ABC_LUT6 (input A, input [5:0] S, output Y);
+ assign Y = A;
+endmodule
+module \$__ABC_LUT7 (input A, input [6:0] S, output Y);
+ assign Y = A;
+endmodule
+
+module \$__ABC_REG (input [WIDTH-1:0] I, output [WIDTH-1:0] O, output Q);
+ parameter WIDTH = 1;
+ assign O = I;
+endmodule
+(* techmap_celltype = "$__ABC_DSP48E1_MULT_P_MUX $__ABC_DSP48E1_MULT_PCOUT_MUX $__ABC_DSP48E1_MULT_DPORT_P_MUX $__ABC_DSP48E1_MULT_DPORT_PCOUT_MUX $__ABC_DSP48E1_P_MUX $__ABC_DSP48E1_PCOUT_MUX" *)
+module \$__ABC_DSP48E1_MUX (
+ input Aq, Bq, Cq, Dq, ADq,
+ input [47:0] I,
+ input Mq,
+ input [47:0] P,
+ input Pq,
+ output [47:0] O
+);
+ assign O = I;
+endmodule
+
+(* techmap_celltype = "$__ABC_DSP48E1_MULT $__ABC_DSP48E1_MULT_DPORT $__ABC_DSP48E1" *)
+module \$__ABC_DSP48E1 (
+ (* techmap_autopurge *) output [29:0] ACOUT,
+ (* techmap_autopurge *) output [17:0] BCOUT,
+ (* techmap_autopurge *) output reg CARRYCASCOUT,
+ (* techmap_autopurge *) output reg [3:0] CARRYOUT,
+ (* techmap_autopurge *) output reg MULTSIGNOUT,
+ (* techmap_autopurge *) output OVERFLOW,
+ (* techmap_autopurge *) output reg signed [47:0] P,
+ (* techmap_autopurge *) output PATTERNBDETECT,
+ (* techmap_autopurge *) output PATTERNDETECT,
+ (* techmap_autopurge *) output [47:0] PCOUT,
+ (* techmap_autopurge *) output UNDERFLOW,
+ (* techmap_autopurge *) input signed [29:0] A,
+ (* techmap_autopurge *) input [29:0] ACIN,
+ (* techmap_autopurge *) input [3:0] ALUMODE,
+ (* techmap_autopurge *) input signed [17:0] B,
+ (* techmap_autopurge *) input [17:0] BCIN,
+ (* techmap_autopurge *) input [47:0] C,
+ (* techmap_autopurge *) input CARRYCASCIN,
+ (* techmap_autopurge *) input CARRYIN,
+ (* techmap_autopurge *) input [2:0] CARRYINSEL,
+ (* techmap_autopurge *) input CEA1,
+ (* techmap_autopurge *) input CEA2,
+ (* techmap_autopurge *) input CEAD,
+ (* techmap_autopurge *) input CEALUMODE,
+ (* techmap_autopurge *) input CEB1,
+ (* techmap_autopurge *) input CEB2,
+ (* techmap_autopurge *) input CEC,
+ (* techmap_autopurge *) input CECARRYIN,
+ (* techmap_autopurge *) input CECTRL,
+ (* techmap_autopurge *) input CED,
+ (* techmap_autopurge *) input CEINMODE,
+ (* techmap_autopurge *) input CEM,
+ (* techmap_autopurge *) input CEP,
+ (* techmap_autopurge *) input CLK,
+ (* techmap_autopurge *) input [24:0] D,
+ (* techmap_autopurge *) input [4:0] INMODE,
+ (* techmap_autopurge *) input MULTSIGNIN,
+ (* techmap_autopurge *) input [6:0] OPMODE,
+ (* techmap_autopurge *) input [47:0] PCIN,
+ (* techmap_autopurge *) input RSTA,
+ (* techmap_autopurge *) input RSTALLCARRYIN,
+ (* techmap_autopurge *) input RSTALUMODE,
+ (* techmap_autopurge *) input RSTB,
+ (* techmap_autopurge *) input RSTC,
+ (* techmap_autopurge *) input RSTCTRL,
+ (* techmap_autopurge *) input RSTD,
+ (* techmap_autopurge *) input RSTINMODE,
+ (* techmap_autopurge *) input RSTM,
+ (* techmap_autopurge *) input RSTP
+);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+
+ DSP48E1 #(
+ .ACASCREG(ACASCREG),
+ .ADREG(ADREG),
+ .ALUMODEREG(ALUMODEREG),
+ .AREG(AREG),
+ .AUTORESET_PATDET(AUTORESET_PATDET),
+ .A_INPUT(A_INPUT),
+ .BCASCREG(BCASCREG),
+ .BREG(BREG),
+ .B_INPUT(B_INPUT),
+ .CARRYINREG(CARRYINREG),
+ .CARRYINSELREG(CARRYINSELREG),
+ .CREG(CREG),
+ .DREG(DREG),
+ .INMODEREG(INMODEREG),
+ .MREG(MREG),
+ .OPMODEREG(OPMODEREG),
+ .PREG(PREG),
+ .SEL_MASK(SEL_MASK),
+ .SEL_PATTERN(SEL_PATTERN),
+ .USE_DPORT(USE_DPORT),
+ .USE_MULT(USE_MULT),
+ .USE_PATTERN_DETECT(USE_PATTERN_DETECT),
+ .USE_SIMD(USE_SIMD),
+ .MASK(MASK),
+ .PATTERN(PATTERN),
+ .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED),
+ .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED),
+ .IS_CLK_INVERTED(IS_CLK_INVERTED),
+ .IS_INMODE_INVERTED(IS_INMODE_INVERTED),
+ .IS_OPMODE_INVERTED(IS_OPMODE_INVERTED)
+ ) _TECHMAP_REPLACE_ (
+ .ACOUT(ACOUT),
+ .BCOUT(BCOUT),
+ .CARRYCASCOUT(CARRYCASCOUT),
+ .CARRYOUT(CARRYOUT),
+ .MULTSIGNOUT(MULTSIGNOUT),
+ .OVERFLOW(OVERFLOW),
+ .P(P),
+ .PATTERNBDETECT(PATTERNBDETECT),
+ .PATTERNDETECT(PATTERNDETECT),
+ .PCOUT(PCOUT),
+ .UNDERFLOW(UNDERFLOW),
+ .A(A),
+ .ACIN(ACIN),
+ .ALUMODE(ALUMODE),
+ .B(B),
+ .BCIN(BCIN),
+ .C(C),
+ .CARRYCASCIN(CARRYCASCIN),
+ .CARRYIN(CARRYIN),
+ .CARRYINSEL(CARRYINSEL),
+ .CEA1(CEA1),
+ .CEA2(CEA2),
+ .CEAD(CEAD),
+ .CEALUMODE(CEALUMODE),
+ .CEB1(CEB1),
+ .CEB2(CEB2),
+ .CEC(CEC),
+ .CECARRYIN(CECARRYIN),
+ .CECTRL(CECTRL),
+ .CED(CED),
+ .CEINMODE(CEINMODE),
+ .CEM(CEM),
+ .CEP(CEP),
+ .CLK(CLK),
+ .D(D),
+ .INMODE(INMODE),
+ .MULTSIGNIN(MULTSIGNIN),
+ .OPMODE(OPMODE),
+ .PCIN(PCIN),
+ .RSTA(RSTA),
+ .RSTALLCARRYIN(RSTALLCARRYIN),
+ .RSTALUMODE(RSTALUMODE),
+ .RSTB(RSTB),
+ .RSTC(RSTC),
+ .RSTCTRL(RSTCTRL),
+ .RSTD(RSTD),
+ .RSTINMODE(RSTINMODE),
+ .RSTM(RSTM),
+ .RSTP(RSTP)
+ );
+endmodule
diff --git a/techlibs/xilinx/abc_xc7.box b/techlibs/xilinx/abc_xc7.box
index 3789ff350..3da3d1b3f 100644
--- a/techlibs/xilinx/abc_xc7.box
+++ b/techlibs/xilinx/abc_xc7.box
@@ -1,4 +1,5 @@
# Max delays from https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf
+# https://github.com/SymbiFlow/prjxray-db/blob/23c8b0851f979f0799318eaca90174413a46b257/artix7/timings/slicel.sdf
# NB: Inputs/Outputs must be ordered alphabetically
# (with exceptions for carry in/out)
@@ -6,7 +7,7 @@
# Average across F7[AB]MUX
# Inputs: I0 I1 S0
# Outputs: O
-F7MUX 1 1 3 1
+MUXF7 1 1 3 1
204 208 286
# Inputs: I0 I1 S0
@@ -14,6 +15,10 @@ F7MUX 1 1 3 1
MUXF8 2 1 3 1
104 94 273
+# Box containing MUXF7.[AB] + MUXF8,
+# Necessary to make these an atomic unit so that
+# ABC cannot optimise just one of the MUXF7 away
+# and expect to save on its delay
# Inputs: I0 I1 I2 I3 S0 S1
# Outputs: O
$__MUXF78 3 1 6 1
@@ -37,22 +42,1124 @@ CARRY4 4 1 10 8
580 526 507 398 385 508 528 378 380 114
# SLICEM/A6LUT
-# Inputs: A0 A1 A2 A3 A4 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 WCLK WE
-# Outputs: DPO SPO
-RAM32X1D 5 0 13 2
-- - - - - - 631 472 407 238 127 - -
-631 472 407 238 127 - - - - - - - -
+# Box to emulate comb/seq behaviour of RAMD{32,64} and SRL{16,32}
+# Necessary since RAMD* and SRL* have both combinatorial (i.e.
+# same-cycle read operation) and sequential (write operation
+# is only committed on the next clock edge).
+# To model the combinatorial path, such cells have to be split
+# into comb and seq parts, with this box modelling only the former.
+# Inputs: A S0 S1 S2 S3 S4 S5
+# Outputs: Y
+$__ABC_LUT6 2000 0 7 1
+0 642 631 472 407 238 127
-# SLICEM/A6LUT
-# Inputs: A0 A1 A2 A3 A4 A5 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 DPRA5 WCLK WE
+# SLICEM/A6LUT + F7BMUX
+# Box to emulate comb/seq behaviour of RAMD128
+# Inputs: A S0 S1 S2 S3 S4 S5 S6
# Outputs: DPO SPO
-RAM64X1D 6 0 15 2
-- - - - - - - 642 631 472 407 238 127 - -
-642 631 472 407 238 127 - - - - - - - - -
+$__ABC_LUT7 2001 0 8 1
+0 1047 1036 877 812 643 532 478
-# SLICEM/A6LUT + F7[AB]MUX
-# Inputs: A0 A1 A2 A3 A4 A5 A6 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 DPRA5 DPRA6 WCLK WE
-# Outputs: DPO SPO
-RAM128X1D 7 0 17 2
-- - - - - - - - 1009 998 839 774 605 494 450 - -
-1047 1036 877 812 643 532 478 - - - - - - - - - -
+# Boxes used to represent the comb/seq behaviour of DSP48E1
+# With abc_map.v responsible for disconnecting inputs to
+# the combinatorial DSP48E1 model by a register (e.g.
+# disconnecting A when AREG, MREG or PREG is enabled)
+# this mux captures the existence of a replacement path
+# between AREG/BREG/CREG/etc. and P/PCOUT.
+# Since the Aq/ADq/Bq/etc. inputs are assumed to arrive at
+# the mux at zero time, the combinatorial delay through
+# these muxes thus represents the clock-to-q delay at
+# P/PCOUT.
+$__ABC_DSP48E1_MULT_P_MUX 2100 0 103 48
+# A AD B C D I M P Pq
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+2952 - 2813 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+$__ABC_DSP48E1_MULT_PCOUT_MUX 2101 0 103 48
+# A AD B C D I M P Pq
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+3098 - 2960 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+$__ABC_DSP48E1_MULT_DPORT_P_MUX 2102 0 103 48
+# A AD B C D I M P Pq
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+3935 2958 2813 1687 3908 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+$__ABC_DSP48E1_MULT_DPORT_PCOUT_MUX 2103 0 103 48
+# A AD B C D I M P Pq
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+4083 2859 2960 1835 4056 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+$__ABC_DSP48E1_P_MUX 2104 0 103 48
+# A AD B C D I M P Pq
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+1632 - 1616 1687 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329
+$__ABC_DSP48E1_PCOUT_MUX 2105 0 103 48
+# A AD B C D I M P Pq
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+1780 - 1765 1835 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435
+
+$__ABC_DSP48E1_MULT 3000 0 263 154
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 2823 - - 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 2970 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+$__ABC_DSP48E1_MULT_DPORT 3001 0 263 154
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 3806 - - 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 3954 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 2690 - - 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 2838 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 3717 - - 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+$__ABC_DSP48E1 3002 0 263 154
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 1523 - - 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 1671 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 1509 - - 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 1658 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 1325 - - 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 1474 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 - - 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 1255 -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/techlibs/xilinx/cells_map.v b/techlibs/xilinx/cells_map.v
index b8e5bafc7..a15884ec4 100644
--- a/techlibs/xilinx/cells_map.v
+++ b/techlibs/xilinx/cells_map.v
@@ -331,7 +331,6 @@ module \$_MUX16_ (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, S, T, U, V, Y)
endmodule
`endif
-`ifndef _ABC
module \$__XILINX_MUXF78 (O, I0, I1, I2, I3, S0, S1);
output O;
input I0, I1, I2, I3, S0, S1;
@@ -364,4 +363,3 @@ module \$__XILINX_MUXF78 (O, I0, I1, I2, I3, S0, S1);
else
MUXF8 mux8 (.I0(T0), .I1(T1), .S(S1), .O(O));
endmodule
-`endif
diff --git a/techlibs/xilinx/cells_sim.v b/techlibs/xilinx/cells_sim.v
index e12b77c02..258999f18 100644
--- a/techlibs/xilinx/cells_sim.v
+++ b/techlibs/xilinx/cells_sim.v
@@ -60,9 +60,18 @@ module BUFGCTRL(
(* clkbuf_driver *)
output O,
input I0, input I1,
- input S0, input S1,
- input CE0, input CE1,
- input IGNORE0, input IGNORE1);
+ (* invertible_pin = "IS_S0_INVERTED" *)
+ input S0,
+ (* invertible_pin = "IS_S1_INVERTED" *)
+ input S1,
+ (* invertible_pin = "IS_CE0_INVERTED" *)
+ input CE0,
+ (* invertible_pin = "IS_CE1_INVERTED" *)
+ input CE1,
+ (* invertible_pin = "IS_IGNORE0_INVERTED" *)
+ input IGNORE0,
+ (* invertible_pin = "IS_IGNORE1_INVERTED" *)
+ input IGNORE1);
parameter [0:0] INIT_OUT = 1'b0;
parameter PRESELECT_I0 = "FALSE";
@@ -87,6 +96,7 @@ module BUFHCE(
(* clkbuf_driver *)
output O,
input I,
+ (* invertible_pin = "IS_CE_INVERTED" *)
input CE);
parameter [0:0] INIT_OUT = 1'b0;
@@ -184,14 +194,6 @@ module MUXF8(output O, input I0, I1, S);
assign O = S ? I1 : I0;
endmodule
-`ifdef _ABC
-(* abc_box_id = 3, lib_whitebox *)
-module \$__XILINX_MUXF78 (output O, input I0, I1, I2, I3, S0, S1);
- assign O = S1 ? (S0 ? I3 : I2)
- : (S0 ? I1 : I0);
-endmodule
-`endif
-
module XORCY(output O, input CI, LI);
assign O = CI ^ LI;
endmodule
@@ -236,7 +238,20 @@ endmodule
`endif
-module FDRE (output reg Q, (* clkbuf_sink *) input C, input CE, D, R);
+// Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLL_L.sdf#L238-L250
+
+module FDRE (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C,
+ input CE,
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D,
+ (* invertible_pin = "IS_R_INVERTED" *)
+ input R
+);
parameter [0:0] INIT = 1'b0;
parameter [0:0] IS_C_INVERTED = 1'b0;
parameter [0:0] IS_D_INVERTED = 1'b0;
@@ -248,7 +263,18 @@ module FDRE (output reg Q, (* clkbuf_sink *) input C, input CE, D, R);
endcase endgenerate
endmodule
-module FDSE (output reg Q, (* clkbuf_sink *) input C, input CE, D, S);
+module FDSE (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C,
+ input CE,
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D,
+ (* invertible_pin = "IS_S_INVERTED" *)
+ input S
+);
parameter [0:0] INIT = 1'b1;
parameter [0:0] IS_C_INVERTED = 1'b0;
parameter [0:0] IS_D_INVERTED = 1'b0;
@@ -260,7 +286,18 @@ module FDSE (output reg Q, (* clkbuf_sink *) input C, input CE, D, S);
endcase endgenerate
endmodule
-module FDCE (output reg Q, (* clkbuf_sink *) input C, input CE, D, CLR);
+module FDCE (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C,
+ input CE,
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D,
+ (* invertible_pin = "IS_CLR_INVERTED" *)
+ input CLR
+);
parameter [0:0] INIT = 1'b0;
parameter [0:0] IS_C_INVERTED = 1'b0;
parameter [0:0] IS_D_INVERTED = 1'b0;
@@ -274,7 +311,18 @@ module FDCE (output reg Q, (* clkbuf_sink *) input C, input CE, D, CLR);
endcase endgenerate
endmodule
-module FDPE (output reg Q, (* clkbuf_sink *) input C, input CE, D, PRE);
+module FDPE (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C,
+ input CE,
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D,
+ (* invertible_pin = "IS_PRE_INVERTED" *)
+ input PRE
+);
parameter [0:0] INIT = 1'b1;
parameter [0:0] IS_C_INVERTED = 1'b0;
parameter [0:0] IS_D_INVERTED = 1'b0;
@@ -288,38 +336,106 @@ module FDPE (output reg Q, (* clkbuf_sink *) input C, input CE, D, PRE);
endcase endgenerate
endmodule
-module FDRE_1 (output reg Q, (* clkbuf_sink *) input C, input CE, D, R);
+module FDRE_1 (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ input C,
+ input CE, D, R
+);
parameter [0:0] INIT = 1'b0;
initial Q <= INIT;
always @(negedge C) if (R) Q <= 1'b0; else if(CE) Q <= D;
endmodule
-module FDSE_1 (output reg Q, (* clkbuf_sink *) input C, input CE, D, S);
+module FDSE_1 (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ input C,
+ input CE, D, S
+);
parameter [0:0] INIT = 1'b1;
initial Q <= INIT;
always @(negedge C) if (S) Q <= 1'b1; else if(CE) Q <= D;
endmodule
-module FDCE_1 (output reg Q, (* clkbuf_sink *) input C, input CE, D, CLR);
+module FDCE_1 (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ input C,
+ input CE, D, CLR
+);
parameter [0:0] INIT = 1'b0;
initial Q <= INIT;
always @(negedge C, posedge CLR) if (CLR) Q <= 1'b0; else if (CE) Q <= D;
endmodule
-module FDPE_1 (output reg Q, (* clkbuf_sink *) input C, input CE, D, PRE);
+module FDPE_1 (
+ (* abc_arrival=303 *)
+ output reg Q,
+ (* clkbuf_sink *)
+ input C,
+ input CE, D, PRE
+);
parameter [0:0] INIT = 1'b1;
initial Q <= INIT;
always @(negedge C, posedge PRE) if (PRE) Q <= 1'b1; else if (CE) Q <= D;
endmodule
-(* abc_box_id = 5 *)
+module LDCE (
+ output reg Q,
+ (* invertible_pin = "IS_CLR_INVERTED" *)
+ input CLR,
+ input D,
+ (* invertible_pin = "IS_G_INVERTED" *)
+ input G,
+ input GE
+);
+ parameter [0:0] INIT = 1'b0;
+ parameter [0:0] IS_CLR_INVERTED = 1'b0;
+ parameter [0:0] IS_G_INVERTED = 1'b0;
+ parameter MSGON = "TRUE";
+ parameter XON = "TRUE";
+ initial Q = INIT;
+ wire clr = CLR ^ IS_CLR_INVERTED;
+ wire g = G ^ IS_G_INVERTED;
+ always @*
+ if (clr) Q = 1'b0;
+ else if (GE && g) Q = D;
+endmodule
+
+module LDPE (
+ output reg Q,
+ input D,
+ (* invertible_pin = "IS_G_INVERTED" *)
+ input G,
+ input GE,
+ (* invertible_pin = "IS_PRE_INVERTED" *)
+ input PRE
+);
+ parameter [0:0] INIT = 1'b1;
+ parameter [0:0] IS_G_INVERTED = 1'b0;
+ parameter [0:0] IS_PRE_INVERTED = 1'b0;
+ parameter MSGON = "TRUE";
+ parameter XON = "TRUE";
+ initial Q = INIT;
+ wire g = G ^ IS_G_INVERTED;
+ wire pre = PRE ^ IS_PRE_INVERTED;
+ always @*
+ if (pre) Q = 1'b1;
+ else if (GE && g) Q = D;
+endmodule
+
module RAM32X1D (
+ // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
+ (* abc_arrival=1153 *)
output DPO, SPO,
- (* abc_scc_break *)
input D,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
input WCLK,
- (* abc_scc_break *)
input WE,
input A0, A1, A2, A3, A4,
input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4
@@ -335,14 +451,14 @@ module RAM32X1D (
always @(posedge clk) if (WE) mem[a] <= D;
endmodule
-(* abc_box_id = 6 *)
module RAM64X1D (
+ // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
+ (* abc_arrival=1153 *)
output DPO, SPO,
- (* abc_scc_break *)
input D,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
input WCLK,
- (* abc_scc_break *)
input WE,
input A0, A1, A2, A3, A4, A5,
input DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5
@@ -358,14 +474,14 @@ module RAM64X1D (
always @(posedge clk) if (WE) mem[a] <= D;
endmodule
-(* abc_box_id = 7 *)
module RAM128X1D (
- output DPO, SPO,
- (* abc_scc_break *)
+ // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L957
+ (* abc_arrival=1153 *)
+ output DPO, SPO,
input D,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
input WCLK,
- (* abc_scc_break *)
input WE,
input [6:0] A, DPRA
);
@@ -379,9 +495,12 @@ module RAM128X1D (
endmodule
module SRL16E (
+ // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L904-L905
+ (* abc_arrival=1472 *)
output Q,
input A0, A1, A2, A3, CE,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
input CLK,
input D
);
@@ -404,6 +523,7 @@ module SRLC16E (
output Q15,
input A0, A1, A2, A3, CE,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
input CLK,
input D
);
@@ -423,11 +543,15 @@ module SRLC16E (
endmodule
module SRLC32E (
+ // Max delay from: https://github.com/SymbiFlow/prjxray-db/blob/34ea6eb08a63d21ec16264ad37a0a7b142ff6031/artix7/timings/CLBLM_R.sdf#L904-L905
+ (* abc_arrival=1472 *)
output Q,
+ (* abc_arrival=1114 *)
output Q31,
input [4:0] A,
input CE,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
input CLK,
input D
);
@@ -445,3 +569,466 @@ module SRLC32E (
always @(posedge CLK) if (CE) r <= { r[30:0], D };
endgenerate
endmodule
+
+module DSP48E1 (
+ output [29:0] ACOUT,
+ output [17:0] BCOUT,
+ output reg CARRYCASCOUT,
+ output reg [3:0] CARRYOUT,
+ output reg MULTSIGNOUT,
+ output OVERFLOW,
+ output reg signed [47:0] P,
+ output reg PATTERNBDETECT,
+ output reg PATTERNDETECT,
+ output [47:0] PCOUT,
+ output UNDERFLOW,
+ input signed [29:0] A,
+ input [29:0] ACIN,
+ input [3:0] ALUMODE,
+ input signed [17:0] B,
+ input [17:0] BCIN,
+ input [47:0] C,
+ input CARRYCASCIN,
+ input CARRYIN,
+ input [2:0] CARRYINSEL,
+ input CEA1,
+ input CEA2,
+ input CEAD,
+ input CEALUMODE,
+ input CEB1,
+ input CEB2,
+ input CEC,
+ input CECARRYIN,
+ input CECTRL,
+ input CED,
+ input CEINMODE,
+ input CEM,
+ input CEP,
+ (* clkbuf_sink *) input CLK,
+ input [24:0] D,
+ input [4:0] INMODE,
+ input MULTSIGNIN,
+ input [6:0] OPMODE,
+ input [47:0] PCIN,
+ input RSTA,
+ input RSTALLCARRYIN,
+ input RSTALUMODE,
+ input RSTB,
+ input RSTC,
+ input RSTCTRL,
+ input RSTD,
+ input RSTINMODE,
+ input RSTM,
+ input RSTP
+);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+
+ initial begin
+`ifdef __ICARUS__
+ if (AUTORESET_PATDET != "NO_RESET") $fatal(1, "Unsupported AUTORESET_PATDET value");
+ if (SEL_MASK != "MASK") $fatal(1, "Unsupported SEL_MASK value");
+ if (SEL_PATTERN != "PATTERN") $fatal(1, "Unsupported SEL_PATTERN value");
+ if (USE_SIMD != "ONE48" && USE_SIMD != "TWO24" && USE_SIMD != "FOUR12") $fatal(1, "Unsupported USE_SIMD value");
+ if (IS_ALUMODE_INVERTED != 4'b0) $fatal(1, "Unsupported IS_ALUMODE_INVERTED value");
+ if (IS_CARRYIN_INVERTED != 1'b0) $fatal(1, "Unsupported IS_CARRYIN_INVERTED value");
+ if (IS_CLK_INVERTED != 1'b0) $fatal(1, "Unsupported IS_CLK_INVERTED value");
+ if (IS_INMODE_INVERTED != 5'b0) $fatal(1, "Unsupported IS_INMODE_INVERTED value");
+ if (IS_OPMODE_INVERTED != 7'b0) $fatal(1, "Unsupported IS_OPMODE_INVERTED value");
+`endif
+ end
+
+ wire signed [29:0] A_muxed;
+ wire signed [17:0] B_muxed;
+
+ generate
+ if (A_INPUT == "CASCADE") assign A_muxed = ACIN;
+ else assign A_muxed = A;
+
+ if (B_INPUT == "CASCADE") assign B_muxed = BCIN;
+ else assign B_muxed = B;
+ endgenerate
+
+ reg signed [29:0] Ar1, Ar2;
+ reg signed [24:0] Dr;
+ reg signed [17:0] Br1, Br2;
+ reg signed [47:0] Cr;
+ reg [4:0] INMODEr = 5'b0;
+ reg [6:0] OPMODEr = 7'b0;
+ reg [3:0] ALUMODEr = 4'b0;
+ reg [2:0] CARRYINSELr = 3'b0;
+
+ generate
+ // Configurable A register
+ if (AREG == 2) begin
+ initial Ar1 = 30'b0;
+ initial Ar2 = 30'b0;
+ always @(posedge CLK)
+ if (RSTA) begin
+ Ar1 <= 30'b0;
+ Ar2 <= 30'b0;
+ end else begin
+ if (CEA1) Ar1 <= A_muxed;
+ if (CEA2) Ar2 <= Ar1;
+ end
+ end else if (AREG == 1) begin
+ //initial Ar1 = 30'b0;
+ initial Ar2 = 30'b0;
+ always @(posedge CLK)
+ if (RSTA) begin
+ Ar1 <= 30'b0;
+ Ar2 <= 30'b0;
+ end else begin
+ if (CEA1) Ar1 <= A_muxed;
+ if (CEA2) Ar2 <= A_muxed;
+ end
+ end else begin
+ always @* Ar1 <= A_muxed;
+ always @* Ar2 <= A_muxed;
+ end
+
+ // Configurable B register
+ if (BREG == 2) begin
+ initial Br1 = 25'b0;
+ initial Br2 = 25'b0;
+ always @(posedge CLK)
+ if (RSTB) begin
+ Br1 <= 18'b0;
+ Br2 <= 18'b0;
+ end else begin
+ if (CEB1) Br1 <= B_muxed;
+ if (CEB2) Br2 <= Br1;
+ end
+ end else if (BREG == 1) begin
+ //initial Br1 = 25'b0;
+ initial Br2 = 25'b0;
+ always @(posedge CLK)
+ if (RSTB) begin
+ Br1 <= 18'b0;
+ Br2 <= 18'b0;
+ end else begin
+ if (CEB1) Br1 <= B_muxed;
+ if (CEB2) Br2 <= B_muxed;
+ end
+ end else begin
+ always @* Br1 <= B_muxed;
+ always @* Br2 <= B_muxed;
+ end
+
+ // C and D registers
+ if (CREG == 1) initial Cr = 48'b0;
+ if (CREG == 1) begin always @(posedge CLK) if (RSTC) Cr <= 48'b0; else if (CEC) Cr <= C; end
+ else always @* Cr <= C;
+
+ if (CREG == 1) initial Dr = 25'b0;
+ if (DREG == 1) begin always @(posedge CLK) if (RSTD) Dr <= 25'b0; else if (CED) Dr <= D; end
+ else always @* Dr <= D;
+
+ // Control registers
+ if (INMODEREG == 1) initial INMODEr = 5'b0;
+ if (INMODEREG == 1) begin always @(posedge CLK) if (RSTINMODE) INMODEr <= 5'b0; else if (CEINMODE) INMODEr <= INMODE; end
+ else always @* INMODEr <= INMODE;
+ if (OPMODEREG == 1) initial OPMODEr = 7'b0;
+ if (OPMODEREG == 1) begin always @(posedge CLK) if (RSTCTRL) OPMODEr <= 7'b0; else if (CECTRL) OPMODEr <= OPMODE; end
+ else always @* OPMODEr <= OPMODE;
+ if (ALUMODEREG == 1) initial ALUMODEr = 4'b0;
+ if (ALUMODEREG == 1) begin always @(posedge CLK) if (RSTALUMODE) ALUMODEr <= 4'b0; else if (CEALUMODE) ALUMODEr <= ALUMODE; end
+ else always @* ALUMODEr <= ALUMODE;
+ if (CARRYINSELREG == 1) initial CARRYINSELr = 3'b0;
+ if (CARRYINSELREG == 1) begin always @(posedge CLK) if (RSTCTRL) CARRYINSELr <= 3'b0; else if (CECTRL) CARRYINSELr <= CARRYINSEL; end
+ else always @* CARRYINSELr <= CARRYINSEL;
+ endgenerate
+
+ // A and B cascade
+ generate
+ if (ACASCREG == 1 && AREG == 2) assign ACOUT = Ar1;
+ else assign ACOUT = Ar2;
+ if (BCASCREG == 1 && BREG == 2) assign BCOUT = Br1;
+ else assign BCOUT = Br2;
+ endgenerate
+
+ // A/D input selection and pre-adder
+ wire signed [29:0] Ar12_muxed = INMODEr[0] ? Ar1 : Ar2;
+ wire signed [24:0] Ar12_gated = INMODEr[1] ? 25'b0 : Ar12_muxed;
+ wire signed [24:0] Dr_gated = INMODEr[2] ? Dr : 25'b0;
+ wire signed [24:0] AD_result = INMODEr[3] ? (Dr_gated - Ar12_gated) : (Dr_gated + Ar12_gated);
+ reg signed [24:0] ADr;
+
+ generate
+ if (ADREG == 1) initial ADr = 25'b0;
+ if (ADREG == 1) begin always @(posedge CLK) if (RSTD) ADr <= 25'b0; else if (CEAD) ADr <= AD_result; end
+ else always @* ADr <= AD_result;
+ endgenerate
+
+ // 25x18 multiplier
+ wire signed [24:0] A_MULT;
+ wire signed [17:0] B_MULT = INMODEr[4] ? Br1 : Br2;
+ generate
+ if (USE_DPORT == "TRUE") assign A_MULT = ADr;
+ else assign A_MULT = Ar12_gated;
+ endgenerate
+
+ wire signed [42:0] M = A_MULT * B_MULT;
+ wire signed [42:0] Mx = (CARRYINSEL == 3'b010) ? 43'bx : M;
+ reg signed [42:0] Mr = 43'b0;
+
+ // Multiplier result register
+ generate
+ if (MREG == 1) begin always @(posedge CLK) if (RSTM) Mr <= 43'b0; else if (CEM) Mr <= Mx; end
+ else always @* Mr <= Mx;
+ endgenerate
+
+ wire signed [42:0] Mrx = (CARRYINSELr == 3'b010) ? 43'bx : Mr;
+
+ // X, Y and Z ALU inputs
+ reg signed [47:0] X, Y, Z;
+
+ always @* begin
+ // X multiplexer
+ case (OPMODEr[1:0])
+ 2'b00: X = 48'b0;
+ 2'b01: begin X = $signed(Mrx);
+`ifdef __ICARUS__
+ if (OPMODEr[3:2] != 2'b01) $fatal(1, "OPMODEr[3:2] must be 2'b01 when OPMODEr[1:0] is 2'b01");
+`endif
+ end
+ 2'b10: begin X = P;
+`ifdef __ICARUS__
+ if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[1:0] is 2'b10");
+`endif
+ end
+ 2'b11: X = $signed({Ar2, Br2});
+ default: X = 48'bx;
+ endcase
+
+ // Y multiplexer
+ case (OPMODEr[3:2])
+ 2'b00: Y = 48'b0;
+ 2'b01: begin Y = 48'b0; // FIXME: more accurate partial product modelling?
+`ifdef __ICARUS__
+ if (OPMODEr[1:0] != 2'b01) $fatal(1, "OPMODEr[1:0] must be 2'b01 when OPMODEr[3:2] is 2'b01");
+`endif
+ end
+ 2'b10: Y = {48{1'b1}};
+ 2'b11: Y = Cr;
+ default: Y = 48'bx;
+ endcase
+
+ // Z multiplexer
+ case (OPMODEr[6:4])
+ 3'b000: Z = 48'b0;
+ 3'b001: Z = PCIN;
+ 3'b010: begin Z = P;
+`ifdef __ICARUS__
+ if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] i0s 3'b010");
+`endif
+ end
+ 3'b011: Z = Cr;
+ 3'b100: begin Z = P;
+`ifdef __ICARUS__
+ if (PREG != 1) $fatal(1, "PREG must be 1 when OPMODEr[6:4] is 3'b100");
+ if (OPMODEr[3:0] != 4'b1000) $fatal(1, "OPMODEr[3:0] must be 4'b1000 when OPMODEr[6:4] i0s 3'b100");
+`endif
+ end
+ 3'b101: Z = $signed(PCIN[47:17]);
+ 3'b110: Z = $signed(P[47:17]);
+ default: Z = 48'bx;
+ endcase
+ end
+
+ // Carry in
+ wire A24_xnor_B17d = A_MULT[24] ~^ B_MULT[17];
+ reg CARRYINr = 1'b0, A24_xnor_B17 = 1'b0;
+ generate
+ if (CARRYINREG == 1) begin always @(posedge CLK) if (RSTALLCARRYIN) CARRYINr <= 1'b0; else if (CECARRYIN) CARRYINr <= CARRYIN; end
+ else always @* CARRYINr = CARRYIN;
+
+ if (MREG == 1) begin always @(posedge CLK) if (RSTALLCARRYIN) A24_xnor_B17 <= 1'b0; else if (CEM) A24_xnor_B17 <= A24_xnor_B17d; end
+ else always @* A24_xnor_B17 = A24_xnor_B17d;
+ endgenerate
+
+ reg cin_muxed;
+
+ always @(*) begin
+ case (CARRYINSELr)
+ 3'b000: cin_muxed = CARRYINr;
+ 3'b001: cin_muxed = ~PCIN[47];
+ 3'b010: cin_muxed = CARRYCASCIN;
+ 3'b011: cin_muxed = PCIN[47];
+ 3'b100: cin_muxed = CARRYCASCOUT;
+ 3'b101: cin_muxed = ~P[47];
+ 3'b110: cin_muxed = A24_xnor_B17;
+ 3'b111: cin_muxed = P[47];
+ default: cin_muxed = 1'bx;
+ endcase
+ end
+
+ wire alu_cin = (ALUMODEr[3] || ALUMODEr[2]) ? 1'b0 : cin_muxed;
+
+ // ALU core
+ wire [47:0] Z_muxinv = ALUMODEr[0] ? ~Z : Z;
+ wire [47:0] xor_xyz = X ^ Y ^ Z_muxinv;
+ wire [47:0] maj_xyz = (X & Y) | (X & Z_muxinv) | (Y & Z_muxinv);
+
+ wire [47:0] xor_xyz_muxed = ALUMODEr[3] ? maj_xyz : xor_xyz;
+ wire [47:0] maj_xyz_gated = ALUMODEr[2] ? 48'b0 : maj_xyz;
+
+ wire [48:0] maj_xyz_simd_gated;
+ wire [3:0] int_carry_in, int_carry_out, ext_carry_out;
+ wire [47:0] alu_sum;
+ assign int_carry_in[0] = 1'b0;
+ wire [3:0] carryout_reset;
+
+ generate
+ if (USE_SIMD == "FOUR12") begin
+ assign maj_xyz_simd_gated = {
+ maj_xyz_gated[47:36],
+ 1'b0, maj_xyz_gated[34:24],
+ 1'b0, maj_xyz_gated[22:12],
+ 1'b0, maj_xyz_gated[10:0],
+ alu_cin
+ };
+ assign int_carry_in[3:1] = 3'b000;
+ assign ext_carry_out = {
+ int_carry_out[3],
+ maj_xyz_gated[35] ^ int_carry_out[2],
+ maj_xyz_gated[23] ^ int_carry_out[1],
+ maj_xyz_gated[11] ^ int_carry_out[0]
+ };
+ assign carryout_reset = 4'b0000;
+ end else if (USE_SIMD == "TWO24") begin
+ assign maj_xyz_simd_gated = {
+ maj_xyz_gated[47:24],
+ 1'b0, maj_xyz_gated[22:0],
+ alu_cin
+ };
+ assign int_carry_in[3:1] = {int_carry_out[2], 1'b0, int_carry_out[0]};
+ assign ext_carry_out = {
+ int_carry_out[3],
+ 1'bx,
+ maj_xyz_gated[23] ^ int_carry_out[1],
+ 1'bx
+ };
+ assign carryout_reset = 4'b0x0x;
+ end else begin
+ assign maj_xyz_simd_gated = {maj_xyz_gated, alu_cin};
+ assign int_carry_in[3:1] = int_carry_out[2:0];
+ assign ext_carry_out = {
+ int_carry_out[3],
+ 3'bxxx
+ };
+ assign carryout_reset = 4'b0xxx;
+ end
+
+ genvar i;
+ for (i = 0; i < 4; i = i + 1)
+ assign {int_carry_out[i], alu_sum[i*12 +: 12]} = {1'b0, maj_xyz_simd_gated[i*12 +: ((i == 3) ? 13 : 12)]}
+ + xor_xyz_muxed[i*12 +: 12] + int_carry_in[i];
+ endgenerate
+
+ wire signed [47:0] Pd = ALUMODEr[1] ? ~alu_sum : alu_sum;
+ wire [3:0] CARRYOUTd = (OPMODEr[3:0] == 4'b0101 || ALUMODEr[3:2] != 2'b00) ? 4'bxxxx :
+ ((ALUMODEr[0] & ALUMODEr[1]) ? ~ext_carry_out : ext_carry_out);
+ wire CARRYCASCOUTd = ext_carry_out[3];
+ wire MULTSIGNOUTd = Mrx[42];
+
+ generate
+ if (PREG == 1) begin
+ initial P = 48'b0;
+ initial CARRYOUT = carryout_reset;
+ initial CARRYCASCOUT = 1'b0;
+ initial MULTSIGNOUT = 1'b0;
+ always @(posedge CLK)
+ if (RSTP) begin
+ P <= 48'b0;
+ CARRYOUT <= carryout_reset;
+ CARRYCASCOUT <= 1'b0;
+ MULTSIGNOUT <= 1'b0;
+ end else if (CEP) begin
+ P <= Pd;
+ CARRYOUT <= CARRYOUTd;
+ CARRYCASCOUT <= CARRYCASCOUTd;
+ MULTSIGNOUT <= MULTSIGNOUTd;
+ end
+ end else begin
+ always @* begin
+ P = Pd;
+ CARRYOUT = CARRYOUTd;
+ CARRYCASCOUT = CARRYCASCOUTd;
+ MULTSIGNOUT = MULTSIGNOUTd;
+ end
+ end
+ endgenerate
+
+ assign PCOUT = P;
+
+ generate
+ wire PATTERNDETECTd, PATTERNBDETECTd;
+
+ if (USE_PATTERN_DETECT == "PATDET") begin
+ // TODO: Support SEL_PATTERN != "PATTERN" and SEL_MASK != "MASK
+ assign PATTERNDETECTd = &(~(Pd ^ PATTERN) | MASK);
+ assign PATTERNBDETECTd = &((Pd ^ PATTERN) | MASK);
+ end else begin
+ assign PATTERNDETECTd = 1'b1;
+ assign PATTERNBDETECTd = 1'b1;
+ end
+
+ if (PREG == 1) begin
+ reg PATTERNDETECTPAST, PATTERNBDETECTPAST;
+ initial PATTERNDETECT = 1'b0;
+ initial PATTERNBDETECT = 1'b0;
+ initial PATTERNDETECTPAST = 1'b0;
+ initial PATTERNBDETECTPAST = 1'b0;
+ always @(posedge CLK)
+ if (RSTP) begin
+ PATTERNDETECT <= 1'b0;
+ PATTERNBDETECT <= 1'b0;
+ PATTERNDETECTPAST <= 1'b0;
+ PATTERNBDETECTPAST <= 1'b0;
+ end else if (CEP) begin
+ PATTERNDETECT <= PATTERNDETECTd;
+ PATTERNBDETECT <= PATTERNBDETECTd;
+ PATTERNDETECTPAST <= PATTERNDETECT;
+ PATTERNBDETECTPAST <= PATTERNBDETECT;
+ end
+ assign OVERFLOW = &{PATTERNDETECTPAST, ~PATTERNBDETECT, ~PATTERNDETECT};
+ assign UNDERFLOW = &{PATTERNBDETECTPAST, ~PATTERNBDETECT, ~PATTERNDETECT};
+ end else begin
+ always @* begin
+ PATTERNDETECT = PATTERNDETECTd;
+ PATTERNBDETECT = PATTERNBDETECTd;
+ end
+ assign OVERFLOW = 1'bx, UNDERFLOW = 1'bx;
+ end
+ endgenerate
+
+endmodule
diff --git a/techlibs/xilinx/cells_xtra.py b/techlibs/xilinx/cells_xtra.py
index dd4e300ae..13dbc0e14 100644
--- a/techlibs/xilinx/cells_xtra.py
+++ b/techlibs/xilinx/cells_xtra.py
@@ -5,6 +5,7 @@ from io import StringIO
from enum import Enum, auto
import os.path
import sys
+import re
class Cell:
@@ -14,9 +15,131 @@ class Cell:
self.port_attrs = port_attrs
-CELLS = [
- # Design elements types listed in Xilinx UG953
- Cell('BSCANE2', keep=True),
+XC6S_CELLS = [
+ # Design elements types listed in Xilinx UG615.
+
+ # Advanced.
+ Cell('MCB'),
+ Cell('PCIE_A1'),
+
+ # Arithmetic functions.
+ Cell('DSP48A1', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # Clock components.
+ # Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE_1', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX_1', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFH', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFIO2', port_attrs={'IOCLK': ['clkbuf_driver'], 'DIVCLK': ['clkbuf_driver']}),
+ Cell('BUFIO2_2CLK', port_attrs={'IOCLK': ['clkbuf_driver'], 'DIVCLK': ['clkbuf_driver']}),
+ Cell('BUFIO2FB', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFPLL_MCB', port_attrs={'IOCLK0': ['clkbuf_driver'], 'IOCLK1': ['clkbuf_driver']}),
+ Cell('DCM_CLKGEN'),
+ Cell('DCM_SP'),
+ Cell('PLL_BASE'),
+
+ # Config/BSCAN components.
+ Cell('BSCAN_SPARTAN6', keep=True),
+ Cell('DNA_PORT'),
+ Cell('ICAP_SPARTAN6', keep=True),
+ Cell('POST_CRC_INTERNAL'),
+ Cell('STARTUP_SPARTAN6', keep=True),
+ Cell('SUSPEND_SYNC', keep=True),
+
+ # I/O components.
+ Cell('GTPA1_DUAL'),
+ # Cell('IBUF', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUFDS', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_DIFF_OUT', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFG', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUFGDS', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFGDS_DIFF_OUT', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IOBUF', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUFDS', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IODELAY2', port_attrs={'IOCLK0': ['clkbuf_sink'], 'IOCLK1': ['clkbuf_sink'], 'CLK': ['clkbuf_sink']}),
+ Cell('IODRP2', port_attrs={'IOCLK0': ['clkbuf_sink'], 'IOCLK1': ['clkbuf_sink'], 'CLK': ['clkbuf_sink']}),
+ Cell('IODRP2_MCB', port_attrs={'IOCLK0': ['clkbuf_sink'], 'IOCLK1': ['clkbuf_sink'], 'CLK': ['clkbuf_sink']}),
+ Cell('ISERDES2', port_attrs={
+ 'CLK0': ['clkbuf_sink'],
+ 'CLK1': ['clkbuf_sink'],
+ 'CLKDIV': ['clkbuf_sink'],
+ }),
+ Cell('KEEPER'),
+ # Cell('OBUF', port_attrs={'O': ['iopad_external_pin']}),
+ Cell('OBUFDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFT', port_attrs={'O': ['iopad_external_pin']}),
+ Cell('OBUFTDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OSERDES2', port_attrs={
+ 'CLK0': ['clkbuf_sink'],
+ 'CLK1': ['clkbuf_sink'],
+ 'CLKDIV': ['clkbuf_sink'],
+ }),
+ Cell('PULLDOWN'),
+ Cell('PULLUP'),
+
+ # RAM/ROM.
+ #Cell('RAM128X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ # NOTE: not in the official library guide!
+ Cell('RAM128X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM256X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32M', port_attrs={'WCLK': ['clkbuf_sink']}),
+ #Cell('RAM32X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64M', port_attrs={'WCLK': ['clkbuf_sink']}),
+ #Cell('RAM64X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
+ # NOTE: not in the official library guide!
+ Cell('RAM64X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ # Cell('RAMB8BWER', port_attrs={'CLKAWRCLK': ['clkbuf_sink'], 'CLKBRDCLK': ['clkbuf_sink']}),
+ # Cell('RAMB16BWER', port_attrs={'CLKA': ['clkbuf_sink'], 'CLKB': ['clkbuf_sink']}),
+ Cell('ROM128X1'),
+ Cell('ROM256X1'),
+ Cell('ROM32X1'),
+ Cell('ROM64X1'),
+
+ # Registers/latches.
+ # Cell('FDCE'),
+ # Cell('FDPE'),
+ # Cell('FDRE'),
+ # Cell('FDSE'),
+ Cell('IDDR2', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink']}),
+ # Cell('LDCE'),
+ # Cell('LDPE'),
+ Cell('ODDR2', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink']}),
+
+ # Slice/CLB primitives.
+ # Cell('CARRY4'),
+ Cell('CFGLUT5', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('LUT1'),
+ # Cell('LUT2'),
+ # Cell('LUT3'),
+ # Cell('LUT4'),
+ # Cell('LUT5'),
+ # Cell('LUT6'),
+ # Cell('LUT6_2'),
+ # Cell('MUXF7'),
+ # Cell('MUXF8'),
+ # Cell('SRL16E', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('SRLC32E', port_attrs={'CLK': ['clkbuf_sink']}),
+]
+
+
+XC6V_CELLS = [
+ # Design elements types listed in Xilinx UG623.
+
+ # Advanced.
+ Cell('PCIE_2_0'),
+ Cell('SYSMON'),
+
+ # Arithmetic functions.
+ Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # Clock components.
# Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
Cell('BUFGCE', port_attrs={'O': ['clkbuf_driver']}),
Cell('BUFGCE_1', port_attrs={'O': ['clkbuf_driver']}),
@@ -27,29 +150,153 @@ CELLS = [
Cell('BUFH', port_attrs={'O': ['clkbuf_driver']}),
#Cell('BUFHCE', port_attrs={'O': ['clkbuf_driver']}),
Cell('BUFIO', port_attrs={'O': ['clkbuf_driver']}),
- Cell('BUFMR', port_attrs={'O': ['clkbuf_driver']}),
- Cell('BUFMRCE', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFIODQS', port_attrs={'O': ['clkbuf_driver']}),
Cell('BUFR', port_attrs={'O': ['clkbuf_driver']}),
- Cell('CAPTUREE2', keep=True),
- # Cell('CARRY4'),
- Cell('CFGLUT5', port_attrs={'CLK': ['clkbuf_sink']}),
- Cell('DCIRESET', keep=True),
+ Cell('IBUFDS_GTXE1', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('MMCM_ADV'),
+ Cell('MMCM_BASE'),
+
+ # Config/BSCAN components.
+ Cell('BSCAN_VIRTEX6', keep=True),
+ Cell('CAPTURE_VIRTEX6', keep=True),
Cell('DNA_PORT'),
- Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
Cell('EFUSE_USR'),
+ Cell('FRAME_ECC_VIRTEX6'),
+ Cell('ICAP_VIRTEX6', keep=True),
+ Cell('STARTUP_VIRTEX6', keep=True),
+ Cell('USR_ACCESS_VIRTEX6'),
+
+ # I/O components.
+ Cell('DCIRESET', keep=True),
+ Cell('GTHE1_QUAD'),
+ Cell('GTXE1'),
+ # Cell('IBUF', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUFDS', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_DIFF_OUT', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_GTHE1', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFG', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUFGDS', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFGDS_DIFF_OUT', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IDELAYCTRL', keep=True, port_attrs={'REFCLK': ['clkbuf_sink']}),
+ Cell('IOBUF', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUFDS', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IODELAYE1', port_attrs={'C': ['clkbuf_sink']}),
+ Cell('ISERDESE1', port_attrs={
+ 'CLK': ['clkbuf_sink'],
+ 'CLKB': ['clkbuf_sink'],
+ 'OCLK': ['clkbuf_sink'],
+ 'CLKDIV': ['clkbuf_sink'],
+ }),
+ Cell('KEEPER'),
+ # Cell('OBUF', port_attrs={'O': ['iopad_external_pin']}),
+ Cell('OBUFDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFT', port_attrs={'O': ['iopad_external_pin']}),
+ Cell('OBUFTDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OSERDESE1', port_attrs={'CLK': ['clkbuf_sink'], 'CLKDIV': ['clkbuf_sink']}),
+ Cell('PULLDOWN'),
+ Cell('PULLUP'),
+ Cell('TEMAC_SINGLE'),
+
+ # RAM/ROM.
+ Cell('FIFO18E1', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
+ Cell('FIFO36E1', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
+ #Cell('RAM128X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM128X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM256X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32M', port_attrs={'WCLK': ['clkbuf_sink']}),
+ #Cell('RAM32X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64M', port_attrs={'WCLK': ['clkbuf_sink']}),
+ #Cell('RAM64X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
+ # NOTE: not in the official library guide!
+ Cell('RAM64X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ # Cell('RAMB18E1', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
+ # Cell('RAMB36E1', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
+ Cell('ROM128X1'),
+ Cell('ROM256X1'),
+ Cell('ROM32X1'),
+ Cell('ROM64X1'),
+
+ # Registers/latches.
# Cell('FDCE'),
# Cell('FDPE'),
# Cell('FDRE'),
# Cell('FDSE'),
- Cell('FIFO18E1', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
- Cell('FIFO36E1', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
- Cell('FRAME_ECCE2'),
+ Cell('IDDR', port_attrs={'C': ['clkbuf_sink']}),
+ Cell('IDDR_2CLK', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
+ Cell('LDCE'),
+ Cell('LDPE'),
+ Cell('ODDR', port_attrs={'C': ['clkbuf_sink']}),
+
+ # Slice/CLB primitives.
+ # Cell('CARRY4'),
+ Cell('CFGLUT5', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('LUT1'),
+ # Cell('LUT2'),
+ # Cell('LUT3'),
+ # Cell('LUT4'),
+ # Cell('LUT5'),
+ # Cell('LUT6'),
+ # Cell('LUT6_2'),
+ # Cell('MUXF7'),
+ # Cell('MUXF8'),
+ # Cell('SRL16E', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('SRLC32E', port_attrs={'CLK': ['clkbuf_sink']}),
+]
+
+
+XC7_CELLS = [
+ # Design elements types listed in Xilinx UG953.
+
+ # Advanced.
Cell('GTHE2_CHANNEL'),
Cell('GTHE2_COMMON'),
Cell('GTPE2_CHANNEL'),
Cell('GTPE2_COMMON'),
Cell('GTXE2_CHANNEL'),
Cell('GTXE2_COMMON'),
+ Cell('PCIE_2_1'),
+ Cell('PCIE_3_0'),
+ Cell('XADC'),
+
+ # Arithmetic functions.
+ Cell('DSP48E1', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # Clock components.
+ # Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE_1', port_attrs={'O': ['clkbuf_driver']}),
+ #Cell('BUFGCTRL', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX_1', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX_CTRL', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFH', port_attrs={'O': ['clkbuf_driver']}),
+ #Cell('BUFHCE', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFIO', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFMR', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFMRCE', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFR', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('MMCME2_ADV'),
+ Cell('MMCME2_BASE'),
+ Cell('PLLE2_ADV'),
+ Cell('PLLE2_BASE'),
+
+ # Config/BSCAN components.
+ Cell('BSCANE2', keep=True),
+ Cell('CAPTUREE2', keep=True),
+ Cell('DNA_PORT'),
+ Cell('EFUSE_USR'),
+ Cell('FRAME_ECCE2'),
+ Cell('ICAPE2', keep=True),
+ Cell('STARTUPE2', keep=True),
+ Cell('USR_ACCESSE2'),
+
+ # I/O components.
+ Cell('DCIRESET', keep=True),
# Cell('IBUF', port_attrs={'I': ['iopad_external_pin']}),
Cell('IBUF_IBUFDISABLE', port_attrs={'I': ['iopad_external_pin']}),
Cell('IBUF_INTERMDISABLE', port_attrs={'I': ['iopad_external_pin']}),
@@ -63,9 +310,6 @@ CELLS = [
Cell('IBUFG', port_attrs={'I': ['iopad_external_pin']}),
Cell('IBUFGDS', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
Cell('IBUFGDS_DIFF_OUT', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
- Cell('ICAPE2', keep=True),
- Cell('IDDR', port_attrs={'C': ['clkbuf_sink']}),
- Cell('IDDR_2CLK', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
Cell('IDELAYCTRL', keep=True, port_attrs={'REFCLK': ['clkbuf_sink']}),
Cell('IDELAYE2', port_attrs={'C': ['clkbuf_sink']}),
Cell('IN_FIFO', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
@@ -77,6 +321,7 @@ CELLS = [
Cell('IOBUFDS_DIFF_OUT', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
Cell('IOBUFDS_DIFF_OUT_DCIEN', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
Cell('IOBUFDS_DIFF_OUT_INTERMDISABLE', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
+ Cell('IOBUFDS_INTERMDISABLE', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
Cell('ISERDESE2', port_attrs={
'CLK': ['clkbuf_sink'],
'CLKB': ['clkbuf_sink'],
@@ -86,24 +331,10 @@ CELLS = [
'CLKDIVP': ['clkbuf_sink'],
}),
Cell('KEEPER'),
- Cell('LDCE'),
- Cell('LDPE'),
- # Cell('LUT1'),
- # Cell('LUT2'),
- # Cell('LUT3'),
- # Cell('LUT4'),
- # Cell('LUT5'),
- # Cell('LUT6'),
- #Cell('LUT6_2'),
- Cell('MMCME2_ADV'),
- Cell('MMCME2_BASE'),
- # Cell('MUXF7'),
- # Cell('MUXF8'),
# Cell('OBUF', port_attrs={'O': ['iopad_external_pin']}),
Cell('OBUFDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
Cell('OBUFT', port_attrs={'O': ['iopad_external_pin']}),
Cell('OBUFTDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
- Cell('ODDR', port_attrs={'C': ['clkbuf_sink']}),
Cell('ODELAYE2', port_attrs={'C': ['clkbuf_sink']}),
Cell('OSERDESE2', port_attrs={'CLK': ['clkbuf_sink'], 'CLKDIV': ['clkbuf_sink']}),
Cell('OUT_FIFO', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
@@ -113,11 +344,12 @@ CELLS = [
Cell('PHASER_OUT_PHY'),
Cell('PHASER_REF'),
Cell('PHY_CONTROL'),
- Cell('PLLE2_ADV'),
- Cell('PLLE2_BASE'),
- Cell('PS7', keep=True),
Cell('PULLDOWN'),
Cell('PULLUP'),
+
+ # RAM/ROM.
+ Cell('FIFO18E1', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
+ Cell('FIFO36E1', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
#Cell('RAM128X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
Cell('RAM128X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
Cell('RAM256X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
@@ -130,6 +362,7 @@ CELLS = [
#Cell('RAM64X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
Cell('RAM64X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
Cell('RAM64X1S_1', port_attrs={'WCLK': ['clkbuf_sink']}),
+ # NOTE: not in the official library guide!
Cell('RAM64X2S', port_attrs={'WCLK': ['clkbuf_sink']}),
# Cell('RAMB18E1', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
# Cell('RAMB36E1', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
@@ -137,13 +370,207 @@ CELLS = [
Cell('ROM256X1'),
Cell('ROM32X1'),
Cell('ROM64X1'),
- #Cell('SRL16E', port_attrs={'CLK': ['clkbuf_sink']}),
- #Cell('SRLC32E', port_attrs={'CLK': ['clkbuf_sink']}),
- Cell('STARTUPE2', keep=True),
+
+ # Registers/latches.
+ # Cell('FDCE'),
+ # Cell('FDPE'),
+ # Cell('FDRE'),
+ # Cell('FDSE'),
+ Cell('IDDR', port_attrs={'C': ['clkbuf_sink']}),
+ Cell('IDDR_2CLK', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
+ Cell('LDCE'),
+ Cell('LDPE'),
+ Cell('ODDR', port_attrs={'C': ['clkbuf_sink']}),
+
+ # Slice/CLB primitives.
+ # Cell('CARRY4'),
+ Cell('CFGLUT5', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('LUT1'),
+ # Cell('LUT2'),
+ # Cell('LUT3'),
+ # Cell('LUT4'),
+ # Cell('LUT5'),
+ # Cell('LUT6'),
+ # Cell('LUT6_2'),
+ # Cell('MUXF7'),
+ # Cell('MUXF8'),
+ # Cell('SRL16E', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('SRLC32E', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # NOTE: not in the official library guide!
+ Cell('PS7', keep=True),
+]
+
+
+XCU_CELLS = [
+ # Design elements types listed in Xilinx UG974.
+
+ # Advanced.
+ Cell('CMAC'),
+ Cell('CMACE4'),
+ Cell('GTHE3_CHANNEL'),
+ Cell('GTHE3_COMMON'),
+ Cell('GTHE4_CHANNEL'),
+ Cell('GTHE4_COMMON'),
+ Cell('GTYE3_CHANNEL'),
+ Cell('GTYE3_COMMON'),
+ Cell('GTYE4_CHANNEL'),
+ Cell('GTYE4_COMMON'),
+ Cell('IBUFDS_GTE3', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_GTE4', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('ILKN'),
+ Cell('ILKNE4'),
+ Cell('OBUFDS_GTE3', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFDS_GTE3_ADV', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFDS_GTE4', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFDS_GTE4_ADV', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('PCIE40E4'),
+ Cell('PCIE_3_1'),
+ Cell('SYSMONE1'),
+ Cell('SYSMONE4'),
+
+ # Arithmetic functions.
+ Cell('DSP48E2', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # Blockram.
+ Cell('FIFO18E2', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
+ Cell('FIFO36E2', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
+ Cell('RAMB18E2', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
+ Cell('RAMB36E2', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
+ Cell('URAM288', port_attrs={'CLK': ['clkbuf_sink']}),
+ Cell('URAM288_BASE', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # CLB.
+ # Cell('LUT6_2'),
+ #Cell('RAM128X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM128X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM256X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM256X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32M', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32M16', port_attrs={'WCLK': ['clkbuf_sink']}),
+ #Cell('RAM32X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM32X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM512X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64M', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64M8', port_attrs={'WCLK': ['clkbuf_sink']}),
+ #Cell('RAM64X1D', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('RAM64X1S', port_attrs={'WCLK': ['clkbuf_sink']}),
+ Cell('AND2B1L'),
+ Cell('CARRY8'),
+ Cell('CFGLUT5', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('LUT1'),
+ # Cell('LUT2'),
+ # Cell('LUT3'),
+ # Cell('LUT4'),
+ # Cell('LUT5'),
+ # Cell('LUT6'),
+ # Cell('MUXF7'),
+ # Cell('MUXF8'),
+ Cell('MUXF9'),
+ Cell('OR2L'),
+ # Cell('SRL16E', port_attrs={'CLK': ['clkbuf_sink']}),
+ # Cell('SRLC32E', port_attrs={'CLK': ['clkbuf_sink']}),
+
+ # Clock.
+ # Cell('BUFG', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFG_GT', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFG_GT_SYNC'),
+ Cell('BUFG_PS', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE_1', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGCE_DIV', port_attrs={'O': ['clkbuf_driver']}),
+ #Cell('BUFGCTRL', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX_1', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('BUFGMUX_CTRL', port_attrs={'O': ['clkbuf_driver']}),
+ Cell('MMCME3_ADV'),
+ Cell('MMCME3_BASE'),
+ Cell('MMCME4_ADV'),
+ Cell('MMCME4_BASE'),
+ Cell('PLLE3_ADV'),
+ Cell('PLLE3_BASE'),
+ Cell('PLLE4_ADV'),
+ Cell('PLLE4_BASE'),
+
+ # Configuration.
+ Cell('BSCANE2', keep=True),
+ Cell('DNA_PORTE2'),
+ Cell('EFUSE_USR'),
+ Cell('FRAME_ECCE3'),
+ Cell('ICAPE3', keep=True),
+ Cell('MASTER_JTAG', keep=True),
+ Cell('STARTUPE3', keep=True),
Cell('USR_ACCESSE2'),
- Cell('XADC'),
+
+ # I/O.
+ Cell('BITSLICE_CONTROL', keep=True),
+ Cell('DCIRESET', keep=True),
+ Cell('HPIO_VREF'),
+ # XXX
+ # Cell('IBUF', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUF_ANALOG', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUF_IBUFDISABLE', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUF_INTERMDISABLE', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IBUFDS', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_DIFF_OUT', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_DIFF_OUT_IBUFDISABLE', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_DIFF_OUT_INTERMDISABLE', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_DPHY', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_IBUFDISABLE', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDS_INTERMDISABLE', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFDSE3', port_attrs={'I': ['iopad_external_pin'], 'IB': ['iopad_external_pin']}),
+ Cell('IBUFE3', port_attrs={'I': ['iopad_external_pin']}),
+ Cell('IDELAYCTRL', keep=True, port_attrs={'REFCLK': ['clkbuf_sink']}),
+ Cell('IDELAYE3', port_attrs={'CLK': ['clkbuf_sink']}),
+ Cell('IOBUF', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUF_DCIEN', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUF_INTERMDISABLE', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUFDS', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUFDS_DCIEN', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
+ Cell('IOBUFDS_DIFF_OUT', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
+ Cell('IOBUFDS_DIFF_OUT_DCIEN', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
+ Cell('IOBUFDS_DIFF_OUT_INTERMDISABLE', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
+ Cell('IOBUFDS_INTERMDISABLE', port_attrs={'IO': ['iopad_external_pin'], 'IOB': ['iopad_external_pin']}),
+ Cell('IOBUFDSE3', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('IOBUFE3', port_attrs={'IO': ['iopad_external_pin']}),
+ Cell('ISERDESE3', port_attrs={
+ 'CLK': ['clkbuf_sink'],
+ 'CLK_B': ['clkbuf_sink'],
+ 'FIFO_RD_CLK': ['clkbuf_sink'],
+ 'CLKDIV': ['clkbuf_sink'],
+ }),
+ Cell('KEEPER'),
+ # Cell('OBUF', port_attrs={'O': ['iopad_external_pin']}),
+ Cell('OBUFDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFDS_DPHY', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('OBUFT', port_attrs={'O': ['iopad_external_pin']}),
+ Cell('OBUFTDS', port_attrs={'O': ['iopad_external_pin'], 'OB': ['iopad_external_pin']}),
+ Cell('ODELAYE3', port_attrs={'CLK': ['clkbuf_sink']}),
+ Cell('OSERDESE3', port_attrs={'CLK': ['clkbuf_sink'], 'CLKDIV': ['clkbuf_sink']}),
+ Cell('PULLDOWN'),
+ Cell('PULLUP'),
+ Cell('RIU_OR'),
+ Cell('RX_BITSLICE'),
+ Cell('RXTX_BITSLICE'),
+ Cell('TX_BITSLICE'),
+ Cell('TX_BITSLICE_TRI'),
+
+ # Registers.
+ # Cell('FDCE'),
+ # Cell('FDPE'),
+ # Cell('FDRE'),
+ # Cell('FDSE'),
+ Cell('HARD_SYNC', port_attrs={'CLK': ['clkbuf_sink']}),
+ Cell('IDDRE1', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
+ Cell('LDCE'),
+ Cell('LDPE'),
+ Cell('ODDRE1', port_attrs={'C': ['clkbuf_sink']}),
+
+ # NOTE: not in the official library guide!
+ Cell('PS8', keep=True),
]
+
class State(Enum):
OUTSIDE = auto()
IN_MODULE = auto()
@@ -159,6 +586,8 @@ def xtract_cell_decl(cell, dirs, outf):
state = State.OUTSIDE
found = False
# Probably the most horrible Verilog "parser" ever written.
+ module_ports = []
+ invertible_ports = set()
for l in f:
l = l.partition('//')[0]
l = l.strip()
@@ -193,6 +622,15 @@ def xtract_cell_decl(cell, dirs, outf):
state = State.IN_MODULE
elif l == 'endmodule':
if state == State.IN_MODULE:
+ for kind, rng, port in module_ports:
+ for attr in cell.port_attrs.get(port, []):
+ outf.write(' (* {} *)\n'.format(attr))
+ if port in invertible_ports:
+ outf.write(' (* invertible_pin = "IS_{}_INVERTED" *)\n'.format(port))
+ if rng is None:
+ outf.write(' {} {};\n'.format(kind, port))
+ else:
+ outf.write(' {} {} {};\n'.format(kind, rng, port))
outf.write(l + '\n')
outf.write('\n')
elif state != State.IN_OTHER_MODULE:
@@ -208,9 +646,11 @@ def xtract_cell_decl(cell, dirs, outf):
kind, _, ports = l.partition(' ')
for port in ports.split(','):
port = port.strip()
- for attr in cell.port_attrs.get(port, []):
- outf.write(' (* {} *)\n'.format(attr))
- outf.write(' {} {};\n'.format(kind, port))
+ if port.startswith('['):
+ rng, port = port.split()
+ else:
+ rng = None
+ module_ports.append((kind, rng, port))
elif l.startswith('parameter ') and state == State.IN_MODULE:
if 'UNPLACED' in l:
continue
@@ -222,6 +662,9 @@ def xtract_cell_decl(cell, dirs, outf):
print('Weird parameter line in {} [{}].'.format(fname, l))
sys.exit(1)
outf.write(' {};\n'.format(l))
+ match = re.search('IS_([a-zA-Z0-9_]+)_INVERTED', l)
+ if match:
+ invertible_ports.add(match[1])
if state != State.OUTSIDE:
print('endmodule not found in {}.'.format(fname))
sys.exit(1)
@@ -235,23 +678,31 @@ def xtract_cell_decl(cell, dirs, outf):
sys.exit(1)
if __name__ == '__main__':
- parser = ArgumentParser(description='Extract Xilinx blackbox cell definitions from Vivado.')
+ parser = ArgumentParser(description='Extract Xilinx blackbox cell definitions from ISE and Vivado.')
parser.add_argument('vivado_dir', nargs='?', default='/opt/Xilinx/Vivado/2018.1')
+ parser.add_argument('ise_dir', nargs='?', default='/opt/Xilinx/ISE/14.7')
args = parser.parse_args()
dirs = [
os.path.join(args.vivado_dir, 'data/verilog/src/xeclib'),
os.path.join(args.vivado_dir, 'data/verilog/src/retarget'),
+ os.path.join(args.ise_dir, 'ISE_DS/ISE/verilog/xeclib/unisims'),
]
for dir in dirs:
if not os.path.isdir(dir):
print('{} is not a directory'.format(dir))
- out = StringIO()
- for cell in CELLS:
- xtract_cell_decl(cell, dirs, out)
+ for ofile, cells in [
+ ('xc6s_cells_xtra.v', XC6S_CELLS),
+ ('xc6v_cells_xtra.v', XC6V_CELLS),
+ ('xc7_cells_xtra.v', XC7_CELLS),
+ ('xcu_cells_xtra.v', XCU_CELLS),
+ ]:
+ out = StringIO()
+ for cell in cells:
+ xtract_cell_decl(cell, dirs, out)
- with open('cells_xtra.v', 'w') as f:
- f.write('// Created by cells_xtra.py from Xilinx models\n')
- f.write('\n')
- f.write(out.getvalue())
+ with open(ofile, 'w') as f:
+ f.write('// Created by cells_xtra.py from Xilinx models\n')
+ f.write('\n')
+ f.write(out.getvalue())
diff --git a/techlibs/xilinx/dsp_map.v b/techlibs/xilinx/dsp_map.v
new file mode 100644
index 000000000..a4256eb92
--- /dev/null
+++ b/techlibs/xilinx/dsp_map.v
@@ -0,0 +1,49 @@
+module \$__MUL25X18 (input [24:0] A, input [17:0] B, output [42:0] Y);
+ parameter A_SIGNED = 0;
+ parameter B_SIGNED = 0;
+ parameter A_WIDTH = 0;
+ parameter B_WIDTH = 0;
+ parameter Y_WIDTH = 0;
+
+ wire [47:0] P_48;
+ DSP48E1 #(
+ // Disable all registers
+ .ACASCREG(0),
+ .ADREG(0),
+ .A_INPUT("DIRECT"),
+ .ALUMODEREG(0),
+ .AREG(0),
+ .BCASCREG(0),
+ .B_INPUT("DIRECT"),
+ .BREG(0),
+ .CARRYINREG(0),
+ .CARRYINSELREG(0),
+ .CREG(0),
+ .DREG(0),
+ .INMODEREG(0),
+ .MREG(0),
+ .OPMODEREG(0),
+ .PREG(0),
+ .USE_MULT("MULTIPLY"),
+ .USE_SIMD("ONE48"),
+ .USE_DPORT("FALSE")
+ ) _TECHMAP_REPLACE_ (
+ //Data path
+ .A({{5{A[24]}}, A}),
+ .B(B),
+ .C(48'b0),
+ .D(25'b0),
+ .P(P_48),
+
+ .INMODE(5'b00000),
+ .ALUMODE(4'b0000),
+ .OPMODE(7'b000101),
+ .CARRYINSEL(3'b000),
+
+ .ACIN(30'b0),
+ .BCIN(18'b0),
+ .PCIN(48'b0),
+ .CARRYIN(1'b0)
+ );
+ assign Y = P_48;
+endmodule
diff --git a/techlibs/xilinx/ff_map.v b/techlibs/xilinx/ff_map.v
deleted file mode 100644
index 4571f6d5c..000000000
--- a/techlibs/xilinx/ff_map.v
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * yosys -- Yosys Open SYnthesis Suite
- *
- * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-// ============================================================================
-// FF mapping
-
-`ifndef _NO_FFS
-
-module \$_DFF_N_ (input D, C, output Q); FDRE_1 #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .R(1'b0)); endmodule
-module \$_DFF_P_ (input D, C, output Q); FDRE #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .R(1'b0)); endmodule
-
-module \$_DFFE_NP_ (input D, C, E, output Q); FDRE_1 #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(1'b0)); endmodule
-module \$_DFFE_PP_ (input D, C, E, output Q); FDRE #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(1'b0)); endmodule
-
-module \$_DFF_NN0_ (input D, C, R, output Q); FDCE_1 #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR(!R)); endmodule
-module \$_DFF_NP0_ (input D, C, R, output Q); FDCE_1 #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR( R)); endmodule
-module \$_DFF_PN0_ (input D, C, R, output Q); FDCE #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR(!R)); endmodule
-module \$_DFF_PP0_ (input D, C, R, output Q); FDCE #(.INIT(|0)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR( R)); endmodule
-
-module \$_DFF_NN1_ (input D, C, R, output Q); FDPE_1 #(.INIT(|1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE(!R)); endmodule
-module \$_DFF_NP1_ (input D, C, R, output Q); FDPE_1 #(.INIT(|1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE( R)); endmodule
-module \$_DFF_PN1_ (input D, C, R, output Q); FDPE #(.INIT(|1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE(!R)); endmodule
-module \$_DFF_PP1_ (input D, C, R, output Q); FDPE #(.INIT(|1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE( R)); endmodule
-
-`endif
-
diff --git a/techlibs/xilinx/synth_xilinx.cc b/techlibs/xilinx/synth_xilinx.cc
index 3760a1129..7085214de 100644
--- a/techlibs/xilinx/synth_xilinx.cc
+++ b/techlibs/xilinx/synth_xilinx.cc
@@ -46,7 +46,7 @@ struct SynthXilinxPass : public ScriptPass
log(" -top <module>\n");
log(" use the specified module as top module\n");
log("\n");
- log(" -family {xcup|xcu|xc7|xc6s}\n");
+ log(" -family {xcup|xcu|xc7|xc6v|xc6s}\n");
log(" run synthesis for the specified Xilinx architecture\n");
log(" generate the synthesis netlist for the specified family.\n");
log(" default: xc7\n");
@@ -81,6 +81,9 @@ struct SynthXilinxPass : public ScriptPass
log(" -nowidelut\n");
log(" do not use MUXF[78] resources to implement LUTs larger than LUT6s\n");
log("\n");
+ log(" -nodsp\n");
+ log(" do not use DSP48E1s to implement multipliers and associated logic\n");
+ log("\n");
log(" -iopad\n");
log(" enable I/O buffer insertion (selected automatically by -ise)\n");
log("\n");
@@ -116,7 +119,7 @@ struct SynthXilinxPass : public ScriptPass
}
std::string top_opt, edif_file, blif_file, family;
- bool flatten, retime, vpr, ise, iopad, noiopad, noclkbuf, nobram, nolutram, nosrl, nocarry, nowidelut, abc9;
+ bool flatten, retime, vpr, ise, iopad, noiopad, noclkbuf, nobram, nolutram, nosrl, nocarry, nowidelut, nodsp, abc9;
bool flatten_before_abc;
int widemux;
@@ -139,6 +142,7 @@ struct SynthXilinxPass : public ScriptPass
nosrl = false;
nocarry = false;
nowidelut = false;
+ nodsp = false;
abc9 = false;
flatten_before_abc = false;
widemux = 0;
@@ -240,11 +244,15 @@ struct SynthXilinxPass : public ScriptPass
abc9 = true;
continue;
}
+ if (args[argidx] == "-nodsp") {
+ nodsp = true;
+ continue;
+ }
break;
}
extra_args(args, argidx, design);
- if (family != "xcup" && family != "xcu" && family != "xc7" && family != "xc6s")
+ if (family != "xcup" && family != "xcu" && family != "xc7" && family != "xc6v" && family != "xc6s")
log_cmd_error("Invalid Xilinx -family setting: '%s'.\n", family.c_str());
if (widemux != 0 && widemux < 2)
@@ -266,29 +274,46 @@ struct SynthXilinxPass : public ScriptPass
void script() YS_OVERRIDE
{
+ std::string ff_map_file;
+ if (help_mode)
+ ff_map_file = "+/xilinx/{family}_ff_map.v";
+ else if (family == "xc6s")
+ ff_map_file = "+/xilinx/xc6s_ff_map.v";
+ else
+ ff_map_file = "+/xilinx/xc7_ff_map.v";
+
if (check_label("begin")) {
if (vpr)
- run("read_verilog -lib -icells -D _ABC -D_EXPLICIT_CARRY +/xilinx/cells_sim.v");
+ run("read_verilog -lib -D_EXPLICIT_CARRY +/xilinx/cells_sim.v");
else
- run("read_verilog -lib -icells -D _ABC +/xilinx/cells_sim.v");
+ run("read_verilog -lib +/xilinx/cells_sim.v");
- run("read_verilog -lib +/xilinx/cells_xtra.v");
+ if (help_mode)
+ run("read_verilog -lib +/xilinx/{family}_cells_xtra.v");
+ else if (family == "xc6s")
+ run("read_verilog -lib +/xilinx/xc6s_cells_xtra.v");
+ else if (family == "xc6v")
+ run("read_verilog -lib +/xilinx/xc6v_cells_xtra.v");
+ else if (family == "xc7")
+ run("read_verilog -lib +/xilinx/xc7_cells_xtra.v");
+ else if (family == "xcu" || family == "xcup")
+ run("read_verilog -lib +/xilinx/xcu_cells_xtra.v");
if (help_mode) {
run("read_verilog -lib +/xilinx/{family}_brams_bb.v");
} else if (family == "xc6s") {
run("read_verilog -lib +/xilinx/xc6s_brams_bb.v");
- } else if (family == "xc7") {
+ } else if (family == "xc6v" || family == "xc7") {
run("read_verilog -lib +/xilinx/xc7_brams_bb.v");
}
run(stringf("hierarchy -check %s", top_opt.c_str()));
}
- if (check_label("coarse")) {
+ if (check_label("prepare")) {
run("proc");
- if (help_mode || flatten)
- run("flatten", "(if -flatten)");
+ if (flatten || help_mode)
+ run("flatten", "(with '-flatten')");
run("opt_expr");
run("opt_clean");
run("check");
@@ -312,6 +337,26 @@ struct SynthXilinxPass : public ScriptPass
}
run("techmap -map +/cmp2lut.v -D LUT_WIDTH=6");
+ }
+
+ if (check_label("map_dsp"), "(skip if '-nodsp')") {
+ if (!nodsp || help_mode) {
+ // NB: Xilinx multipliers are signed only
+ run("techmap -map +/mul2dsp.v -map +/xilinx/dsp_map.v -D DSP_A_MAXWIDTH=25 -D DSP_A_MAXWIDTH_PARTIAL=18 -D DSP_B_MAXWIDTH=18 "
+ "-D DSP_A_MINWIDTH=2 -D DSP_B_MINWIDTH=2 " // Blocks Nx1 multipliers
+ "-D DSP_Y_MINWIDTH=9 " // UG901 suggests small multiplies are those 4x4 and smaller
+ "-D DSP_SIGNEDONLY=1 -D DSP_NAME=$__MUL25X18");
+ run("select a:mul2dsp");
+ run("setattr -unset mul2dsp");
+ run("opt_expr -fine");
+ run("wreduce");
+ run("select -clear");
+ run("xilinx_dsp");
+ run("chtype -set $mul t:$__soft_mul");
+ }
+ }
+
+ if (check_label("coarse")) {
run("alumacc");
run("share");
run("opt");
@@ -329,7 +374,7 @@ struct SynthXilinxPass : public ScriptPass
if (family == "xc6s") {
run("memory_bram -rules +/xilinx/xc6s_brams.txt");
run("techmap -map +/xilinx/xc6s_brams_map.v");
- } else if (family == "xc7") {
+ } else if (family == "xc6v" || family == "xc7") {
run("memory_bram -rules +/xilinx/xc7_brams.txt");
run("techmap -map +/xilinx/xc7_brams_map.v");
} else {
@@ -408,7 +453,7 @@ struct SynthXilinxPass : public ScriptPass
}
if (check_label("map_cells")) {
- std::string techmap_args = "-map +/techmap.v -D _ABC -map +/xilinx/cells_map.v";
+ std::string techmap_args = "-map +/techmap.v -map +/xilinx/cells_map.v";
if (widemux > 0)
techmap_args += stringf(" -D MIN_MUX_INPUTS=%d", widemux);
run("techmap " + techmap_args);
@@ -416,11 +461,9 @@ struct SynthXilinxPass : public ScriptPass
}
if (check_label("map_ffs")) {
- if (abc9 || help_mode) {
- run("techmap -map +/xilinx/ff_map.v", "('-abc9' only)");
- run("dffinit -ff FDRE Q INIT -ff FDCE Q INIT -ff FDPE Q INIT -ff FDSE Q INIT "
- "-ff FDRE_1 Q INIT -ff FDCE_1 Q INIT -ff FDPE_1 Q INIT -ff FDSE_1 Q INIT", "('-abc9' only)");
- }
+ if (abc9 || help_mode) {
+ run("techmap -map " + ff_map_file, "('-abc9' only)");
+ }
}
if (check_label("map_luts")) {
@@ -428,10 +471,12 @@ struct SynthXilinxPass : public ScriptPass
if (flatten_before_abc)
run("flatten");
if (help_mode)
- run("abc -luts 2:2,3,6:5[,10,20] [-dff]", "(option for 'nowidelut', option for '-retime')");
+ run("abc -luts 2:2,3,6:5[,10,20] [-dff]", "(option for 'nowidelut'; option for '-retime')");
else if (abc9) {
if (family != "xc7")
log_warning("'synth_xilinx -abc9' currently supports '-family xc7' only.\n");
+ run("techmap -map +/xilinx/abc_map.v -max_iter 1");
+ run("read_verilog -icells -lib +/xilinx/abc_model.v");
if (nowidelut)
run("abc9 -lut +/xilinx/abc_xc7_nowide.lut -box +/xilinx/abc_xc7.box -W " + std::to_string(XC7_WIRE_DELAY));
else
@@ -449,16 +494,14 @@ struct SynthXilinxPass : public ScriptPass
// has performed any necessary retiming
if (!nosrl || help_mode)
run("xilinx_srl -fixed -minlen 3", "(skip if '-nosrl')");
-
std::string techmap_args = "-map +/xilinx/lut_map.v -map +/xilinx/cells_map.v";
if (help_mode)
- techmap_args += " [-map +/xilinx/ff_map.v]";
- else if (!abc9)
- techmap_args += " -map +/xilinx/ff_map.v";
+ techmap_args += " [-map " + ff_map_file + "]";
+ else if (abc9)
+ techmap_args += " -map +/xilinx/abc_unmap.v";
+ else
+ techmap_args += " -map " + ff_map_file;
run("techmap " + techmap_args);
- if (!abc9)
- run("dffinit -ff FDRE Q INIT -ff FDCE Q INIT -ff FDPE Q INIT -ff FDSE Q INIT "
- "-ff FDRE_1 Q INIT -ff FDCE_1 Q INIT -ff FDPE_1 Q INIT -ff FDSE_1 Q INIT", "(without '-abc9' only)");
run("clean");
}
@@ -470,8 +513,10 @@ struct SynthXilinxPass : public ScriptPass
else
run("clkbufmap -buf BUFG O:I");
}
- if (do_iopad)
+ if (help_mode || do_iopad)
run("iopadmap -bits -outpad OBUF I:O -inpad IBUF O:I A:top", "(only if '-iopad' or '-ise' and not '-noiopad')");
+ if (help_mode || ise)
+ run("extractinv -inv INV O:I", "(only if '-ise')");
}
if (check_label("check")) {
diff --git a/techlibs/xilinx/tests/.gitignore b/techlibs/xilinx/tests/.gitignore
index 496b87461..ef3699bd2 100644
--- a/techlibs/xilinx/tests/.gitignore
+++ b/techlibs/xilinx/tests/.gitignore
@@ -4,3 +4,8 @@ bram1_[0-9]*/
bram2.log
bram2_syn.v
bram2_tb
+dsp_work*/
+test_dsp_model_ref.v
+test_dsp_model_uut.v
+test_dsp_model
+*.vcd
diff --git a/techlibs/xilinx/tests/test_dsp_model.sh b/techlibs/xilinx/tests/test_dsp_model.sh
new file mode 100644
index 000000000..ae925c402
--- /dev/null
+++ b/techlibs/xilinx/tests/test_dsp_model.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -ex
+sed 's/DSP48E1/DSP48E1_UUT/; /DSP48E1_UUT/,/endmodule/ p; d;' < ../cells_sim.v > test_dsp_model_uut.v
+if [ ! -f "test_dsp_model_ref.v" ]; then
+ cat /opt/Xilinx/Vivado/2019.1/data/verilog/src/unisims/DSP48E1.v > test_dsp_model_ref.v
+fi
+for tb in macc_overflow_underflow \
+ simd24_preadd_noreg_nocasc simd12_preadd_noreg_nocasc \
+ mult_allreg_nopreadd_nocasc mult_noreg_nopreadd_nocasc \
+ mult_allreg_preadd_nocasc mult_noreg_preadd_nocasc mult_inreg_preadd_nocasc
+do
+ iverilog -s $tb -s glbl -o test_dsp_model test_dsp_model.v test_dsp_model_uut.v test_dsp_model_ref.v /opt/Xilinx/Vivado/2019.1/data/verilog/src/glbl.v
+ vvp -N ./test_dsp_model
+done
diff --git a/techlibs/xilinx/tests/test_dsp_model.v b/techlibs/xilinx/tests/test_dsp_model.v
new file mode 100644
index 000000000..db012f169
--- /dev/null
+++ b/techlibs/xilinx/tests/test_dsp_model.v
@@ -0,0 +1,652 @@
+`timescale 1ns / 1ps
+
+module testbench;
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+
+ reg CLK;
+ reg CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL;
+ reg CED, CEINMODE, CEM, CEP;
+ reg RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP;
+ reg [29:0] A, ACIN;
+ reg [17:0] B, BCIN;
+ reg [47:0] C;
+ reg [24:0] D;
+ reg [47:0] PCIN;
+ reg [3:0] ALUMODE;
+ reg [2:0] CARRYINSEL;
+ reg [4:0] INMODE;
+ reg [6:0] OPMODE;
+ reg CARRYCASCIN, CARRYIN, MULTSIGNIN;
+
+ output [29:0] ACOUT, REF_ACOUT;
+ output [17:0] BCOUT, REF_BCOUT;
+ output CARRYCASCOUT, REF_CARRYCASCOUT;
+ output [3:0] CARRYOUT, REF_CARRYOUT;
+ output MULTSIGNOUT, REF_MULTSIGNOUT;
+ output OVERFLOW, REF_OVERFLOW;
+ output [47:0] P, REF_P;
+ output PATTERNBDETECT, REF_PATTERNBDETECT;
+ output PATTERNDETECT, REF_PATTERNDETECT;
+ output [47:0] PCOUT, REF_PCOUT;
+ output UNDERFLOW, REF_UNDERFLOW;
+
+ integer errcount = 0;
+
+ reg ERROR_FLAG = 0;
+
+ task clkcycle;
+ begin
+ #5;
+ CLK = ~CLK;
+ #10;
+ CLK = ~CLK;
+ #2;
+ ERROR_FLAG = 0;
+ if (REF_P !== P) begin
+ $display("ERROR at %1t: REF_P=%b UUT_P=%b DIFF=%b", $time, REF_P, P, REF_P ^ P);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ if (REF_CARRYOUT !== CARRYOUT) begin
+ $display("ERROR at %1t: REF_CARRYOUT=%b UUT_CARRYOUT=%b", $time, REF_CARRYOUT, CARRYOUT);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ if (REF_PATTERNDETECT !== PATTERNDETECT) begin
+ $display("ERROR at %1t: REF_PATTERNDETECT=%b UUT_PATTERNDETECT=%b DIFF=%b REF_P=%b P=%b", $time, REF_PATTERNDETECT, PATTERNDETECT, REF_PATTERNDETECT ^ PATTERNDETECT, REF_P, P);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ if (REF_PATTERNBDETECT !== PATTERNBDETECT) begin
+ $display("ERROR at %1t: REF_PATTERNBDETECT=%b UUT_PATTERNBDETECT=%b DIFF=%b", $time, REF_PATTERNBDETECT, PATTERNBDETECT, REF_PATTERNBDETECT ^ PATTERNBDETECT);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ if (REF_OVERFLOW !== OVERFLOW) begin
+ $display("ERROR at %1t: REF_OVERFLOW=%b UUT_OVERFLOW=%b DIFF=%b", $time, REF_OVERFLOW, OVERFLOW, REF_OVERFLOW ^ OVERFLOW);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ if (REF_UNDERFLOW !== UNDERFLOW) begin
+ $display("ERROR at %1t: REF_UNDERFLOW=%b UUT_UNDERFLOW=%b DIFF=%b", $time, REF_UNDERFLOW, UNDERFLOW, REF_UNDERFLOW ^ UNDERFLOW);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ #3;
+ end
+ endtask
+
+ reg config_valid = 0;
+ task drc;
+ begin
+ config_valid = 1;
+ if (AREG != 2 && INMODE[0]) config_valid = 0;
+ if (BREG != 2 && INMODE[4]) config_valid = 0;
+
+ if (USE_SIMD != "ONE48" && OPMODE[3:0] == 4'b0101) config_valid = 0;
+
+ if (OPMODE[1:0] == 2'b10 && PREG != 1) config_valid = 0;
+ if ((OPMODE[3:2] == 2'b01) ^ (OPMODE[1:0] == 2'b01) == 1'b1) config_valid = 0;
+ if ((OPMODE[6:4] == 3'b010 || OPMODE[6:4] == 3'b110) && PREG != 1) config_valid = 0;
+ if ((OPMODE[6:4] == 3'b100) && (PREG != 1 || OPMODE[3:0] != 4'b1000 || ALUMODE[3:2] == 2'b01 || ALUMODE[3:2] == 2'b11)) config_valid = 0;
+ if ((CARRYINSEL == 3'b100 || CARRYINSEL == 3'b101 || CARRYINSEL == 3'b111) && (PREG != 1)) config_valid = 0;
+ if (OPMODE[6:4] == 3'b111) config_valid = 0;
+ if ((OPMODE[3:0] == 4'b0101) && CARRYINSEL == 3'b010) config_valid = 0;
+ if (CARRYINSEL == 3'b000 && OPMODE == 7'b1001000) config_valid = 0;
+
+ if ((ALUMODE[3:2] == 2'b01 || ALUMODE[3:2] == 2'b11) && OPMODE[3:2] != 2'b00 && OPMODE[3:2] != 2'b10) config_valid = 0;
+
+
+ end
+ endtask
+
+ initial begin
+ $dumpfile("test_dsp_model.vcd");
+ $dumpvars(0, testbench);
+
+ #2;
+ CLK = 1'b0;
+ {CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL} = 9'b111111111;
+ {CED, CEINMODE, CEM, CEP} = 4'b1111;
+
+ {A, B, C, D} = 0;
+ {ACIN, BCIN, PCIN} = 0;
+ {ALUMODE, CARRYINSEL, INMODE} = 0;
+ {OPMODE, CARRYCASCIN, CARRYIN, MULTSIGNIN} = 0;
+
+ {RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP} = ~0;
+ repeat (10) begin
+ #10;
+ CLK = 1'b1;
+ #10;
+ CLK = 1'b0;
+ #10;
+ CLK = 1'b1;
+ #10;
+ CLK = 1'b0;
+ end
+ {RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP} = 0;
+
+ repeat (10000) begin
+ clkcycle;
+ config_valid = 0;
+ while (!config_valid) begin
+ A = $urandom;
+ ACIN = $urandom;
+ B = $urandom;
+ BCIN = $urandom;
+ C = {$urandom, $urandom};
+ D = $urandom;
+ PCIN = {$urandom, $urandom};
+
+ {CEA1, CEA2, CEAD, CEALUMODE, CEB1, CEB2, CEC, CECARRYIN, CECTRL} = $urandom | $urandom | $urandom;
+ {CED, CEINMODE, CEM, CEP} = $urandom | $urandom | $urandom | $urandom;
+
+ // Otherwise we can accidentally create illegal configs
+ CEINMODE = CECTRL;
+ CEALUMODE = CECTRL;
+
+ {RSTA, RSTALLCARRYIN, RSTALUMODE, RSTB, RSTC, RSTCTRL, RSTD, RSTINMODE, RSTM, RSTP} = $urandom & $urandom & $urandom & $urandom & $urandom & $urandom;
+ {ALUMODE, INMODE} = $urandom;
+ CARRYINSEL = $urandom & $urandom & $urandom;
+ OPMODE = $urandom;
+ if ($urandom & 1'b1)
+ OPMODE[3:0] = 4'b0101; // test multiply more than other modes
+ {CARRYCASCIN, CARRYIN, MULTSIGNIN} = $urandom;
+
+ // So few valid options in these modes, just force one valid option
+ if (CARRYINSEL == 3'b001) OPMODE = 7'b1010101;
+ if (CARRYINSEL == 3'b010) OPMODE = 7'b0001010;
+ if (CARRYINSEL == 3'b011) OPMODE = 7'b0011011;
+ if (CARRYINSEL == 3'b100) OPMODE = 7'b0110011;
+ if (CARRYINSEL == 3'b101) OPMODE = 7'b0011010;
+ if (CARRYINSEL == 3'b110) OPMODE = 7'b0010101;
+ if (CARRYINSEL == 3'b111) OPMODE = 7'b0100011;
+
+ drc;
+ end
+ end
+
+ if (errcount == 0) begin
+ $display("All tests passed.");
+ $finish;
+ end else begin
+ $display("Caught %1d errors.", errcount);
+ $stop;
+ end
+ end
+
+ DSP48E1 #(
+ .ACASCREG (ACASCREG),
+ .ADREG (ADREG),
+ .ALUMODEREG (ALUMODEREG),
+ .AREG (AREG),
+ .AUTORESET_PATDET (AUTORESET_PATDET),
+ .A_INPUT (A_INPUT),
+ .BCASCREG (BCASCREG),
+ .BREG (BREG),
+ .B_INPUT (B_INPUT),
+ .CARRYINREG (CARRYINREG),
+ .CARRYINSELREG (CARRYINSELREG),
+ .CREG (CREG),
+ .DREG (DREG),
+ .INMODEREG (INMODEREG),
+ .MREG (MREG),
+ .OPMODEREG (OPMODEREG),
+ .PREG (PREG),
+ .SEL_MASK (SEL_MASK),
+ .SEL_PATTERN (SEL_PATTERN),
+ .USE_DPORT (USE_DPORT),
+ .USE_MULT (USE_MULT),
+ .USE_PATTERN_DETECT (USE_PATTERN_DETECT),
+ .USE_SIMD (USE_SIMD),
+ .MASK (MASK),
+ .PATTERN (PATTERN),
+ .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED),
+ .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED),
+ .IS_CLK_INVERTED (IS_CLK_INVERTED),
+ .IS_INMODE_INVERTED (IS_INMODE_INVERTED),
+ .IS_OPMODE_INVERTED (IS_OPMODE_INVERTED)
+ ) ref (
+ .ACOUT (REF_ACOUT),
+ .BCOUT (REF_BCOUT),
+ .CARRYCASCOUT (REF_CARRYCASCOUT),
+ .CARRYOUT (REF_CARRYOUT),
+ .MULTSIGNOUT (REF_MULTSIGNOUT),
+ .OVERFLOW (REF_OVERFLOW),
+ .P (REF_P),
+ .PATTERNBDETECT(REF_PATTERNBDETECT),
+ .PATTERNDETECT (REF_PATTERNDETECT),
+ .PCOUT (REF_PCOUT),
+ .UNDERFLOW (REF_UNDERFLOW),
+ .A (A),
+ .ACIN (ACIN),
+ .ALUMODE (ALUMODE),
+ .B (B),
+ .BCIN (BCIN),
+ .C (C),
+ .CARRYCASCIN (CARRYCASCIN),
+ .CARRYINSEL (CARRYINSEL),
+ .CEA1 (CEA1),
+ .CEA2 (CEA2),
+ .CEAD (CEAD),
+ .CEALUMODE (CEALUMODE),
+ .CEB1 (CEB1),
+ .CEB2 (CEB2),
+ .CEC (CEC),
+ .CECARRYIN (CECARRYIN),
+ .CECTRL (CECTRL),
+ .CED (CED),
+ .CEINMODE (CEINMODE),
+ .CEM (CEM),
+ .CEP (CEP),
+ .CLK (CLK),
+ .D (D),
+ .INMODE (INMODE),
+ .MULTSIGNIN (MULTSIGNIN),
+ .OPMODE (OPMODE),
+ .PCIN (PCIN),
+ .RSTA (RSTA),
+ .RSTALLCARRYIN (RSTALLCARRYIN),
+ .RSTALUMODE (RSTALUMODE),
+ .RSTB (RSTB),
+ .RSTC (RSTC),
+ .RSTCTRL (RSTCTRL),
+ .RSTD (RSTD),
+ .RSTINMODE (RSTINMODE),
+ .RSTM (RSTM),
+ .RSTP (RSTP)
+ );
+
+ DSP48E1_UUT #(
+ .ACASCREG (ACASCREG),
+ .ADREG (ADREG),
+ .ALUMODEREG (ALUMODEREG),
+ .AREG (AREG),
+ .AUTORESET_PATDET (AUTORESET_PATDET),
+ .A_INPUT (A_INPUT),
+ .BCASCREG (BCASCREG),
+ .BREG (BREG),
+ .B_INPUT (B_INPUT),
+ .CARRYINREG (CARRYINREG),
+ .CARRYINSELREG (CARRYINSELREG),
+ .CREG (CREG),
+ .DREG (DREG),
+ .INMODEREG (INMODEREG),
+ .MREG (MREG),
+ .OPMODEREG (OPMODEREG),
+ .PREG (PREG),
+ .SEL_MASK (SEL_MASK),
+ .SEL_PATTERN (SEL_PATTERN),
+ .USE_DPORT (USE_DPORT),
+ .USE_MULT (USE_MULT),
+ .USE_PATTERN_DETECT (USE_PATTERN_DETECT),
+ .USE_SIMD (USE_SIMD),
+ .MASK (MASK),
+ .PATTERN (PATTERN),
+ .IS_ALUMODE_INVERTED(IS_ALUMODE_INVERTED),
+ .IS_CARRYIN_INVERTED(IS_CARRYIN_INVERTED),
+ .IS_CLK_INVERTED (IS_CLK_INVERTED),
+ .IS_INMODE_INVERTED (IS_INMODE_INVERTED),
+ .IS_OPMODE_INVERTED (IS_OPMODE_INVERTED)
+ ) uut (
+ .ACOUT (ACOUT),
+ .BCOUT (BCOUT),
+ .CARRYCASCOUT (CARRYCASCOUT),
+ .CARRYOUT (CARRYOUT),
+ .MULTSIGNOUT (MULTSIGNOUT),
+ .OVERFLOW (OVERFLOW),
+ .P (P),
+ .PATTERNBDETECT(PATTERNBDETECT),
+ .PATTERNDETECT (PATTERNDETECT),
+ .PCOUT (PCOUT),
+ .UNDERFLOW (UNDERFLOW),
+ .A (A),
+ .ACIN (ACIN),
+ .ALUMODE (ALUMODE),
+ .B (B),
+ .BCIN (BCIN),
+ .C (C),
+ .CARRYCASCIN (CARRYCASCIN),
+ .CARRYINSEL (CARRYINSEL),
+ .CEA1 (CEA1),
+ .CEA2 (CEA2),
+ .CEAD (CEAD),
+ .CEALUMODE (CEALUMODE),
+ .CEB1 (CEB1),
+ .CEB2 (CEB2),
+ .CEC (CEC),
+ .CECARRYIN (CECARRYIN),
+ .CECTRL (CECTRL),
+ .CED (CED),
+ .CEINMODE (CEINMODE),
+ .CEM (CEM),
+ .CEP (CEP),
+ .CLK (CLK),
+ .D (D),
+ .INMODE (INMODE),
+ .MULTSIGNIN (MULTSIGNIN),
+ .OPMODE (OPMODE),
+ .PCIN (PCIN),
+ .RSTA (RSTA),
+ .RSTALLCARRYIN (RSTALLCARRYIN),
+ .RSTALUMODE (RSTALUMODE),
+ .RSTB (RSTB),
+ .RSTC (RSTC),
+ .RSTCTRL (RSTCTRL),
+ .RSTD (RSTD),
+ .RSTINMODE (RSTINMODE),
+ .RSTM (RSTM),
+ .RSTP (RSTP)
+ );
+endmodule
+
+module mult_noreg_nopreadd_nocasc;
+ testbench #(
+ .ACASCREG (0),
+ .ADREG (0),
+ .ALUMODEREG (0),
+ .AREG (0),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (0),
+ .BREG (0),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (0),
+ .CARRYINSELREG (0),
+ .CREG (0),
+ .DREG (0),
+ .INMODEREG (0),
+ .MREG (0),
+ .OPMODEREG (0),
+ .PREG (0),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("FALSE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("ONE48"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+module mult_allreg_nopreadd_nocasc;
+ testbench #(
+ .ACASCREG (1),
+ .ADREG (1),
+ .ALUMODEREG (1),
+ .AREG (2),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (1),
+ .BREG (2),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (1),
+ .CARRYINSELREG (1),
+ .CREG (1),
+ .DREG (1),
+ .INMODEREG (1),
+ .MREG (1),
+ .OPMODEREG (1),
+ .PREG (1),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("FALSE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("ONE48"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+module mult_noreg_preadd_nocasc;
+ testbench #(
+ .ACASCREG (0),
+ .ADREG (0),
+ .ALUMODEREG (0),
+ .AREG (0),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (0),
+ .BREG (0),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (0),
+ .CARRYINSELREG (0),
+ .CREG (0),
+ .DREG (0),
+ .INMODEREG (0),
+ .MREG (0),
+ .OPMODEREG (0),
+ .PREG (0),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("TRUE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("ONE48"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+module mult_allreg_preadd_nocasc;
+ testbench #(
+ .ACASCREG (1),
+ .ADREG (1),
+ .ALUMODEREG (1),
+ .AREG (2),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (1),
+ .BREG (2),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (1),
+ .CARRYINSELREG (1),
+ .CREG (1),
+ .DREG (1),
+ .INMODEREG (1),
+ .MREG (1),
+ .OPMODEREG (1),
+ .PREG (1),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("TRUE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("ONE48"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+module mult_inreg_preadd_nocasc;
+ testbench #(
+ .ACASCREG (1),
+ .ADREG (0),
+ .ALUMODEREG (0),
+ .AREG (1),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (1),
+ .BREG (1),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (0),
+ .CARRYINSELREG (0),
+ .CREG (1),
+ .DREG (1),
+ .INMODEREG (0),
+ .MREG (0),
+ .OPMODEREG (0),
+ .PREG (0),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("TRUE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("ONE48"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+module simd12_preadd_noreg_nocasc;
+ testbench #(
+ .ACASCREG (0),
+ .ADREG (0),
+ .ALUMODEREG (0),
+ .AREG (0),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (0),
+ .BREG (0),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (0),
+ .CARRYINSELREG (0),
+ .CREG (0),
+ .DREG (0),
+ .INMODEREG (0),
+ .MREG (0),
+ .OPMODEREG (0),
+ .PREG (0),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("TRUE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("FOUR12"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+
+module simd24_preadd_noreg_nocasc;
+ testbench #(
+ .ACASCREG (0),
+ .ADREG (0),
+ .ALUMODEREG (0),
+ .AREG (0),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (0),
+ .BREG (0),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (0),
+ .CARRYINSELREG (0),
+ .CREG (0),
+ .DREG (0),
+ .INMODEREG (0),
+ .MREG (0),
+ .OPMODEREG (0),
+ .PREG (0),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("TRUE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("NO_PATDET"),
+ .USE_SIMD ("TWO24"),
+ .MASK (48'h3FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
+
+module macc_overflow_underflow;
+ testbench #(
+ .ACASCREG (0),
+ .ADREG (0),
+ .ALUMODEREG (0),
+ .AREG (0),
+ .AUTORESET_PATDET ("NO_RESET"),
+ .A_INPUT ("DIRECT"),
+ .BCASCREG (0),
+ .BREG (0),
+ .B_INPUT ("DIRECT"),
+ .CARRYINREG (0),
+ .CARRYINSELREG (0),
+ .CREG (0),
+ .DREG (0),
+ .INMODEREG (0),
+ .MREG (0),
+ .OPMODEREG (0),
+ .PREG (1),
+ .SEL_MASK ("MASK"),
+ .SEL_PATTERN ("PATTERN"),
+ .USE_DPORT ("FALSE"),
+ .USE_MULT ("DYNAMIC"),
+ .USE_PATTERN_DETECT ("PATDET"),
+ .USE_SIMD ("ONE48"),
+ .MASK (48'h1FFFFFFFFFFF),
+ .PATTERN (48'h000000000000),
+ .IS_ALUMODE_INVERTED(4'b0),
+ .IS_CARRYIN_INVERTED(1'b0),
+ .IS_CLK_INVERTED (1'b0),
+ .IS_INMODE_INVERTED (5'b0),
+ .IS_OPMODE_INVERTED (7'b0)
+ ) testbench ();
+endmodule
diff --git a/techlibs/xilinx/xc6s_cells_xtra.v b/techlibs/xilinx/xc6s_cells_xtra.v
new file mode 100644
index 000000000..f8dcce81d
--- /dev/null
+++ b/techlibs/xilinx/xc6s_cells_xtra.v
@@ -0,0 +1,1829 @@
+// Created by cells_xtra.py from Xilinx models
+
+module MCB (...);
+ parameter integer ARB_NUM_TIME_SLOTS = 12;
+ parameter [17:0] ARB_TIME_SLOT_0 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_1 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_10 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_11 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_2 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_3 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_4 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_5 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_6 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_7 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_8 = 18'b111111111111111111;
+ parameter [17:0] ARB_TIME_SLOT_9 = 18'b111111111111111111;
+ parameter [2:0] CAL_BA = 3'h0;
+ parameter CAL_BYPASS = "YES";
+ parameter [11:0] CAL_CA = 12'h000;
+ parameter CAL_CALIBRATION_MODE = "NOCALIBRATION";
+ parameter integer CAL_CLK_DIV = 1;
+ parameter CAL_DELAY = "QUARTER";
+ parameter [14:0] CAL_RA = 15'h0000;
+ parameter MEM_ADDR_ORDER = "BANK_ROW_COLUMN";
+ parameter integer MEM_BA_SIZE = 3;
+ parameter integer MEM_BURST_LEN = 8;
+ parameter integer MEM_CAS_LATENCY = 4;
+ parameter integer MEM_CA_SIZE = 11;
+ parameter MEM_DDR1_2_ODS = "FULL";
+ parameter MEM_DDR2_3_HIGH_TEMP_SR = "NORMAL";
+ parameter MEM_DDR2_3_PA_SR = "FULL";
+ parameter integer MEM_DDR2_ADD_LATENCY = 0;
+ parameter MEM_DDR2_DIFF_DQS_EN = "YES";
+ parameter MEM_DDR2_RTT = "50OHMS";
+ parameter integer MEM_DDR2_WRT_RECOVERY = 4;
+ parameter MEM_DDR3_ADD_LATENCY = "OFF";
+ parameter MEM_DDR3_AUTO_SR = "ENABLED";
+ parameter integer MEM_DDR3_CAS_LATENCY = 7;
+ parameter integer MEM_DDR3_CAS_WR_LATENCY = 5;
+ parameter MEM_DDR3_DYN_WRT_ODT = "OFF";
+ parameter MEM_DDR3_ODS = "DIV7";
+ parameter MEM_DDR3_RTT = "DIV2";
+ parameter integer MEM_DDR3_WRT_RECOVERY = 7;
+ parameter MEM_MDDR_ODS = "FULL";
+ parameter MEM_MOBILE_PA_SR = "FULL";
+ parameter integer MEM_MOBILE_TC_SR = 0;
+ parameter integer MEM_RAS_VAL = 0;
+ parameter integer MEM_RA_SIZE = 13;
+ parameter integer MEM_RCD_VAL = 1;
+ parameter integer MEM_REFI_VAL = 0;
+ parameter integer MEM_RFC_VAL = 0;
+ parameter integer MEM_RP_VAL = 0;
+ parameter integer MEM_RTP_VAL = 0;
+ parameter MEM_TYPE = "DDR3";
+ parameter integer MEM_WIDTH = 4;
+ parameter integer MEM_WR_VAL = 0;
+ parameter integer MEM_WTR_VAL = 3;
+ parameter PORT_CONFIG = "B32_B32_B32_B32";
+ output CAS;
+ output CKE;
+ output DQIOWEN0;
+ output DQSIOWEN90N;
+ output DQSIOWEN90P;
+ output IOIDRPADD;
+ output IOIDRPBROADCAST;
+ output IOIDRPCLK;
+ output IOIDRPCS;
+ output IOIDRPSDO;
+ output IOIDRPTRAIN;
+ output IOIDRPUPDATE;
+ output LDMN;
+ output LDMP;
+ output ODT;
+ output P0CMDEMPTY;
+ output P0CMDFULL;
+ output P0RDEMPTY;
+ output P0RDERROR;
+ output P0RDFULL;
+ output P0RDOVERFLOW;
+ output P0WREMPTY;
+ output P0WRERROR;
+ output P0WRFULL;
+ output P0WRUNDERRUN;
+ output P1CMDEMPTY;
+ output P1CMDFULL;
+ output P1RDEMPTY;
+ output P1RDERROR;
+ output P1RDFULL;
+ output P1RDOVERFLOW;
+ output P1WREMPTY;
+ output P1WRERROR;
+ output P1WRFULL;
+ output P1WRUNDERRUN;
+ output P2CMDEMPTY;
+ output P2CMDFULL;
+ output P2EMPTY;
+ output P2ERROR;
+ output P2FULL;
+ output P2RDOVERFLOW;
+ output P2WRUNDERRUN;
+ output P3CMDEMPTY;
+ output P3CMDFULL;
+ output P3EMPTY;
+ output P3ERROR;
+ output P3FULL;
+ output P3RDOVERFLOW;
+ output P3WRUNDERRUN;
+ output P4CMDEMPTY;
+ output P4CMDFULL;
+ output P4EMPTY;
+ output P4ERROR;
+ output P4FULL;
+ output P4RDOVERFLOW;
+ output P4WRUNDERRUN;
+ output P5CMDEMPTY;
+ output P5CMDFULL;
+ output P5EMPTY;
+ output P5ERROR;
+ output P5FULL;
+ output P5RDOVERFLOW;
+ output P5WRUNDERRUN;
+ output RAS;
+ output RST;
+ output SELFREFRESHMODE;
+ output UDMN;
+ output UDMP;
+ output UOCALSTART;
+ output UOCMDREADYIN;
+ output UODATAVALID;
+ output UODONECAL;
+ output UOREFRSHFLAG;
+ output UOSDO;
+ output WE;
+ output [14:0] ADDR;
+ output [15:0] DQON;
+ output [15:0] DQOP;
+ output [2:0] BA;
+ output [31:0] P0RDDATA;
+ output [31:0] P1RDDATA;
+ output [31:0] P2RDDATA;
+ output [31:0] P3RDDATA;
+ output [31:0] P4RDDATA;
+ output [31:0] P5RDDATA;
+ output [31:0] STATUS;
+ output [4:0] IOIDRPADDR;
+ output [6:0] P0RDCOUNT;
+ output [6:0] P0WRCOUNT;
+ output [6:0] P1RDCOUNT;
+ output [6:0] P1WRCOUNT;
+ output [6:0] P2COUNT;
+ output [6:0] P3COUNT;
+ output [6:0] P4COUNT;
+ output [6:0] P5COUNT;
+ output [7:0] UODATA;
+ input DQSIOIN;
+ input DQSIOIP;
+ input IOIDRPSDI;
+ input P0ARBEN;
+ input P0CMDCLK;
+ input P0CMDEN;
+ input P0RDCLK;
+ input P0RDEN;
+ input P0WRCLK;
+ input P0WREN;
+ input P1ARBEN;
+ input P1CMDCLK;
+ input P1CMDEN;
+ input P1RDCLK;
+ input P1RDEN;
+ input P1WRCLK;
+ input P1WREN;
+ input P2ARBEN;
+ input P2CLK;
+ input P2CMDCLK;
+ input P2CMDEN;
+ input P2EN;
+ input P3ARBEN;
+ input P3CLK;
+ input P3CMDCLK;
+ input P3CMDEN;
+ input P3EN;
+ input P4ARBEN;
+ input P4CLK;
+ input P4CMDCLK;
+ input P4CMDEN;
+ input P4EN;
+ input P5ARBEN;
+ input P5CLK;
+ input P5CMDCLK;
+ input P5CMDEN;
+ input P5EN;
+ input PLLLOCK;
+ input RECAL;
+ input SELFREFRESHENTER;
+ input SYSRST;
+ input UDQSIOIN;
+ input UDQSIOIP;
+ input UIADD;
+ input UIBROADCAST;
+ input UICLK;
+ input UICMD;
+ input UICMDEN;
+ input UICMDIN;
+ input UICS;
+ input UIDONECAL;
+ input UIDQLOWERDEC;
+ input UIDQLOWERINC;
+ input UIDQUPPERDEC;
+ input UIDQUPPERINC;
+ input UIDRPUPDATE;
+ input UILDQSDEC;
+ input UILDQSINC;
+ input UIREAD;
+ input UISDI;
+ input UIUDQSDEC;
+ input UIUDQSINC;
+ input [11:0] P0CMDCA;
+ input [11:0] P1CMDCA;
+ input [11:0] P2CMDCA;
+ input [11:0] P3CMDCA;
+ input [11:0] P4CMDCA;
+ input [11:0] P5CMDCA;
+ input [14:0] P0CMDRA;
+ input [14:0] P1CMDRA;
+ input [14:0] P2CMDRA;
+ input [14:0] P3CMDRA;
+ input [14:0] P4CMDRA;
+ input [14:0] P5CMDRA;
+ input [15:0] DQI;
+ input [1:0] PLLCE;
+ input [1:0] PLLCLK;
+ input [2:0] P0CMDBA;
+ input [2:0] P0CMDINSTR;
+ input [2:0] P1CMDBA;
+ input [2:0] P1CMDINSTR;
+ input [2:0] P2CMDBA;
+ input [2:0] P2CMDINSTR;
+ input [2:0] P3CMDBA;
+ input [2:0] P3CMDINSTR;
+ input [2:0] P4CMDBA;
+ input [2:0] P4CMDINSTR;
+ input [2:0] P5CMDBA;
+ input [2:0] P5CMDINSTR;
+ input [31:0] P0WRDATA;
+ input [31:0] P1WRDATA;
+ input [31:0] P2WRDATA;
+ input [31:0] P3WRDATA;
+ input [31:0] P4WRDATA;
+ input [31:0] P5WRDATA;
+ input [3:0] P0RWRMASK;
+ input [3:0] P1RWRMASK;
+ input [3:0] P2WRMASK;
+ input [3:0] P3WRMASK;
+ input [3:0] P4WRMASK;
+ input [3:0] P5WRMASK;
+ input [3:0] UIDQCOUNT;
+ input [4:0] UIADDR;
+ input [5:0] P0CMDBL;
+ input [5:0] P1CMDBL;
+ input [5:0] P2CMDBL;
+ input [5:0] P3CMDBL;
+ input [5:0] P4CMDBL;
+ input [5:0] P5CMDBL;
+endmodule
+
+module PCIE_A1 (...);
+ parameter [31:0] BAR0 = 32'h00000000;
+ parameter [31:0] BAR1 = 32'h00000000;
+ parameter [31:0] BAR2 = 32'h00000000;
+ parameter [31:0] BAR3 = 32'h00000000;
+ parameter [31:0] BAR4 = 32'h00000000;
+ parameter [31:0] BAR5 = 32'h00000000;
+ parameter [31:0] CARDBUS_CIS_POINTER = 32'h00000000;
+ parameter [23:0] CLASS_CODE = 24'h000000;
+ parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 7;
+ parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 7;
+ parameter DEV_CAP_EXT_TAG_SUPPORTED = "FALSE";
+ parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2;
+ parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0;
+ parameter DEV_CAP_ROLE_BASED_ERROR = "TRUE";
+ parameter DISABLE_BAR_FILTERING = "FALSE";
+ parameter DISABLE_ID_CHECK = "FALSE";
+ parameter DISABLE_SCRAMBLING = "FALSE";
+ parameter ENABLE_RX_TD_ECRC_TRIM = "FALSE";
+ parameter [21:0] EXPANSION_ROM = 22'h000000;
+ parameter FAST_TRAIN = "FALSE";
+ parameter integer GTP_SEL = 0;
+ parameter integer LINK_CAP_ASPM_SUPPORT = 1;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY = 7;
+ parameter LINK_STATUS_SLOT_CLOCK_CONFIG = "FALSE";
+ parameter [14:0] LL_ACK_TIMEOUT = 15'h0204;
+ parameter LL_ACK_TIMEOUT_EN = "FALSE";
+ parameter [14:0] LL_REPLAY_TIMEOUT = 15'h060D;
+ parameter LL_REPLAY_TIMEOUT_EN = "FALSE";
+ parameter integer MSI_CAP_MULTIMSGCAP = 0;
+ parameter integer MSI_CAP_MULTIMSG_EXTENSION = 0;
+ parameter [3:0] PCIE_CAP_CAPABILITY_VERSION = 4'h1;
+ parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0;
+ parameter [4:0] PCIE_CAP_INT_MSG_NUM = 5'b00000;
+ parameter PCIE_CAP_SLOT_IMPLEMENTED = "FALSE";
+ parameter [11:0] PCIE_GENERIC = 12'h000;
+ parameter PLM_AUTO_CONFIG = "FALSE";
+ parameter integer PM_CAP_AUXCURRENT = 0;
+ parameter PM_CAP_D1SUPPORT = "TRUE";
+ parameter PM_CAP_D2SUPPORT = "TRUE";
+ parameter PM_CAP_DSI = "FALSE";
+ parameter [4:0] PM_CAP_PMESUPPORT = 5'b01111;
+ parameter PM_CAP_PME_CLOCK = "FALSE";
+ parameter integer PM_CAP_VERSION = 3;
+ parameter [7:0] PM_DATA0 = 8'h1E;
+ parameter [7:0] PM_DATA1 = 8'h1E;
+ parameter [7:0] PM_DATA2 = 8'h1E;
+ parameter [7:0] PM_DATA3 = 8'h1E;
+ parameter [7:0] PM_DATA4 = 8'h1E;
+ parameter [7:0] PM_DATA5 = 8'h1E;
+ parameter [7:0] PM_DATA6 = 8'h1E;
+ parameter [7:0] PM_DATA7 = 8'h1E;
+ parameter [1:0] PM_DATA_SCALE0 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE1 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE2 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE3 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE4 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE5 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE6 = 2'b01;
+ parameter [1:0] PM_DATA_SCALE7 = 2'b01;
+ parameter SIM_VERSION = "1.0";
+ parameter SLOT_CAP_ATT_BUTTON_PRESENT = "FALSE";
+ parameter SLOT_CAP_ATT_INDICATOR_PRESENT = "FALSE";
+ parameter SLOT_CAP_POWER_INDICATOR_PRESENT = "FALSE";
+ parameter integer TL_RX_RAM_RADDR_LATENCY = 1;
+ parameter integer TL_RX_RAM_RDATA_LATENCY = 2;
+ parameter integer TL_RX_RAM_WRITE_LATENCY = 0;
+ parameter TL_TFC_DISABLE = "FALSE";
+ parameter TL_TX_CHECKS_DISABLE = "FALSE";
+ parameter integer TL_TX_RAM_RADDR_LATENCY = 0;
+ parameter integer TL_TX_RAM_RDATA_LATENCY = 2;
+ parameter USR_CFG = "FALSE";
+ parameter USR_EXT_CFG = "FALSE";
+ parameter VC0_CPL_INFINITE = "TRUE";
+ parameter [11:0] VC0_RX_RAM_LIMIT = 12'h01E;
+ parameter integer VC0_TOTAL_CREDITS_CD = 104;
+ parameter integer VC0_TOTAL_CREDITS_CH = 36;
+ parameter integer VC0_TOTAL_CREDITS_NPH = 8;
+ parameter integer VC0_TOTAL_CREDITS_PD = 288;
+ parameter integer VC0_TOTAL_CREDITS_PH = 32;
+ parameter integer VC0_TX_LASTPACKET = 31;
+ output CFGCOMMANDBUSMASTERENABLE;
+ output CFGCOMMANDINTERRUPTDISABLE;
+ output CFGCOMMANDIOENABLE;
+ output CFGCOMMANDMEMENABLE;
+ output CFGCOMMANDSERREN;
+ output CFGDEVCONTROLAUXPOWEREN;
+ output CFGDEVCONTROLCORRERRREPORTINGEN;
+ output CFGDEVCONTROLENABLERO;
+ output CFGDEVCONTROLEXTTAGEN;
+ output CFGDEVCONTROLFATALERRREPORTINGEN;
+ output CFGDEVCONTROLNONFATALREPORTINGEN;
+ output CFGDEVCONTROLNOSNOOPEN;
+ output CFGDEVCONTROLPHANTOMEN;
+ output CFGDEVCONTROLURERRREPORTINGEN;
+ output CFGDEVSTATUSCORRERRDETECTED;
+ output CFGDEVSTATUSFATALERRDETECTED;
+ output CFGDEVSTATUSNONFATALERRDETECTED;
+ output CFGDEVSTATUSURDETECTED;
+ output CFGERRCPLRDYN;
+ output CFGINTERRUPTMSIENABLE;
+ output CFGINTERRUPTRDYN;
+ output CFGLINKCONTOLRCB;
+ output CFGLINKCONTROLCOMMONCLOCK;
+ output CFGLINKCONTROLEXTENDEDSYNC;
+ output CFGRDWRDONEN;
+ output CFGTOTURNOFFN;
+ output DBGBADDLLPSTATUS;
+ output DBGBADTLPLCRC;
+ output DBGBADTLPSEQNUM;
+ output DBGBADTLPSTATUS;
+ output DBGDLPROTOCOLSTATUS;
+ output DBGFCPROTOCOLERRSTATUS;
+ output DBGMLFRMDLENGTH;
+ output DBGMLFRMDMPS;
+ output DBGMLFRMDTCVC;
+ output DBGMLFRMDTLPSTATUS;
+ output DBGMLFRMDUNRECTYPE;
+ output DBGPOISTLPSTATUS;
+ output DBGRCVROVERFLOWSTATUS;
+ output DBGREGDETECTEDCORRECTABLE;
+ output DBGREGDETECTEDFATAL;
+ output DBGREGDETECTEDNONFATAL;
+ output DBGREGDETECTEDUNSUPPORTED;
+ output DBGRPLYROLLOVERSTATUS;
+ output DBGRPLYTIMEOUTSTATUS;
+ output DBGURNOBARHIT;
+ output DBGURPOISCFGWR;
+ output DBGURSTATUS;
+ output DBGURUNSUPMSG;
+ output MIMRXREN;
+ output MIMRXWEN;
+ output MIMTXREN;
+ output MIMTXWEN;
+ output PIPEGTTXELECIDLEA;
+ output PIPEGTTXELECIDLEB;
+ output PIPERXPOLARITYA;
+ output PIPERXPOLARITYB;
+ output PIPERXRESETA;
+ output PIPERXRESETB;
+ output PIPETXRCVRDETA;
+ output PIPETXRCVRDETB;
+ output RECEIVEDHOTRESET;
+ output TRNLNKUPN;
+ output TRNREOFN;
+ output TRNRERRFWDN;
+ output TRNRSOFN;
+ output TRNRSRCDSCN;
+ output TRNRSRCRDYN;
+ output TRNTCFGREQN;
+ output TRNTDSTRDYN;
+ output TRNTERRDROPN;
+ output USERRSTN;
+ output [11:0] MIMRXRADDR;
+ output [11:0] MIMRXWADDR;
+ output [11:0] MIMTXRADDR;
+ output [11:0] MIMTXWADDR;
+ output [11:0] TRNFCCPLD;
+ output [11:0] TRNFCNPD;
+ output [11:0] TRNFCPD;
+ output [15:0] PIPETXDATAA;
+ output [15:0] PIPETXDATAB;
+ output [1:0] CFGLINKCONTROLASPMCONTROL;
+ output [1:0] PIPEGTPOWERDOWNA;
+ output [1:0] PIPEGTPOWERDOWNB;
+ output [1:0] PIPETXCHARDISPMODEA;
+ output [1:0] PIPETXCHARDISPMODEB;
+ output [1:0] PIPETXCHARDISPVALA;
+ output [1:0] PIPETXCHARDISPVALB;
+ output [1:0] PIPETXCHARISKA;
+ output [1:0] PIPETXCHARISKB;
+ output [2:0] CFGDEVCONTROLMAXPAYLOAD;
+ output [2:0] CFGDEVCONTROLMAXREADREQ;
+ output [2:0] CFGFUNCTIONNUMBER;
+ output [2:0] CFGINTERRUPTMMENABLE;
+ output [2:0] CFGPCIELINKSTATEN;
+ output [31:0] CFGDO;
+ output [31:0] TRNRD;
+ output [34:0] MIMRXWDATA;
+ output [35:0] MIMTXWDATA;
+ output [4:0] CFGDEVICENUMBER;
+ output [4:0] CFGLTSSMSTATE;
+ output [5:0] TRNTBUFAV;
+ output [6:0] TRNRBARHITN;
+ output [7:0] CFGBUSNUMBER;
+ output [7:0] CFGINTERRUPTDO;
+ output [7:0] TRNFCCPLH;
+ output [7:0] TRNFCNPH;
+ output [7:0] TRNFCPH;
+ input CFGERRCORN;
+ input CFGERRCPLABORTN;
+ input CFGERRCPLTIMEOUTN;
+ input CFGERRECRCN;
+ input CFGERRLOCKEDN;
+ input CFGERRPOSTEDN;
+ input CFGERRURN;
+ input CFGINTERRUPTASSERTN;
+ input CFGINTERRUPTN;
+ input CFGPMWAKEN;
+ input CFGRDENN;
+ input CFGTRNPENDINGN;
+ input CFGTURNOFFOKN;
+ input CLOCKLOCKED;
+ input MGTCLK;
+ input PIPEGTRESETDONEA;
+ input PIPEGTRESETDONEB;
+ input PIPEPHYSTATUSA;
+ input PIPEPHYSTATUSB;
+ input PIPERXENTERELECIDLEA;
+ input PIPERXENTERELECIDLEB;
+ input SYSRESETN;
+ input TRNRDSTRDYN;
+ input TRNRNPOKN;
+ input TRNTCFGGNTN;
+ input TRNTEOFN;
+ input TRNTERRFWDN;
+ input TRNTSOFN;
+ input TRNTSRCDSCN;
+ input TRNTSRCRDYN;
+ input TRNTSTRN;
+ input USERCLK;
+ input [15:0] CFGDEVID;
+ input [15:0] CFGSUBSYSID;
+ input [15:0] CFGSUBSYSVENID;
+ input [15:0] CFGVENID;
+ input [15:0] PIPERXDATAA;
+ input [15:0] PIPERXDATAB;
+ input [1:0] PIPERXCHARISKA;
+ input [1:0] PIPERXCHARISKB;
+ input [2:0] PIPERXSTATUSA;
+ input [2:0] PIPERXSTATUSB;
+ input [2:0] TRNFCSEL;
+ input [31:0] TRNTD;
+ input [34:0] MIMRXRDATA;
+ input [35:0] MIMTXRDATA;
+ input [47:0] CFGERRTLPCPLHEADER;
+ input [63:0] CFGDSN;
+ input [7:0] CFGINTERRUPTDI;
+ input [7:0] CFGREVID;
+ input [9:0] CFGDWADDR;
+endmodule
+
+module DSP48A1 (...);
+ parameter integer A0REG = 0;
+ parameter integer A1REG = 1;
+ parameter integer B0REG = 0;
+ parameter integer B1REG = 1;
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYOUTREG = 1;
+ parameter CARRYINSEL = "OPMODE5";
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter RSTTYPE = "SYNC";
+ output [17:0] BCOUT;
+ output CARRYOUT;
+ output CARRYOUTF;
+ output [35:0] M;
+ output [47:0] P;
+ output [47:0] PCOUT;
+ input [17:0] A;
+ input [17:0] B;
+ input [47:0] C;
+ input CARRYIN;
+ input CEA;
+ input CEB;
+ input CEC;
+ input CECARRYIN;
+ input CED;
+ input CEM;
+ input CEOPMODE;
+ input CEP;
+ (* clkbuf_sink *)
+ input CLK;
+ input [17:0] D;
+ input [7:0] OPMODE;
+ input [47:0] PCIN;
+ input RSTA;
+ input RSTB;
+ input RSTC;
+ input RSTCARRYIN;
+ input RSTD;
+ input RSTM;
+ input RSTOPMODE;
+ input RSTP;
+endmodule
+
+module BUFGCE (...);
+ parameter CE_TYPE = "SYNC";
+ parameter [0:0] IS_CE_INVERTED = 1'b0;
+ parameter [0:0] IS_I_INVERTED = 1'b0;
+ (* clkbuf_driver *)
+ output O;
+ (* invertible_pin = "IS_CE_INVERTED" *)
+ input CE;
+ (* invertible_pin = "IS_I_INVERTED" *)
+ input I;
+endmodule
+
+module BUFGCE_1 (...);
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input I;
+endmodule
+
+module BUFGMUX (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_1 (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFH (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFIO2 (...);
+ parameter DIVIDE_BYPASS = "TRUE";
+ parameter integer DIVIDE = 1;
+ parameter I_INVERT = "FALSE";
+ parameter USE_DOUBLER = "FALSE";
+ (* clkbuf_driver *)
+ output DIVCLK;
+ (* clkbuf_driver *)
+ output IOCLK;
+ output SERDESSTROBE;
+ input I;
+endmodule
+
+module BUFIO2_2CLK (...);
+ parameter integer DIVIDE = 2;
+ (* clkbuf_driver *)
+ output DIVCLK;
+ (* clkbuf_driver *)
+ output IOCLK;
+ output SERDESSTROBE;
+ input I;
+ input IB;
+endmodule
+
+module BUFIO2FB (...);
+ parameter DIVIDE_BYPASS = "TRUE";
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFPLL_MCB (...);
+ parameter integer DIVIDE = 2;
+ parameter LOCK_SRC = "LOCK_TO_0";
+ (* clkbuf_driver *)
+ output IOCLK0;
+ (* clkbuf_driver *)
+ output IOCLK1;
+ output LOCK;
+ output SERDESSTROBE0;
+ output SERDESSTROBE1;
+ input GCLK;
+ input LOCKED;
+ input PLLIN0;
+ input PLLIN1;
+endmodule
+
+module DCM_CLKGEN (...);
+ parameter SPREAD_SPECTRUM = "NONE";
+ parameter STARTUP_WAIT = "FALSE";
+ parameter integer CLKFXDV_DIVIDE = 2;
+ parameter integer CLKFX_DIVIDE = 1;
+ parameter integer CLKFX_MULTIPLY = 4;
+ parameter real CLKFX_MD_MAX = 0.0;
+ parameter real CLKIN_PERIOD = 0.0;
+ output CLKFX180;
+ output CLKFX;
+ output CLKFXDV;
+ output LOCKED;
+ output PROGDONE;
+ output [2:1] STATUS;
+ input CLKIN;
+ input FREEZEDCM;
+ input PROGCLK;
+ input PROGDATA;
+ input PROGEN;
+ input RST;
+endmodule
+
+module DCM_SP (...);
+ parameter real CLKDV_DIVIDE = 2.0;
+ parameter integer CLKFX_DIVIDE = 1;
+ parameter integer CLKFX_MULTIPLY = 4;
+ parameter CLKIN_DIVIDE_BY_2 = "FALSE";
+ parameter real CLKIN_PERIOD = 10.0;
+ parameter CLKOUT_PHASE_SHIFT = "NONE";
+ parameter CLK_FEEDBACK = "1X";
+ parameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
+ parameter DFS_FREQUENCY_MODE = "LOW";
+ parameter DLL_FREQUENCY_MODE = "LOW";
+ parameter DSS_MODE = "NONE";
+ parameter DUTY_CYCLE_CORRECTION = "TRUE";
+ parameter FACTORY_JF = 16'hC080;
+ parameter integer PHASE_SHIFT = 0;
+ parameter STARTUP_WAIT = "FALSE";
+ input CLKFB;
+ input CLKIN;
+ input DSSEN;
+ input PSCLK;
+ input PSEN;
+ input PSINCDEC;
+ input RST;
+ output CLK0;
+ output CLK180;
+ output CLK270;
+ output CLK2X;
+ output CLK2X180;
+ output CLK90;
+ output CLKDV;
+ output CLKFX;
+ output CLKFX180;
+ output LOCKED;
+ output PSDONE;
+ output [7:0] STATUS;
+endmodule
+
+module PLL_BASE (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter integer CLKFBOUT_MULT = 1;
+ parameter real CLKFBOUT_PHASE = 0.0;
+ parameter real CLKIN_PERIOD = 0.000;
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.5;
+ parameter real CLKOUT0_PHASE = 0.0;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.5;
+ parameter real CLKOUT1_PHASE = 0.0;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.5;
+ parameter real CLKOUT2_PHASE = 0.0;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.5;
+ parameter real CLKOUT3_PHASE = 0.0;
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.5;
+ parameter real CLKOUT4_PHASE = 0.0;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.5;
+ parameter real CLKOUT5_PHASE = 0.0;
+ parameter CLK_FEEDBACK = "CLKFBOUT";
+ parameter COMPENSATION = "SYSTEM_SYNCHRONOUS";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter real REF_JITTER = 0.100;
+ parameter RESET_ON_LOSS_OF_LOCK = "FALSE";
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT1;
+ output CLKOUT2;
+ output CLKOUT3;
+ output CLKOUT4;
+ output CLKOUT5;
+ output LOCKED;
+ input CLKFBIN;
+ input CLKIN;
+ input RST;
+endmodule
+
+(* keep *)
+module BSCAN_SPARTAN6 (...);
+ parameter integer JTAG_CHAIN = 1;
+ output CAPTURE;
+ output DRCK;
+ output RESET;
+ output RUNTEST;
+ output SEL;
+ output SHIFT;
+ output TCK;
+ output TDI;
+ output TMS;
+ output UPDATE;
+ input TDO;
+endmodule
+
+module DNA_PORT (...);
+ parameter [56:0] SIM_DNA_VALUE = 57'h0;
+ output DOUT;
+ input CLK;
+ input DIN;
+ input READ;
+ input SHIFT;
+endmodule
+
+(* keep *)
+module ICAP_SPARTAN6 (...);
+ parameter DEVICE_ID = 32'h04000093;
+ parameter SIM_CFG_FILE_NAME = "NONE";
+ output BUSY;
+ output [15:0] O;
+ input CLK;
+ input CE;
+ input WRITE;
+ input [15:0] I;
+endmodule
+
+module POST_CRC_INTERNAL (...);
+ output CRCERROR;
+endmodule
+
+(* keep *)
+module STARTUP_SPARTAN6 (...);
+ output CFGCLK;
+ output CFGMCLK;
+ output EOS;
+ input CLK;
+ input GSR;
+ input GTS;
+ input KEYCLEARB;
+endmodule
+
+(* keep *)
+module SUSPEND_SYNC (...);
+ output SREQ;
+ input CLK;
+ input SACK;
+endmodule
+
+module GTPA1_DUAL (...);
+ parameter AC_CAP_DIS_0 = "TRUE";
+ parameter AC_CAP_DIS_1 = "TRUE";
+ parameter integer ALIGN_COMMA_WORD_0 = 1;
+ parameter integer ALIGN_COMMA_WORD_1 = 1;
+ parameter integer CB2_INH_CC_PERIOD_0 = 8;
+ parameter integer CB2_INH_CC_PERIOD_1 = 8;
+ parameter [4:0] CDR_PH_ADJ_TIME_0 = 5'b01010;
+ parameter [4:0] CDR_PH_ADJ_TIME_1 = 5'b01010;
+ parameter integer CHAN_BOND_1_MAX_SKEW_0 = 7;
+ parameter integer CHAN_BOND_1_MAX_SKEW_1 = 7;
+ parameter integer CHAN_BOND_2_MAX_SKEW_0 = 1;
+ parameter integer CHAN_BOND_2_MAX_SKEW_1 = 1;
+ parameter CHAN_BOND_KEEP_ALIGN_0 = "FALSE";
+ parameter CHAN_BOND_KEEP_ALIGN_1 = "FALSE";
+ parameter [9:0] CHAN_BOND_SEQ_1_1_0 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_1_1 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_2_0 = 10'b0001001010;
+ parameter [9:0] CHAN_BOND_SEQ_1_2_1 = 10'b0001001010;
+ parameter [9:0] CHAN_BOND_SEQ_1_3_0 = 10'b0001001010;
+ parameter [9:0] CHAN_BOND_SEQ_1_3_1 = 10'b0001001010;
+ parameter [9:0] CHAN_BOND_SEQ_1_4_0 = 10'b0110111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_4_1 = 10'b0110111100;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_0 = 4'b1111;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE_1 = 4'b1111;
+ parameter [9:0] CHAN_BOND_SEQ_2_1_0 = 10'b0110111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_1_1 = 10'b0110111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_2_0 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_2_1 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_3_0 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_3_1 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_4_0 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_4_1 = 10'b0100111100;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_0 = 4'b1111;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE_1 = 4'b1111;
+ parameter CHAN_BOND_SEQ_2_USE_0 = "FALSE";
+ parameter CHAN_BOND_SEQ_2_USE_1 = "FALSE";
+ parameter integer CHAN_BOND_SEQ_LEN_0 = 1;
+ parameter integer CHAN_BOND_SEQ_LEN_1 = 1;
+ parameter integer CLK25_DIVIDER_0 = 4;
+ parameter integer CLK25_DIVIDER_1 = 4;
+ parameter CLKINDC_B_0 = "TRUE";
+ parameter CLKINDC_B_1 = "TRUE";
+ parameter CLKRCV_TRST_0 = "TRUE";
+ parameter CLKRCV_TRST_1 = "TRUE";
+ parameter CLK_CORRECT_USE_0 = "TRUE";
+ parameter CLK_CORRECT_USE_1 = "TRUE";
+ parameter integer CLK_COR_ADJ_LEN_0 = 1;
+ parameter integer CLK_COR_ADJ_LEN_1 = 1;
+ parameter integer CLK_COR_DET_LEN_0 = 1;
+ parameter integer CLK_COR_DET_LEN_1 = 1;
+ parameter CLK_COR_INSERT_IDLE_FLAG_0 = "FALSE";
+ parameter CLK_COR_INSERT_IDLE_FLAG_1 = "FALSE";
+ parameter CLK_COR_KEEP_IDLE_0 = "FALSE";
+ parameter CLK_COR_KEEP_IDLE_1 = "FALSE";
+ parameter integer CLK_COR_MAX_LAT_0 = 20;
+ parameter integer CLK_COR_MAX_LAT_1 = 20;
+ parameter integer CLK_COR_MIN_LAT_0 = 18;
+ parameter integer CLK_COR_MIN_LAT_1 = 18;
+ parameter CLK_COR_PRECEDENCE_0 = "TRUE";
+ parameter CLK_COR_PRECEDENCE_1 = "TRUE";
+ parameter integer CLK_COR_REPEAT_WAIT_0 = 0;
+ parameter integer CLK_COR_REPEAT_WAIT_1 = 0;
+ parameter [9:0] CLK_COR_SEQ_1_1_0 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_1_1 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_2_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_2_1 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3_1 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4_1 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE_0 = 4'b1111;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE_1 = 4'b1111;
+ parameter [9:0] CLK_COR_SEQ_2_1_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_1_1 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_2_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_2_1 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_3_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_3_1 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_4_0 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_4_1 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE_0 = 4'b1111;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE_1 = 4'b1111;
+ parameter CLK_COR_SEQ_2_USE_0 = "FALSE";
+ parameter CLK_COR_SEQ_2_USE_1 = "FALSE";
+ parameter CLK_OUT_GTP_SEL_0 = "REFCLKPLL0";
+ parameter CLK_OUT_GTP_SEL_1 = "REFCLKPLL1";
+ parameter [1:0] CM_TRIM_0 = 2'b00;
+ parameter [1:0] CM_TRIM_1 = 2'b00;
+ parameter [9:0] COMMA_10B_ENABLE_0 = 10'b1111111111;
+ parameter [9:0] COMMA_10B_ENABLE_1 = 10'b1111111111;
+ parameter [3:0] COM_BURST_VAL_0 = 4'b1111;
+ parameter [3:0] COM_BURST_VAL_1 = 4'b1111;
+ parameter DEC_MCOMMA_DETECT_0 = "TRUE";
+ parameter DEC_MCOMMA_DETECT_1 = "TRUE";
+ parameter DEC_PCOMMA_DETECT_0 = "TRUE";
+ parameter DEC_PCOMMA_DETECT_1 = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY_0 = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY_1 = "TRUE";
+ parameter GTP_CFG_PWRUP_0 = "TRUE";
+ parameter GTP_CFG_PWRUP_1 = "TRUE";
+ parameter [9:0] MCOMMA_10B_VALUE_0 = 10'b1010000011;
+ parameter [9:0] MCOMMA_10B_VALUE_1 = 10'b1010000011;
+ parameter MCOMMA_DETECT_0 = "TRUE";
+ parameter MCOMMA_DETECT_1 = "TRUE";
+ parameter [2:0] OOBDETECT_THRESHOLD_0 = 3'b110;
+ parameter [2:0] OOBDETECT_THRESHOLD_1 = 3'b110;
+ parameter integer OOB_CLK_DIVIDER_0 = 4;
+ parameter integer OOB_CLK_DIVIDER_1 = 4;
+ parameter PCI_EXPRESS_MODE_0 = "FALSE";
+ parameter PCI_EXPRESS_MODE_1 = "FALSE";
+ parameter [9:0] PCOMMA_10B_VALUE_0 = 10'b0101111100;
+ parameter [9:0] PCOMMA_10B_VALUE_1 = 10'b0101111100;
+ parameter PCOMMA_DETECT_0 = "TRUE";
+ parameter PCOMMA_DETECT_1 = "TRUE";
+ parameter [2:0] PLLLKDET_CFG_0 = 3'b101;
+ parameter [2:0] PLLLKDET_CFG_1 = 3'b101;
+ parameter [23:0] PLL_COM_CFG_0 = 24'h21680A;
+ parameter [23:0] PLL_COM_CFG_1 = 24'h21680A;
+ parameter [7:0] PLL_CP_CFG_0 = 8'h00;
+ parameter [7:0] PLL_CP_CFG_1 = 8'h00;
+ parameter integer PLL_DIVSEL_FB_0 = 5;
+ parameter integer PLL_DIVSEL_FB_1 = 5;
+ parameter integer PLL_DIVSEL_REF_0 = 2;
+ parameter integer PLL_DIVSEL_REF_1 = 2;
+ parameter integer PLL_RXDIVSEL_OUT_0 = 1;
+ parameter integer PLL_RXDIVSEL_OUT_1 = 1;
+ parameter PLL_SATA_0 = "FALSE";
+ parameter PLL_SATA_1 = "FALSE";
+ parameter PLL_SOURCE_0 = "PLL0";
+ parameter PLL_SOURCE_1 = "PLL0";
+ parameter integer PLL_TXDIVSEL_OUT_0 = 1;
+ parameter integer PLL_TXDIVSEL_OUT_1 = 1;
+ parameter [26:0] PMA_CDR_SCAN_0 = 27'h6404040;
+ parameter [26:0] PMA_CDR_SCAN_1 = 27'h6404040;
+ parameter [35:0] PMA_COM_CFG_EAST = 36'h000008000;
+ parameter [35:0] PMA_COM_CFG_WEST = 36'h00000A000;
+ parameter [6:0] PMA_RXSYNC_CFG_0 = 7'h00;
+ parameter [6:0] PMA_RXSYNC_CFG_1 = 7'h00;
+ parameter [24:0] PMA_RX_CFG_0 = 25'h05CE048;
+ parameter [24:0] PMA_RX_CFG_1 = 25'h05CE048;
+ parameter [19:0] PMA_TX_CFG_0 = 20'h00082;
+ parameter [19:0] PMA_TX_CFG_1 = 20'h00082;
+ parameter RCV_TERM_GND_0 = "FALSE";
+ parameter RCV_TERM_GND_1 = "FALSE";
+ parameter RCV_TERM_VTTRX_0 = "TRUE";
+ parameter RCV_TERM_VTTRX_1 = "TRUE";
+ parameter [7:0] RXEQ_CFG_0 = 8'b01111011;
+ parameter [7:0] RXEQ_CFG_1 = 8'b01111011;
+ parameter [0:0] RXPRBSERR_LOOPBACK_0 = 1'b0;
+ parameter [0:0] RXPRBSERR_LOOPBACK_1 = 1'b0;
+ parameter RX_BUFFER_USE_0 = "TRUE";
+ parameter RX_BUFFER_USE_1 = "TRUE";
+ parameter RX_DECODE_SEQ_MATCH_0 = "TRUE";
+ parameter RX_DECODE_SEQ_MATCH_1 = "TRUE";
+ parameter RX_EN_IDLE_HOLD_CDR_0 = "FALSE";
+ parameter RX_EN_IDLE_HOLD_CDR_1 = "FALSE";
+ parameter RX_EN_IDLE_RESET_BUF_0 = "TRUE";
+ parameter RX_EN_IDLE_RESET_BUF_1 = "TRUE";
+ parameter RX_EN_IDLE_RESET_FR_0 = "TRUE";
+ parameter RX_EN_IDLE_RESET_FR_1 = "TRUE";
+ parameter RX_EN_IDLE_RESET_PH_0 = "TRUE";
+ parameter RX_EN_IDLE_RESET_PH_1 = "TRUE";
+ parameter RX_EN_MODE_RESET_BUF_0 = "TRUE";
+ parameter RX_EN_MODE_RESET_BUF_1 = "TRUE";
+ parameter [3:0] RX_IDLE_HI_CNT_0 = 4'b1000;
+ parameter [3:0] RX_IDLE_HI_CNT_1 = 4'b1000;
+ parameter [3:0] RX_IDLE_LO_CNT_0 = 4'b0000;
+ parameter [3:0] RX_IDLE_LO_CNT_1 = 4'b0000;
+ parameter RX_LOSS_OF_SYNC_FSM_0 = "FALSE";
+ parameter RX_LOSS_OF_SYNC_FSM_1 = "FALSE";
+ parameter integer RX_LOS_INVALID_INCR_0 = 1;
+ parameter integer RX_LOS_INVALID_INCR_1 = 1;
+ parameter integer RX_LOS_THRESHOLD_0 = 4;
+ parameter integer RX_LOS_THRESHOLD_1 = 4;
+ parameter RX_SLIDE_MODE_0 = "PCS";
+ parameter RX_SLIDE_MODE_1 = "PCS";
+ parameter RX_STATUS_FMT_0 = "PCIE";
+ parameter RX_STATUS_FMT_1 = "PCIE";
+ parameter RX_XCLK_SEL_0 = "RXREC";
+ parameter RX_XCLK_SEL_1 = "RXREC";
+ parameter [2:0] SATA_BURST_VAL_0 = 3'b100;
+ parameter [2:0] SATA_BURST_VAL_1 = 3'b100;
+ parameter [2:0] SATA_IDLE_VAL_0 = 3'b011;
+ parameter [2:0] SATA_IDLE_VAL_1 = 3'b011;
+ parameter integer SATA_MAX_BURST_0 = 7;
+ parameter integer SATA_MAX_BURST_1 = 7;
+ parameter integer SATA_MAX_INIT_0 = 22;
+ parameter integer SATA_MAX_INIT_1 = 22;
+ parameter integer SATA_MAX_WAKE_0 = 7;
+ parameter integer SATA_MAX_WAKE_1 = 7;
+ parameter integer SATA_MIN_BURST_0 = 4;
+ parameter integer SATA_MIN_BURST_1 = 4;
+ parameter integer SATA_MIN_INIT_0 = 12;
+ parameter integer SATA_MIN_INIT_1 = 12;
+ parameter integer SATA_MIN_WAKE_0 = 4;
+ parameter integer SATA_MIN_WAKE_1 = 4;
+ parameter integer SIM_GTPRESET_SPEEDUP = 0;
+ parameter SIM_RECEIVER_DETECT_PASS = "FALSE";
+ parameter [2:0] SIM_REFCLK0_SOURCE = 3'b000;
+ parameter [2:0] SIM_REFCLK1_SOURCE = 3'b000;
+ parameter SIM_TX_ELEC_IDLE_LEVEL = "X";
+ parameter SIM_VERSION = "2.0";
+ parameter [4:0] TERMINATION_CTRL_0 = 5'b10100;
+ parameter [4:0] TERMINATION_CTRL_1 = 5'b10100;
+ parameter TERMINATION_OVRD_0 = "FALSE";
+ parameter TERMINATION_OVRD_1 = "FALSE";
+ parameter [11:0] TRANS_TIME_FROM_P2_0 = 12'h03C;
+ parameter [11:0] TRANS_TIME_FROM_P2_1 = 12'h03C;
+ parameter [7:0] TRANS_TIME_NON_P2_0 = 8'h19;
+ parameter [7:0] TRANS_TIME_NON_P2_1 = 8'h19;
+ parameter [9:0] TRANS_TIME_TO_P2_0 = 10'h064;
+ parameter [9:0] TRANS_TIME_TO_P2_1 = 10'h064;
+ parameter [31:0] TST_ATTR_0 = 32'h00000000;
+ parameter [31:0] TST_ATTR_1 = 32'h00000000;
+ parameter [2:0] TXRX_INVERT_0 = 3'b011;
+ parameter [2:0] TXRX_INVERT_1 = 3'b011;
+ parameter TX_BUFFER_USE_0 = "FALSE";
+ parameter TX_BUFFER_USE_1 = "FALSE";
+ parameter [13:0] TX_DETECT_RX_CFG_0 = 14'h1832;
+ parameter [13:0] TX_DETECT_RX_CFG_1 = 14'h1832;
+ parameter [2:0] TX_IDLE_DELAY_0 = 3'b011;
+ parameter [2:0] TX_IDLE_DELAY_1 = 3'b011;
+ parameter [1:0] TX_TDCC_CFG_0 = 2'b00;
+ parameter [1:0] TX_TDCC_CFG_1 = 2'b00;
+ parameter TX_XCLK_SEL_0 = "TXUSR";
+ parameter TX_XCLK_SEL_1 = "TXUSR";
+ output DRDY;
+ output PHYSTATUS0;
+ output PHYSTATUS1;
+ output PLLLKDET0;
+ output PLLLKDET1;
+ output REFCLKOUT0;
+ output REFCLKOUT1;
+ output REFCLKPLL0;
+ output REFCLKPLL1;
+ output RESETDONE0;
+ output RESETDONE1;
+ output RXBYTEISALIGNED0;
+ output RXBYTEISALIGNED1;
+ output RXBYTEREALIGN0;
+ output RXBYTEREALIGN1;
+ output RXCHANBONDSEQ0;
+ output RXCHANBONDSEQ1;
+ output RXCHANISALIGNED0;
+ output RXCHANISALIGNED1;
+ output RXCHANREALIGN0;
+ output RXCHANREALIGN1;
+ output RXCOMMADET0;
+ output RXCOMMADET1;
+ output RXELECIDLE0;
+ output RXELECIDLE1;
+ output RXPRBSERR0;
+ output RXPRBSERR1;
+ output RXRECCLK0;
+ output RXRECCLK1;
+ output RXVALID0;
+ output RXVALID1;
+ output TXN0;
+ output TXN1;
+ output TXOUTCLK0;
+ output TXOUTCLK1;
+ output TXP0;
+ output TXP1;
+ output [15:0] DRPDO;
+ output [1:0] GTPCLKFBEAST;
+ output [1:0] GTPCLKFBWEST;
+ output [1:0] GTPCLKOUT0;
+ output [1:0] GTPCLKOUT1;
+ output [1:0] RXLOSSOFSYNC0;
+ output [1:0] RXLOSSOFSYNC1;
+ output [1:0] TXBUFSTATUS0;
+ output [1:0] TXBUFSTATUS1;
+ output [2:0] RXBUFSTATUS0;
+ output [2:0] RXBUFSTATUS1;
+ output [2:0] RXCHBONDO;
+ output [2:0] RXCLKCORCNT0;
+ output [2:0] RXCLKCORCNT1;
+ output [2:0] RXSTATUS0;
+ output [2:0] RXSTATUS1;
+ output [31:0] RXDATA0;
+ output [31:0] RXDATA1;
+ output [3:0] RXCHARISCOMMA0;
+ output [3:0] RXCHARISCOMMA1;
+ output [3:0] RXCHARISK0;
+ output [3:0] RXCHARISK1;
+ output [3:0] RXDISPERR0;
+ output [3:0] RXDISPERR1;
+ output [3:0] RXNOTINTABLE0;
+ output [3:0] RXNOTINTABLE1;
+ output [3:0] RXRUNDISP0;
+ output [3:0] RXRUNDISP1;
+ output [3:0] TXKERR0;
+ output [3:0] TXKERR1;
+ output [3:0] TXRUNDISP0;
+ output [3:0] TXRUNDISP1;
+ output [4:0] RCALOUTEAST;
+ output [4:0] RCALOUTWEST;
+ output [4:0] TSTOUT0;
+ output [4:0] TSTOUT1;
+ input CLK00;
+ input CLK01;
+ input CLK10;
+ input CLK11;
+ input CLKINEAST0;
+ input CLKINEAST1;
+ input CLKINWEST0;
+ input CLKINWEST1;
+ input DCLK;
+ input DEN;
+ input DWE;
+ input GATERXELECIDLE0;
+ input GATERXELECIDLE1;
+ input GCLK00;
+ input GCLK01;
+ input GCLK10;
+ input GCLK11;
+ input GTPRESET0;
+ input GTPRESET1;
+ input IGNORESIGDET0;
+ input IGNORESIGDET1;
+ input INTDATAWIDTH0;
+ input INTDATAWIDTH1;
+ input PLLCLK00;
+ input PLLCLK01;
+ input PLLCLK10;
+ input PLLCLK11;
+ input PLLLKDETEN0;
+ input PLLLKDETEN1;
+ input PLLPOWERDOWN0;
+ input PLLPOWERDOWN1;
+ input PRBSCNTRESET0;
+ input PRBSCNTRESET1;
+ input REFCLKPWRDNB0;
+ input REFCLKPWRDNB1;
+ input RXBUFRESET0;
+ input RXBUFRESET1;
+ input RXCDRRESET0;
+ input RXCDRRESET1;
+ input RXCHBONDMASTER0;
+ input RXCHBONDMASTER1;
+ input RXCHBONDSLAVE0;
+ input RXCHBONDSLAVE1;
+ input RXCOMMADETUSE0;
+ input RXCOMMADETUSE1;
+ input RXDEC8B10BUSE0;
+ input RXDEC8B10BUSE1;
+ input RXENCHANSYNC0;
+ input RXENCHANSYNC1;
+ input RXENMCOMMAALIGN0;
+ input RXENMCOMMAALIGN1;
+ input RXENPCOMMAALIGN0;
+ input RXENPCOMMAALIGN1;
+ input RXENPMAPHASEALIGN0;
+ input RXENPMAPHASEALIGN1;
+ input RXN0;
+ input RXN1;
+ input RXP0;
+ input RXP1;
+ input RXPMASETPHASE0;
+ input RXPMASETPHASE1;
+ input RXPOLARITY0;
+ input RXPOLARITY1;
+ input RXRESET0;
+ input RXRESET1;
+ input RXSLIDE0;
+ input RXSLIDE1;
+ input RXUSRCLK0;
+ input RXUSRCLK1;
+ input RXUSRCLK20;
+ input RXUSRCLK21;
+ input TSTCLK0;
+ input TSTCLK1;
+ input TXCOMSTART0;
+ input TXCOMSTART1;
+ input TXCOMTYPE0;
+ input TXCOMTYPE1;
+ input TXDETECTRX0;
+ input TXDETECTRX1;
+ input TXELECIDLE0;
+ input TXELECIDLE1;
+ input TXENC8B10BUSE0;
+ input TXENC8B10BUSE1;
+ input TXENPMAPHASEALIGN0;
+ input TXENPMAPHASEALIGN1;
+ input TXINHIBIT0;
+ input TXINHIBIT1;
+ input TXPDOWNASYNCH0;
+ input TXPDOWNASYNCH1;
+ input TXPMASETPHASE0;
+ input TXPMASETPHASE1;
+ input TXPOLARITY0;
+ input TXPOLARITY1;
+ input TXPRBSFORCEERR0;
+ input TXPRBSFORCEERR1;
+ input TXRESET0;
+ input TXRESET1;
+ input TXUSRCLK0;
+ input TXUSRCLK1;
+ input TXUSRCLK20;
+ input TXUSRCLK21;
+ input USRCODEERR0;
+ input USRCODEERR1;
+ input [11:0] TSTIN0;
+ input [11:0] TSTIN1;
+ input [15:0] DI;
+ input [1:0] GTPCLKFBSEL0EAST;
+ input [1:0] GTPCLKFBSEL0WEST;
+ input [1:0] GTPCLKFBSEL1EAST;
+ input [1:0] GTPCLKFBSEL1WEST;
+ input [1:0] RXDATAWIDTH0;
+ input [1:0] RXDATAWIDTH1;
+ input [1:0] RXEQMIX0;
+ input [1:0] RXEQMIX1;
+ input [1:0] RXPOWERDOWN0;
+ input [1:0] RXPOWERDOWN1;
+ input [1:0] TXDATAWIDTH0;
+ input [1:0] TXDATAWIDTH1;
+ input [1:0] TXPOWERDOWN0;
+ input [1:0] TXPOWERDOWN1;
+ input [2:0] LOOPBACK0;
+ input [2:0] LOOPBACK1;
+ input [2:0] REFSELDYPLL0;
+ input [2:0] REFSELDYPLL1;
+ input [2:0] RXCHBONDI;
+ input [2:0] RXENPRBSTST0;
+ input [2:0] RXENPRBSTST1;
+ input [2:0] TXBUFDIFFCTRL0;
+ input [2:0] TXBUFDIFFCTRL1;
+ input [2:0] TXENPRBSTST0;
+ input [2:0] TXENPRBSTST1;
+ input [2:0] TXPREEMPHASIS0;
+ input [2:0] TXPREEMPHASIS1;
+ input [31:0] TXDATA0;
+ input [31:0] TXDATA1;
+ input [3:0] TXBYPASS8B10B0;
+ input [3:0] TXBYPASS8B10B1;
+ input [3:0] TXCHARDISPMODE0;
+ input [3:0] TXCHARDISPMODE1;
+ input [3:0] TXCHARDISPVAL0;
+ input [3:0] TXCHARDISPVAL1;
+ input [3:0] TXCHARISK0;
+ input [3:0] TXCHARISK1;
+ input [3:0] TXDIFFCTRL0;
+ input [3:0] TXDIFFCTRL1;
+ input [4:0] RCALINEAST;
+ input [4:0] RCALINWEST;
+ input [7:0] DADDR;
+ input [7:0] GTPTEST0;
+ input [7:0] GTPTEST1;
+endmodule
+
+module IBUFDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IFD_DELAY_VALUE = "AUTO";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFDS_DIFF_OUT (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFG (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+endmodule
+
+module IBUFGDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter DIFF_TERM = "FALSE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFGDS_DIFF_OUT (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IOBUF (...);
+ parameter integer DRIVE = 12;
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ input I;
+ input T;
+endmodule
+
+module IOBUFDS (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ inout IOB;
+ input I;
+ input T;
+endmodule
+
+module IODELAY2 (...);
+ parameter COUNTER_WRAPAROUND = "WRAPAROUND";
+ parameter DATA_RATE = "SDR";
+ parameter DELAY_SRC = "IO";
+ parameter integer IDELAY2_VALUE = 0;
+ parameter IDELAY_MODE = "NORMAL";
+ parameter IDELAY_TYPE = "DEFAULT";
+ parameter integer IDELAY_VALUE = 0;
+ parameter integer ODELAY_VALUE = 0;
+ parameter SERDES_MODE = "NONE";
+ parameter integer SIM_TAPDELAY_VALUE = 75;
+ output BUSY;
+ output DATAOUT2;
+ output DATAOUT;
+ output DOUT;
+ output TOUT;
+ input CAL;
+ input CE;
+ (* clkbuf_sink *)
+ input CLK;
+ input IDATAIN;
+ input INC;
+ (* clkbuf_sink *)
+ input IOCLK0;
+ (* clkbuf_sink *)
+ input IOCLK1;
+ input ODATAIN;
+ input RST;
+ input T;
+endmodule
+
+module IODRP2 (...);
+ parameter DATA_RATE = "SDR";
+ parameter integer SIM_TAPDELAY_VALUE = 75;
+ output DATAOUT2;
+ output DATAOUT;
+ output DOUT;
+ output SDO;
+ output TOUT;
+ input ADD;
+ input BKST;
+ (* clkbuf_sink *)
+ input CLK;
+ input CS;
+ input IDATAIN;
+ (* clkbuf_sink *)
+ input IOCLK0;
+ (* clkbuf_sink *)
+ input IOCLK1;
+ input ODATAIN;
+ input SDI;
+ input T;
+endmodule
+
+module IODRP2_MCB (...);
+ parameter DATA_RATE = "SDR";
+ parameter integer IDELAY_VALUE = 0;
+ parameter integer MCB_ADDRESS = 0;
+ parameter integer ODELAY_VALUE = 0;
+ parameter SERDES_MODE = "NONE";
+ parameter integer SIM_TAPDELAY_VALUE = 75;
+ output AUXSDO;
+ output DATAOUT2;
+ output DATAOUT;
+ output DOUT;
+ output DQSOUTN;
+ output DQSOUTP;
+ output SDO;
+ output TOUT;
+ input ADD;
+ input AUXSDOIN;
+ input BKST;
+ (* clkbuf_sink *)
+ input CLK;
+ input CS;
+ input IDATAIN;
+ (* clkbuf_sink *)
+ input IOCLK0;
+ (* clkbuf_sink *)
+ input IOCLK1;
+ input MEMUPDATE;
+ input ODATAIN;
+ input SDI;
+ input T;
+ input [4:0] AUXADDR;
+endmodule
+
+module ISERDES2 (...);
+ parameter BITSLIP_ENABLE = "FALSE";
+ parameter DATA_RATE = "SDR";
+ parameter integer DATA_WIDTH = 1;
+ parameter INTERFACE_TYPE = "NETWORKING";
+ parameter SERDES_MODE = "NONE";
+ output CFB0;
+ output CFB1;
+ output DFB;
+ output FABRICOUT;
+ output INCDEC;
+ output Q1;
+ output Q2;
+ output Q3;
+ output Q4;
+ output SHIFTOUT;
+ output VALID;
+ input BITSLIP;
+ input CE0;
+ (* clkbuf_sink *)
+ input CLK0;
+ (* clkbuf_sink *)
+ input CLK1;
+ (* clkbuf_sink *)
+ input CLKDIV;
+ input D;
+ input IOCE;
+ input RST;
+ input SHIFTIN;
+endmodule
+
+module KEEPER (...);
+ inout O;
+endmodule
+
+module OBUFDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input I;
+endmodule
+
+module OBUFT (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter integer DRIVE = 12;
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ input I;
+ input T;
+endmodule
+
+module OBUFTDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input I;
+ input T;
+endmodule
+
+module OSERDES2 (...);
+ parameter BYPASS_GCLK_FF = "FALSE";
+ parameter DATA_RATE_OQ = "DDR";
+ parameter DATA_RATE_OT = "DDR";
+ parameter integer DATA_WIDTH = 2;
+ parameter OUTPUT_MODE = "SINGLE_ENDED";
+ parameter SERDES_MODE = "NONE";
+ parameter integer TRAIN_PATTERN = 0;
+ output OQ;
+ output SHIFTOUT1;
+ output SHIFTOUT2;
+ output SHIFTOUT3;
+ output SHIFTOUT4;
+ output TQ;
+ (* clkbuf_sink *)
+ input CLK0;
+ (* clkbuf_sink *)
+ input CLK1;
+ (* clkbuf_sink *)
+ input CLKDIV;
+ input D1;
+ input D2;
+ input D3;
+ input D4;
+ input IOCE;
+ input OCE;
+ input RST;
+ input SHIFTIN1;
+ input SHIFTIN2;
+ input SHIFTIN3;
+ input SHIFTIN4;
+ input T1;
+ input T2;
+ input T3;
+ input T4;
+ input TCE;
+ input TRAIN;
+endmodule
+
+module PULLDOWN (...);
+ output O;
+endmodule
+
+module PULLUP (...);
+ output O;
+endmodule
+
+module RAM128X1S (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM256X1S (...);
+ parameter [255:0] INIT = 256'h0;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input [7:0] A;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output [1:0] DOA;
+ output [1:0] DOB;
+ output [1:0] DOC;
+ output [1:0] DOD;
+ input [4:0] ADDRA;
+ input [4:0] ADDRB;
+ input [4:0] ADDRC;
+ input [4:0] ADDRD;
+ input [1:0] DIA;
+ input [1:0] DIB;
+ input [1:0] DIC;
+ input [1:0] DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S_1 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X2S (...);
+ parameter [31:0] INIT_00 = 32'h00000000;
+ parameter [31:0] INIT_01 = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O0;
+ output O1;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D0;
+ input D1;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output DOA;
+ output DOB;
+ output DOC;
+ output DOD;
+ input [5:0] ADDRA;
+ input [5:0] ADDRB;
+ input [5:0] ADDRC;
+ input [5:0] ADDRD;
+ input DIA;
+ input DIB;
+ input DIC;
+ input DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S_1 (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X2S (...);
+ parameter [63:0] INIT_00 = 64'h0000000000000000;
+ parameter [63:0] INIT_01 = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O0;
+ output O1;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D0;
+ input D1;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module ROM128X1 (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+endmodule
+
+module ROM256X1 (...);
+ parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input A7;
+endmodule
+
+module ROM32X1 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+endmodule
+
+module ROM64X1 (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+endmodule
+
+module IDDR2 (...);
+ parameter DDR_ALIGNMENT = "NONE";
+ parameter [0:0] INIT_Q0 = 1'b0;
+ parameter [0:0] INIT_Q1 = 1'b0;
+ parameter SRTYPE = "SYNC";
+ output Q0;
+ output Q1;
+ (* clkbuf_sink *)
+ input C0;
+ (* clkbuf_sink *)
+ input C1;
+ input CE;
+ input D;
+ input R;
+ input S;
+endmodule
+
+module ODDR2 (...);
+ parameter DDR_ALIGNMENT = "NONE";
+ parameter [0:0] INIT = 1'b0;
+ parameter SRTYPE = "SYNC";
+ output Q;
+ (* clkbuf_sink *)
+ input C0;
+ (* clkbuf_sink *)
+ input C1;
+ input CE;
+ input D0;
+ input D1;
+ input R;
+ input S;
+endmodule
+
+module CFGLUT5 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ output CDO;
+ output O5;
+ output O6;
+ input I4;
+ input I3;
+ input I2;
+ input I1;
+ input I0;
+ input CDI;
+ input CE;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+endmodule
+
diff --git a/techlibs/xilinx/xc6s_ff_map.v b/techlibs/xilinx/xc6s_ff_map.v
new file mode 100644
index 000000000..bf35b09e5
--- /dev/null
+++ b/techlibs/xilinx/xc6s_ff_map.v
@@ -0,0 +1,162 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+// ============================================================================
+// FF mapping for Spartan 6. The primitives used are the same as Series 7,
+// but with one major difference: the initial value is implied by the
+// primitive type used (FFs with reset pin must have INIT set to 0 or x, FFs
+// with set pin must have INIT set to 1 or x). For Yosys primitives without
+// set/reset, this means we have to pick the primitive type based on the INIT
+// value.
+
+`ifndef _NO_FFS
+
+module \$_DFF_N_ (input D, C, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ FDSE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .S(1'b0));
+ else
+ FDRE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .R(1'b0));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_P_ (input D, C, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ FDSE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .S(1'b0));
+ else
+ FDRE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .R(1'b0));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DFFE_NP_ (input D, C, E, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ FDSE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .S(1'b0));
+ else
+ FDRE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(1'b0));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFFE_PP_ (input D, C, E, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ FDSE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .S(1'b0));
+ else
+ FDRE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(1'b0));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DFF_NN0_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ $error("Spartan 6 doesn't support FFs with asynchronous reset initialized to 1");
+ else
+ FDCE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR(!R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_NP0_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ $error("Spartan 6 doesn't support FFs with asynchronous reset initialized to 1");
+ else
+ FDCE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR( R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PN0_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ $error("Spartan 6 doesn't support FFs with asynchronous reset initialized to 1");
+ else
+ FDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR(!R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PP0_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ $error("Spartan 6 doesn't support FFs with asynchronous reset initialized to 1");
+ else
+ FDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR( R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DFF_NN1_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b0)
+ $error("Spartan 6 doesn't support FFs with asynchronous set initialized to 0");
+ else
+ FDPE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE(!R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_NP1_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b0)
+ $error("Spartan 6 doesn't support FFs with asynchronous set initialized to 0");
+ else
+ FDPE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE( R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PN1_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b0)
+ $error("Spartan 6 doesn't support FFs with asynchronous set initialized to 0");
+ else
+ FDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE(!R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PP1_ (input D, C, R, output Q);
+ parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b0)
+ $error("Spartan 6 doesn't support FFs with asynchronous set initialized to 0");
+ else
+ FDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE( R));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DLATCH_N_ (input E, D, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ LDPE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_G_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .PRE(1'b0));
+ else
+ LDCE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_G_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(1'b0));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DLATCH_P_ (input E, D, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ generate if (_TECHMAP_WIREINIT_Q_ === 1'b1)
+ LDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .PRE(1'b0));
+ else
+ LDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(1'b0));
+ endgenerate
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+`endif
+
diff --git a/techlibs/xilinx/xc6v_cells_xtra.v b/techlibs/xilinx/xc6v_cells_xtra.v
new file mode 100644
index 000000000..b228e404d
--- /dev/null
+++ b/techlibs/xilinx/xc6v_cells_xtra.v
@@ -0,0 +1,2690 @@
+// Created by cells_xtra.py from Xilinx models
+
+module PCIE_2_0 (...);
+ parameter [11:0] AER_BASE_PTR = 12'h128;
+ parameter AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [15:0] AER_CAP_ID = 16'h0001;
+ parameter [4:0] AER_CAP_INT_MSG_NUM_MSI = 5'h0A;
+ parameter [4:0] AER_CAP_INT_MSG_NUM_MSIX = 5'h15;
+ parameter [11:0] AER_CAP_NEXTPTR = 12'h160;
+ parameter AER_CAP_ON = "FALSE";
+ parameter AER_CAP_PERMIT_ROOTERR_UPDATE = "TRUE";
+ parameter [3:0] AER_CAP_VERSION = 4'h1;
+ parameter ALLOW_X8_GEN2 = "FALSE";
+ parameter [31:0] BAR0 = 32'hFFFFFF00;
+ parameter [31:0] BAR1 = 32'hFFFF0000;
+ parameter [31:0] BAR2 = 32'hFFFF000C;
+ parameter [31:0] BAR3 = 32'hFFFFFFFF;
+ parameter [31:0] BAR4 = 32'h00000000;
+ parameter [31:0] BAR5 = 32'h00000000;
+ parameter [7:0] CAPABILITIES_PTR = 8'h40;
+ parameter [31:0] CARDBUS_CIS_POINTER = 32'h00000000;
+ parameter [23:0] CLASS_CODE = 24'h000000;
+ parameter CMD_INTX_IMPLEMENTED = "TRUE";
+ parameter CPL_TIMEOUT_DISABLE_SUPPORTED = "FALSE";
+ parameter [3:0] CPL_TIMEOUT_RANGES_SUPPORTED = 4'h0;
+ parameter [6:0] CRM_MODULE_RSTS = 7'h00;
+ parameter [15:0] DEVICE_ID = 16'h0007;
+ parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_SCALE = "TRUE";
+ parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_VALUE = "TRUE";
+ parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 0;
+ parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 0;
+ parameter DEV_CAP_EXT_TAG_SUPPORTED = "TRUE";
+ parameter DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "FALSE";
+ parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2;
+ parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0;
+ parameter DEV_CAP_ROLE_BASED_ERROR = "TRUE";
+ parameter integer DEV_CAP_RSVD_14_12 = 0;
+ parameter integer DEV_CAP_RSVD_17_16 = 0;
+ parameter integer DEV_CAP_RSVD_31_29 = 0;
+ parameter DEV_CONTROL_AUX_POWER_SUPPORTED = "FALSE";
+ parameter DISABLE_ASPM_L1_TIMER = "FALSE";
+ parameter DISABLE_BAR_FILTERING = "FALSE";
+ parameter DISABLE_ID_CHECK = "FALSE";
+ parameter DISABLE_LANE_REVERSAL = "FALSE";
+ parameter DISABLE_RX_TC_FILTER = "FALSE";
+ parameter DISABLE_SCRAMBLING = "FALSE";
+ parameter [7:0] DNSTREAM_LINK_NUM = 8'h00;
+ parameter [11:0] DSN_BASE_PTR = 12'h100;
+ parameter [15:0] DSN_CAP_ID = 16'h0003;
+ parameter [11:0] DSN_CAP_NEXTPTR = 12'h000;
+ parameter DSN_CAP_ON = "TRUE";
+ parameter [3:0] DSN_CAP_VERSION = 4'h1;
+ parameter [10:0] ENABLE_MSG_ROUTE = 11'h000;
+ parameter ENABLE_RX_TD_ECRC_TRIM = "FALSE";
+ parameter ENTER_RVRY_EI_L0 = "TRUE";
+ parameter EXIT_LOOPBACK_ON_EI = "TRUE";
+ parameter [31:0] EXPANSION_ROM = 32'hFFFFF001;
+ parameter [5:0] EXT_CFG_CAP_PTR = 6'h3F;
+ parameter [9:0] EXT_CFG_XP_CAP_PTR = 10'h3FF;
+ parameter [7:0] HEADER_TYPE = 8'h00;
+ parameter [4:0] INFER_EI = 5'h00;
+ parameter [7:0] INTERRUPT_PIN = 8'h01;
+ parameter IS_SWITCH = "FALSE";
+ parameter [9:0] LAST_CONFIG_DWORD = 10'h042;
+ parameter integer LINK_CAP_ASPM_SUPPORT = 1;
+ parameter LINK_CAP_CLOCK_POWER_MANAGEMENT = "FALSE";
+ parameter LINK_CAP_DLL_LINK_ACTIVE_REPORTING_CAP = "FALSE";
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7;
+ parameter LINK_CAP_LINK_BANDWIDTH_NOTIFICATION_CAP = "FALSE";
+ parameter [3:0] LINK_CAP_MAX_LINK_SPEED = 4'h1;
+ parameter [5:0] LINK_CAP_MAX_LINK_WIDTH = 6'h08;
+ parameter integer LINK_CAP_RSVD_23_22 = 0;
+ parameter LINK_CAP_SURPRISE_DOWN_ERROR_CAPABLE = "FALSE";
+ parameter integer LINK_CONTROL_RCB = 0;
+ parameter LINK_CTRL2_DEEMPHASIS = "FALSE";
+ parameter LINK_CTRL2_HW_AUTONOMOUS_SPEED_DISABLE = "FALSE";
+ parameter [3:0] LINK_CTRL2_TARGET_LINK_SPEED = 4'h2;
+ parameter LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE";
+ parameter [14:0] LL_ACK_TIMEOUT = 15'h0000;
+ parameter LL_ACK_TIMEOUT_EN = "FALSE";
+ parameter integer LL_ACK_TIMEOUT_FUNC = 0;
+ parameter [14:0] LL_REPLAY_TIMEOUT = 15'h0000;
+ parameter LL_REPLAY_TIMEOUT_EN = "FALSE";
+ parameter integer LL_REPLAY_TIMEOUT_FUNC = 0;
+ parameter [5:0] LTSSM_MAX_LINK_WIDTH = 6'h01;
+ parameter [7:0] MSIX_BASE_PTR = 8'h9C;
+ parameter [7:0] MSIX_CAP_ID = 8'h11;
+ parameter [7:0] MSIX_CAP_NEXTPTR = 8'h00;
+ parameter MSIX_CAP_ON = "FALSE";
+ parameter integer MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [7:0] MSI_BASE_PTR = 8'h48;
+ parameter MSI_CAP_64_BIT_ADDR_CAPABLE = "TRUE";
+ parameter [7:0] MSI_CAP_ID = 8'h05;
+ parameter integer MSI_CAP_MULTIMSGCAP = 0;
+ parameter integer MSI_CAP_MULTIMSG_EXTENSION = 0;
+ parameter [7:0] MSI_CAP_NEXTPTR = 8'h60;
+ parameter MSI_CAP_ON = "FALSE";
+ parameter MSI_CAP_PER_VECTOR_MASKING_CAPABLE = "TRUE";
+ parameter integer N_FTS_COMCLK_GEN1 = 255;
+ parameter integer N_FTS_COMCLK_GEN2 = 255;
+ parameter integer N_FTS_GEN1 = 255;
+ parameter integer N_FTS_GEN2 = 255;
+ parameter [7:0] PCIE_BASE_PTR = 8'h60;
+ parameter [7:0] PCIE_CAP_CAPABILITY_ID = 8'h10;
+ parameter [3:0] PCIE_CAP_CAPABILITY_VERSION = 4'h2;
+ parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0;
+ parameter [4:0] PCIE_CAP_INT_MSG_NUM = 5'h00;
+ parameter [7:0] PCIE_CAP_NEXTPTR = 8'h00;
+ parameter PCIE_CAP_ON = "TRUE";
+ parameter integer PCIE_CAP_RSVD_15_14 = 0;
+ parameter PCIE_CAP_SLOT_IMPLEMENTED = "FALSE";
+ parameter integer PCIE_REVISION = 2;
+ parameter integer PGL0_LANE = 0;
+ parameter integer PGL1_LANE = 1;
+ parameter integer PGL2_LANE = 2;
+ parameter integer PGL3_LANE = 3;
+ parameter integer PGL4_LANE = 4;
+ parameter integer PGL5_LANE = 5;
+ parameter integer PGL6_LANE = 6;
+ parameter integer PGL7_LANE = 7;
+ parameter integer PL_AUTO_CONFIG = 0;
+ parameter PL_FAST_TRAIN = "FALSE";
+ parameter [7:0] PM_BASE_PTR = 8'h40;
+ parameter integer PM_CAP_AUXCURRENT = 0;
+ parameter PM_CAP_D1SUPPORT = "TRUE";
+ parameter PM_CAP_D2SUPPORT = "TRUE";
+ parameter PM_CAP_DSI = "FALSE";
+ parameter [7:0] PM_CAP_ID = 8'h01;
+ parameter [7:0] PM_CAP_NEXTPTR = 8'h48;
+ parameter PM_CAP_ON = "TRUE";
+ parameter [4:0] PM_CAP_PMESUPPORT = 5'h0F;
+ parameter PM_CAP_PME_CLOCK = "FALSE";
+ parameter integer PM_CAP_RSVD_04 = 0;
+ parameter integer PM_CAP_VERSION = 3;
+ parameter PM_CSR_B2B3 = "FALSE";
+ parameter PM_CSR_BPCCEN = "FALSE";
+ parameter PM_CSR_NOSOFTRST = "TRUE";
+ parameter [7:0] PM_DATA0 = 8'h01;
+ parameter [7:0] PM_DATA1 = 8'h01;
+ parameter [7:0] PM_DATA2 = 8'h01;
+ parameter [7:0] PM_DATA3 = 8'h01;
+ parameter [7:0] PM_DATA4 = 8'h01;
+ parameter [7:0] PM_DATA5 = 8'h01;
+ parameter [7:0] PM_DATA6 = 8'h01;
+ parameter [7:0] PM_DATA7 = 8'h01;
+ parameter [1:0] PM_DATA_SCALE0 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE1 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE2 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE3 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE4 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE5 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE6 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE7 = 2'h1;
+ parameter integer RECRC_CHK = 0;
+ parameter RECRC_CHK_TRIM = "FALSE";
+ parameter [7:0] REVISION_ID = 8'h00;
+ parameter ROOT_CAP_CRS_SW_VISIBILITY = "FALSE";
+ parameter SELECT_DLL_IF = "FALSE";
+ parameter SIM_VERSION = "1.0";
+ parameter SLOT_CAP_ATT_BUTTON_PRESENT = "FALSE";
+ parameter SLOT_CAP_ATT_INDICATOR_PRESENT = "FALSE";
+ parameter SLOT_CAP_ELEC_INTERLOCK_PRESENT = "FALSE";
+ parameter SLOT_CAP_HOTPLUG_CAPABLE = "FALSE";
+ parameter SLOT_CAP_HOTPLUG_SURPRISE = "FALSE";
+ parameter SLOT_CAP_MRL_SENSOR_PRESENT = "FALSE";
+ parameter SLOT_CAP_NO_CMD_COMPLETED_SUPPORT = "FALSE";
+ parameter [12:0] SLOT_CAP_PHYSICAL_SLOT_NUM = 13'h0000;
+ parameter SLOT_CAP_POWER_CONTROLLER_PRESENT = "FALSE";
+ parameter SLOT_CAP_POWER_INDICATOR_PRESENT = "FALSE";
+ parameter integer SLOT_CAP_SLOT_POWER_LIMIT_SCALE = 0;
+ parameter [7:0] SLOT_CAP_SLOT_POWER_LIMIT_VALUE = 8'h00;
+ parameter integer SPARE_BIT0 = 0;
+ parameter integer SPARE_BIT1 = 0;
+ parameter integer SPARE_BIT2 = 0;
+ parameter integer SPARE_BIT3 = 0;
+ parameter integer SPARE_BIT4 = 0;
+ parameter integer SPARE_BIT5 = 0;
+ parameter integer SPARE_BIT6 = 0;
+ parameter integer SPARE_BIT7 = 0;
+ parameter integer SPARE_BIT8 = 0;
+ parameter [7:0] SPARE_BYTE0 = 8'h00;
+ parameter [7:0] SPARE_BYTE1 = 8'h00;
+ parameter [7:0] SPARE_BYTE2 = 8'h00;
+ parameter [7:0] SPARE_BYTE3 = 8'h00;
+ parameter [31:0] SPARE_WORD0 = 32'h00000000;
+ parameter [31:0] SPARE_WORD1 = 32'h00000000;
+ parameter [31:0] SPARE_WORD2 = 32'h00000000;
+ parameter [31:0] SPARE_WORD3 = 32'h00000000;
+ parameter [15:0] SUBSYSTEM_ID = 16'h0007;
+ parameter [15:0] SUBSYSTEM_VENDOR_ID = 16'h10EE;
+ parameter TL_RBYPASS = "FALSE";
+ parameter integer TL_RX_RAM_RADDR_LATENCY = 0;
+ parameter integer TL_RX_RAM_RDATA_LATENCY = 2;
+ parameter integer TL_RX_RAM_WRITE_LATENCY = 0;
+ parameter TL_TFC_DISABLE = "FALSE";
+ parameter TL_TX_CHECKS_DISABLE = "FALSE";
+ parameter integer TL_TX_RAM_RADDR_LATENCY = 0;
+ parameter integer TL_TX_RAM_RDATA_LATENCY = 2;
+ parameter integer TL_TX_RAM_WRITE_LATENCY = 0;
+ parameter UPCONFIG_CAPABLE = "TRUE";
+ parameter UPSTREAM_FACING = "TRUE";
+ parameter UR_INV_REQ = "TRUE";
+ parameter integer USER_CLK_FREQ = 3;
+ parameter VC0_CPL_INFINITE = "TRUE";
+ parameter [12:0] VC0_RX_RAM_LIMIT = 13'h03FF;
+ parameter integer VC0_TOTAL_CREDITS_CD = 127;
+ parameter integer VC0_TOTAL_CREDITS_CH = 31;
+ parameter integer VC0_TOTAL_CREDITS_NPH = 12;
+ parameter integer VC0_TOTAL_CREDITS_PD = 288;
+ parameter integer VC0_TOTAL_CREDITS_PH = 32;
+ parameter integer VC0_TX_LASTPACKET = 31;
+ parameter [11:0] VC_BASE_PTR = 12'h10C;
+ parameter [15:0] VC_CAP_ID = 16'h0002;
+ parameter [11:0] VC_CAP_NEXTPTR = 12'h000;
+ parameter VC_CAP_ON = "FALSE";
+ parameter VC_CAP_REJECT_SNOOP_TRANSACTIONS = "FALSE";
+ parameter [3:0] VC_CAP_VERSION = 4'h1;
+ parameter [15:0] VENDOR_ID = 16'h10EE;
+ parameter [11:0] VSEC_BASE_PTR = 12'h160;
+ parameter [15:0] VSEC_CAP_HDR_ID = 16'h1234;
+ parameter [11:0] VSEC_CAP_HDR_LENGTH = 12'h018;
+ parameter [3:0] VSEC_CAP_HDR_REVISION = 4'h1;
+ parameter [15:0] VSEC_CAP_ID = 16'h000B;
+ parameter VSEC_CAP_IS_LINK_VISIBLE = "TRUE";
+ parameter [11:0] VSEC_CAP_NEXTPTR = 12'h000;
+ parameter VSEC_CAP_ON = "FALSE";
+ parameter [3:0] VSEC_CAP_VERSION = 4'h1;
+ output CFGAERECRCCHECKEN;
+ output CFGAERECRCGENEN;
+ output CFGCOMMANDBUSMASTERENABLE;
+ output CFGCOMMANDINTERRUPTDISABLE;
+ output CFGCOMMANDIOENABLE;
+ output CFGCOMMANDMEMENABLE;
+ output CFGCOMMANDSERREN;
+ output CFGDEVCONTROL2CPLTIMEOUTDIS;
+ output CFGDEVCONTROLAUXPOWEREN;
+ output CFGDEVCONTROLCORRERRREPORTINGEN;
+ output CFGDEVCONTROLENABLERO;
+ output CFGDEVCONTROLEXTTAGEN;
+ output CFGDEVCONTROLFATALERRREPORTINGEN;
+ output CFGDEVCONTROLNONFATALREPORTINGEN;
+ output CFGDEVCONTROLNOSNOOPEN;
+ output CFGDEVCONTROLPHANTOMEN;
+ output CFGDEVCONTROLURERRREPORTINGEN;
+ output CFGDEVSTATUSCORRERRDETECTED;
+ output CFGDEVSTATUSFATALERRDETECTED;
+ output CFGDEVSTATUSNONFATALERRDETECTED;
+ output CFGDEVSTATUSURDETECTED;
+ output CFGERRAERHEADERLOGSETN;
+ output CFGERRCPLRDYN;
+ output CFGINTERRUPTMSIENABLE;
+ output CFGINTERRUPTMSIXENABLE;
+ output CFGINTERRUPTMSIXFM;
+ output CFGINTERRUPTRDYN;
+ output CFGLINKCONTROLAUTOBANDWIDTHINTEN;
+ output CFGLINKCONTROLBANDWIDTHINTEN;
+ output CFGLINKCONTROLCLOCKPMEN;
+ output CFGLINKCONTROLCOMMONCLOCK;
+ output CFGLINKCONTROLEXTENDEDSYNC;
+ output CFGLINKCONTROLHWAUTOWIDTHDIS;
+ output CFGLINKCONTROLLINKDISABLE;
+ output CFGLINKCONTROLRCB;
+ output CFGLINKCONTROLRETRAINLINK;
+ output CFGLINKSTATUSAUTOBANDWIDTHSTATUS;
+ output CFGLINKSTATUSBANDWITHSTATUS;
+ output CFGLINKSTATUSDLLACTIVE;
+ output CFGLINKSTATUSLINKTRAINING;
+ output CFGMSGRECEIVED;
+ output CFGMSGRECEIVEDASSERTINTA;
+ output CFGMSGRECEIVEDASSERTINTB;
+ output CFGMSGRECEIVEDASSERTINTC;
+ output CFGMSGRECEIVEDASSERTINTD;
+ output CFGMSGRECEIVEDDEASSERTINTA;
+ output CFGMSGRECEIVEDDEASSERTINTB;
+ output CFGMSGRECEIVEDDEASSERTINTC;
+ output CFGMSGRECEIVEDDEASSERTINTD;
+ output CFGMSGRECEIVEDERRCOR;
+ output CFGMSGRECEIVEDERRFATAL;
+ output CFGMSGRECEIVEDERRNONFATAL;
+ output CFGMSGRECEIVEDPMASNAK;
+ output CFGMSGRECEIVEDPMETO;
+ output CFGMSGRECEIVEDPMETOACK;
+ output CFGMSGRECEIVEDPMPME;
+ output CFGMSGRECEIVEDSETSLOTPOWERLIMIT;
+ output CFGMSGRECEIVEDUNLOCK;
+ output CFGPMCSRPMEEN;
+ output CFGPMCSRPMESTATUS;
+ output CFGPMRCVASREQL1N;
+ output CFGPMRCVENTERL1N;
+ output CFGPMRCVENTERL23N;
+ output CFGPMRCVREQACKN;
+ output CFGRDWRDONEN;
+ output CFGSLOTCONTROLELECTROMECHILCTLPULSE;
+ output CFGTRANSACTION;
+ output CFGTRANSACTIONTYPE;
+ output DBGSCLRA;
+ output DBGSCLRB;
+ output DBGSCLRC;
+ output DBGSCLRD;
+ output DBGSCLRE;
+ output DBGSCLRF;
+ output DBGSCLRG;
+ output DBGSCLRH;
+ output DBGSCLRI;
+ output DBGSCLRJ;
+ output DBGSCLRK;
+ output DRPDRDY;
+ output LL2BADDLLPERRN;
+ output LL2BADTLPERRN;
+ output LL2PROTOCOLERRN;
+ output LL2REPLAYROERRN;
+ output LL2REPLAYTOERRN;
+ output LL2SUSPENDOKN;
+ output LL2TFCINIT1SEQN;
+ output LL2TFCINIT2SEQN;
+ output LNKCLKEN;
+ output MIMRXRCE;
+ output MIMRXREN;
+ output MIMRXWEN;
+ output MIMTXRCE;
+ output MIMTXREN;
+ output MIMTXWEN;
+ output PIPERX0POLARITY;
+ output PIPERX1POLARITY;
+ output PIPERX2POLARITY;
+ output PIPERX3POLARITY;
+ output PIPERX4POLARITY;
+ output PIPERX5POLARITY;
+ output PIPERX6POLARITY;
+ output PIPERX7POLARITY;
+ output PIPETX0COMPLIANCE;
+ output PIPETX0ELECIDLE;
+ output PIPETX1COMPLIANCE;
+ output PIPETX1ELECIDLE;
+ output PIPETX2COMPLIANCE;
+ output PIPETX2ELECIDLE;
+ output PIPETX3COMPLIANCE;
+ output PIPETX3ELECIDLE;
+ output PIPETX4COMPLIANCE;
+ output PIPETX4ELECIDLE;
+ output PIPETX5COMPLIANCE;
+ output PIPETX5ELECIDLE;
+ output PIPETX6COMPLIANCE;
+ output PIPETX6ELECIDLE;
+ output PIPETX7COMPLIANCE;
+ output PIPETX7ELECIDLE;
+ output PIPETXDEEMPH;
+ output PIPETXRATE;
+ output PIPETXRCVRDET;
+ output PIPETXRESET;
+ output PL2LINKUPN;
+ output PL2RECEIVERERRN;
+ output PL2RECOVERYN;
+ output PL2RXELECIDLE;
+ output PL2SUSPENDOK;
+ output PLLINKGEN2CAP;
+ output PLLINKPARTNERGEN2SUPPORTED;
+ output PLLINKUPCFGCAP;
+ output PLPHYLNKUPN;
+ output PLRECEIVEDHOTRST;
+ output PLSELLNKRATE;
+ output RECEIVEDFUNCLVLRSTN;
+ output TL2ASPMSUSPENDCREDITCHECKOKN;
+ output TL2ASPMSUSPENDREQN;
+ output TL2PPMSUSPENDOKN;
+ output TRNLNKUPN;
+ output TRNRDLLPSRCRDYN;
+ output TRNRECRCERRN;
+ output TRNREOFN;
+ output TRNRERRFWDN;
+ output TRNRREMN;
+ output TRNRSOFN;
+ output TRNRSRCDSCN;
+ output TRNRSRCRDYN;
+ output TRNTCFGREQN;
+ output TRNTDLLPDSTRDYN;
+ output TRNTDSTRDYN;
+ output TRNTERRDROPN;
+ output USERRSTN;
+ output [11:0] DBGVECC;
+ output [11:0] PLDBGVEC;
+ output [11:0] TRNFCCPLD;
+ output [11:0] TRNFCNPD;
+ output [11:0] TRNFCPD;
+ output [12:0] MIMRXRADDR;
+ output [12:0] MIMRXWADDR;
+ output [12:0] MIMTXRADDR;
+ output [12:0] MIMTXWADDR;
+ output [15:0] CFGMSGDATA;
+ output [15:0] DRPDO;
+ output [15:0] PIPETX0DATA;
+ output [15:0] PIPETX1DATA;
+ output [15:0] PIPETX2DATA;
+ output [15:0] PIPETX3DATA;
+ output [15:0] PIPETX4DATA;
+ output [15:0] PIPETX5DATA;
+ output [15:0] PIPETX6DATA;
+ output [15:0] PIPETX7DATA;
+ output [1:0] CFGLINKCONTROLASPMCONTROL;
+ output [1:0] CFGLINKSTATUSCURRENTSPEED;
+ output [1:0] CFGPMCSRPOWERSTATE;
+ output [1:0] PIPETX0CHARISK;
+ output [1:0] PIPETX0POWERDOWN;
+ output [1:0] PIPETX1CHARISK;
+ output [1:0] PIPETX1POWERDOWN;
+ output [1:0] PIPETX2CHARISK;
+ output [1:0] PIPETX2POWERDOWN;
+ output [1:0] PIPETX3CHARISK;
+ output [1:0] PIPETX3POWERDOWN;
+ output [1:0] PIPETX4CHARISK;
+ output [1:0] PIPETX4POWERDOWN;
+ output [1:0] PIPETX5CHARISK;
+ output [1:0] PIPETX5POWERDOWN;
+ output [1:0] PIPETX6CHARISK;
+ output [1:0] PIPETX6POWERDOWN;
+ output [1:0] PIPETX7CHARISK;
+ output [1:0] PIPETX7POWERDOWN;
+ output [1:0] PLLANEREVERSALMODE;
+ output [1:0] PLRXPMSTATE;
+ output [1:0] PLSELLNKWIDTH;
+ output [2:0] CFGDEVCONTROLMAXPAYLOAD;
+ output [2:0] CFGDEVCONTROLMAXREADREQ;
+ output [2:0] CFGINTERRUPTMMENABLE;
+ output [2:0] CFGPCIELINKSTATE;
+ output [2:0] PIPETXMARGIN;
+ output [2:0] PLINITIALLINKWIDTH;
+ output [2:0] PLTXPMSTATE;
+ output [31:0] CFGDO;
+ output [31:0] TRNRDLLPDATA;
+ output [3:0] CFGDEVCONTROL2CPLTIMEOUTVAL;
+ output [3:0] CFGLINKSTATUSNEGOTIATEDWIDTH;
+ output [5:0] PLLTSSMSTATE;
+ output [5:0] TRNTBUFAV;
+ output [63:0] DBGVECA;
+ output [63:0] DBGVECB;
+ output [63:0] TRNRD;
+ output [67:0] MIMRXWDATA;
+ output [68:0] MIMTXWDATA;
+ output [6:0] CFGTRANSACTIONADDR;
+ output [6:0] CFGVCTCVCMAP;
+ output [6:0] TRNRBARHITN;
+ output [7:0] CFGINTERRUPTDO;
+ output [7:0] TRNFCCPLH;
+ output [7:0] TRNFCNPH;
+ output [7:0] TRNFCPH;
+ input CFGERRACSN;
+ input CFGERRCORN;
+ input CFGERRCPLABORTN;
+ input CFGERRCPLTIMEOUTN;
+ input CFGERRCPLUNEXPECTN;
+ input CFGERRECRCN;
+ input CFGERRLOCKEDN;
+ input CFGERRPOSTEDN;
+ input CFGERRURN;
+ input CFGINTERRUPTASSERTN;
+ input CFGINTERRUPTN;
+ input CFGPMDIRECTASPML1N;
+ input CFGPMSENDPMACKN;
+ input CFGPMSENDPMETON;
+ input CFGPMSENDPMNAKN;
+ input CFGPMTURNOFFOKN;
+ input CFGPMWAKEN;
+ input CFGRDENN;
+ input CFGTRNPENDINGN;
+ input CFGWRENN;
+ input CFGWRREADONLYN;
+ input CFGWRRW1CASRWN;
+ input CMRSTN;
+ input CMSTICKYRSTN;
+ input DBGSUBMODE;
+ input DLRSTN;
+ input DRPCLK;
+ input DRPDEN;
+ input DRPDWE;
+ input FUNCLVLRSTN;
+ input LL2SENDASREQL1N;
+ input LL2SENDENTERL1N;
+ input LL2SENDENTERL23N;
+ input LL2SUSPENDNOWN;
+ input LL2TLPRCVN;
+ input PIPECLK;
+ input PIPERX0CHANISALIGNED;
+ input PIPERX0ELECIDLE;
+ input PIPERX0PHYSTATUS;
+ input PIPERX0VALID;
+ input PIPERX1CHANISALIGNED;
+ input PIPERX1ELECIDLE;
+ input PIPERX1PHYSTATUS;
+ input PIPERX1VALID;
+ input PIPERX2CHANISALIGNED;
+ input PIPERX2ELECIDLE;
+ input PIPERX2PHYSTATUS;
+ input PIPERX2VALID;
+ input PIPERX3CHANISALIGNED;
+ input PIPERX3ELECIDLE;
+ input PIPERX3PHYSTATUS;
+ input PIPERX3VALID;
+ input PIPERX4CHANISALIGNED;
+ input PIPERX4ELECIDLE;
+ input PIPERX4PHYSTATUS;
+ input PIPERX4VALID;
+ input PIPERX5CHANISALIGNED;
+ input PIPERX5ELECIDLE;
+ input PIPERX5PHYSTATUS;
+ input PIPERX5VALID;
+ input PIPERX6CHANISALIGNED;
+ input PIPERX6ELECIDLE;
+ input PIPERX6PHYSTATUS;
+ input PIPERX6VALID;
+ input PIPERX7CHANISALIGNED;
+ input PIPERX7ELECIDLE;
+ input PIPERX7PHYSTATUS;
+ input PIPERX7VALID;
+ input PLDIRECTEDLINKAUTON;
+ input PLDIRECTEDLINKSPEED;
+ input PLDOWNSTREAMDEEMPHSOURCE;
+ input PLRSTN;
+ input PLTRANSMITHOTRST;
+ input PLUPSTREAMPREFERDEEMPH;
+ input SYSRSTN;
+ input TL2ASPMSUSPENDCREDITCHECKN;
+ input TL2PPMSUSPENDREQN;
+ input TLRSTN;
+ input TRNRDSTRDYN;
+ input TRNRNPOKN;
+ input TRNTCFGGNTN;
+ input TRNTDLLPSRCRDYN;
+ input TRNTECRCGENN;
+ input TRNTEOFN;
+ input TRNTERRFWDN;
+ input TRNTREMN;
+ input TRNTSOFN;
+ input TRNTSRCDSCN;
+ input TRNTSRCRDYN;
+ input TRNTSTRN;
+ input USERCLK;
+ input [127:0] CFGERRAERHEADERLOG;
+ input [15:0] DRPDI;
+ input [15:0] PIPERX0DATA;
+ input [15:0] PIPERX1DATA;
+ input [15:0] PIPERX2DATA;
+ input [15:0] PIPERX3DATA;
+ input [15:0] PIPERX4DATA;
+ input [15:0] PIPERX5DATA;
+ input [15:0] PIPERX6DATA;
+ input [15:0] PIPERX7DATA;
+ input [1:0] DBGMODE;
+ input [1:0] PIPERX0CHARISK;
+ input [1:0] PIPERX1CHARISK;
+ input [1:0] PIPERX2CHARISK;
+ input [1:0] PIPERX3CHARISK;
+ input [1:0] PIPERX4CHARISK;
+ input [1:0] PIPERX5CHARISK;
+ input [1:0] PIPERX6CHARISK;
+ input [1:0] PIPERX7CHARISK;
+ input [1:0] PLDIRECTEDLINKCHANGE;
+ input [1:0] PLDIRECTEDLINKWIDTH;
+ input [2:0] CFGDSFUNCTIONNUMBER;
+ input [2:0] PIPERX0STATUS;
+ input [2:0] PIPERX1STATUS;
+ input [2:0] PIPERX2STATUS;
+ input [2:0] PIPERX3STATUS;
+ input [2:0] PIPERX4STATUS;
+ input [2:0] PIPERX5STATUS;
+ input [2:0] PIPERX6STATUS;
+ input [2:0] PIPERX7STATUS;
+ input [2:0] PLDBGMODE;
+ input [2:0] TRNFCSEL;
+ input [31:0] CFGDI;
+ input [31:0] TRNTDLLPDATA;
+ input [3:0] CFGBYTEENN;
+ input [47:0] CFGERRTLPCPLHEADER;
+ input [4:0] CFGDSDEVICENUMBER;
+ input [4:0] PL2DIRECTEDLSTATE;
+ input [63:0] CFGDSN;
+ input [63:0] TRNTD;
+ input [67:0] MIMRXRDATA;
+ input [68:0] MIMTXRDATA;
+ input [7:0] CFGDSBUSNUMBER;
+ input [7:0] CFGINTERRUPTDI;
+ input [7:0] CFGPORTNUMBER;
+ input [8:0] DRPDADDR;
+ input [9:0] CFGDWADDR;
+endmodule
+
+module SYSMON (...);
+ parameter [15:0] INIT_40 = 16'h0;
+ parameter [15:0] INIT_41 = 16'h0;
+ parameter [15:0] INIT_42 = 16'h0800;
+ parameter [15:0] INIT_43 = 16'h0;
+ parameter [15:0] INIT_44 = 16'h0;
+ parameter [15:0] INIT_45 = 16'h0;
+ parameter [15:0] INIT_46 = 16'h0;
+ parameter [15:0] INIT_47 = 16'h0;
+ parameter [15:0] INIT_48 = 16'h0;
+ parameter [15:0] INIT_49 = 16'h0;
+ parameter [15:0] INIT_4A = 16'h0;
+ parameter [15:0] INIT_4B = 16'h0;
+ parameter [15:0] INIT_4C = 16'h0;
+ parameter [15:0] INIT_4D = 16'h0;
+ parameter [15:0] INIT_4E = 16'h0;
+ parameter [15:0] INIT_4F = 16'h0;
+ parameter [15:0] INIT_50 = 16'h0;
+ parameter [15:0] INIT_51 = 16'h0;
+ parameter [15:0] INIT_52 = 16'h0;
+ parameter [15:0] INIT_53 = 16'h0;
+ parameter [15:0] INIT_54 = 16'h0;
+ parameter [15:0] INIT_55 = 16'h0;
+ parameter [15:0] INIT_56 = 16'h0;
+ parameter [15:0] INIT_57 = 16'h0;
+ parameter SIM_DEVICE = "VIRTEX5";
+ parameter SIM_MONITOR_FILE = "design.txt";
+ output BUSY;
+ output DRDY;
+ output EOC;
+ output EOS;
+ output JTAGBUSY;
+ output JTAGLOCKED;
+ output JTAGMODIFIED;
+ output OT;
+ output [15:0] DO;
+ output [2:0] ALM;
+ output [4:0] CHANNEL;
+ input CONVST;
+ input CONVSTCLK;
+ input DCLK;
+ input DEN;
+ input DWE;
+ input RESET;
+ input VN;
+ input VP;
+ input [15:0] DI;
+ input [15:0] VAUXN;
+ input [15:0] VAUXP;
+ input [6:0] DADDR;
+endmodule
+
+module DSP48E1 (...);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+ output [29:0] ACOUT;
+ output [17:0] BCOUT;
+ output CARRYCASCOUT;
+ output [3:0] CARRYOUT;
+ output MULTSIGNOUT;
+ output OVERFLOW;
+ output [47:0] P;
+ output PATTERNBDETECT;
+ output PATTERNDETECT;
+ output [47:0] PCOUT;
+ output UNDERFLOW;
+ input [29:0] A;
+ input [29:0] ACIN;
+ (* invertible_pin = "IS_ALUMODE_INVERTED" *)
+ input [3:0] ALUMODE;
+ input [17:0] B;
+ input [17:0] BCIN;
+ input [47:0] C;
+ input CARRYCASCIN;
+ (* invertible_pin = "IS_CARRYIN_INVERTED" *)
+ input CARRYIN;
+ input [2:0] CARRYINSEL;
+ input CEA1;
+ input CEA2;
+ input CEAD;
+ input CEALUMODE;
+ input CEB1;
+ input CEB2;
+ input CEC;
+ input CECARRYIN;
+ input CECTRL;
+ input CED;
+ input CEINMODE;
+ input CEM;
+ input CEP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [24:0] D;
+ (* invertible_pin = "IS_INMODE_INVERTED" *)
+ input [4:0] INMODE;
+ input MULTSIGNIN;
+ (* invertible_pin = "IS_OPMODE_INVERTED" *)
+ input [6:0] OPMODE;
+ input [47:0] PCIN;
+ input RSTA;
+ input RSTALLCARRYIN;
+ input RSTALUMODE;
+ input RSTB;
+ input RSTC;
+ input RSTCTRL;
+ input RSTD;
+ input RSTINMODE;
+ input RSTM;
+ input RSTP;
+endmodule
+
+module BUFGCE (...);
+ parameter CE_TYPE = "SYNC";
+ parameter [0:0] IS_CE_INVERTED = 1'b0;
+ parameter [0:0] IS_I_INVERTED = 1'b0;
+ (* clkbuf_driver *)
+ output O;
+ (* invertible_pin = "IS_CE_INVERTED" *)
+ input CE;
+ (* invertible_pin = "IS_I_INVERTED" *)
+ input I;
+endmodule
+
+module BUFGCE_1 (...);
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input I;
+endmodule
+
+module BUFGMUX (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_1 (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_CTRL (...);
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFH (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFIO (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFIODQS (...);
+ parameter DQSMASK_ENABLE = "FALSE";
+ (* clkbuf_driver *)
+ output O;
+ input DQSMASK;
+ input I;
+endmodule
+
+module BUFR (...);
+ parameter BUFR_DIVIDE = "BYPASS";
+ parameter SIM_DEVICE = "7SERIES";
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input CLR;
+ input I;
+endmodule
+
+module IBUFDS_GTXE1 (...);
+ parameter CLKCM_CFG = "TRUE";
+ parameter CLKRCV_TRST = "TRUE";
+ parameter [9:0] REFCLKOUT_DLY = 10'b0000000000;
+ output O;
+ output ODIV2;
+ input CEB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module MMCM_ADV (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter CLKFBOUT_USE_FINE_PS = "FALSE";
+ parameter CLKOUT0_USE_FINE_PS = "FALSE";
+ parameter CLKOUT1_USE_FINE_PS = "FALSE";
+ parameter CLKOUT2_USE_FINE_PS = "FALSE";
+ parameter CLKOUT3_USE_FINE_PS = "FALSE";
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter CLKOUT4_USE_FINE_PS = "FALSE";
+ parameter CLKOUT5_USE_FINE_PS = "FALSE";
+ parameter CLKOUT6_USE_FINE_PS = "FALSE";
+ parameter CLOCK_HOLD = "FALSE";
+ parameter COMPENSATION = "ZHOLD";
+ parameter STARTUP_WAIT = "FALSE";
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKIN2_PERIOD = 0.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter real REF_JITTER1 = 0.010;
+ parameter real REF_JITTER2 = 0.010;
+ parameter real VCOCLK_FREQ_MAX = 1600.0;
+ parameter real VCOCLK_FREQ_MIN = 600.0;
+ parameter real CLKIN_FREQ_MAX = 800.0;
+ parameter real CLKIN_FREQ_MIN = 10.0;
+ parameter real CLKPFD_FREQ_MAX = 550.0;
+ parameter real CLKPFD_FREQ_MIN = 10.0;
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKFBSTOPPED;
+ output CLKINSTOPPED;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output DRDY;
+ output LOCKED;
+ output PSDONE;
+ output [15:0] DO;
+ input CLKFBIN;
+ input CLKIN1;
+ input CLKIN2;
+ input CLKINSEL;
+ input DCLK;
+ input DEN;
+ input DWE;
+ input PSCLK;
+ input PSEN;
+ input PSINCDEC;
+ input PWRDWN;
+ input RST;
+ input [15:0] DI;
+ input [6:0] DADDR;
+endmodule
+
+module MMCM_BASE (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter CLOCK_HOLD = "FALSE";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter real REF_JITTER1 = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output LOCKED;
+ input CLKFBIN;
+ input CLKIN1;
+ input PWRDWN;
+ input RST;
+endmodule
+
+(* keep *)
+module BSCAN_VIRTEX6 (...);
+ parameter DISABLE_JTAG = "FALSE";
+ parameter integer JTAG_CHAIN = 1;
+ output CAPTURE;
+ output DRCK;
+ output RESET;
+ output RUNTEST;
+ output SEL;
+ output SHIFT;
+ output TCK;
+ output TDI;
+ output TMS;
+ output UPDATE;
+ input TDO;
+endmodule
+
+(* keep *)
+module CAPTURE_VIRTEX6 (...);
+ parameter ONESHOT = "TRUE";
+ input CAP;
+ input CLK;
+endmodule
+
+module DNA_PORT (...);
+ parameter [56:0] SIM_DNA_VALUE = 57'h0;
+ output DOUT;
+ input CLK;
+ input DIN;
+ input READ;
+ input SHIFT;
+endmodule
+
+module EFUSE_USR (...);
+ parameter [31:0] SIM_EFUSE_VALUE = 32'h00000000;
+ output [31:0] EFUSEUSR;
+endmodule
+
+module FRAME_ECC_VIRTEX6 (...);
+ parameter FARSRC = "EFAR";
+ parameter FRAME_RBT_IN_FILENAME = "NONE";
+ output CRCERROR;
+ output ECCERROR;
+ output ECCERRORSINGLE;
+ output SYNDROMEVALID;
+ output [12:0] SYNDROME;
+ output [23:0] FAR;
+ output [4:0] SYNBIT;
+ output [6:0] SYNWORD;
+endmodule
+
+(* keep *)
+module ICAP_VIRTEX6 (...);
+ parameter [31:0] DEVICE_ID = 32'h04244093;
+ parameter ICAP_WIDTH = "X8";
+ parameter SIM_CFG_FILE_NAME = "NONE";
+ output BUSY;
+ output [31:0] O;
+ input CLK;
+ input CSB;
+ input RDWRB;
+ input [31:0] I;
+endmodule
+
+(* keep *)
+module STARTUP_VIRTEX6 (...);
+ parameter PROG_USR = "FALSE";
+ output CFGCLK;
+ output CFGMCLK;
+ output DINSPI;
+ output EOS;
+ output PREQ;
+ output TCKSPI;
+ input CLK;
+ input GSR;
+ input GTS;
+ input KEYCLEARB;
+ input PACK;
+ input USRCCLKO;
+ input USRCCLKTS;
+ input USRDONEO;
+ input USRDONETS;
+endmodule
+
+module USR_ACCESS_VIRTEX6 (...);
+ output CFGCLK;
+ output [31:0] DATA;
+ output DATAVALID;
+endmodule
+
+(* keep *)
+module DCIRESET (...);
+ output LOCKED;
+ input RST;
+endmodule
+
+module GTHE1_QUAD (...);
+ parameter [15:0] BER_CONST_PTRN0 = 16'h0000;
+ parameter [15:0] BER_CONST_PTRN1 = 16'h0000;
+ parameter [15:0] BUFFER_CONFIG_LANE0 = 16'h4004;
+ parameter [15:0] BUFFER_CONFIG_LANE1 = 16'h4004;
+ parameter [15:0] BUFFER_CONFIG_LANE2 = 16'h4004;
+ parameter [15:0] BUFFER_CONFIG_LANE3 = 16'h4004;
+ parameter [15:0] DFE_TRAIN_CTRL_LANE0 = 16'h0000;
+ parameter [15:0] DFE_TRAIN_CTRL_LANE1 = 16'h0000;
+ parameter [15:0] DFE_TRAIN_CTRL_LANE2 = 16'h0000;
+ parameter [15:0] DFE_TRAIN_CTRL_LANE3 = 16'h0000;
+ parameter [15:0] DLL_CFG0 = 16'h8202;
+ parameter [15:0] DLL_CFG1 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LD_COEFF_UPD_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASEKR_LP_COEFF_UPD_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASEKR_PMA_CTRL_LANE0 = 16'h0002;
+ parameter [15:0] E10GBASEKR_PMA_CTRL_LANE1 = 16'h0002;
+ parameter [15:0] E10GBASEKR_PMA_CTRL_LANE2 = 16'h0002;
+ parameter [15:0] E10GBASEKR_PMA_CTRL_LANE3 = 16'h0002;
+ parameter [15:0] E10GBASEKX_CTRL_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASEKX_CTRL_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASEKX_CTRL_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASEKX_CTRL_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_CFG_LANE0 = 16'h070C;
+ parameter [15:0] E10GBASER_PCS_CFG_LANE1 = 16'h070C;
+ parameter [15:0] E10GBASER_PCS_CFG_LANE2 = 16'h070C;
+ parameter [15:0] E10GBASER_PCS_CFG_LANE3 = 16'h070C;
+ parameter [15:0] E10GBASER_PCS_SEEDA0_LANE0 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDA0_LANE1 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDA0_LANE2 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDA0_LANE3 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDA1_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA1_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA1_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA1_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA2_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA2_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA2_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA2_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA3_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA3_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA3_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDA3_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB0_LANE0 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDB0_LANE1 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDB0_LANE2 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDB0_LANE3 = 16'h0001;
+ parameter [15:0] E10GBASER_PCS_SEEDB1_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB1_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB1_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB1_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB2_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB2_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB2_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB2_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB3_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB3_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB3_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_SEEDB3_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASER_PCS_TEST_CTRL_LANE3 = 16'h0000;
+ parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE0 = 16'h0000;
+ parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE1 = 16'h0000;
+ parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE2 = 16'h0000;
+ parameter [15:0] E10GBASEX_PCS_TSTCTRL_LANE3 = 16'h0000;
+ parameter [15:0] GLBL0_NOISE_CTRL = 16'hF0B8;
+ parameter [15:0] GLBL_AMON_SEL = 16'h0000;
+ parameter [15:0] GLBL_DMON_SEL = 16'h0200;
+ parameter [15:0] GLBL_PWR_CTRL = 16'h0000;
+ parameter [0:0] GTH_CFG_PWRUP_LANE0 = 1'b1;
+ parameter [0:0] GTH_CFG_PWRUP_LANE1 = 1'b1;
+ parameter [0:0] GTH_CFG_PWRUP_LANE2 = 1'b1;
+ parameter [0:0] GTH_CFG_PWRUP_LANE3 = 1'b1;
+ parameter [15:0] LANE_AMON_SEL = 16'h00F0;
+ parameter [15:0] LANE_DMON_SEL = 16'h0000;
+ parameter [15:0] LANE_LNK_CFGOVRD = 16'h0000;
+ parameter [15:0] LANE_PWR_CTRL_LANE0 = 16'h0400;
+ parameter [15:0] LANE_PWR_CTRL_LANE1 = 16'h0400;
+ parameter [15:0] LANE_PWR_CTRL_LANE2 = 16'h0400;
+ parameter [15:0] LANE_PWR_CTRL_LANE3 = 16'h0400;
+ parameter [15:0] LNK_TRN_CFG_LANE0 = 16'h0000;
+ parameter [15:0] LNK_TRN_CFG_LANE1 = 16'h0000;
+ parameter [15:0] LNK_TRN_CFG_LANE2 = 16'h0000;
+ parameter [15:0] LNK_TRN_CFG_LANE3 = 16'h0000;
+ parameter [15:0] LNK_TRN_COEFF_REQ_LANE0 = 16'h0000;
+ parameter [15:0] LNK_TRN_COEFF_REQ_LANE1 = 16'h0000;
+ parameter [15:0] LNK_TRN_COEFF_REQ_LANE2 = 16'h0000;
+ parameter [15:0] LNK_TRN_COEFF_REQ_LANE3 = 16'h0000;
+ parameter [15:0] MISC_CFG = 16'h0008;
+ parameter [15:0] MODE_CFG1 = 16'h0000;
+ parameter [15:0] MODE_CFG2 = 16'h0000;
+ parameter [15:0] MODE_CFG3 = 16'h0000;
+ parameter [15:0] MODE_CFG4 = 16'h0000;
+ parameter [15:0] MODE_CFG5 = 16'h0000;
+ parameter [15:0] MODE_CFG6 = 16'h0000;
+ parameter [15:0] MODE_CFG7 = 16'h0000;
+ parameter [15:0] PCS_ABILITY_LANE0 = 16'h0010;
+ parameter [15:0] PCS_ABILITY_LANE1 = 16'h0010;
+ parameter [15:0] PCS_ABILITY_LANE2 = 16'h0010;
+ parameter [15:0] PCS_ABILITY_LANE3 = 16'h0010;
+ parameter [15:0] PCS_CTRL1_LANE0 = 16'h2040;
+ parameter [15:0] PCS_CTRL1_LANE1 = 16'h2040;
+ parameter [15:0] PCS_CTRL1_LANE2 = 16'h2040;
+ parameter [15:0] PCS_CTRL1_LANE3 = 16'h2040;
+ parameter [15:0] PCS_CTRL2_LANE0 = 16'h0000;
+ parameter [15:0] PCS_CTRL2_LANE1 = 16'h0000;
+ parameter [15:0] PCS_CTRL2_LANE2 = 16'h0000;
+ parameter [15:0] PCS_CTRL2_LANE3 = 16'h0000;
+ parameter [15:0] PCS_MISC_CFG_0_LANE0 = 16'h1116;
+ parameter [15:0] PCS_MISC_CFG_0_LANE1 = 16'h1116;
+ parameter [15:0] PCS_MISC_CFG_0_LANE2 = 16'h1116;
+ parameter [15:0] PCS_MISC_CFG_0_LANE3 = 16'h1116;
+ parameter [15:0] PCS_MISC_CFG_1_LANE0 = 16'h0000;
+ parameter [15:0] PCS_MISC_CFG_1_LANE1 = 16'h0000;
+ parameter [15:0] PCS_MISC_CFG_1_LANE2 = 16'h0000;
+ parameter [15:0] PCS_MISC_CFG_1_LANE3 = 16'h0000;
+ parameter [15:0] PCS_MODE_LANE0 = 16'h0000;
+ parameter [15:0] PCS_MODE_LANE1 = 16'h0000;
+ parameter [15:0] PCS_MODE_LANE2 = 16'h0000;
+ parameter [15:0] PCS_MODE_LANE3 = 16'h0000;
+ parameter [15:0] PCS_RESET_1_LANE0 = 16'h0002;
+ parameter [15:0] PCS_RESET_1_LANE1 = 16'h0002;
+ parameter [15:0] PCS_RESET_1_LANE2 = 16'h0002;
+ parameter [15:0] PCS_RESET_1_LANE3 = 16'h0002;
+ parameter [15:0] PCS_RESET_LANE0 = 16'h0000;
+ parameter [15:0] PCS_RESET_LANE1 = 16'h0000;
+ parameter [15:0] PCS_RESET_LANE2 = 16'h0000;
+ parameter [15:0] PCS_RESET_LANE3 = 16'h0000;
+ parameter [15:0] PCS_TYPE_LANE0 = 16'h002C;
+ parameter [15:0] PCS_TYPE_LANE1 = 16'h002C;
+ parameter [15:0] PCS_TYPE_LANE2 = 16'h002C;
+ parameter [15:0] PCS_TYPE_LANE3 = 16'h002C;
+ parameter [15:0] PLL_CFG0 = 16'h95DF;
+ parameter [15:0] PLL_CFG1 = 16'h81C0;
+ parameter [15:0] PLL_CFG2 = 16'h0424;
+ parameter [15:0] PMA_CTRL1_LANE0 = 16'h0000;
+ parameter [15:0] PMA_CTRL1_LANE1 = 16'h0000;
+ parameter [15:0] PMA_CTRL1_LANE2 = 16'h0000;
+ parameter [15:0] PMA_CTRL1_LANE3 = 16'h0000;
+ parameter [15:0] PMA_CTRL2_LANE0 = 16'h000B;
+ parameter [15:0] PMA_CTRL2_LANE1 = 16'h000B;
+ parameter [15:0] PMA_CTRL2_LANE2 = 16'h000B;
+ parameter [15:0] PMA_CTRL2_LANE3 = 16'h000B;
+ parameter [15:0] PMA_LPBK_CTRL_LANE0 = 16'h0004;
+ parameter [15:0] PMA_LPBK_CTRL_LANE1 = 16'h0004;
+ parameter [15:0] PMA_LPBK_CTRL_LANE2 = 16'h0004;
+ parameter [15:0] PMA_LPBK_CTRL_LANE3 = 16'h0004;
+ parameter [15:0] PRBS_BER_CFG0_LANE0 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG0_LANE1 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG0_LANE2 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG0_LANE3 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG1_LANE0 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG1_LANE1 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG1_LANE2 = 16'h0000;
+ parameter [15:0] PRBS_BER_CFG1_LANE3 = 16'h0000;
+ parameter [15:0] PRBS_CFG_LANE0 = 16'h000A;
+ parameter [15:0] PRBS_CFG_LANE1 = 16'h000A;
+ parameter [15:0] PRBS_CFG_LANE2 = 16'h000A;
+ parameter [15:0] PRBS_CFG_LANE3 = 16'h000A;
+ parameter [15:0] PTRN_CFG0_LSB = 16'h5555;
+ parameter [15:0] PTRN_CFG0_MSB = 16'h5555;
+ parameter [15:0] PTRN_LEN_CFG = 16'h001F;
+ parameter [15:0] PWRUP_DLY = 16'h0000;
+ parameter [15:0] RX_AEQ_VAL0_LANE0 = 16'h03C0;
+ parameter [15:0] RX_AEQ_VAL0_LANE1 = 16'h03C0;
+ parameter [15:0] RX_AEQ_VAL0_LANE2 = 16'h03C0;
+ parameter [15:0] RX_AEQ_VAL0_LANE3 = 16'h03C0;
+ parameter [15:0] RX_AEQ_VAL1_LANE0 = 16'h0000;
+ parameter [15:0] RX_AEQ_VAL1_LANE1 = 16'h0000;
+ parameter [15:0] RX_AEQ_VAL1_LANE2 = 16'h0000;
+ parameter [15:0] RX_AEQ_VAL1_LANE3 = 16'h0000;
+ parameter [15:0] RX_AGC_CTRL_LANE0 = 16'h0000;
+ parameter [15:0] RX_AGC_CTRL_LANE1 = 16'h0000;
+ parameter [15:0] RX_AGC_CTRL_LANE2 = 16'h0000;
+ parameter [15:0] RX_AGC_CTRL_LANE3 = 16'h0000;
+ parameter [15:0] RX_CDR_CTRL0_LANE0 = 16'h0005;
+ parameter [15:0] RX_CDR_CTRL0_LANE1 = 16'h0005;
+ parameter [15:0] RX_CDR_CTRL0_LANE2 = 16'h0005;
+ parameter [15:0] RX_CDR_CTRL0_LANE3 = 16'h0005;
+ parameter [15:0] RX_CDR_CTRL1_LANE0 = 16'h4200;
+ parameter [15:0] RX_CDR_CTRL1_LANE1 = 16'h4200;
+ parameter [15:0] RX_CDR_CTRL1_LANE2 = 16'h4200;
+ parameter [15:0] RX_CDR_CTRL1_LANE3 = 16'h4200;
+ parameter [15:0] RX_CDR_CTRL2_LANE0 = 16'h2000;
+ parameter [15:0] RX_CDR_CTRL2_LANE1 = 16'h2000;
+ parameter [15:0] RX_CDR_CTRL2_LANE2 = 16'h2000;
+ parameter [15:0] RX_CDR_CTRL2_LANE3 = 16'h2000;
+ parameter [15:0] RX_CFG0_LANE0 = 16'h0500;
+ parameter [15:0] RX_CFG0_LANE1 = 16'h0500;
+ parameter [15:0] RX_CFG0_LANE2 = 16'h0500;
+ parameter [15:0] RX_CFG0_LANE3 = 16'h0500;
+ parameter [15:0] RX_CFG1_LANE0 = 16'h821F;
+ parameter [15:0] RX_CFG1_LANE1 = 16'h821F;
+ parameter [15:0] RX_CFG1_LANE2 = 16'h821F;
+ parameter [15:0] RX_CFG1_LANE3 = 16'h821F;
+ parameter [15:0] RX_CFG2_LANE0 = 16'h1001;
+ parameter [15:0] RX_CFG2_LANE1 = 16'h1001;
+ parameter [15:0] RX_CFG2_LANE2 = 16'h1001;
+ parameter [15:0] RX_CFG2_LANE3 = 16'h1001;
+ parameter [15:0] RX_CTLE_CTRL_LANE0 = 16'h008F;
+ parameter [15:0] RX_CTLE_CTRL_LANE1 = 16'h008F;
+ parameter [15:0] RX_CTLE_CTRL_LANE2 = 16'h008F;
+ parameter [15:0] RX_CTLE_CTRL_LANE3 = 16'h008F;
+ parameter [15:0] RX_CTRL_OVRD_LANE0 = 16'h000C;
+ parameter [15:0] RX_CTRL_OVRD_LANE1 = 16'h000C;
+ parameter [15:0] RX_CTRL_OVRD_LANE2 = 16'h000C;
+ parameter [15:0] RX_CTRL_OVRD_LANE3 = 16'h000C;
+ parameter integer RX_FABRIC_WIDTH0 = 6466;
+ parameter integer RX_FABRIC_WIDTH1 = 6466;
+ parameter integer RX_FABRIC_WIDTH2 = 6466;
+ parameter integer RX_FABRIC_WIDTH3 = 6466;
+ parameter [15:0] RX_LOOP_CTRL_LANE0 = 16'h007F;
+ parameter [15:0] RX_LOOP_CTRL_LANE1 = 16'h007F;
+ parameter [15:0] RX_LOOP_CTRL_LANE2 = 16'h007F;
+ parameter [15:0] RX_LOOP_CTRL_LANE3 = 16'h007F;
+ parameter [15:0] RX_MVAL0_LANE0 = 16'h0000;
+ parameter [15:0] RX_MVAL0_LANE1 = 16'h0000;
+ parameter [15:0] RX_MVAL0_LANE2 = 16'h0000;
+ parameter [15:0] RX_MVAL0_LANE3 = 16'h0000;
+ parameter [15:0] RX_MVAL1_LANE0 = 16'h0000;
+ parameter [15:0] RX_MVAL1_LANE1 = 16'h0000;
+ parameter [15:0] RX_MVAL1_LANE2 = 16'h0000;
+ parameter [15:0] RX_MVAL1_LANE3 = 16'h0000;
+ parameter [15:0] RX_P0S_CTRL = 16'h1206;
+ parameter [15:0] RX_P0_CTRL = 16'h11F0;
+ parameter [15:0] RX_P1_CTRL = 16'h120F;
+ parameter [15:0] RX_P2_CTRL = 16'h0E0F;
+ parameter [15:0] RX_PI_CTRL0 = 16'hD2F0;
+ parameter [15:0] RX_PI_CTRL1 = 16'h0080;
+ parameter integer SIM_GTHRESET_SPEEDUP = 1;
+ parameter SIM_VERSION = "1.0";
+ parameter [15:0] SLICE_CFG = 16'h0000;
+ parameter [15:0] SLICE_NOISE_CTRL_0_LANE01 = 16'h0000;
+ parameter [15:0] SLICE_NOISE_CTRL_0_LANE23 = 16'h0000;
+ parameter [15:0] SLICE_NOISE_CTRL_1_LANE01 = 16'h0000;
+ parameter [15:0] SLICE_NOISE_CTRL_1_LANE23 = 16'h0000;
+ parameter [15:0] SLICE_NOISE_CTRL_2_LANE01 = 16'h7FFF;
+ parameter [15:0] SLICE_NOISE_CTRL_2_LANE23 = 16'h7FFF;
+ parameter [15:0] SLICE_TX_RESET_LANE01 = 16'h0000;
+ parameter [15:0] SLICE_TX_RESET_LANE23 = 16'h0000;
+ parameter [15:0] TERM_CTRL_LANE0 = 16'h5007;
+ parameter [15:0] TERM_CTRL_LANE1 = 16'h5007;
+ parameter [15:0] TERM_CTRL_LANE2 = 16'h5007;
+ parameter [15:0] TERM_CTRL_LANE3 = 16'h5007;
+ parameter [15:0] TX_CFG0_LANE0 = 16'h203D;
+ parameter [15:0] TX_CFG0_LANE1 = 16'h203D;
+ parameter [15:0] TX_CFG0_LANE2 = 16'h203D;
+ parameter [15:0] TX_CFG0_LANE3 = 16'h203D;
+ parameter [15:0] TX_CFG1_LANE0 = 16'h0F00;
+ parameter [15:0] TX_CFG1_LANE1 = 16'h0F00;
+ parameter [15:0] TX_CFG1_LANE2 = 16'h0F00;
+ parameter [15:0] TX_CFG1_LANE3 = 16'h0F00;
+ parameter [15:0] TX_CFG2_LANE0 = 16'h0081;
+ parameter [15:0] TX_CFG2_LANE1 = 16'h0081;
+ parameter [15:0] TX_CFG2_LANE2 = 16'h0081;
+ parameter [15:0] TX_CFG2_LANE3 = 16'h0081;
+ parameter [15:0] TX_CLK_SEL0_LANE0 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL0_LANE1 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL0_LANE2 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL0_LANE3 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL1_LANE0 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL1_LANE1 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL1_LANE2 = 16'h2121;
+ parameter [15:0] TX_CLK_SEL1_LANE3 = 16'h2121;
+ parameter [15:0] TX_DISABLE_LANE0 = 16'h0000;
+ parameter [15:0] TX_DISABLE_LANE1 = 16'h0000;
+ parameter [15:0] TX_DISABLE_LANE2 = 16'h0000;
+ parameter [15:0] TX_DISABLE_LANE3 = 16'h0000;
+ parameter integer TX_FABRIC_WIDTH0 = 6466;
+ parameter integer TX_FABRIC_WIDTH1 = 6466;
+ parameter integer TX_FABRIC_WIDTH2 = 6466;
+ parameter integer TX_FABRIC_WIDTH3 = 6466;
+ parameter [15:0] TX_P0P0S_CTRL = 16'h060C;
+ parameter [15:0] TX_P1P2_CTRL = 16'h0C39;
+ parameter [15:0] TX_PREEMPH_LANE0 = 16'h00A1;
+ parameter [15:0] TX_PREEMPH_LANE1 = 16'h00A1;
+ parameter [15:0] TX_PREEMPH_LANE2 = 16'h00A1;
+ parameter [15:0] TX_PREEMPH_LANE3 = 16'h00A1;
+ parameter [15:0] TX_PWR_RATE_OVRD_LANE0 = 16'h0060;
+ parameter [15:0] TX_PWR_RATE_OVRD_LANE1 = 16'h0060;
+ parameter [15:0] TX_PWR_RATE_OVRD_LANE2 = 16'h0060;
+ parameter [15:0] TX_PWR_RATE_OVRD_LANE3 = 16'h0060;
+ output DRDY;
+ output GTHINITDONE;
+ output MGMTPCSRDACK;
+ output RXCTRLACK0;
+ output RXCTRLACK1;
+ output RXCTRLACK2;
+ output RXCTRLACK3;
+ output RXDATATAP0;
+ output RXDATATAP1;
+ output RXDATATAP2;
+ output RXDATATAP3;
+ output RXPCSCLKSMPL0;
+ output RXPCSCLKSMPL1;
+ output RXPCSCLKSMPL2;
+ output RXPCSCLKSMPL3;
+ output RXUSERCLKOUT0;
+ output RXUSERCLKOUT1;
+ output RXUSERCLKOUT2;
+ output RXUSERCLKOUT3;
+ output TSTPATH;
+ output TSTREFCLKFAB;
+ output TSTREFCLKOUT;
+ output TXCTRLACK0;
+ output TXCTRLACK1;
+ output TXCTRLACK2;
+ output TXCTRLACK3;
+ output TXDATATAP10;
+ output TXDATATAP11;
+ output TXDATATAP12;
+ output TXDATATAP13;
+ output TXDATATAP20;
+ output TXDATATAP21;
+ output TXDATATAP22;
+ output TXDATATAP23;
+ output TXN0;
+ output TXN1;
+ output TXN2;
+ output TXN3;
+ output TXP0;
+ output TXP1;
+ output TXP2;
+ output TXP3;
+ output TXPCSCLKSMPL0;
+ output TXPCSCLKSMPL1;
+ output TXPCSCLKSMPL2;
+ output TXPCSCLKSMPL3;
+ output TXUSERCLKOUT0;
+ output TXUSERCLKOUT1;
+ output TXUSERCLKOUT2;
+ output TXUSERCLKOUT3;
+ output [15:0] DRPDO;
+ output [15:0] MGMTPCSRDDATA;
+ output [63:0] RXDATA0;
+ output [63:0] RXDATA1;
+ output [63:0] RXDATA2;
+ output [63:0] RXDATA3;
+ output [7:0] RXCODEERR0;
+ output [7:0] RXCODEERR1;
+ output [7:0] RXCODEERR2;
+ output [7:0] RXCODEERR3;
+ output [7:0] RXCTRL0;
+ output [7:0] RXCTRL1;
+ output [7:0] RXCTRL2;
+ output [7:0] RXCTRL3;
+ output [7:0] RXDISPERR0;
+ output [7:0] RXDISPERR1;
+ output [7:0] RXDISPERR2;
+ output [7:0] RXDISPERR3;
+ output [7:0] RXVALID0;
+ output [7:0] RXVALID1;
+ output [7:0] RXVALID2;
+ output [7:0] RXVALID3;
+ input DCLK;
+ input DEN;
+ input DFETRAINCTRL0;
+ input DFETRAINCTRL1;
+ input DFETRAINCTRL2;
+ input DFETRAINCTRL3;
+ input DISABLEDRP;
+ input DWE;
+ input GTHINIT;
+ input GTHRESET;
+ input GTHX2LANE01;
+ input GTHX2LANE23;
+ input GTHX4LANE;
+ input MGMTPCSREGRD;
+ input MGMTPCSREGWR;
+ input POWERDOWN0;
+ input POWERDOWN1;
+ input POWERDOWN2;
+ input POWERDOWN3;
+ input REFCLK;
+ input RXBUFRESET0;
+ input RXBUFRESET1;
+ input RXBUFRESET2;
+ input RXBUFRESET3;
+ input RXENCOMMADET0;
+ input RXENCOMMADET1;
+ input RXENCOMMADET2;
+ input RXENCOMMADET3;
+ input RXN0;
+ input RXN1;
+ input RXN2;
+ input RXN3;
+ input RXP0;
+ input RXP1;
+ input RXP2;
+ input RXP3;
+ input RXPOLARITY0;
+ input RXPOLARITY1;
+ input RXPOLARITY2;
+ input RXPOLARITY3;
+ input RXSLIP0;
+ input RXSLIP1;
+ input RXSLIP2;
+ input RXSLIP3;
+ input RXUSERCLKIN0;
+ input RXUSERCLKIN1;
+ input RXUSERCLKIN2;
+ input RXUSERCLKIN3;
+ input TXBUFRESET0;
+ input TXBUFRESET1;
+ input TXBUFRESET2;
+ input TXBUFRESET3;
+ input TXDEEMPH0;
+ input TXDEEMPH1;
+ input TXDEEMPH2;
+ input TXDEEMPH3;
+ input TXUSERCLKIN0;
+ input TXUSERCLKIN1;
+ input TXUSERCLKIN2;
+ input TXUSERCLKIN3;
+ input [15:0] DADDR;
+ input [15:0] DI;
+ input [15:0] MGMTPCSREGADDR;
+ input [15:0] MGMTPCSWRDATA;
+ input [1:0] RXPOWERDOWN0;
+ input [1:0] RXPOWERDOWN1;
+ input [1:0] RXPOWERDOWN2;
+ input [1:0] RXPOWERDOWN3;
+ input [1:0] RXRATE0;
+ input [1:0] RXRATE1;
+ input [1:0] RXRATE2;
+ input [1:0] RXRATE3;
+ input [1:0] TXPOWERDOWN0;
+ input [1:0] TXPOWERDOWN1;
+ input [1:0] TXPOWERDOWN2;
+ input [1:0] TXPOWERDOWN3;
+ input [1:0] TXRATE0;
+ input [1:0] TXRATE1;
+ input [1:0] TXRATE2;
+ input [1:0] TXRATE3;
+ input [2:0] PLLREFCLKSEL;
+ input [2:0] SAMPLERATE0;
+ input [2:0] SAMPLERATE1;
+ input [2:0] SAMPLERATE2;
+ input [2:0] SAMPLERATE3;
+ input [2:0] TXMARGIN0;
+ input [2:0] TXMARGIN1;
+ input [2:0] TXMARGIN2;
+ input [2:0] TXMARGIN3;
+ input [3:0] MGMTPCSLANESEL;
+ input [4:0] MGMTPCSMMDADDR;
+ input [5:0] PLLPCSCLKDIV;
+ input [63:0] TXDATA0;
+ input [63:0] TXDATA1;
+ input [63:0] TXDATA2;
+ input [63:0] TXDATA3;
+ input [7:0] TXCTRL0;
+ input [7:0] TXCTRL1;
+ input [7:0] TXCTRL2;
+ input [7:0] TXCTRL3;
+ input [7:0] TXDATAMSB0;
+ input [7:0] TXDATAMSB1;
+ input [7:0] TXDATAMSB2;
+ input [7:0] TXDATAMSB3;
+endmodule
+
+module GTXE1 (...);
+ parameter AC_CAP_DIS = "TRUE";
+ parameter integer ALIGN_COMMA_WORD = 1;
+ parameter [1:0] BGTEST_CFG = 2'b00;
+ parameter [16:0] BIAS_CFG = 17'h00000;
+ parameter [4:0] CDR_PH_ADJ_TIME = 5'b10100;
+ parameter integer CHAN_BOND_1_MAX_SKEW = 7;
+ parameter integer CHAN_BOND_2_MAX_SKEW = 1;
+ parameter CHAN_BOND_KEEP_ALIGN = "FALSE";
+ parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0001001010;
+ parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0001001010;
+ parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0110111100;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0110111100;
+ parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100111100;
+ parameter [4:0] CHAN_BOND_SEQ_2_CFG = 5'b00000;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111;
+ parameter CHAN_BOND_SEQ_2_USE = "FALSE";
+ parameter integer CHAN_BOND_SEQ_LEN = 1;
+ parameter CLK_CORRECT_USE = "TRUE";
+ parameter integer CLK_COR_ADJ_LEN = 1;
+ parameter integer CLK_COR_DET_LEN = 1;
+ parameter CLK_COR_INSERT_IDLE_FLAG = "FALSE";
+ parameter CLK_COR_KEEP_IDLE = "FALSE";
+ parameter integer CLK_COR_MAX_LAT = 20;
+ parameter integer CLK_COR_MIN_LAT = 18;
+ parameter CLK_COR_PRECEDENCE = "TRUE";
+ parameter integer CLK_COR_REPEAT_WAIT = 0;
+ parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111;
+ parameter CLK_COR_SEQ_2_USE = "FALSE";
+ parameter [1:0] CM_TRIM = 2'b01;
+ parameter [9:0] COMMA_10B_ENABLE = 10'b1111111111;
+ parameter COMMA_DOUBLE = "FALSE";
+ parameter [3:0] COM_BURST_VAL = 4'b1111;
+ parameter DEC_MCOMMA_DETECT = "TRUE";
+ parameter DEC_PCOMMA_DETECT = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY = "TRUE";
+ parameter [4:0] DFE_CAL_TIME = 5'b01100;
+ parameter [7:0] DFE_CFG = 8'b00011011;
+ parameter [2:0] GEARBOX_ENDEC = 3'b000;
+ parameter GEN_RXUSRCLK = "TRUE";
+ parameter GEN_TXUSRCLK = "TRUE";
+ parameter GTX_CFG_PWRUP = "TRUE";
+ parameter [9:0] MCOMMA_10B_VALUE = 10'b1010000011;
+ parameter MCOMMA_DETECT = "TRUE";
+ parameter [2:0] OOBDETECT_THRESHOLD = 3'b011;
+ parameter PCI_EXPRESS_MODE = "FALSE";
+ parameter [9:0] PCOMMA_10B_VALUE = 10'b0101111100;
+ parameter PCOMMA_DETECT = "TRUE";
+ parameter PMA_CAS_CLK_EN = "FALSE";
+ parameter [26:0] PMA_CDR_SCAN = 27'h640404C;
+ parameter [75:0] PMA_CFG = 76'h0040000040000000003;
+ parameter [6:0] PMA_RXSYNC_CFG = 7'h00;
+ parameter [24:0] PMA_RX_CFG = 25'h05CE048;
+ parameter [19:0] PMA_TX_CFG = 20'h00082;
+ parameter [9:0] POWER_SAVE = 10'b0000110100;
+ parameter RCV_TERM_GND = "FALSE";
+ parameter RCV_TERM_VTTRX = "TRUE";
+ parameter RXGEARBOX_USE = "FALSE";
+ parameter [23:0] RXPLL_COM_CFG = 24'h21680A;
+ parameter [7:0] RXPLL_CP_CFG = 8'h00;
+ parameter integer RXPLL_DIVSEL45_FB = 5;
+ parameter integer RXPLL_DIVSEL_FB = 2;
+ parameter integer RXPLL_DIVSEL_OUT = 1;
+ parameter integer RXPLL_DIVSEL_REF = 1;
+ parameter [2:0] RXPLL_LKDET_CFG = 3'b111;
+ parameter [0:0] RXPRBSERR_LOOPBACK = 1'b0;
+ parameter RXRECCLK_CTRL = "RXRECCLKPCS";
+ parameter [9:0] RXRECCLK_DLY = 10'b0000000000;
+ parameter [15:0] RXUSRCLK_DLY = 16'h0000;
+ parameter RX_BUFFER_USE = "TRUE";
+ parameter integer RX_CLK25_DIVIDER = 6;
+ parameter integer RX_DATA_WIDTH = 20;
+ parameter RX_DECODE_SEQ_MATCH = "TRUE";
+ parameter [3:0] RX_DLYALIGN_CTRINC = 4'b0100;
+ parameter [4:0] RX_DLYALIGN_EDGESET = 5'b00110;
+ parameter [3:0] RX_DLYALIGN_LPFINC = 4'b0111;
+ parameter [2:0] RX_DLYALIGN_MONSEL = 3'b000;
+ parameter [7:0] RX_DLYALIGN_OVRDSETTING = 8'b00000000;
+ parameter RX_EN_IDLE_HOLD_CDR = "FALSE";
+ parameter RX_EN_IDLE_HOLD_DFE = "TRUE";
+ parameter RX_EN_IDLE_RESET_BUF = "TRUE";
+ parameter RX_EN_IDLE_RESET_FR = "TRUE";
+ parameter RX_EN_IDLE_RESET_PH = "TRUE";
+ parameter RX_EN_MODE_RESET_BUF = "TRUE";
+ parameter RX_EN_RATE_RESET_BUF = "TRUE";
+ parameter RX_EN_REALIGN_RESET_BUF = "FALSE";
+ parameter RX_EN_REALIGN_RESET_BUF2 = "FALSE";
+ parameter [7:0] RX_EYE_OFFSET = 8'h4C;
+ parameter [1:0] RX_EYE_SCANMODE = 2'b00;
+ parameter RX_FIFO_ADDR_MODE = "FULL";
+ parameter [3:0] RX_IDLE_HI_CNT = 4'b1000;
+ parameter [3:0] RX_IDLE_LO_CNT = 4'b0000;
+ parameter RX_LOSS_OF_SYNC_FSM = "FALSE";
+ parameter integer RX_LOS_INVALID_INCR = 1;
+ parameter integer RX_LOS_THRESHOLD = 4;
+ parameter RX_OVERSAMPLE_MODE = "FALSE";
+ parameter integer RX_SLIDE_AUTO_WAIT = 5;
+ parameter RX_SLIDE_MODE = "OFF";
+ parameter RX_XCLK_SEL = "RXREC";
+ parameter integer SAS_MAX_COMSAS = 52;
+ parameter integer SAS_MIN_COMSAS = 40;
+ parameter [2:0] SATA_BURST_VAL = 3'b100;
+ parameter [2:0] SATA_IDLE_VAL = 3'b100;
+ parameter integer SATA_MAX_BURST = 7;
+ parameter integer SATA_MAX_INIT = 22;
+ parameter integer SATA_MAX_WAKE = 7;
+ parameter integer SATA_MIN_BURST = 4;
+ parameter integer SATA_MIN_INIT = 12;
+ parameter integer SATA_MIN_WAKE = 4;
+ parameter SHOW_REALIGN_COMMA = "TRUE";
+ parameter integer SIM_GTXRESET_SPEEDUP = 1;
+ parameter SIM_RECEIVER_DETECT_PASS = "TRUE";
+ parameter [2:0] SIM_RXREFCLK_SOURCE = 3'b000;
+ parameter [2:0] SIM_TXREFCLK_SOURCE = 3'b000;
+ parameter SIM_TX_ELEC_IDLE_LEVEL = "X";
+ parameter SIM_VERSION = "2.0";
+ parameter [4:0] TERMINATION_CTRL = 5'b10100;
+ parameter TERMINATION_OVRD = "FALSE";
+ parameter [11:0] TRANS_TIME_FROM_P2 = 12'h03C;
+ parameter [7:0] TRANS_TIME_NON_P2 = 8'h19;
+ parameter [7:0] TRANS_TIME_RATE = 8'h0E;
+ parameter [9:0] TRANS_TIME_TO_P2 = 10'h064;
+ parameter [31:0] TST_ATTR = 32'h00000000;
+ parameter TXDRIVE_LOOPBACK_HIZ = "FALSE";
+ parameter TXDRIVE_LOOPBACK_PD = "FALSE";
+ parameter TXGEARBOX_USE = "FALSE";
+ parameter TXOUTCLK_CTRL = "TXOUTCLKPCS";
+ parameter [9:0] TXOUTCLK_DLY = 10'b0000000000;
+ parameter [23:0] TXPLL_COM_CFG = 24'h21680A;
+ parameter [7:0] TXPLL_CP_CFG = 8'h00;
+ parameter integer TXPLL_DIVSEL45_FB = 5;
+ parameter integer TXPLL_DIVSEL_FB = 2;
+ parameter integer TXPLL_DIVSEL_OUT = 1;
+ parameter integer TXPLL_DIVSEL_REF = 1;
+ parameter [2:0] TXPLL_LKDET_CFG = 3'b111;
+ parameter [1:0] TXPLL_SATA = 2'b00;
+ parameter TX_BUFFER_USE = "TRUE";
+ parameter [5:0] TX_BYTECLK_CFG = 6'h00;
+ parameter integer TX_CLK25_DIVIDER = 6;
+ parameter TX_CLK_SOURCE = "RXPLL";
+ parameter integer TX_DATA_WIDTH = 20;
+ parameter [4:0] TX_DEEMPH_0 = 5'b11010;
+ parameter [4:0] TX_DEEMPH_1 = 5'b10000;
+ parameter [13:0] TX_DETECT_RX_CFG = 14'h1832;
+ parameter [3:0] TX_DLYALIGN_CTRINC = 4'b0100;
+ parameter [3:0] TX_DLYALIGN_LPFINC = 4'b0110;
+ parameter [2:0] TX_DLYALIGN_MONSEL = 3'b000;
+ parameter [7:0] TX_DLYALIGN_OVRDSETTING = 8'b10000000;
+ parameter TX_DRIVE_MODE = "DIRECT";
+ parameter TX_EN_RATE_RESET_BUF = "TRUE";
+ parameter [2:0] TX_IDLE_ASSERT_DELAY = 3'b100;
+ parameter [2:0] TX_IDLE_DEASSERT_DELAY = 3'b010;
+ parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110;
+ parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001;
+ parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101;
+ parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110;
+ parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100;
+ parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000;
+ parameter TX_OVERSAMPLE_MODE = "FALSE";
+ parameter [0:0] TX_PMADATA_OPT = 1'b0;
+ parameter [1:0] TX_TDCC_CFG = 2'b11;
+ parameter [5:0] TX_USRCLK_CFG = 6'h00;
+ parameter TX_XCLK_SEL = "TXUSR";
+ output COMFINISH;
+ output COMINITDET;
+ output COMSASDET;
+ output COMWAKEDET;
+ output DRDY;
+ output PHYSTATUS;
+ output RXBYTEISALIGNED;
+ output RXBYTEREALIGN;
+ output RXCHANBONDSEQ;
+ output RXCHANISALIGNED;
+ output RXCHANREALIGN;
+ output RXCOMMADET;
+ output RXDATAVALID;
+ output RXELECIDLE;
+ output RXHEADERVALID;
+ output RXOVERSAMPLEERR;
+ output RXPLLLKDET;
+ output RXPRBSERR;
+ output RXRATEDONE;
+ output RXRECCLK;
+ output RXRECCLKPCS;
+ output RXRESETDONE;
+ output RXSTARTOFSEQ;
+ output RXVALID;
+ output TXGEARBOXREADY;
+ output TXN;
+ output TXOUTCLK;
+ output TXOUTCLKPCS;
+ output TXP;
+ output TXPLLLKDET;
+ output TXRATEDONE;
+ output TXRESETDONE;
+ output [15:0] DRPDO;
+ output [1:0] MGTREFCLKFAB;
+ output [1:0] RXLOSSOFSYNC;
+ output [1:0] TXBUFSTATUS;
+ output [2:0] DFESENSCAL;
+ output [2:0] RXBUFSTATUS;
+ output [2:0] RXCLKCORCNT;
+ output [2:0] RXHEADER;
+ output [2:0] RXSTATUS;
+ output [31:0] RXDATA;
+ output [3:0] DFETAP3MONITOR;
+ output [3:0] DFETAP4MONITOR;
+ output [3:0] RXCHARISCOMMA;
+ output [3:0] RXCHARISK;
+ output [3:0] RXCHBONDO;
+ output [3:0] RXDISPERR;
+ output [3:0] RXNOTINTABLE;
+ output [3:0] RXRUNDISP;
+ output [3:0] TXKERR;
+ output [3:0] TXRUNDISP;
+ output [4:0] DFEEYEDACMON;
+ output [4:0] DFETAP1MONITOR;
+ output [4:0] DFETAP2MONITOR;
+ output [5:0] DFECLKDLYADJMON;
+ output [7:0] RXDLYALIGNMONITOR;
+ output [7:0] TXDLYALIGNMONITOR;
+ output [9:0] TSTOUT;
+ input DCLK;
+ input DEN;
+ input DFEDLYOVRD;
+ input DFETAPOVRD;
+ input DWE;
+ input GATERXELECIDLE;
+ input GREFCLKRX;
+ input GREFCLKTX;
+ input GTXRXRESET;
+ input GTXTXRESET;
+ input IGNORESIGDET;
+ input PERFCLKRX;
+ input PERFCLKTX;
+ input PLLRXRESET;
+ input PLLTXRESET;
+ input PRBSCNTRESET;
+ input RXBUFRESET;
+ input RXCDRRESET;
+ input RXCHBONDMASTER;
+ input RXCHBONDSLAVE;
+ input RXCOMMADETUSE;
+ input RXDEC8B10BUSE;
+ input RXDLYALIGNDISABLE;
+ input RXDLYALIGNMONENB;
+ input RXDLYALIGNOVERRIDE;
+ input RXDLYALIGNRESET;
+ input RXDLYALIGNSWPPRECURB;
+ input RXDLYALIGNUPDSW;
+ input RXENCHANSYNC;
+ input RXENMCOMMAALIGN;
+ input RXENPCOMMAALIGN;
+ input RXENPMAPHASEALIGN;
+ input RXENSAMPLEALIGN;
+ input RXGEARBOXSLIP;
+ input RXN;
+ input RXP;
+ input RXPLLLKDETEN;
+ input RXPLLPOWERDOWN;
+ input RXPMASETPHASE;
+ input RXPOLARITY;
+ input RXRESET;
+ input RXSLIDE;
+ input RXUSRCLK2;
+ input RXUSRCLK;
+ input TSTCLK0;
+ input TSTCLK1;
+ input TXCOMINIT;
+ input TXCOMSAS;
+ input TXCOMWAKE;
+ input TXDEEMPH;
+ input TXDETECTRX;
+ input TXDLYALIGNDISABLE;
+ input TXDLYALIGNMONENB;
+ input TXDLYALIGNOVERRIDE;
+ input TXDLYALIGNRESET;
+ input TXDLYALIGNUPDSW;
+ input TXELECIDLE;
+ input TXENC8B10BUSE;
+ input TXENPMAPHASEALIGN;
+ input TXINHIBIT;
+ input TXPDOWNASYNCH;
+ input TXPLLLKDETEN;
+ input TXPLLPOWERDOWN;
+ input TXPMASETPHASE;
+ input TXPOLARITY;
+ input TXPRBSFORCEERR;
+ input TXRESET;
+ input TXSTARTSEQ;
+ input TXSWING;
+ input TXUSRCLK2;
+ input TXUSRCLK;
+ input USRCODEERR;
+ input [12:0] GTXTEST;
+ input [15:0] DI;
+ input [19:0] TSTIN;
+ input [1:0] MGTREFCLKRX;
+ input [1:0] MGTREFCLKTX;
+ input [1:0] NORTHREFCLKRX;
+ input [1:0] NORTHREFCLKTX;
+ input [1:0] RXPOWERDOWN;
+ input [1:0] RXRATE;
+ input [1:0] SOUTHREFCLKRX;
+ input [1:0] SOUTHREFCLKTX;
+ input [1:0] TXPOWERDOWN;
+ input [1:0] TXRATE;
+ input [2:0] LOOPBACK;
+ input [2:0] RXCHBONDLEVEL;
+ input [2:0] RXENPRBSTST;
+ input [2:0] RXPLLREFSELDY;
+ input [2:0] TXBUFDIFFCTRL;
+ input [2:0] TXENPRBSTST;
+ input [2:0] TXHEADER;
+ input [2:0] TXMARGIN;
+ input [2:0] TXPLLREFSELDY;
+ input [31:0] TXDATA;
+ input [3:0] DFETAP3;
+ input [3:0] DFETAP4;
+ input [3:0] RXCHBONDI;
+ input [3:0] TXBYPASS8B10B;
+ input [3:0] TXCHARDISPMODE;
+ input [3:0] TXCHARDISPVAL;
+ input [3:0] TXCHARISK;
+ input [3:0] TXDIFFCTRL;
+ input [3:0] TXPREEMPHASIS;
+ input [4:0] DFETAP1;
+ input [4:0] DFETAP2;
+ input [4:0] TXPOSTEMPHASIS;
+ input [5:0] DFECLKDLYADJ;
+ input [6:0] TXSEQUENCE;
+ input [7:0] DADDR;
+ input [9:0] RXEQMIX;
+endmodule
+
+module IBUFDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IFD_DELAY_VALUE = "AUTO";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFDS_DIFF_OUT (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFDS_GTHE1 (...);
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFG (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+endmodule
+
+module IBUFGDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter DIFF_TERM = "FALSE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFGDS_DIFF_OUT (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+(* keep *)
+module IDELAYCTRL (...);
+ parameter SIM_DEVICE = "7SERIES";
+ output RDY;
+ (* clkbuf_sink *)
+ input REFCLK;
+ input RST;
+endmodule
+
+module IOBUF (...);
+ parameter integer DRIVE = 12;
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ input I;
+ input T;
+endmodule
+
+module IOBUFDS (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ inout IOB;
+ input I;
+ input T;
+endmodule
+
+module IODELAYE1 (...);
+ parameter CINVCTRL_SEL = "FALSE";
+ parameter DELAY_SRC = "I";
+ parameter HIGH_PERFORMANCE_MODE = "FALSE";
+ parameter IDELAY_TYPE = "DEFAULT";
+ parameter integer IDELAY_VALUE = 0;
+ parameter ODELAY_TYPE = "FIXED";
+ parameter integer ODELAY_VALUE = 0;
+ parameter real REFCLK_FREQUENCY = 200.0;
+ parameter SIGNAL_PATTERN = "DATA";
+ output [4:0] CNTVALUEOUT;
+ output DATAOUT;
+ (* clkbuf_sink *)
+ input C;
+ input CE;
+ input CINVCTRL;
+ input CLKIN;
+ input [4:0] CNTVALUEIN;
+ input DATAIN;
+ input IDATAIN;
+ input INC;
+ input ODATAIN;
+ input RST;
+ input T;
+endmodule
+
+module ISERDESE1 (...);
+ parameter DATA_RATE = "DDR";
+ parameter integer DATA_WIDTH = 4;
+ parameter DYN_CLKDIV_INV_EN = "FALSE";
+ parameter DYN_CLK_INV_EN = "FALSE";
+ parameter [0:0] INIT_Q1 = 1'b0;
+ parameter [0:0] INIT_Q2 = 1'b0;
+ parameter [0:0] INIT_Q3 = 1'b0;
+ parameter [0:0] INIT_Q4 = 1'b0;
+ parameter INTERFACE_TYPE = "MEMORY";
+ parameter integer NUM_CE = 2;
+ parameter IOBDELAY = "NONE";
+ parameter OFB_USED = "FALSE";
+ parameter SERDES_MODE = "MASTER";
+ parameter [0:0] SRVAL_Q1 = 1'b0;
+ parameter [0:0] SRVAL_Q2 = 1'b0;
+ parameter [0:0] SRVAL_Q3 = 1'b0;
+ parameter [0:0] SRVAL_Q4 = 1'b0;
+ output O;
+ output Q1;
+ output Q2;
+ output Q3;
+ output Q4;
+ output Q5;
+ output Q6;
+ output SHIFTOUT1;
+ output SHIFTOUT2;
+ input BITSLIP;
+ input CE1;
+ input CE2;
+ (* clkbuf_sink *)
+ input CLK;
+ (* clkbuf_sink *)
+ input CLKB;
+ (* clkbuf_sink *)
+ input CLKDIV;
+ input D;
+ input DDLY;
+ input DYNCLKDIVSEL;
+ input DYNCLKSEL;
+ (* clkbuf_sink *)
+ input OCLK;
+ input OFB;
+ input RST;
+ input SHIFTIN1;
+ input SHIFTIN2;
+endmodule
+
+module KEEPER (...);
+ inout O;
+endmodule
+
+module OBUFDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input I;
+endmodule
+
+module OBUFT (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter integer DRIVE = 12;
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ input I;
+ input T;
+endmodule
+
+module OBUFTDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input I;
+ input T;
+endmodule
+
+module OSERDESE1 (...);
+ parameter DATA_RATE_OQ = "DDR";
+ parameter DATA_RATE_TQ = "DDR";
+ parameter integer DATA_WIDTH = 4;
+ parameter integer DDR3_DATA = 1;
+ parameter [0:0] INIT_OQ = 1'b0;
+ parameter [0:0] INIT_TQ = 1'b0;
+ parameter INTERFACE_TYPE = "DEFAULT";
+ parameter integer ODELAY_USED = 0;
+ parameter SERDES_MODE = "MASTER";
+ parameter [0:0] SRVAL_OQ = 1'b0;
+ parameter [0:0] SRVAL_TQ = 1'b0;
+ parameter integer TRISTATE_WIDTH = 4;
+ output OCBEXTEND;
+ output OFB;
+ output OQ;
+ output SHIFTOUT1;
+ output SHIFTOUT2;
+ output TFB;
+ output TQ;
+ (* clkbuf_sink *)
+ input CLK;
+ (* clkbuf_sink *)
+ input CLKDIV;
+ input CLKPERF;
+ input CLKPERFDELAY;
+ input D1;
+ input D2;
+ input D3;
+ input D4;
+ input D5;
+ input D6;
+ input OCE;
+ input ODV;
+ input RST;
+ input SHIFTIN1;
+ input SHIFTIN2;
+ input T1;
+ input T2;
+ input T3;
+ input T4;
+ input TCE;
+ input WC;
+endmodule
+
+module PULLDOWN (...);
+ output O;
+endmodule
+
+module PULLUP (...);
+ output O;
+endmodule
+
+module TEMAC_SINGLE (...);
+ parameter EMAC_1000BASEX_ENABLE = "FALSE";
+ parameter EMAC_ADDRFILTER_ENABLE = "FALSE";
+ parameter EMAC_BYTEPHY = "FALSE";
+ parameter EMAC_CTRLLENCHECK_DISABLE = "FALSE";
+ parameter [0:7] EMAC_DCRBASEADDR = 8'h00;
+ parameter EMAC_GTLOOPBACK = "FALSE";
+ parameter EMAC_HOST_ENABLE = "FALSE";
+ parameter [8:0] EMAC_LINKTIMERVAL = 9'h000;
+ parameter EMAC_LTCHECK_DISABLE = "FALSE";
+ parameter EMAC_MDIO_ENABLE = "FALSE";
+ parameter EMAC_MDIO_IGNORE_PHYADZERO = "FALSE";
+ parameter [47:0] EMAC_PAUSEADDR = 48'h000000000000;
+ parameter EMAC_PHYINITAUTONEG_ENABLE = "FALSE";
+ parameter EMAC_PHYISOLATE = "FALSE";
+ parameter EMAC_PHYLOOPBACKMSB = "FALSE";
+ parameter EMAC_PHYPOWERDOWN = "FALSE";
+ parameter EMAC_PHYRESET = "FALSE";
+ parameter EMAC_RGMII_ENABLE = "FALSE";
+ parameter EMAC_RX16BITCLIENT_ENABLE = "FALSE";
+ parameter EMAC_RXFLOWCTRL_ENABLE = "FALSE";
+ parameter EMAC_RXHALFDUPLEX = "FALSE";
+ parameter EMAC_RXINBANDFCS_ENABLE = "FALSE";
+ parameter EMAC_RXJUMBOFRAME_ENABLE = "FALSE";
+ parameter EMAC_RXRESET = "FALSE";
+ parameter EMAC_RXVLAN_ENABLE = "FALSE";
+ parameter EMAC_RX_ENABLE = "TRUE";
+ parameter EMAC_SGMII_ENABLE = "FALSE";
+ parameter EMAC_SPEED_LSB = "FALSE";
+ parameter EMAC_SPEED_MSB = "FALSE";
+ parameter EMAC_TX16BITCLIENT_ENABLE = "FALSE";
+ parameter EMAC_TXFLOWCTRL_ENABLE = "FALSE";
+ parameter EMAC_TXHALFDUPLEX = "FALSE";
+ parameter EMAC_TXIFGADJUST_ENABLE = "FALSE";
+ parameter EMAC_TXINBANDFCS_ENABLE = "FALSE";
+ parameter EMAC_TXJUMBOFRAME_ENABLE = "FALSE";
+ parameter EMAC_TXRESET = "FALSE";
+ parameter EMAC_TXVLAN_ENABLE = "FALSE";
+ parameter EMAC_TX_ENABLE = "TRUE";
+ parameter [47:0] EMAC_UNICASTADDR = 48'h000000000000;
+ parameter EMAC_UNIDIRECTION_ENABLE = "FALSE";
+ parameter EMAC_USECLKEN = "FALSE";
+ parameter SIM_VERSION = "1.0";
+ output DCRHOSTDONEIR;
+ output EMACCLIENTANINTERRUPT;
+ output EMACCLIENTRXBADFRAME;
+ output EMACCLIENTRXCLIENTCLKOUT;
+ output EMACCLIENTRXDVLD;
+ output EMACCLIENTRXDVLDMSW;
+ output EMACCLIENTRXFRAMEDROP;
+ output EMACCLIENTRXGOODFRAME;
+ output EMACCLIENTRXSTATSBYTEVLD;
+ output EMACCLIENTRXSTATSVLD;
+ output EMACCLIENTTXACK;
+ output EMACCLIENTTXCLIENTCLKOUT;
+ output EMACCLIENTTXCOLLISION;
+ output EMACCLIENTTXRETRANSMIT;
+ output EMACCLIENTTXSTATS;
+ output EMACCLIENTTXSTATSBYTEVLD;
+ output EMACCLIENTTXSTATSVLD;
+ output EMACDCRACK;
+ output EMACPHYENCOMMAALIGN;
+ output EMACPHYLOOPBACKMSB;
+ output EMACPHYMCLKOUT;
+ output EMACPHYMDOUT;
+ output EMACPHYMDTRI;
+ output EMACPHYMGTRXRESET;
+ output EMACPHYMGTTXRESET;
+ output EMACPHYPOWERDOWN;
+ output EMACPHYSYNCACQSTATUS;
+ output EMACPHYTXCHARDISPMODE;
+ output EMACPHYTXCHARDISPVAL;
+ output EMACPHYTXCHARISK;
+ output EMACPHYTXCLK;
+ output EMACPHYTXEN;
+ output EMACPHYTXER;
+ output EMACPHYTXGMIIMIICLKOUT;
+ output EMACSPEEDIS10100;
+ output HOSTMIIMRDY;
+ output [0:31] EMACDCRDBUS;
+ output [15:0] EMACCLIENTRXD;
+ output [31:0] HOSTRDDATA;
+ output [6:0] EMACCLIENTRXSTATS;
+ output [7:0] EMACPHYTXD;
+ input CLIENTEMACDCMLOCKED;
+ input CLIENTEMACPAUSEREQ;
+ input CLIENTEMACRXCLIENTCLKIN;
+ input CLIENTEMACTXCLIENTCLKIN;
+ input CLIENTEMACTXDVLD;
+ input CLIENTEMACTXDVLDMSW;
+ input CLIENTEMACTXFIRSTBYTE;
+ input CLIENTEMACTXUNDERRUN;
+ input DCREMACCLK;
+ input DCREMACENABLE;
+ input DCREMACREAD;
+ input DCREMACWRITE;
+ input HOSTCLK;
+ input HOSTMIIMSEL;
+ input HOSTREQ;
+ input PHYEMACCOL;
+ input PHYEMACCRS;
+ input PHYEMACGTXCLK;
+ input PHYEMACMCLKIN;
+ input PHYEMACMDIN;
+ input PHYEMACMIITXCLK;
+ input PHYEMACRXCHARISCOMMA;
+ input PHYEMACRXCHARISK;
+ input PHYEMACRXCLK;
+ input PHYEMACRXDISPERR;
+ input PHYEMACRXDV;
+ input PHYEMACRXER;
+ input PHYEMACRXNOTINTABLE;
+ input PHYEMACRXRUNDISP;
+ input PHYEMACSIGNALDET;
+ input PHYEMACTXBUFERR;
+ input PHYEMACTXGMIIMIICLKIN;
+ input RESET;
+ input [0:31] DCREMACDBUS;
+ input [0:9] DCREMACABUS;
+ input [15:0] CLIENTEMACPAUSEVAL;
+ input [15:0] CLIENTEMACTXD;
+ input [1:0] HOSTOPCODE;
+ input [1:0] PHYEMACRXBUFSTATUS;
+ input [2:0] PHYEMACRXCLKCORCNT;
+ input [31:0] HOSTWRDATA;
+ input [4:0] PHYEMACPHYAD;
+ input [7:0] CLIENTEMACTXIFGDELAY;
+ input [7:0] PHYEMACRXD;
+ input [9:0] HOSTADDR;
+endmodule
+
+module FIFO18E1 (...);
+ parameter ALMOST_EMPTY_OFFSET = 13'h0080;
+ parameter ALMOST_FULL_OFFSET = 13'h0080;
+ parameter integer DATA_WIDTH = 4;
+ parameter integer DO_REG = 1;
+ parameter EN_SYN = "FALSE";
+ parameter FIFO_MODE = "FIFO18";
+ parameter FIRST_WORD_FALL_THROUGH = "FALSE";
+ parameter INIT = 36'h0;
+ parameter SIM_DEVICE = "VIRTEX6";
+ parameter SRVAL = 36'h0;
+ parameter IS_RDCLK_INVERTED = 1'b0;
+ parameter IS_RDEN_INVERTED = 1'b0;
+ parameter IS_RSTREG_INVERTED = 1'b0;
+ parameter IS_RST_INVERTED = 1'b0;
+ parameter IS_WRCLK_INVERTED = 1'b0;
+ parameter IS_WREN_INVERTED = 1'b0;
+ output ALMOSTEMPTY;
+ output ALMOSTFULL;
+ output [31:0] DO;
+ output [3:0] DOP;
+ output EMPTY;
+ output FULL;
+ output [11:0] RDCOUNT;
+ output RDERR;
+ output [11:0] WRCOUNT;
+ output WRERR;
+ input [31:0] DI;
+ input [3:0] DIP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_RDCLK_INVERTED" *)
+ input RDCLK;
+ (* invertible_pin = "IS_RDEN_INVERTED" *)
+ input RDEN;
+ input REGCE;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RSTREG_INVERTED" *)
+ input RSTREG;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WRCLK_INVERTED" *)
+ input WRCLK;
+ (* invertible_pin = "IS_WREN_INVERTED" *)
+ input WREN;
+endmodule
+
+module FIFO36E1 (...);
+ parameter ALMOST_EMPTY_OFFSET = 13'h0080;
+ parameter ALMOST_FULL_OFFSET = 13'h0080;
+ parameter integer DATA_WIDTH = 4;
+ parameter integer DO_REG = 1;
+ parameter EN_ECC_READ = "FALSE";
+ parameter EN_ECC_WRITE = "FALSE";
+ parameter EN_SYN = "FALSE";
+ parameter FIFO_MODE = "FIFO36";
+ parameter FIRST_WORD_FALL_THROUGH = "FALSE";
+ parameter INIT = 72'h0;
+ parameter SIM_DEVICE = "VIRTEX6";
+ parameter SRVAL = 72'h0;
+ parameter IS_RDCLK_INVERTED = 1'b0;
+ parameter IS_RDEN_INVERTED = 1'b0;
+ parameter IS_RSTREG_INVERTED = 1'b0;
+ parameter IS_RST_INVERTED = 1'b0;
+ parameter IS_WRCLK_INVERTED = 1'b0;
+ parameter IS_WREN_INVERTED = 1'b0;
+ output ALMOSTEMPTY;
+ output ALMOSTFULL;
+ output DBITERR;
+ output [63:0] DO;
+ output [7:0] DOP;
+ output [7:0] ECCPARITY;
+ output EMPTY;
+ output FULL;
+ output [12:0] RDCOUNT;
+ output RDERR;
+ output SBITERR;
+ output [12:0] WRCOUNT;
+ output WRERR;
+ input [63:0] DI;
+ input [7:0] DIP;
+ input INJECTDBITERR;
+ input INJECTSBITERR;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_RDCLK_INVERTED" *)
+ input RDCLK;
+ (* invertible_pin = "IS_RDEN_INVERTED" *)
+ input RDEN;
+ input REGCE;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RSTREG_INVERTED" *)
+ input RSTREG;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WRCLK_INVERTED" *)
+ input WRCLK;
+ (* invertible_pin = "IS_WREN_INVERTED" *)
+ input WREN;
+endmodule
+
+module RAM128X1S (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM256X1S (...);
+ parameter [255:0] INIT = 256'h0;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input [7:0] A;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output [1:0] DOA;
+ output [1:0] DOB;
+ output [1:0] DOC;
+ output [1:0] DOD;
+ input [4:0] ADDRA;
+ input [4:0] ADDRB;
+ input [4:0] ADDRC;
+ input [4:0] ADDRD;
+ input [1:0] DIA;
+ input [1:0] DIB;
+ input [1:0] DIC;
+ input [1:0] DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S_1 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X2S (...);
+ parameter [31:0] INIT_00 = 32'h00000000;
+ parameter [31:0] INIT_01 = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O0;
+ output O1;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D0;
+ input D1;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output DOA;
+ output DOB;
+ output DOC;
+ output DOD;
+ input [5:0] ADDRA;
+ input [5:0] ADDRB;
+ input [5:0] ADDRC;
+ input [5:0] ADDRD;
+ input DIA;
+ input DIB;
+ input DIC;
+ input DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S_1 (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X2S (...);
+ parameter [63:0] INIT_00 = 64'h0000000000000000;
+ parameter [63:0] INIT_01 = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O0;
+ output O1;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D0;
+ input D1;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module ROM128X1 (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+endmodule
+
+module ROM256X1 (...);
+ parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input A7;
+endmodule
+
+module ROM32X1 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+endmodule
+
+module ROM64X1 (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+endmodule
+
+module IDDR (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter INIT_Q1 = 1'b0;
+ parameter INIT_Q2 = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D_INVERTED = 1'b0;
+ parameter SRTYPE = "SYNC";
+ parameter MSGON = "TRUE";
+ parameter XON = "TRUE";
+ output Q1;
+ output Q2;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ input CE;
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D;
+ input R;
+ input S;
+endmodule
+
+module IDDR_2CLK (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter INIT_Q1 = 1'b0;
+ parameter INIT_Q2 = 1'b0;
+ parameter [0:0] IS_CB_INVERTED = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D_INVERTED = 1'b0;
+ parameter SRTYPE = "SYNC";
+ output Q1;
+ output Q2;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CB_INVERTED" *)
+ input CB;
+ input CE;
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D;
+ input R;
+ input S;
+endmodule
+
+module ODDR (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter INIT = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D1_INVERTED = 1'b0;
+ parameter [0:0] IS_D2_INVERTED = 1'b0;
+ parameter SRTYPE = "SYNC";
+ parameter MSGON = "TRUE";
+ parameter XON = "TRUE";
+ output Q;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ input CE;
+ (* invertible_pin = "IS_D1_INVERTED" *)
+ input D1;
+ (* invertible_pin = "IS_D2_INVERTED" *)
+ input D2;
+ input R;
+ input S;
+endmodule
+
+module CFGLUT5 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ output CDO;
+ output O5;
+ output O6;
+ input I4;
+ input I3;
+ input I2;
+ input I1;
+ input I0;
+ input CDI;
+ input CE;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+endmodule
+
diff --git a/techlibs/xilinx/xc7_brams_bb.v b/techlibs/xilinx/xc7_brams_bb.v
index a43b4b5a1..a28ba5b14 100644
--- a/techlibs/xilinx/xc7_brams_bb.v
+++ b/techlibs/xilinx/xc7_brams_bb.v
@@ -1,15 +1,25 @@
+// Max delays from https://github.com/SymbiFlow/prjxray-db/blob/f8e0364116b2983ac72a3dc8c509ea1cc79e2e3d/artix7/timings/BRAM_L.sdf#L138-L147
+
module RAMB18E1 (
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
input CLKARDCLK,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
input CLKBWRCLK,
+ (* invertible_pin = "IS_ENARDEN_INVERTED" *)
input ENARDEN,
+ (* invertible_pin = "IS_ENBWREN_INVERTED" *)
input ENBWREN,
input REGCEAREGCE,
input REGCEB,
+ (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
input RSTRAMARSTRAM,
+ (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
input RSTRAMB,
+ (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
input RSTREGARSTREG,
+ (* invertible_pin = "IS_RSTREGB_INVERTED" *)
input RSTREGB,
input [13:0] ADDRARDADDR,
@@ -21,9 +31,13 @@ module RAMB18E1 (
input [1:0] WEA,
input [3:0] WEBWE,
+ (* abc_arrival=2454 *)
output [15:0] DOADO,
+ (* abc_arrival=2454 *)
output [15:0] DOBDO,
+ (* abc_arrival=2454 *)
output [1:0] DOPADOP,
+ (* abc_arrival=2454 *)
output [1:0] DOPBDOP
);
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
@@ -126,16 +140,24 @@ endmodule
module RAMB36E1 (
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
input CLKARDCLK,
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
input CLKBWRCLK,
+ (* invertible_pin = "IS_ENARDEN_INVERTED" *)
input ENARDEN,
+ (* invertible_pin = "IS_ENBWREN_INVERTED" *)
input ENBWREN,
input REGCEAREGCE,
input REGCEB,
+ (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
input RSTRAMARSTRAM,
+ (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
input RSTRAMB,
+ (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
input RSTREGARSTREG,
+ (* invertible_pin = "IS_RSTREGB_INVERTED" *)
input RSTREGB,
input [15:0] ADDRARDADDR,
@@ -147,9 +169,13 @@ module RAMB36E1 (
input [3:0] WEA,
input [7:0] WEBWE,
+ (* abc_arrival=2454 *)
output [31:0] DOADO,
+ (* abc_arrival=2454 *)
output [31:0] DOBDO,
+ (* abc_arrival=2454 *)
output [3:0] DOPADOP,
+ (* abc_arrival=2454 *)
output [3:0] DOPBDOP
);
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
diff --git a/techlibs/xilinx/cells_xtra.v b/techlibs/xilinx/xc7_cells_xtra.v
index a6669b872..0d16f81c3 100644
--- a/techlibs/xilinx/cells_xtra.v
+++ b/techlibs/xilinx/xc7_cells_xtra.v
@@ -1,330 +1,5 @@
// Created by cells_xtra.py from Xilinx models
-(* keep *)
-module BSCANE2 (...);
- parameter DISABLE_JTAG = "FALSE";
- parameter integer JTAG_CHAIN = 1;
- output CAPTURE;
- output DRCK;
- output RESET;
- output RUNTEST;
- output SEL;
- output SHIFT;
- output TCK;
- output TDI;
- output TMS;
- output UPDATE;
- input TDO;
-endmodule
-
-module BUFGCE (...);
- parameter CE_TYPE = "SYNC";
- parameter [0:0] IS_CE_INVERTED = 1'b0;
- parameter [0:0] IS_I_INVERTED = 1'b0;
- (* clkbuf_driver *)
- output O;
- input CE;
- input I;
-endmodule
-
-module BUFGCE_1 (...);
- (* clkbuf_driver *)
- output O;
- input CE;
- input I;
-endmodule
-
-module BUFGMUX (...);
- parameter CLK_SEL_TYPE = "SYNC";
- (* clkbuf_driver *)
- output O;
- input I0;
- input I1;
- input S;
-endmodule
-
-module BUFGMUX_1 (...);
- parameter CLK_SEL_TYPE = "SYNC";
- (* clkbuf_driver *)
- output O;
- input I0;
- input I1;
- input S;
-endmodule
-
-module BUFGMUX_CTRL (...);
- (* clkbuf_driver *)
- output O;
- input I0;
- input I1;
- input S;
-endmodule
-
-module BUFH (...);
- (* clkbuf_driver *)
- output O;
- input I;
-endmodule
-
-module BUFIO (...);
- (* clkbuf_driver *)
- output O;
- input I;
-endmodule
-
-module BUFMR (...);
- (* clkbuf_driver *)
- output O;
- input I;
-endmodule
-
-module BUFMRCE (...);
- parameter CE_TYPE = "SYNC";
- parameter integer INIT_OUT = 0;
- parameter [0:0] IS_CE_INVERTED = 1'b0;
- (* clkbuf_driver *)
- output O;
- input CE;
- input I;
-endmodule
-
-module BUFR (...);
- (* clkbuf_driver *)
- output O;
- input CE;
- input CLR;
- input I;
- parameter BUFR_DIVIDE = "BYPASS";
- parameter SIM_DEVICE = "7SERIES";
-endmodule
-
-(* keep *)
-module CAPTUREE2 (...);
- parameter ONESHOT = "TRUE";
- input CAP;
- input CLK;
-endmodule
-
-module CFGLUT5 (...);
- parameter [31:0] INIT = 32'h00000000;
- parameter [0:0] IS_CLK_INVERTED = 1'b0;
- output CDO;
- output O5;
- output O6;
- input I4;
- input I3;
- input I2;
- input I1;
- input I0;
- input CDI;
- input CE;
- (* clkbuf_sink *)
- input CLK;
-endmodule
-
-(* keep *)
-module DCIRESET (...);
- output LOCKED;
- input RST;
-endmodule
-
-module DNA_PORT (...);
- parameter [56:0] SIM_DNA_VALUE = 57'h0;
- output DOUT;
- input CLK;
- input DIN;
- input READ;
- input SHIFT;
-endmodule
-
-module DSP48E1 (...);
- parameter integer ACASCREG = 1;
- parameter integer ADREG = 1;
- parameter integer ALUMODEREG = 1;
- parameter integer AREG = 1;
- parameter AUTORESET_PATDET = "NO_RESET";
- parameter A_INPUT = "DIRECT";
- parameter integer BCASCREG = 1;
- parameter integer BREG = 1;
- parameter B_INPUT = "DIRECT";
- parameter integer CARRYINREG = 1;
- parameter integer CARRYINSELREG = 1;
- parameter integer CREG = 1;
- parameter integer DREG = 1;
- parameter integer INMODEREG = 1;
- parameter integer MREG = 1;
- parameter integer OPMODEREG = 1;
- parameter integer PREG = 1;
- parameter SEL_MASK = "MASK";
- parameter SEL_PATTERN = "PATTERN";
- parameter USE_DPORT = "FALSE";
- parameter USE_MULT = "MULTIPLY";
- parameter USE_PATTERN_DETECT = "NO_PATDET";
- parameter USE_SIMD = "ONE48";
- parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
- parameter [47:0] PATTERN = 48'h000000000000;
- parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
- parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
- parameter [0:0] IS_CLK_INVERTED = 1'b0;
- parameter [4:0] IS_INMODE_INVERTED = 5'b0;
- parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
- output [29:0] ACOUT;
- output [17:0] BCOUT;
- output CARRYCASCOUT;
- output [3:0] CARRYOUT;
- output MULTSIGNOUT;
- output OVERFLOW;
- output [47:0] P;
- output PATTERNBDETECT;
- output PATTERNDETECT;
- output [47:0] PCOUT;
- output UNDERFLOW;
- input [29:0] A;
- input [29:0] ACIN;
- input [3:0] ALUMODE;
- input [17:0] B;
- input [17:0] BCIN;
- input [47:0] C;
- input CARRYCASCIN;
- input CARRYIN;
- input [2:0] CARRYINSEL;
- input CEA1;
- input CEA2;
- input CEAD;
- input CEALUMODE;
- input CEB1;
- input CEB2;
- input CEC;
- input CECARRYIN;
- input CECTRL;
- input CED;
- input CEINMODE;
- input CEM;
- input CEP;
- (* clkbuf_sink *)
- input CLK;
- input [24:0] D;
- input [4:0] INMODE;
- input MULTSIGNIN;
- input [6:0] OPMODE;
- input [47:0] PCIN;
- input RSTA;
- input RSTALLCARRYIN;
- input RSTALUMODE;
- input RSTB;
- input RSTC;
- input RSTCTRL;
- input RSTD;
- input RSTINMODE;
- input RSTM;
- input RSTP;
-endmodule
-
-module EFUSE_USR (...);
- parameter [31:0] SIM_EFUSE_VALUE = 32'h00000000;
- output [31:0] EFUSEUSR;
-endmodule
-
-module FIFO18E1 (...);
- parameter ALMOST_EMPTY_OFFSET = 13'h0080;
- parameter ALMOST_FULL_OFFSET = 13'h0080;
- parameter integer DATA_WIDTH = 4;
- parameter integer DO_REG = 1;
- parameter EN_SYN = "FALSE";
- parameter FIFO_MODE = "FIFO18";
- parameter FIRST_WORD_FALL_THROUGH = "FALSE";
- parameter INIT = 36'h0;
- parameter SIM_DEVICE = "VIRTEX6";
- parameter SRVAL = 36'h0;
- parameter IS_RDCLK_INVERTED = 1'b0;
- parameter IS_RDEN_INVERTED = 1'b0;
- parameter IS_RSTREG_INVERTED = 1'b0;
- parameter IS_RST_INVERTED = 1'b0;
- parameter IS_WRCLK_INVERTED = 1'b0;
- parameter IS_WREN_INVERTED = 1'b0;
- output ALMOSTEMPTY;
- output ALMOSTFULL;
- output [31:0] DO;
- output [3:0] DOP;
- output EMPTY;
- output FULL;
- output [11:0] RDCOUNT;
- output RDERR;
- output [11:0] WRCOUNT;
- output WRERR;
- input [31:0] DI;
- input [3:0] DIP;
- (* clkbuf_sink *)
- input RDCLK;
- input RDEN;
- input REGCE;
- input RST;
- input RSTREG;
- (* clkbuf_sink *)
- input WRCLK;
- input WREN;
-endmodule
-
-module FIFO36E1 (...);
- parameter ALMOST_EMPTY_OFFSET = 13'h0080;
- parameter ALMOST_FULL_OFFSET = 13'h0080;
- parameter integer DATA_WIDTH = 4;
- parameter integer DO_REG = 1;
- parameter EN_ECC_READ = "FALSE";
- parameter EN_ECC_WRITE = "FALSE";
- parameter EN_SYN = "FALSE";
- parameter FIFO_MODE = "FIFO36";
- parameter FIRST_WORD_FALL_THROUGH = "FALSE";
- parameter INIT = 72'h0;
- parameter SIM_DEVICE = "VIRTEX6";
- parameter SRVAL = 72'h0;
- parameter IS_RDCLK_INVERTED = 1'b0;
- parameter IS_RDEN_INVERTED = 1'b0;
- parameter IS_RSTREG_INVERTED = 1'b0;
- parameter IS_RST_INVERTED = 1'b0;
- parameter IS_WRCLK_INVERTED = 1'b0;
- parameter IS_WREN_INVERTED = 1'b0;
- output ALMOSTEMPTY;
- output ALMOSTFULL;
- output DBITERR;
- output [63:0] DO;
- output [7:0] DOP;
- output [7:0] ECCPARITY;
- output EMPTY;
- output FULL;
- output [12:0] RDCOUNT;
- output RDERR;
- output SBITERR;
- output [12:0] WRCOUNT;
- output WRERR;
- input [63:0] DI;
- input [7:0] DIP;
- input INJECTDBITERR;
- input INJECTSBITERR;
- (* clkbuf_sink *)
- input RDCLK;
- input RDEN;
- input REGCE;
- input RST;
- input RSTREG;
- (* clkbuf_sink *)
- input WRCLK;
- input WREN;
-endmodule
-
-module FRAME_ECCE2 (...);
- parameter FARSRC = "EFAR";
- parameter FRAME_RBT_IN_FILENAME = "NONE";
- output CRCERROR;
- output ECCERROR;
- output ECCERRORSINGLE;
- output SYNDROMEVALID;
- output [12:0] SYNDROME;
- output [25:0] FAR;
- output [4:0] SYNBIT;
- output [6:0] SYNWORD;
-endmodule
-
module GTHE2_CHANNEL (...);
parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0;
parameter [0:0] ACJTAG_MODE = 1'b0;
@@ -672,20 +347,26 @@ module GTHE2_CHANNEL (...);
output [7:0] RXDISPERR;
output [7:0] RXNOTINTABLE;
input CFGRESET;
+ (* invertible_pin = "IS_CLKRSVD0_INVERTED" *)
input CLKRSVD0;
+ (* invertible_pin = "IS_CLKRSVD1_INVERTED" *)
input CLKRSVD1;
+ (* invertible_pin = "IS_CPLLLOCKDETCLK_INVERTED" *)
input CPLLLOCKDETCLK;
input CPLLLOCKEN;
input CPLLPD;
input CPLLRESET;
input DMONFIFORESET;
+ (* invertible_pin = "IS_DMONITORCLK_INVERTED" *)
input DMONITORCLK;
+ (* invertible_pin = "IS_DRPCLK_INVERTED" *)
input DRPCLK;
input DRPEN;
input DRPWE;
input EYESCANMODE;
input EYESCANRESET;
input EYESCANTRIGGER;
+ (* invertible_pin = "IS_GTGREFCLK_INVERTED" *)
input GTGREFCLK;
input GTHRXN;
input GTHRXP;
@@ -781,9 +462,12 @@ module GTHE2_CHANNEL (...);
input RXSYNCIN;
input RXSYNCMODE;
input RXUSERRDY;
+ (* invertible_pin = "IS_RXUSRCLK2_INVERTED" *)
input RXUSRCLK2;
+ (* invertible_pin = "IS_RXUSRCLK_INVERTED" *)
input RXUSRCLK;
input SETERRSTATUS;
+ (* invertible_pin = "IS_SIGVALIDCLK_INVERTED" *)
input SIGVALIDCLK;
input TX8B10BEN;
input TXCOMINIT;
@@ -806,6 +490,7 @@ module GTHE2_CHANNEL (...);
input TXPHALIGNEN;
input TXPHDLYPD;
input TXPHDLYRESET;
+ (* invertible_pin = "IS_TXPHDLYTSTCLK_INVERTED" *)
input TXPHDLYTSTCLK;
input TXPHINIT;
input TXPHOVRDEN;
@@ -829,7 +514,9 @@ module GTHE2_CHANNEL (...);
input TXSYNCIN;
input TXSYNCMODE;
input TXUSERRDY;
+ (* invertible_pin = "IS_TXUSRCLK2_INVERTED" *)
input TXUSRCLK2;
+ (* invertible_pin = "IS_TXUSRCLK_INVERTED" *)
input TXUSRCLK;
input [13:0] RXADAPTSELTEST;
input [15:0] DRPDI;
@@ -918,9 +605,11 @@ module GTHE2_COMMON (...);
input BGMONITORENB;
input BGPDB;
input BGRCALOVRDENB;
+ (* invertible_pin = "IS_DRPCLK_INVERTED" *)
input DRPCLK;
input DRPEN;
input DRPWE;
+ (* invertible_pin = "IS_GTGREFCLK_INVERTED" *)
input GTGREFCLK;
input GTNORTHREFCLK0;
input GTNORTHREFCLK1;
@@ -928,6 +617,7 @@ module GTHE2_COMMON (...);
input GTREFCLK1;
input GTSOUTHREFCLK0;
input GTSOUTHREFCLK1;
+ (* invertible_pin = "IS_QPLLLOCKDETCLK_INVERTED" *)
input QPLLLOCKDETCLK;
input QPLLLOCKEN;
input QPLLOUTRESET;
@@ -1253,10 +943,14 @@ module GTPE2_CHANNEL (...);
output [4:0] RXPHMONITOR;
output [4:0] RXPHSLIPMONITOR;
input CFGRESET;
+ (* invertible_pin = "IS_CLKRSVD0_INVERTED" *)
input CLKRSVD0;
+ (* invertible_pin = "IS_CLKRSVD1_INVERTED" *)
input CLKRSVD1;
input DMONFIFORESET;
+ (* invertible_pin = "IS_DMONITORCLK_INVERTED" *)
input DMONITORCLK;
+ (* invertible_pin = "IS_DRPCLK_INVERTED" *)
input DRPCLK;
input DRPEN;
input DRPWE;
@@ -1330,9 +1024,12 @@ module GTPE2_CHANNEL (...);
input RXSYNCIN;
input RXSYNCMODE;
input RXUSERRDY;
+ (* invertible_pin = "IS_RXUSRCLK2_INVERTED" *)
input RXUSRCLK2;
+ (* invertible_pin = "IS_RXUSRCLK_INVERTED" *)
input RXUSRCLK;
input SETERRSTATUS;
+ (* invertible_pin = "IS_SIGVALIDCLK_INVERTED" *)
input SIGVALIDCLK;
input TX8B10BEN;
input TXCOMINIT;
@@ -1355,6 +1052,7 @@ module GTPE2_CHANNEL (...);
input TXPHALIGNEN;
input TXPHDLYPD;
input TXPHDLYRESET;
+ (* invertible_pin = "IS_TXPHDLYTSTCLK_INVERTED" *)
input TXPHDLYTSTCLK;
input TXPHINIT;
input TXPHOVRDEN;
@@ -1375,7 +1073,9 @@ module GTPE2_CHANNEL (...);
input TXSYNCIN;
input TXSYNCMODE;
input TXUSERRDY;
+ (* invertible_pin = "IS_TXUSRCLK2_INVERTED" *)
input TXUSRCLK2;
+ (* invertible_pin = "IS_TXUSRCLK_INVERTED" *)
input TXUSRCLK;
input [13:0] RXADAPTSELTEST;
input [15:0] DRPDI;
@@ -1464,21 +1164,26 @@ module GTPE2_COMMON (...);
input BGMONITORENB;
input BGPDB;
input BGRCALOVRDENB;
+ (* invertible_pin = "IS_DRPCLK_INVERTED" *)
input DRPCLK;
input DRPEN;
input DRPWE;
input GTEASTREFCLK0;
input GTEASTREFCLK1;
+ (* invertible_pin = "IS_GTGREFCLK0_INVERTED" *)
input GTGREFCLK0;
+ (* invertible_pin = "IS_GTGREFCLK1_INVERTED" *)
input GTGREFCLK1;
input GTREFCLK0;
input GTREFCLK1;
input GTWESTREFCLK0;
input GTWESTREFCLK1;
+ (* invertible_pin = "IS_PLL0LOCKDETCLK_INVERTED" *)
input PLL0LOCKDETCLK;
input PLL0LOCKEN;
input PLL0PD;
input PLL0RESET;
+ (* invertible_pin = "IS_PLL1LOCKDETCLK_INVERTED" *)
input PLL1LOCKDETCLK;
input PLL1LOCKEN;
input PLL1PD;
@@ -1767,16 +1472,19 @@ module GTXE2_CHANNEL (...);
output [7:0] RXNOTINTABLE;
output [9:0] TSTOUT;
input CFGRESET;
+ (* invertible_pin = "IS_CPLLLOCKDETCLK_INVERTED" *)
input CPLLLOCKDETCLK;
input CPLLLOCKEN;
input CPLLPD;
input CPLLRESET;
+ (* invertible_pin = "IS_DRPCLK_INVERTED" *)
input DRPCLK;
input DRPEN;
input DRPWE;
input EYESCANMODE;
input EYESCANRESET;
input EYESCANTRIGGER;
+ (* invertible_pin = "IS_GTGREFCLK_INVERTED" *)
input GTGREFCLK;
input GTNORTHREFCLK0;
input GTNORTHREFCLK1;
@@ -1853,7 +1561,9 @@ module GTXE2_CHANNEL (...);
input RXQPIEN;
input RXSLIDE;
input RXUSERRDY;
+ (* invertible_pin = "IS_RXUSRCLK2_INVERTED" *)
input RXUSRCLK2;
+ (* invertible_pin = "IS_RXUSRCLK_INVERTED" *)
input RXUSRCLK;
input SETERRSTATUS;
input TX8B10BEN;
@@ -1877,6 +1587,7 @@ module GTXE2_CHANNEL (...);
input TXPHALIGNEN;
input TXPHDLYPD;
input TXPHDLYRESET;
+ (* invertible_pin = "IS_TXPHDLYTSTCLK_INVERTED" *)
input TXPHDLYTSTCLK;
input TXPHINIT;
input TXPHOVRDEN;
@@ -1892,7 +1603,9 @@ module GTXE2_CHANNEL (...);
input TXSTARTSEQ;
input TXSWING;
input TXUSERRDY;
+ (* invertible_pin = "IS_TXUSRCLK2_INVERTED" *)
input TXUSRCLK2;
+ (* invertible_pin = "IS_TXUSRCLK_INVERTED" *)
input TXUSRCLK;
input [15:0] DRPDI;
input [15:0] GTRSVD;
@@ -1969,9 +1682,11 @@ module GTXE2_COMMON (...);
input BGBYPASSB;
input BGMONITORENB;
input BGPDB;
+ (* invertible_pin = "IS_DRPCLK_INVERTED" *)
input DRPCLK;
input DRPEN;
input DRPWE;
+ (* invertible_pin = "IS_GTGREFCLK_INVERTED" *)
input GTGREFCLK;
input GTNORTHREFCLK0;
input GTNORTHREFCLK1;
@@ -1979,6 +1694,7 @@ module GTXE2_COMMON (...);
input GTREFCLK1;
input GTSOUTHREFCLK0;
input GTSOUTHREFCLK1;
+ (* invertible_pin = "IS_QPLLLOCKDETCLK_INVERTED" *)
input QPLLLOCKDETCLK;
input QPLLLOCKEN;
input QPLLOUTRESET;
@@ -1994,6 +1710,2188 @@ module GTXE2_COMMON (...);
input [7:0] PMARSVD;
endmodule
+module PCIE_2_1 (...);
+ parameter [11:0] AER_BASE_PTR = 12'h140;
+ parameter AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [15:0] AER_CAP_ID = 16'h0001;
+ parameter AER_CAP_MULTIHEADER = "FALSE";
+ parameter [11:0] AER_CAP_NEXTPTR = 12'h178;
+ parameter AER_CAP_ON = "FALSE";
+ parameter [23:0] AER_CAP_OPTIONAL_ERR_SUPPORT = 24'h000000;
+ parameter AER_CAP_PERMIT_ROOTERR_UPDATE = "TRUE";
+ parameter [3:0] AER_CAP_VERSION = 4'h2;
+ parameter ALLOW_X8_GEN2 = "FALSE";
+ parameter [31:0] BAR0 = 32'hFFFFFF00;
+ parameter [31:0] BAR1 = 32'hFFFF0000;
+ parameter [31:0] BAR2 = 32'hFFFF000C;
+ parameter [31:0] BAR3 = 32'hFFFFFFFF;
+ parameter [31:0] BAR4 = 32'h00000000;
+ parameter [31:0] BAR5 = 32'h00000000;
+ parameter [7:0] CAPABILITIES_PTR = 8'h40;
+ parameter [31:0] CARDBUS_CIS_POINTER = 32'h00000000;
+ parameter integer CFG_ECRC_ERR_CPLSTAT = 0;
+ parameter [23:0] CLASS_CODE = 24'h000000;
+ parameter CMD_INTX_IMPLEMENTED = "TRUE";
+ parameter CPL_TIMEOUT_DISABLE_SUPPORTED = "FALSE";
+ parameter [3:0] CPL_TIMEOUT_RANGES_SUPPORTED = 4'h0;
+ parameter [6:0] CRM_MODULE_RSTS = 7'h00;
+ parameter DEV_CAP2_ARI_FORWARDING_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_ATOMICOP32_COMPLETER_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_ATOMICOP64_COMPLETER_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_ATOMICOP_ROUTING_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_CAS128_COMPLETER_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_ENDEND_TLP_PREFIX_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_EXTENDED_FMT_FIELD_SUPPORTED = "FALSE";
+ parameter DEV_CAP2_LTR_MECHANISM_SUPPORTED = "FALSE";
+ parameter [1:0] DEV_CAP2_MAX_ENDEND_TLP_PREFIXES = 2'h0;
+ parameter DEV_CAP2_NO_RO_ENABLED_PRPR_PASSING = "FALSE";
+ parameter [1:0] DEV_CAP2_TPH_COMPLETER_SUPPORTED = 2'h0;
+ parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_SCALE = "TRUE";
+ parameter DEV_CAP_ENABLE_SLOT_PWR_LIMIT_VALUE = "TRUE";
+ parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 0;
+ parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 0;
+ parameter DEV_CAP_EXT_TAG_SUPPORTED = "TRUE";
+ parameter DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "FALSE";
+ parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2;
+ parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0;
+ parameter DEV_CAP_ROLE_BASED_ERROR = "TRUE";
+ parameter integer DEV_CAP_RSVD_14_12 = 0;
+ parameter integer DEV_CAP_RSVD_17_16 = 0;
+ parameter integer DEV_CAP_RSVD_31_29 = 0;
+ parameter DEV_CONTROL_AUX_POWER_SUPPORTED = "FALSE";
+ parameter DEV_CONTROL_EXT_TAG_DEFAULT = "FALSE";
+ parameter DISABLE_ASPM_L1_TIMER = "FALSE";
+ parameter DISABLE_BAR_FILTERING = "FALSE";
+ parameter DISABLE_ERR_MSG = "FALSE";
+ parameter DISABLE_ID_CHECK = "FALSE";
+ parameter DISABLE_LANE_REVERSAL = "FALSE";
+ parameter DISABLE_LOCKED_FILTER = "FALSE";
+ parameter DISABLE_PPM_FILTER = "FALSE";
+ parameter DISABLE_RX_POISONED_RESP = "FALSE";
+ parameter DISABLE_RX_TC_FILTER = "FALSE";
+ parameter DISABLE_SCRAMBLING = "FALSE";
+ parameter [7:0] DNSTREAM_LINK_NUM = 8'h00;
+ parameter [11:0] DSN_BASE_PTR = 12'h100;
+ parameter [15:0] DSN_CAP_ID = 16'h0003;
+ parameter [11:0] DSN_CAP_NEXTPTR = 12'h10C;
+ parameter DSN_CAP_ON = "TRUE";
+ parameter [3:0] DSN_CAP_VERSION = 4'h1;
+ parameter [10:0] ENABLE_MSG_ROUTE = 11'h000;
+ parameter ENABLE_RX_TD_ECRC_TRIM = "FALSE";
+ parameter ENDEND_TLP_PREFIX_FORWARDING_SUPPORTED = "FALSE";
+ parameter ENTER_RVRY_EI_L0 = "TRUE";
+ parameter EXIT_LOOPBACK_ON_EI = "TRUE";
+ parameter [31:0] EXPANSION_ROM = 32'hFFFFF001;
+ parameter [5:0] EXT_CFG_CAP_PTR = 6'h3F;
+ parameter [9:0] EXT_CFG_XP_CAP_PTR = 10'h3FF;
+ parameter [7:0] HEADER_TYPE = 8'h00;
+ parameter [4:0] INFER_EI = 5'h00;
+ parameter [7:0] INTERRUPT_PIN = 8'h01;
+ parameter INTERRUPT_STAT_AUTO = "TRUE";
+ parameter IS_SWITCH = "FALSE";
+ parameter [9:0] LAST_CONFIG_DWORD = 10'h3FF;
+ parameter LINK_CAP_ASPM_OPTIONALITY = "TRUE";
+ parameter integer LINK_CAP_ASPM_SUPPORT = 1;
+ parameter LINK_CAP_CLOCK_POWER_MANAGEMENT = "FALSE";
+ parameter LINK_CAP_DLL_LINK_ACTIVE_REPORTING_CAP = "FALSE";
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7;
+ parameter integer LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7;
+ parameter integer LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7;
+ parameter LINK_CAP_LINK_BANDWIDTH_NOTIFICATION_CAP = "FALSE";
+ parameter [3:0] LINK_CAP_MAX_LINK_SPEED = 4'h1;
+ parameter [5:0] LINK_CAP_MAX_LINK_WIDTH = 6'h08;
+ parameter integer LINK_CAP_RSVD_23 = 0;
+ parameter LINK_CAP_SURPRISE_DOWN_ERROR_CAPABLE = "FALSE";
+ parameter integer LINK_CONTROL_RCB = 0;
+ parameter LINK_CTRL2_DEEMPHASIS = "FALSE";
+ parameter LINK_CTRL2_HW_AUTONOMOUS_SPEED_DISABLE = "FALSE";
+ parameter [3:0] LINK_CTRL2_TARGET_LINK_SPEED = 4'h2;
+ parameter LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE";
+ parameter [14:0] LL_ACK_TIMEOUT = 15'h0000;
+ parameter LL_ACK_TIMEOUT_EN = "FALSE";
+ parameter integer LL_ACK_TIMEOUT_FUNC = 0;
+ parameter [14:0] LL_REPLAY_TIMEOUT = 15'h0000;
+ parameter LL_REPLAY_TIMEOUT_EN = "FALSE";
+ parameter integer LL_REPLAY_TIMEOUT_FUNC = 0;
+ parameter [5:0] LTSSM_MAX_LINK_WIDTH = 6'h01;
+ parameter MPS_FORCE = "FALSE";
+ parameter [7:0] MSIX_BASE_PTR = 8'h9C;
+ parameter [7:0] MSIX_CAP_ID = 8'h11;
+ parameter [7:0] MSIX_CAP_NEXTPTR = 8'h00;
+ parameter MSIX_CAP_ON = "FALSE";
+ parameter integer MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [7:0] MSI_BASE_PTR = 8'h48;
+ parameter MSI_CAP_64_BIT_ADDR_CAPABLE = "TRUE";
+ parameter [7:0] MSI_CAP_ID = 8'h05;
+ parameter integer MSI_CAP_MULTIMSGCAP = 0;
+ parameter integer MSI_CAP_MULTIMSG_EXTENSION = 0;
+ parameter [7:0] MSI_CAP_NEXTPTR = 8'h60;
+ parameter MSI_CAP_ON = "FALSE";
+ parameter MSI_CAP_PER_VECTOR_MASKING_CAPABLE = "TRUE";
+ parameter integer N_FTS_COMCLK_GEN1 = 255;
+ parameter integer N_FTS_COMCLK_GEN2 = 255;
+ parameter integer N_FTS_GEN1 = 255;
+ parameter integer N_FTS_GEN2 = 255;
+ parameter [7:0] PCIE_BASE_PTR = 8'h60;
+ parameter [7:0] PCIE_CAP_CAPABILITY_ID = 8'h10;
+ parameter [3:0] PCIE_CAP_CAPABILITY_VERSION = 4'h2;
+ parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0;
+ parameter [7:0] PCIE_CAP_NEXTPTR = 8'h9C;
+ parameter PCIE_CAP_ON = "TRUE";
+ parameter integer PCIE_CAP_RSVD_15_14 = 0;
+ parameter PCIE_CAP_SLOT_IMPLEMENTED = "FALSE";
+ parameter integer PCIE_REVISION = 2;
+ parameter integer PL_AUTO_CONFIG = 0;
+ parameter PL_FAST_TRAIN = "FALSE";
+ parameter [14:0] PM_ASPML0S_TIMEOUT = 15'h0000;
+ parameter PM_ASPML0S_TIMEOUT_EN = "FALSE";
+ parameter integer PM_ASPML0S_TIMEOUT_FUNC = 0;
+ parameter PM_ASPM_FASTEXIT = "FALSE";
+ parameter [7:0] PM_BASE_PTR = 8'h40;
+ parameter integer PM_CAP_AUXCURRENT = 0;
+ parameter PM_CAP_D1SUPPORT = "TRUE";
+ parameter PM_CAP_D2SUPPORT = "TRUE";
+ parameter PM_CAP_DSI = "FALSE";
+ parameter [7:0] PM_CAP_ID = 8'h01;
+ parameter [7:0] PM_CAP_NEXTPTR = 8'h48;
+ parameter PM_CAP_ON = "TRUE";
+ parameter [4:0] PM_CAP_PMESUPPORT = 5'h0F;
+ parameter PM_CAP_PME_CLOCK = "FALSE";
+ parameter integer PM_CAP_RSVD_04 = 0;
+ parameter integer PM_CAP_VERSION = 3;
+ parameter PM_CSR_B2B3 = "FALSE";
+ parameter PM_CSR_BPCCEN = "FALSE";
+ parameter PM_CSR_NOSOFTRST = "TRUE";
+ parameter [7:0] PM_DATA0 = 8'h01;
+ parameter [7:0] PM_DATA1 = 8'h01;
+ parameter [7:0] PM_DATA2 = 8'h01;
+ parameter [7:0] PM_DATA3 = 8'h01;
+ parameter [7:0] PM_DATA4 = 8'h01;
+ parameter [7:0] PM_DATA5 = 8'h01;
+ parameter [7:0] PM_DATA6 = 8'h01;
+ parameter [7:0] PM_DATA7 = 8'h01;
+ parameter [1:0] PM_DATA_SCALE0 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE1 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE2 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE3 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE4 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE5 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE6 = 2'h1;
+ parameter [1:0] PM_DATA_SCALE7 = 2'h1;
+ parameter PM_MF = "FALSE";
+ parameter [11:0] RBAR_BASE_PTR = 12'h178;
+ parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR0 = 5'h00;
+ parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR1 = 5'h00;
+ parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR2 = 5'h00;
+ parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR3 = 5'h00;
+ parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR4 = 5'h00;
+ parameter [4:0] RBAR_CAP_CONTROL_ENCODEDBAR5 = 5'h00;
+ parameter [15:0] RBAR_CAP_ID = 16'h0015;
+ parameter [2:0] RBAR_CAP_INDEX0 = 3'h0;
+ parameter [2:0] RBAR_CAP_INDEX1 = 3'h0;
+ parameter [2:0] RBAR_CAP_INDEX2 = 3'h0;
+ parameter [2:0] RBAR_CAP_INDEX3 = 3'h0;
+ parameter [2:0] RBAR_CAP_INDEX4 = 3'h0;
+ parameter [2:0] RBAR_CAP_INDEX5 = 3'h0;
+ parameter [11:0] RBAR_CAP_NEXTPTR = 12'h000;
+ parameter RBAR_CAP_ON = "FALSE";
+ parameter [31:0] RBAR_CAP_SUP0 = 32'h00000000;
+ parameter [31:0] RBAR_CAP_SUP1 = 32'h00000000;
+ parameter [31:0] RBAR_CAP_SUP2 = 32'h00000000;
+ parameter [31:0] RBAR_CAP_SUP3 = 32'h00000000;
+ parameter [31:0] RBAR_CAP_SUP4 = 32'h00000000;
+ parameter [31:0] RBAR_CAP_SUP5 = 32'h00000000;
+ parameter [3:0] RBAR_CAP_VERSION = 4'h1;
+ parameter [2:0] RBAR_NUM = 3'h1;
+ parameter integer RECRC_CHK = 0;
+ parameter RECRC_CHK_TRIM = "FALSE";
+ parameter ROOT_CAP_CRS_SW_VISIBILITY = "FALSE";
+ parameter [1:0] RP_AUTO_SPD = 2'h1;
+ parameter [4:0] RP_AUTO_SPD_LOOPCNT = 5'h1F;
+ parameter SELECT_DLL_IF = "FALSE";
+ parameter SIM_VERSION = "1.0";
+ parameter SLOT_CAP_ATT_BUTTON_PRESENT = "FALSE";
+ parameter SLOT_CAP_ATT_INDICATOR_PRESENT = "FALSE";
+ parameter SLOT_CAP_ELEC_INTERLOCK_PRESENT = "FALSE";
+ parameter SLOT_CAP_HOTPLUG_CAPABLE = "FALSE";
+ parameter SLOT_CAP_HOTPLUG_SURPRISE = "FALSE";
+ parameter SLOT_CAP_MRL_SENSOR_PRESENT = "FALSE";
+ parameter SLOT_CAP_NO_CMD_COMPLETED_SUPPORT = "FALSE";
+ parameter [12:0] SLOT_CAP_PHYSICAL_SLOT_NUM = 13'h0000;
+ parameter SLOT_CAP_POWER_CONTROLLER_PRESENT = "FALSE";
+ parameter SLOT_CAP_POWER_INDICATOR_PRESENT = "FALSE";
+ parameter integer SLOT_CAP_SLOT_POWER_LIMIT_SCALE = 0;
+ parameter [7:0] SLOT_CAP_SLOT_POWER_LIMIT_VALUE = 8'h00;
+ parameter integer SPARE_BIT0 = 0;
+ parameter integer SPARE_BIT1 = 0;
+ parameter integer SPARE_BIT2 = 0;
+ parameter integer SPARE_BIT3 = 0;
+ parameter integer SPARE_BIT4 = 0;
+ parameter integer SPARE_BIT5 = 0;
+ parameter integer SPARE_BIT6 = 0;
+ parameter integer SPARE_BIT7 = 0;
+ parameter integer SPARE_BIT8 = 0;
+ parameter [7:0] SPARE_BYTE0 = 8'h00;
+ parameter [7:0] SPARE_BYTE1 = 8'h00;
+ parameter [7:0] SPARE_BYTE2 = 8'h00;
+ parameter [7:0] SPARE_BYTE3 = 8'h00;
+ parameter [31:0] SPARE_WORD0 = 32'h00000000;
+ parameter [31:0] SPARE_WORD1 = 32'h00000000;
+ parameter [31:0] SPARE_WORD2 = 32'h00000000;
+ parameter [31:0] SPARE_WORD3 = 32'h00000000;
+ parameter SSL_MESSAGE_AUTO = "FALSE";
+ parameter TECRC_EP_INV = "FALSE";
+ parameter TL_RBYPASS = "FALSE";
+ parameter integer TL_RX_RAM_RADDR_LATENCY = 0;
+ parameter integer TL_RX_RAM_RDATA_LATENCY = 2;
+ parameter integer TL_RX_RAM_WRITE_LATENCY = 0;
+ parameter TL_TFC_DISABLE = "FALSE";
+ parameter TL_TX_CHECKS_DISABLE = "FALSE";
+ parameter integer TL_TX_RAM_RADDR_LATENCY = 0;
+ parameter integer TL_TX_RAM_RDATA_LATENCY = 2;
+ parameter integer TL_TX_RAM_WRITE_LATENCY = 0;
+ parameter TRN_DW = "FALSE";
+ parameter TRN_NP_FC = "FALSE";
+ parameter UPCONFIG_CAPABLE = "TRUE";
+ parameter UPSTREAM_FACING = "TRUE";
+ parameter UR_ATOMIC = "TRUE";
+ parameter UR_CFG1 = "TRUE";
+ parameter UR_INV_REQ = "TRUE";
+ parameter UR_PRS_RESPONSE = "TRUE";
+ parameter USER_CLK2_DIV2 = "FALSE";
+ parameter integer USER_CLK_FREQ = 3;
+ parameter USE_RID_PINS = "FALSE";
+ parameter VC0_CPL_INFINITE = "TRUE";
+ parameter [12:0] VC0_RX_RAM_LIMIT = 13'h03FF;
+ parameter integer VC0_TOTAL_CREDITS_CD = 127;
+ parameter integer VC0_TOTAL_CREDITS_CH = 31;
+ parameter integer VC0_TOTAL_CREDITS_NPD = 24;
+ parameter integer VC0_TOTAL_CREDITS_NPH = 12;
+ parameter integer VC0_TOTAL_CREDITS_PD = 288;
+ parameter integer VC0_TOTAL_CREDITS_PH = 32;
+ parameter integer VC0_TX_LASTPACKET = 31;
+ parameter [11:0] VC_BASE_PTR = 12'h10C;
+ parameter [15:0] VC_CAP_ID = 16'h0002;
+ parameter [11:0] VC_CAP_NEXTPTR = 12'h000;
+ parameter VC_CAP_ON = "FALSE";
+ parameter VC_CAP_REJECT_SNOOP_TRANSACTIONS = "FALSE";
+ parameter [3:0] VC_CAP_VERSION = 4'h1;
+ parameter [11:0] VSEC_BASE_PTR = 12'h128;
+ parameter [15:0] VSEC_CAP_HDR_ID = 16'h1234;
+ parameter [11:0] VSEC_CAP_HDR_LENGTH = 12'h018;
+ parameter [3:0] VSEC_CAP_HDR_REVISION = 4'h1;
+ parameter [15:0] VSEC_CAP_ID = 16'h000B;
+ parameter VSEC_CAP_IS_LINK_VISIBLE = "TRUE";
+ parameter [11:0] VSEC_CAP_NEXTPTR = 12'h140;
+ parameter VSEC_CAP_ON = "FALSE";
+ parameter [3:0] VSEC_CAP_VERSION = 4'h1;
+ output CFGAERECRCCHECKEN;
+ output CFGAERECRCGENEN;
+ output CFGAERROOTERRCORRERRRECEIVED;
+ output CFGAERROOTERRCORRERRREPORTINGEN;
+ output CFGAERROOTERRFATALERRRECEIVED;
+ output CFGAERROOTERRFATALERRREPORTINGEN;
+ output CFGAERROOTERRNONFATALERRRECEIVED;
+ output CFGAERROOTERRNONFATALERRREPORTINGEN;
+ output CFGBRIDGESERREN;
+ output CFGCOMMANDBUSMASTERENABLE;
+ output CFGCOMMANDINTERRUPTDISABLE;
+ output CFGCOMMANDIOENABLE;
+ output CFGCOMMANDMEMENABLE;
+ output CFGCOMMANDSERREN;
+ output CFGDEVCONTROL2ARIFORWARDEN;
+ output CFGDEVCONTROL2ATOMICEGRESSBLOCK;
+ output CFGDEVCONTROL2ATOMICREQUESTEREN;
+ output CFGDEVCONTROL2CPLTIMEOUTDIS;
+ output CFGDEVCONTROL2IDOCPLEN;
+ output CFGDEVCONTROL2IDOREQEN;
+ output CFGDEVCONTROL2LTREN;
+ output CFGDEVCONTROL2TLPPREFIXBLOCK;
+ output CFGDEVCONTROLAUXPOWEREN;
+ output CFGDEVCONTROLCORRERRREPORTINGEN;
+ output CFGDEVCONTROLENABLERO;
+ output CFGDEVCONTROLEXTTAGEN;
+ output CFGDEVCONTROLFATALERRREPORTINGEN;
+ output CFGDEVCONTROLNONFATALREPORTINGEN;
+ output CFGDEVCONTROLNOSNOOPEN;
+ output CFGDEVCONTROLPHANTOMEN;
+ output CFGDEVCONTROLURERRREPORTINGEN;
+ output CFGDEVSTATUSCORRERRDETECTED;
+ output CFGDEVSTATUSFATALERRDETECTED;
+ output CFGDEVSTATUSNONFATALERRDETECTED;
+ output CFGDEVSTATUSURDETECTED;
+ output CFGERRAERHEADERLOGSETN;
+ output CFGERRCPLRDYN;
+ output CFGINTERRUPTMSIENABLE;
+ output CFGINTERRUPTMSIXENABLE;
+ output CFGINTERRUPTMSIXFM;
+ output CFGINTERRUPTRDYN;
+ output CFGLINKCONTROLAUTOBANDWIDTHINTEN;
+ output CFGLINKCONTROLBANDWIDTHINTEN;
+ output CFGLINKCONTROLCLOCKPMEN;
+ output CFGLINKCONTROLCOMMONCLOCK;
+ output CFGLINKCONTROLEXTENDEDSYNC;
+ output CFGLINKCONTROLHWAUTOWIDTHDIS;
+ output CFGLINKCONTROLLINKDISABLE;
+ output CFGLINKCONTROLRCB;
+ output CFGLINKCONTROLRETRAINLINK;
+ output CFGLINKSTATUSAUTOBANDWIDTHSTATUS;
+ output CFGLINKSTATUSBANDWIDTHSTATUS;
+ output CFGLINKSTATUSDLLACTIVE;
+ output CFGLINKSTATUSLINKTRAINING;
+ output CFGMGMTRDWRDONEN;
+ output CFGMSGRECEIVED;
+ output CFGMSGRECEIVEDASSERTINTA;
+ output CFGMSGRECEIVEDASSERTINTB;
+ output CFGMSGRECEIVEDASSERTINTC;
+ output CFGMSGRECEIVEDASSERTINTD;
+ output CFGMSGRECEIVEDDEASSERTINTA;
+ output CFGMSGRECEIVEDDEASSERTINTB;
+ output CFGMSGRECEIVEDDEASSERTINTC;
+ output CFGMSGRECEIVEDDEASSERTINTD;
+ output CFGMSGRECEIVEDERRCOR;
+ output CFGMSGRECEIVEDERRFATAL;
+ output CFGMSGRECEIVEDERRNONFATAL;
+ output CFGMSGRECEIVEDPMASNAK;
+ output CFGMSGRECEIVEDPMETO;
+ output CFGMSGRECEIVEDPMETOACK;
+ output CFGMSGRECEIVEDPMPME;
+ output CFGMSGRECEIVEDSETSLOTPOWERLIMIT;
+ output CFGMSGRECEIVEDUNLOCK;
+ output CFGPMCSRPMEEN;
+ output CFGPMCSRPMESTATUS;
+ output CFGPMRCVASREQL1N;
+ output CFGPMRCVENTERL1N;
+ output CFGPMRCVENTERL23N;
+ output CFGPMRCVREQACKN;
+ output CFGROOTCONTROLPMEINTEN;
+ output CFGROOTCONTROLSYSERRCORRERREN;
+ output CFGROOTCONTROLSYSERRFATALERREN;
+ output CFGROOTCONTROLSYSERRNONFATALERREN;
+ output CFGSLOTCONTROLELECTROMECHILCTLPULSE;
+ output CFGTRANSACTION;
+ output CFGTRANSACTIONTYPE;
+ output DBGSCLRA;
+ output DBGSCLRB;
+ output DBGSCLRC;
+ output DBGSCLRD;
+ output DBGSCLRE;
+ output DBGSCLRF;
+ output DBGSCLRG;
+ output DBGSCLRH;
+ output DBGSCLRI;
+ output DBGSCLRJ;
+ output DBGSCLRK;
+ output DRPRDY;
+ output LL2BADDLLPERR;
+ output LL2BADTLPERR;
+ output LL2PROTOCOLERR;
+ output LL2RECEIVERERR;
+ output LL2REPLAYROERR;
+ output LL2REPLAYTOERR;
+ output LL2SUSPENDOK;
+ output LL2TFCINIT1SEQ;
+ output LL2TFCINIT2SEQ;
+ output LL2TXIDLE;
+ output LNKCLKEN;
+ output MIMRXREN;
+ output MIMRXWEN;
+ output MIMTXREN;
+ output MIMTXWEN;
+ output PIPERX0POLARITY;
+ output PIPERX1POLARITY;
+ output PIPERX2POLARITY;
+ output PIPERX3POLARITY;
+ output PIPERX4POLARITY;
+ output PIPERX5POLARITY;
+ output PIPERX6POLARITY;
+ output PIPERX7POLARITY;
+ output PIPETX0COMPLIANCE;
+ output PIPETX0ELECIDLE;
+ output PIPETX1COMPLIANCE;
+ output PIPETX1ELECIDLE;
+ output PIPETX2COMPLIANCE;
+ output PIPETX2ELECIDLE;
+ output PIPETX3COMPLIANCE;
+ output PIPETX3ELECIDLE;
+ output PIPETX4COMPLIANCE;
+ output PIPETX4ELECIDLE;
+ output PIPETX5COMPLIANCE;
+ output PIPETX5ELECIDLE;
+ output PIPETX6COMPLIANCE;
+ output PIPETX6ELECIDLE;
+ output PIPETX7COMPLIANCE;
+ output PIPETX7ELECIDLE;
+ output PIPETXDEEMPH;
+ output PIPETXRATE;
+ output PIPETXRCVRDET;
+ output PIPETXRESET;
+ output PL2L0REQ;
+ output PL2LINKUP;
+ output PL2RECEIVERERR;
+ output PL2RECOVERY;
+ output PL2RXELECIDLE;
+ output PL2SUSPENDOK;
+ output PLDIRECTEDCHANGEDONE;
+ output PLLINKGEN2CAP;
+ output PLLINKPARTNERGEN2SUPPORTED;
+ output PLLINKUPCFGCAP;
+ output PLPHYLNKUPN;
+ output PLRECEIVEDHOTRST;
+ output PLSELLNKRATE;
+ output RECEIVEDFUNCLVLRSTN;
+ output TL2ASPMSUSPENDCREDITCHECKOK;
+ output TL2ASPMSUSPENDREQ;
+ output TL2ERRFCPE;
+ output TL2ERRMALFORMED;
+ output TL2ERRRXOVERFLOW;
+ output TL2PPMSUSPENDOK;
+ output TRNLNKUP;
+ output TRNRECRCERR;
+ output TRNREOF;
+ output TRNRERRFWD;
+ output TRNRSOF;
+ output TRNRSRCDSC;
+ output TRNRSRCRDY;
+ output TRNTCFGREQ;
+ output TRNTDLLPDSTRDY;
+ output TRNTERRDROP;
+ output USERRSTN;
+ output [11:0] DBGVECC;
+ output [11:0] PLDBGVEC;
+ output [11:0] TRNFCCPLD;
+ output [11:0] TRNFCNPD;
+ output [11:0] TRNFCPD;
+ output [127:0] TRNRD;
+ output [12:0] MIMRXRADDR;
+ output [12:0] MIMRXWADDR;
+ output [12:0] MIMTXRADDR;
+ output [12:0] MIMTXWADDR;
+ output [15:0] CFGMSGDATA;
+ output [15:0] DRPDO;
+ output [15:0] PIPETX0DATA;
+ output [15:0] PIPETX1DATA;
+ output [15:0] PIPETX2DATA;
+ output [15:0] PIPETX3DATA;
+ output [15:0] PIPETX4DATA;
+ output [15:0] PIPETX5DATA;
+ output [15:0] PIPETX6DATA;
+ output [15:0] PIPETX7DATA;
+ output [1:0] CFGLINKCONTROLASPMCONTROL;
+ output [1:0] CFGLINKSTATUSCURRENTSPEED;
+ output [1:0] CFGPMCSRPOWERSTATE;
+ output [1:0] PIPETX0CHARISK;
+ output [1:0] PIPETX0POWERDOWN;
+ output [1:0] PIPETX1CHARISK;
+ output [1:0] PIPETX1POWERDOWN;
+ output [1:0] PIPETX2CHARISK;
+ output [1:0] PIPETX2POWERDOWN;
+ output [1:0] PIPETX3CHARISK;
+ output [1:0] PIPETX3POWERDOWN;
+ output [1:0] PIPETX4CHARISK;
+ output [1:0] PIPETX4POWERDOWN;
+ output [1:0] PIPETX5CHARISK;
+ output [1:0] PIPETX5POWERDOWN;
+ output [1:0] PIPETX6CHARISK;
+ output [1:0] PIPETX6POWERDOWN;
+ output [1:0] PIPETX7CHARISK;
+ output [1:0] PIPETX7POWERDOWN;
+ output [1:0] PL2RXPMSTATE;
+ output [1:0] PLLANEREVERSALMODE;
+ output [1:0] PLRXPMSTATE;
+ output [1:0] PLSELLNKWIDTH;
+ output [1:0] TRNRDLLPSRCRDY;
+ output [1:0] TRNRREM;
+ output [2:0] CFGDEVCONTROLMAXPAYLOAD;
+ output [2:0] CFGDEVCONTROLMAXREADREQ;
+ output [2:0] CFGINTERRUPTMMENABLE;
+ output [2:0] CFGPCIELINKSTATE;
+ output [2:0] PIPETXMARGIN;
+ output [2:0] PLINITIALLINKWIDTH;
+ output [2:0] PLTXPMSTATE;
+ output [31:0] CFGMGMTDO;
+ output [3:0] CFGDEVCONTROL2CPLTIMEOUTVAL;
+ output [3:0] CFGLINKSTATUSNEGOTIATEDWIDTH;
+ output [3:0] TRNTDSTRDY;
+ output [4:0] LL2LINKSTATUS;
+ output [5:0] PLLTSSMSTATE;
+ output [5:0] TRNTBUFAV;
+ output [63:0] DBGVECA;
+ output [63:0] DBGVECB;
+ output [63:0] TL2ERRHDR;
+ output [63:0] TRNRDLLPDATA;
+ output [67:0] MIMRXWDATA;
+ output [68:0] MIMTXWDATA;
+ output [6:0] CFGTRANSACTIONADDR;
+ output [6:0] CFGVCTCVCMAP;
+ output [7:0] CFGINTERRUPTDO;
+ output [7:0] TRNFCCPLH;
+ output [7:0] TRNFCNPH;
+ output [7:0] TRNFCPH;
+ output [7:0] TRNRBARHIT;
+ input CFGERRACSN;
+ input CFGERRATOMICEGRESSBLOCKEDN;
+ input CFGERRCORN;
+ input CFGERRCPLABORTN;
+ input CFGERRCPLTIMEOUTN;
+ input CFGERRCPLUNEXPECTN;
+ input CFGERRECRCN;
+ input CFGERRINTERNALCORN;
+ input CFGERRINTERNALUNCORN;
+ input CFGERRLOCKEDN;
+ input CFGERRMALFORMEDN;
+ input CFGERRMCBLOCKEDN;
+ input CFGERRNORECOVERYN;
+ input CFGERRPOISONEDN;
+ input CFGERRPOSTEDN;
+ input CFGERRURN;
+ input CFGFORCECOMMONCLOCKOFF;
+ input CFGFORCEEXTENDEDSYNCON;
+ input CFGINTERRUPTASSERTN;
+ input CFGINTERRUPTN;
+ input CFGINTERRUPTSTATN;
+ input CFGMGMTRDENN;
+ input CFGMGMTWRENN;
+ input CFGMGMTWRREADONLYN;
+ input CFGMGMTWRRW1CASRWN;
+ input CFGPMFORCESTATEENN;
+ input CFGPMHALTASPML0SN;
+ input CFGPMHALTASPML1N;
+ input CFGPMSENDPMETON;
+ input CFGPMTURNOFFOKN;
+ input CFGPMWAKEN;
+ input CFGTRNPENDINGN;
+ input CMRSTN;
+ input CMSTICKYRSTN;
+ input DBGSUBMODE;
+ input DLRSTN;
+ input DRPCLK;
+ input DRPEN;
+ input DRPWE;
+ input FUNCLVLRSTN;
+ input LL2SENDASREQL1;
+ input LL2SENDENTERL1;
+ input LL2SENDENTERL23;
+ input LL2SENDPMACK;
+ input LL2SUSPENDNOW;
+ input LL2TLPRCV;
+ input PIPECLK;
+ input PIPERX0CHANISALIGNED;
+ input PIPERX0ELECIDLE;
+ input PIPERX0PHYSTATUS;
+ input PIPERX0VALID;
+ input PIPERX1CHANISALIGNED;
+ input PIPERX1ELECIDLE;
+ input PIPERX1PHYSTATUS;
+ input PIPERX1VALID;
+ input PIPERX2CHANISALIGNED;
+ input PIPERX2ELECIDLE;
+ input PIPERX2PHYSTATUS;
+ input PIPERX2VALID;
+ input PIPERX3CHANISALIGNED;
+ input PIPERX3ELECIDLE;
+ input PIPERX3PHYSTATUS;
+ input PIPERX3VALID;
+ input PIPERX4CHANISALIGNED;
+ input PIPERX4ELECIDLE;
+ input PIPERX4PHYSTATUS;
+ input PIPERX4VALID;
+ input PIPERX5CHANISALIGNED;
+ input PIPERX5ELECIDLE;
+ input PIPERX5PHYSTATUS;
+ input PIPERX5VALID;
+ input PIPERX6CHANISALIGNED;
+ input PIPERX6ELECIDLE;
+ input PIPERX6PHYSTATUS;
+ input PIPERX6VALID;
+ input PIPERX7CHANISALIGNED;
+ input PIPERX7ELECIDLE;
+ input PIPERX7PHYSTATUS;
+ input PIPERX7VALID;
+ input PLDIRECTEDLINKAUTON;
+ input PLDIRECTEDLINKSPEED;
+ input PLDIRECTEDLTSSMNEWVLD;
+ input PLDIRECTEDLTSSMSTALL;
+ input PLDOWNSTREAMDEEMPHSOURCE;
+ input PLRSTN;
+ input PLTRANSMITHOTRST;
+ input PLUPSTREAMPREFERDEEMPH;
+ input SYSRSTN;
+ input TL2ASPMSUSPENDCREDITCHECK;
+ input TL2PPMSUSPENDREQ;
+ input TLRSTN;
+ input TRNRDSTRDY;
+ input TRNRFCPRET;
+ input TRNRNPOK;
+ input TRNRNPREQ;
+ input TRNTCFGGNT;
+ input TRNTDLLPSRCRDY;
+ input TRNTECRCGEN;
+ input TRNTEOF;
+ input TRNTERRFWD;
+ input TRNTSOF;
+ input TRNTSRCDSC;
+ input TRNTSRCRDY;
+ input TRNTSTR;
+ input USERCLK2;
+ input USERCLK;
+ input [127:0] CFGERRAERHEADERLOG;
+ input [127:0] TRNTD;
+ input [15:0] CFGDEVID;
+ input [15:0] CFGSUBSYSID;
+ input [15:0] CFGSUBSYSVENDID;
+ input [15:0] CFGVENDID;
+ input [15:0] DRPDI;
+ input [15:0] PIPERX0DATA;
+ input [15:0] PIPERX1DATA;
+ input [15:0] PIPERX2DATA;
+ input [15:0] PIPERX3DATA;
+ input [15:0] PIPERX4DATA;
+ input [15:0] PIPERX5DATA;
+ input [15:0] PIPERX6DATA;
+ input [15:0] PIPERX7DATA;
+ input [1:0] CFGPMFORCESTATE;
+ input [1:0] DBGMODE;
+ input [1:0] PIPERX0CHARISK;
+ input [1:0] PIPERX1CHARISK;
+ input [1:0] PIPERX2CHARISK;
+ input [1:0] PIPERX3CHARISK;
+ input [1:0] PIPERX4CHARISK;
+ input [1:0] PIPERX5CHARISK;
+ input [1:0] PIPERX6CHARISK;
+ input [1:0] PIPERX7CHARISK;
+ input [1:0] PLDIRECTEDLINKCHANGE;
+ input [1:0] PLDIRECTEDLINKWIDTH;
+ input [1:0] TRNTREM;
+ input [2:0] CFGDSFUNCTIONNUMBER;
+ input [2:0] CFGFORCEMPS;
+ input [2:0] PIPERX0STATUS;
+ input [2:0] PIPERX1STATUS;
+ input [2:0] PIPERX2STATUS;
+ input [2:0] PIPERX3STATUS;
+ input [2:0] PIPERX4STATUS;
+ input [2:0] PIPERX5STATUS;
+ input [2:0] PIPERX6STATUS;
+ input [2:0] PIPERX7STATUS;
+ input [2:0] PLDBGMODE;
+ input [2:0] TRNFCSEL;
+ input [31:0] CFGMGMTDI;
+ input [31:0] TRNTDLLPDATA;
+ input [3:0] CFGMGMTBYTEENN;
+ input [47:0] CFGERRTLPCPLHEADER;
+ input [4:0] CFGAERINTERRUPTMSGNUM;
+ input [4:0] CFGDSDEVICENUMBER;
+ input [4:0] CFGPCIECAPINTERRUPTMSGNUM;
+ input [4:0] PL2DIRECTEDLSTATE;
+ input [5:0] PLDIRECTEDLTSSMNEW;
+ input [63:0] CFGDSN;
+ input [67:0] MIMRXRDATA;
+ input [68:0] MIMTXRDATA;
+ input [7:0] CFGDSBUSNUMBER;
+ input [7:0] CFGINTERRUPTDI;
+ input [7:0] CFGPORTNUMBER;
+ input [7:0] CFGREVID;
+ input [8:0] DRPADDR;
+ input [9:0] CFGMGMTDWADDR;
+endmodule
+
+module PCIE_3_0 (...);
+ parameter ARI_CAP_ENABLE = "FALSE";
+ parameter AXISTEN_IF_CC_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_CC_PARITY_CHK = "TRUE";
+ parameter AXISTEN_IF_CQ_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE";
+ parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000;
+ parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE";
+ parameter AXISTEN_IF_RC_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_RC_STRADDLE = "FALSE";
+ parameter AXISTEN_IF_RQ_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_RQ_PARITY_CHK = "TRUE";
+ parameter [1:0] AXISTEN_IF_WIDTH = 2'h2;
+ parameter CRM_CORE_CLK_FREQ_500 = "TRUE";
+ parameter [1:0] CRM_USER_CLK_FREQ = 2'h2;
+ parameter [7:0] DNSTREAM_LINK_NUM = 8'h00;
+ parameter [1:0] GEN3_PCS_AUTO_REALIGN = 2'h1;
+ parameter GEN3_PCS_RX_ELECIDLE_INTERNAL = "TRUE";
+ parameter [8:0] LL_ACK_TIMEOUT = 9'h000;
+ parameter LL_ACK_TIMEOUT_EN = "FALSE";
+ parameter integer LL_ACK_TIMEOUT_FUNC = 0;
+ parameter [15:0] LL_CPL_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_CPL_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [15:0] LL_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [15:0] LL_NP_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_NP_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [15:0] LL_P_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_P_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000;
+ parameter LL_REPLAY_TIMEOUT_EN = "FALSE";
+ parameter integer LL_REPLAY_TIMEOUT_FUNC = 0;
+ parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h0FA;
+ parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE";
+ parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE";
+ parameter PF0_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter PF0_AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [3:0] PF0_ARI_CAP_VER = 4'h1;
+ parameter [4:0] PF0_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF0_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF0_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF0_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF0_BIST_REGISTER = 8'h00;
+ parameter [7:0] PF0_CAPABILITY_POINTER = 8'h50;
+ parameter [23:0] PF0_CLASS_CODE = 24'h000000;
+ parameter [15:0] PF0_DEVICE_ID = 16'h0000;
+ parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE";
+ parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE";
+ parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0;
+ parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE";
+ parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0;
+ parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0;
+ parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE";
+ parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE";
+ parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF0_DPA_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF0_DPA_CAP_SUB_STATE_CONTROL = 5'h00;
+ parameter PF0_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE";
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00;
+ parameter [3:0] PF0_DPA_CAP_VER = 4'h1;
+ parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF0_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [7:0] PF0_INTERRUPT_LINE = 8'h00;
+ parameter [2:0] PF0_INTERRUPT_PIN = 3'h1;
+ parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7;
+ parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE";
+ parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000;
+ parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000;
+ parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000;
+ parameter [3:0] PF0_LTR_CAP_VER = 4'h1;
+ parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF0_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF0_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00;
+ parameter [11:0] PF0_PB_CAP_NEXTPTR = 12'h000;
+ parameter PF0_PB_CAP_SYSTEM_ALLOCATED = "FALSE";
+ parameter [3:0] PF0_PB_CAP_VER = 4'h1;
+ parameter [7:0] PF0_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00;
+ parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE";
+ parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE";
+ parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE";
+ parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE";
+ parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3;
+ parameter PF0_PM_CSR_NOSOFTRESET = "TRUE";
+ parameter PF0_RBAR_CAP_ENABLE = "FALSE";
+ parameter [2:0] PF0_RBAR_CAP_INDEX0 = 3'h0;
+ parameter [2:0] PF0_RBAR_CAP_INDEX1 = 3'h0;
+ parameter [2:0] PF0_RBAR_CAP_INDEX2 = 3'h0;
+ parameter [11:0] PF0_RBAR_CAP_NEXTPTR = 12'h000;
+ parameter [19:0] PF0_RBAR_CAP_SIZE0 = 20'h00000;
+ parameter [19:0] PF0_RBAR_CAP_SIZE1 = 20'h00000;
+ parameter [19:0] PF0_RBAR_CAP_SIZE2 = 20'h00000;
+ parameter [3:0] PF0_RBAR_CAP_VER = 4'h1;
+ parameter [2:0] PF0_RBAR_NUM = 3'h1;
+ parameter [7:0] PF0_REVISION_ID = 8'h00;
+ parameter [4:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [15:0] PF0_SUBSYSTEM_ID = 16'h0000;
+ parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF0_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF0_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000;
+ parameter [3:0] PF0_VC_CAP_VER = 4'h1;
+ parameter PF1_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter PF1_AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [4:0] PF1_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF1_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF1_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF1_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF1_BIST_REGISTER = 8'h00;
+ parameter [7:0] PF1_CAPABILITY_POINTER = 8'h50;
+ parameter [23:0] PF1_CLASS_CODE = 24'h000000;
+ parameter [15:0] PF1_DEVICE_ID = 16'h0000;
+ parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF1_DPA_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF1_DPA_CAP_SUB_STATE_CONTROL = 5'h00;
+ parameter PF1_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE";
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00;
+ parameter [3:0] PF1_DPA_CAP_VER = 4'h1;
+ parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF1_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [7:0] PF1_INTERRUPT_LINE = 8'h00;
+ parameter [2:0] PF1_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF1_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF1_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00;
+ parameter [11:0] PF1_PB_CAP_NEXTPTR = 12'h000;
+ parameter PF1_PB_CAP_SYSTEM_ALLOCATED = "FALSE";
+ parameter [3:0] PF1_PB_CAP_VER = 4'h1;
+ parameter [7:0] PF1_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] PF1_PM_CAP_VER_ID = 3'h3;
+ parameter PF1_RBAR_CAP_ENABLE = "FALSE";
+ parameter [2:0] PF1_RBAR_CAP_INDEX0 = 3'h0;
+ parameter [2:0] PF1_RBAR_CAP_INDEX1 = 3'h0;
+ parameter [2:0] PF1_RBAR_CAP_INDEX2 = 3'h0;
+ parameter [11:0] PF1_RBAR_CAP_NEXTPTR = 12'h000;
+ parameter [19:0] PF1_RBAR_CAP_SIZE0 = 20'h00000;
+ parameter [19:0] PF1_RBAR_CAP_SIZE1 = 20'h00000;
+ parameter [19:0] PF1_RBAR_CAP_SIZE2 = 20'h00000;
+ parameter [3:0] PF1_RBAR_CAP_VER = 4'h1;
+ parameter [2:0] PF1_RBAR_NUM = 3'h1;
+ parameter [7:0] PF1_REVISION_ID = 8'h00;
+ parameter [4:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [15:0] PF1_SUBSYSTEM_ID = 16'h0000;
+ parameter PF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF1_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF1_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF1_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF1_TPHR_CAP_VER = 4'h1;
+ parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE";
+ parameter PL_DISABLE_GEN3_DC_BALANCE = "FALSE";
+ parameter PL_DISABLE_SCRAMBLING = "FALSE";
+ parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE";
+ parameter PL_EQ_ADAPT_DISABLE_COEFF_CHECK = "FALSE";
+ parameter PL_EQ_ADAPT_DISABLE_PRESET_CHECK = "FALSE";
+ parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02;
+ parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1;
+ parameter PL_EQ_BYPASS_PHASE23 = "FALSE";
+ parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE";
+ parameter [15:0] PL_LANE0_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE1_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE2_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE3_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE4_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE5_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE6_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE7_EQ_CONTROL = 16'h3F00;
+ parameter [2:0] PL_LINK_CAP_MAX_LINK_SPEED = 3'h4;
+ parameter [3:0] PL_LINK_CAP_MAX_LINK_WIDTH = 4'h8;
+ parameter integer PL_N_FTS_COMCLK_GEN1 = 255;
+ parameter integer PL_N_FTS_COMCLK_GEN2 = 255;
+ parameter integer PL_N_FTS_COMCLK_GEN3 = 255;
+ parameter integer PL_N_FTS_GEN1 = 255;
+ parameter integer PL_N_FTS_GEN2 = 255;
+ parameter integer PL_N_FTS_GEN3 = 255;
+ parameter PL_SIM_FAST_LINK_TRAINING = "FALSE";
+ parameter PL_UPSTREAM_FACING = "TRUE";
+ parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h05DC;
+ parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h00000;
+ parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE";
+ parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000000;
+ parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h186A0;
+ parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0064;
+ parameter SIM_VERSION = "1.0";
+ parameter integer SPARE_BIT0 = 0;
+ parameter integer SPARE_BIT1 = 0;
+ parameter integer SPARE_BIT2 = 0;
+ parameter integer SPARE_BIT3 = 0;
+ parameter integer SPARE_BIT4 = 0;
+ parameter integer SPARE_BIT5 = 0;
+ parameter integer SPARE_BIT6 = 0;
+ parameter integer SPARE_BIT7 = 0;
+ parameter integer SPARE_BIT8 = 0;
+ parameter [7:0] SPARE_BYTE0 = 8'h00;
+ parameter [7:0] SPARE_BYTE1 = 8'h00;
+ parameter [7:0] SPARE_BYTE2 = 8'h00;
+ parameter [7:0] SPARE_BYTE3 = 8'h00;
+ parameter [31:0] SPARE_WORD0 = 32'h00000000;
+ parameter [31:0] SPARE_WORD1 = 32'h00000000;
+ parameter [31:0] SPARE_WORD2 = 32'h00000000;
+ parameter [31:0] SPARE_WORD3 = 32'h00000000;
+ parameter SRIOV_CAP_ENABLE = "FALSE";
+ parameter [23:0] TL_COMPL_TIMEOUT_REG0 = 24'hBEBC20;
+ parameter [27:0] TL_COMPL_TIMEOUT_REG1 = 28'h0000000;
+ parameter [11:0] TL_CREDITS_CD = 12'h3E0;
+ parameter [7:0] TL_CREDITS_CH = 8'h20;
+ parameter [11:0] TL_CREDITS_NPD = 12'h028;
+ parameter [7:0] TL_CREDITS_NPH = 8'h20;
+ parameter [11:0] TL_CREDITS_PD = 12'h198;
+ parameter [7:0] TL_CREDITS_PH = 8'h20;
+ parameter TL_ENABLE_MESSAGE_RID_CHECK_ENABLE = "TRUE";
+ parameter TL_EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE";
+ parameter TL_LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE";
+ parameter TL_LEGACY_MODE_ENABLE = "FALSE";
+ parameter TL_PF_ENABLE_REG = "FALSE";
+ parameter TL_TAG_MGMT_ENABLE = "TRUE";
+ parameter [11:0] VF0_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] VF0_CAPABILITY_POINTER = 8'h50;
+ parameter integer VF0_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF0_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF0_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF0_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF0_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF0_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF0_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF0_PM_CAP_VER_ID = 3'h3;
+ parameter VF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF0_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF0_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF0_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF0_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF0_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF0_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF1_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF1_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF1_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF1_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF1_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF1_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF1_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF1_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF1_PM_CAP_VER_ID = 3'h3;
+ parameter VF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF1_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF1_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF1_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF1_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF1_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF1_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF2_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF2_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF2_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF2_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF2_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF2_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF2_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF2_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF2_PM_CAP_VER_ID = 3'h3;
+ parameter VF2_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF2_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF2_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF2_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF2_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF2_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF2_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF2_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF3_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF3_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF3_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF3_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF3_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF3_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF3_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF3_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF3_PM_CAP_VER_ID = 3'h3;
+ parameter VF3_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF3_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF3_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF3_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF3_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF3_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF3_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF3_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF4_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF4_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF4_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF4_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF4_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF4_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF4_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF4_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF4_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF4_PM_CAP_VER_ID = 3'h3;
+ parameter VF4_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF4_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF4_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF4_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF4_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF4_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF4_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF4_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF5_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF5_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF5_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF5_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF5_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF5_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF5_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF5_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF5_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF5_PM_CAP_VER_ID = 3'h3;
+ parameter VF5_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF5_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF5_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF5_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF5_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF5_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF5_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF5_TPHR_CAP_VER = 4'h1;
+ output CFGERRCOROUT;
+ output CFGERRFATALOUT;
+ output CFGERRNONFATALOUT;
+ output CFGEXTREADRECEIVED;
+ output CFGEXTWRITERECEIVED;
+ output CFGHOTRESETOUT;
+ output CFGINPUTUPDATEDONE;
+ output CFGINTERRUPTAOUTPUT;
+ output CFGINTERRUPTBOUTPUT;
+ output CFGINTERRUPTCOUTPUT;
+ output CFGINTERRUPTDOUTPUT;
+ output CFGINTERRUPTMSIFAIL;
+ output CFGINTERRUPTMSIMASKUPDATE;
+ output CFGINTERRUPTMSISENT;
+ output CFGINTERRUPTMSIXFAIL;
+ output CFGINTERRUPTMSIXSENT;
+ output CFGINTERRUPTSENT;
+ output CFGLOCALERROR;
+ output CFGLTRENABLE;
+ output CFGMCUPDATEDONE;
+ output CFGMGMTREADWRITEDONE;
+ output CFGMSGRECEIVED;
+ output CFGMSGTRANSMITDONE;
+ output CFGPERFUNCTIONUPDATEDONE;
+ output CFGPHYLINKDOWN;
+ output CFGPLSTATUSCHANGE;
+ output CFGPOWERSTATECHANGEINTERRUPT;
+ output CFGTPHSTTREADENABLE;
+ output CFGTPHSTTWRITEENABLE;
+ output DRPRDY;
+ output MAXISCQTLAST;
+ output MAXISCQTVALID;
+ output MAXISRCTLAST;
+ output MAXISRCTVALID;
+ output PCIERQSEQNUMVLD;
+ output PCIERQTAGVLD;
+ output PIPERX0POLARITY;
+ output PIPERX1POLARITY;
+ output PIPERX2POLARITY;
+ output PIPERX3POLARITY;
+ output PIPERX4POLARITY;
+ output PIPERX5POLARITY;
+ output PIPERX6POLARITY;
+ output PIPERX7POLARITY;
+ output PIPETX0COMPLIANCE;
+ output PIPETX0DATAVALID;
+ output PIPETX0ELECIDLE;
+ output PIPETX0STARTBLOCK;
+ output PIPETX1COMPLIANCE;
+ output PIPETX1DATAVALID;
+ output PIPETX1ELECIDLE;
+ output PIPETX1STARTBLOCK;
+ output PIPETX2COMPLIANCE;
+ output PIPETX2DATAVALID;
+ output PIPETX2ELECIDLE;
+ output PIPETX2STARTBLOCK;
+ output PIPETX3COMPLIANCE;
+ output PIPETX3DATAVALID;
+ output PIPETX3ELECIDLE;
+ output PIPETX3STARTBLOCK;
+ output PIPETX4COMPLIANCE;
+ output PIPETX4DATAVALID;
+ output PIPETX4ELECIDLE;
+ output PIPETX4STARTBLOCK;
+ output PIPETX5COMPLIANCE;
+ output PIPETX5DATAVALID;
+ output PIPETX5ELECIDLE;
+ output PIPETX5STARTBLOCK;
+ output PIPETX6COMPLIANCE;
+ output PIPETX6DATAVALID;
+ output PIPETX6ELECIDLE;
+ output PIPETX6STARTBLOCK;
+ output PIPETX7COMPLIANCE;
+ output PIPETX7DATAVALID;
+ output PIPETX7ELECIDLE;
+ output PIPETX7STARTBLOCK;
+ output PIPETXDEEMPH;
+ output PIPETXRCVRDET;
+ output PIPETXRESET;
+ output PIPETXSWING;
+ output PLEQINPROGRESS;
+ output [11:0] CFGFCCPLD;
+ output [11:0] CFGFCNPD;
+ output [11:0] CFGFCPD;
+ output [11:0] CFGVFSTATUS;
+ output [143:0] MIREPLAYRAMWRITEDATA;
+ output [143:0] MIREQUESTRAMWRITEDATA;
+ output [15:0] CFGPERFUNCSTATUSDATA;
+ output [15:0] DBGDATAOUT;
+ output [15:0] DRPDO;
+ output [17:0] CFGVFPOWERSTATE;
+ output [17:0] CFGVFTPHSTMODE;
+ output [1:0] CFGDPASUBSTATECHANGE;
+ output [1:0] CFGFLRINPROCESS;
+ output [1:0] CFGINTERRUPTMSIENABLE;
+ output [1:0] CFGINTERRUPTMSIXENABLE;
+ output [1:0] CFGINTERRUPTMSIXMASK;
+ output [1:0] CFGLINKPOWERSTATE;
+ output [1:0] CFGOBFFENABLE;
+ output [1:0] CFGPHYLINKSTATUS;
+ output [1:0] CFGRCBSTATUS;
+ output [1:0] CFGTPHREQUESTERENABLE;
+ output [1:0] MIREPLAYRAMREADENABLE;
+ output [1:0] MIREPLAYRAMWRITEENABLE;
+ output [1:0] PCIERQTAGAV;
+ output [1:0] PCIETFCNPDAV;
+ output [1:0] PCIETFCNPHAV;
+ output [1:0] PIPERX0EQCONTROL;
+ output [1:0] PIPERX1EQCONTROL;
+ output [1:0] PIPERX2EQCONTROL;
+ output [1:0] PIPERX3EQCONTROL;
+ output [1:0] PIPERX4EQCONTROL;
+ output [1:0] PIPERX5EQCONTROL;
+ output [1:0] PIPERX6EQCONTROL;
+ output [1:0] PIPERX7EQCONTROL;
+ output [1:0] PIPETX0CHARISK;
+ output [1:0] PIPETX0EQCONTROL;
+ output [1:0] PIPETX0POWERDOWN;
+ output [1:0] PIPETX0SYNCHEADER;
+ output [1:0] PIPETX1CHARISK;
+ output [1:0] PIPETX1EQCONTROL;
+ output [1:0] PIPETX1POWERDOWN;
+ output [1:0] PIPETX1SYNCHEADER;
+ output [1:0] PIPETX2CHARISK;
+ output [1:0] PIPETX2EQCONTROL;
+ output [1:0] PIPETX2POWERDOWN;
+ output [1:0] PIPETX2SYNCHEADER;
+ output [1:0] PIPETX3CHARISK;
+ output [1:0] PIPETX3EQCONTROL;
+ output [1:0] PIPETX3POWERDOWN;
+ output [1:0] PIPETX3SYNCHEADER;
+ output [1:0] PIPETX4CHARISK;
+ output [1:0] PIPETX4EQCONTROL;
+ output [1:0] PIPETX4POWERDOWN;
+ output [1:0] PIPETX4SYNCHEADER;
+ output [1:0] PIPETX5CHARISK;
+ output [1:0] PIPETX5EQCONTROL;
+ output [1:0] PIPETX5POWERDOWN;
+ output [1:0] PIPETX5SYNCHEADER;
+ output [1:0] PIPETX6CHARISK;
+ output [1:0] PIPETX6EQCONTROL;
+ output [1:0] PIPETX6POWERDOWN;
+ output [1:0] PIPETX6SYNCHEADER;
+ output [1:0] PIPETX7CHARISK;
+ output [1:0] PIPETX7EQCONTROL;
+ output [1:0] PIPETX7POWERDOWN;
+ output [1:0] PIPETX7SYNCHEADER;
+ output [1:0] PIPETXRATE;
+ output [1:0] PLEQPHASE;
+ output [255:0] MAXISCQTDATA;
+ output [255:0] MAXISRCTDATA;
+ output [2:0] CFGCURRENTSPEED;
+ output [2:0] CFGMAXPAYLOAD;
+ output [2:0] CFGMAXREADREQ;
+ output [2:0] CFGTPHFUNCTIONNUM;
+ output [2:0] PIPERX0EQPRESET;
+ output [2:0] PIPERX1EQPRESET;
+ output [2:0] PIPERX2EQPRESET;
+ output [2:0] PIPERX3EQPRESET;
+ output [2:0] PIPERX4EQPRESET;
+ output [2:0] PIPERX5EQPRESET;
+ output [2:0] PIPERX6EQPRESET;
+ output [2:0] PIPERX7EQPRESET;
+ output [2:0] PIPETXMARGIN;
+ output [31:0] CFGEXTWRITEDATA;
+ output [31:0] CFGINTERRUPTMSIDATA;
+ output [31:0] CFGMGMTREADDATA;
+ output [31:0] CFGTPHSTTWRITEDATA;
+ output [31:0] PIPETX0DATA;
+ output [31:0] PIPETX1DATA;
+ output [31:0] PIPETX2DATA;
+ output [31:0] PIPETX3DATA;
+ output [31:0] PIPETX4DATA;
+ output [31:0] PIPETX5DATA;
+ output [31:0] PIPETX6DATA;
+ output [31:0] PIPETX7DATA;
+ output [3:0] CFGEXTWRITEBYTEENABLE;
+ output [3:0] CFGNEGOTIATEDWIDTH;
+ output [3:0] CFGTPHSTTWRITEBYTEVALID;
+ output [3:0] MICOMPLETIONRAMREADENABLEL;
+ output [3:0] MICOMPLETIONRAMREADENABLEU;
+ output [3:0] MICOMPLETIONRAMWRITEENABLEL;
+ output [3:0] MICOMPLETIONRAMWRITEENABLEU;
+ output [3:0] MIREQUESTRAMREADENABLE;
+ output [3:0] MIREQUESTRAMWRITEENABLE;
+ output [3:0] PCIERQSEQNUM;
+ output [3:0] PIPERX0EQLPTXPRESET;
+ output [3:0] PIPERX1EQLPTXPRESET;
+ output [3:0] PIPERX2EQLPTXPRESET;
+ output [3:0] PIPERX3EQLPTXPRESET;
+ output [3:0] PIPERX4EQLPTXPRESET;
+ output [3:0] PIPERX5EQLPTXPRESET;
+ output [3:0] PIPERX6EQLPTXPRESET;
+ output [3:0] PIPERX7EQLPTXPRESET;
+ output [3:0] PIPETX0EQPRESET;
+ output [3:0] PIPETX1EQPRESET;
+ output [3:0] PIPETX2EQPRESET;
+ output [3:0] PIPETX3EQPRESET;
+ output [3:0] PIPETX4EQPRESET;
+ output [3:0] PIPETX5EQPRESET;
+ output [3:0] PIPETX6EQPRESET;
+ output [3:0] PIPETX7EQPRESET;
+ output [3:0] SAXISCCTREADY;
+ output [3:0] SAXISRQTREADY;
+ output [4:0] CFGMSGRECEIVEDTYPE;
+ output [4:0] CFGTPHSTTADDRESS;
+ output [5:0] CFGFUNCTIONPOWERSTATE;
+ output [5:0] CFGINTERRUPTMSIMMENABLE;
+ output [5:0] CFGINTERRUPTMSIVFENABLE;
+ output [5:0] CFGINTERRUPTMSIXVFENABLE;
+ output [5:0] CFGINTERRUPTMSIXVFMASK;
+ output [5:0] CFGLTSSMSTATE;
+ output [5:0] CFGTPHSTMODE;
+ output [5:0] CFGVFFLRINPROCESS;
+ output [5:0] CFGVFTPHREQUESTERENABLE;
+ output [5:0] PCIECQNPREQCOUNT;
+ output [5:0] PCIERQTAG;
+ output [5:0] PIPERX0EQLPLFFS;
+ output [5:0] PIPERX1EQLPLFFS;
+ output [5:0] PIPERX2EQLPLFFS;
+ output [5:0] PIPERX3EQLPLFFS;
+ output [5:0] PIPERX4EQLPLFFS;
+ output [5:0] PIPERX5EQLPLFFS;
+ output [5:0] PIPERX6EQLPLFFS;
+ output [5:0] PIPERX7EQLPLFFS;
+ output [5:0] PIPETX0EQDEEMPH;
+ output [5:0] PIPETX1EQDEEMPH;
+ output [5:0] PIPETX2EQDEEMPH;
+ output [5:0] PIPETX3EQDEEMPH;
+ output [5:0] PIPETX4EQDEEMPH;
+ output [5:0] PIPETX5EQDEEMPH;
+ output [5:0] PIPETX6EQDEEMPH;
+ output [5:0] PIPETX7EQDEEMPH;
+ output [71:0] MICOMPLETIONRAMWRITEDATAL;
+ output [71:0] MICOMPLETIONRAMWRITEDATAU;
+ output [74:0] MAXISRCTUSER;
+ output [7:0] CFGEXTFUNCTIONNUMBER;
+ output [7:0] CFGFCCPLH;
+ output [7:0] CFGFCNPH;
+ output [7:0] CFGFCPH;
+ output [7:0] CFGFUNCTIONSTATUS;
+ output [7:0] CFGMSGRECEIVEDDATA;
+ output [7:0] MAXISCQTKEEP;
+ output [7:0] MAXISRCTKEEP;
+ output [7:0] PLGEN3PCSRXSLIDE;
+ output [84:0] MAXISCQTUSER;
+ output [8:0] MIREPLAYRAMADDRESS;
+ output [8:0] MIREQUESTRAMREADADDRESSA;
+ output [8:0] MIREQUESTRAMREADADDRESSB;
+ output [8:0] MIREQUESTRAMWRITEADDRESSA;
+ output [8:0] MIREQUESTRAMWRITEADDRESSB;
+ output [9:0] CFGEXTREGISTERNUMBER;
+ output [9:0] MICOMPLETIONRAMREADADDRESSAL;
+ output [9:0] MICOMPLETIONRAMREADADDRESSAU;
+ output [9:0] MICOMPLETIONRAMREADADDRESSBL;
+ output [9:0] MICOMPLETIONRAMREADADDRESSBU;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSAL;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSAU;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSBL;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSBU;
+ input CFGCONFIGSPACEENABLE;
+ input CFGERRCORIN;
+ input CFGERRUNCORIN;
+ input CFGEXTREADDATAVALID;
+ input CFGHOTRESETIN;
+ input CFGINPUTUPDATEREQUEST;
+ input CFGINTERRUPTMSITPHPRESENT;
+ input CFGINTERRUPTMSIXINT;
+ input CFGLINKTRAININGENABLE;
+ input CFGMCUPDATEREQUEST;
+ input CFGMGMTREAD;
+ input CFGMGMTTYPE1CFGREGACCESS;
+ input CFGMGMTWRITE;
+ input CFGMSGTRANSMIT;
+ input CFGPERFUNCTIONOUTPUTREQUEST;
+ input CFGPOWERSTATECHANGEACK;
+ input CFGREQPMTRANSITIONL23READY;
+ input CFGTPHSTTREADDATAVALID;
+ input CORECLK;
+ input CORECLKMICOMPLETIONRAML;
+ input CORECLKMICOMPLETIONRAMU;
+ input CORECLKMIREPLAYRAM;
+ input CORECLKMIREQUESTRAM;
+ input DRPCLK;
+ input DRPEN;
+ input DRPWE;
+ input MGMTRESETN;
+ input MGMTSTICKYRESETN;
+ input PCIECQNPREQ;
+ input PIPECLK;
+ input PIPERESETN;
+ input PIPERX0DATAVALID;
+ input PIPERX0ELECIDLE;
+ input PIPERX0EQDONE;
+ input PIPERX0EQLPADAPTDONE;
+ input PIPERX0EQLPLFFSSEL;
+ input PIPERX0PHYSTATUS;
+ input PIPERX0STARTBLOCK;
+ input PIPERX0VALID;
+ input PIPERX1DATAVALID;
+ input PIPERX1ELECIDLE;
+ input PIPERX1EQDONE;
+ input PIPERX1EQLPADAPTDONE;
+ input PIPERX1EQLPLFFSSEL;
+ input PIPERX1PHYSTATUS;
+ input PIPERX1STARTBLOCK;
+ input PIPERX1VALID;
+ input PIPERX2DATAVALID;
+ input PIPERX2ELECIDLE;
+ input PIPERX2EQDONE;
+ input PIPERX2EQLPADAPTDONE;
+ input PIPERX2EQLPLFFSSEL;
+ input PIPERX2PHYSTATUS;
+ input PIPERX2STARTBLOCK;
+ input PIPERX2VALID;
+ input PIPERX3DATAVALID;
+ input PIPERX3ELECIDLE;
+ input PIPERX3EQDONE;
+ input PIPERX3EQLPADAPTDONE;
+ input PIPERX3EQLPLFFSSEL;
+ input PIPERX3PHYSTATUS;
+ input PIPERX3STARTBLOCK;
+ input PIPERX3VALID;
+ input PIPERX4DATAVALID;
+ input PIPERX4ELECIDLE;
+ input PIPERX4EQDONE;
+ input PIPERX4EQLPADAPTDONE;
+ input PIPERX4EQLPLFFSSEL;
+ input PIPERX4PHYSTATUS;
+ input PIPERX4STARTBLOCK;
+ input PIPERX4VALID;
+ input PIPERX5DATAVALID;
+ input PIPERX5ELECIDLE;
+ input PIPERX5EQDONE;
+ input PIPERX5EQLPADAPTDONE;
+ input PIPERX5EQLPLFFSSEL;
+ input PIPERX5PHYSTATUS;
+ input PIPERX5STARTBLOCK;
+ input PIPERX5VALID;
+ input PIPERX6DATAVALID;
+ input PIPERX6ELECIDLE;
+ input PIPERX6EQDONE;
+ input PIPERX6EQLPADAPTDONE;
+ input PIPERX6EQLPLFFSSEL;
+ input PIPERX6PHYSTATUS;
+ input PIPERX6STARTBLOCK;
+ input PIPERX6VALID;
+ input PIPERX7DATAVALID;
+ input PIPERX7ELECIDLE;
+ input PIPERX7EQDONE;
+ input PIPERX7EQLPADAPTDONE;
+ input PIPERX7EQLPLFFSSEL;
+ input PIPERX7PHYSTATUS;
+ input PIPERX7STARTBLOCK;
+ input PIPERX7VALID;
+ input PIPETX0EQDONE;
+ input PIPETX1EQDONE;
+ input PIPETX2EQDONE;
+ input PIPETX3EQDONE;
+ input PIPETX4EQDONE;
+ input PIPETX5EQDONE;
+ input PIPETX6EQDONE;
+ input PIPETX7EQDONE;
+ input PLDISABLESCRAMBLER;
+ input PLEQRESETEIEOSCOUNT;
+ input PLGEN3PCSDISABLE;
+ input RECCLK;
+ input RESETN;
+ input SAXISCCTLAST;
+ input SAXISCCTVALID;
+ input SAXISRQTLAST;
+ input SAXISRQTVALID;
+ input USERCLK;
+ input [10:0] DRPADDR;
+ input [143:0] MICOMPLETIONRAMREADDATA;
+ input [143:0] MIREPLAYRAMREADDATA;
+ input [143:0] MIREQUESTRAMREADDATA;
+ input [15:0] CFGDEVID;
+ input [15:0] CFGSUBSYSID;
+ input [15:0] CFGSUBSYSVENDID;
+ input [15:0] CFGVENDID;
+ input [15:0] DRPDI;
+ input [17:0] PIPERX0EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX1EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX2EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX3EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX4EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX5EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX6EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPERX7EQLPNEWTXCOEFFORPRESET;
+ input [17:0] PIPETX0EQCOEFF;
+ input [17:0] PIPETX1EQCOEFF;
+ input [17:0] PIPETX2EQCOEFF;
+ input [17:0] PIPETX3EQCOEFF;
+ input [17:0] PIPETX4EQCOEFF;
+ input [17:0] PIPETX5EQCOEFF;
+ input [17:0] PIPETX6EQCOEFF;
+ input [17:0] PIPETX7EQCOEFF;
+ input [18:0] CFGMGMTADDR;
+ input [1:0] CFGFLRDONE;
+ input [1:0] CFGINTERRUPTMSITPHTYPE;
+ input [1:0] CFGINTERRUPTPENDING;
+ input [1:0] PIPERX0CHARISK;
+ input [1:0] PIPERX0SYNCHEADER;
+ input [1:0] PIPERX1CHARISK;
+ input [1:0] PIPERX1SYNCHEADER;
+ input [1:0] PIPERX2CHARISK;
+ input [1:0] PIPERX2SYNCHEADER;
+ input [1:0] PIPERX3CHARISK;
+ input [1:0] PIPERX3SYNCHEADER;
+ input [1:0] PIPERX4CHARISK;
+ input [1:0] PIPERX4SYNCHEADER;
+ input [1:0] PIPERX5CHARISK;
+ input [1:0] PIPERX5SYNCHEADER;
+ input [1:0] PIPERX6CHARISK;
+ input [1:0] PIPERX6SYNCHEADER;
+ input [1:0] PIPERX7CHARISK;
+ input [1:0] PIPERX7SYNCHEADER;
+ input [21:0] MAXISCQTREADY;
+ input [21:0] MAXISRCTREADY;
+ input [255:0] SAXISCCTDATA;
+ input [255:0] SAXISRQTDATA;
+ input [2:0] CFGDSFUNCTIONNUMBER;
+ input [2:0] CFGFCSEL;
+ input [2:0] CFGINTERRUPTMSIATTR;
+ input [2:0] CFGINTERRUPTMSIFUNCTIONNUMBER;
+ input [2:0] CFGMSGTRANSMITTYPE;
+ input [2:0] CFGPERFUNCSTATUSCONTROL;
+ input [2:0] CFGPERFUNCTIONNUMBER;
+ input [2:0] PIPERX0STATUS;
+ input [2:0] PIPERX1STATUS;
+ input [2:0] PIPERX2STATUS;
+ input [2:0] PIPERX3STATUS;
+ input [2:0] PIPERX4STATUS;
+ input [2:0] PIPERX5STATUS;
+ input [2:0] PIPERX6STATUS;
+ input [2:0] PIPERX7STATUS;
+ input [31:0] CFGEXTREADDATA;
+ input [31:0] CFGINTERRUPTMSIINT;
+ input [31:0] CFGINTERRUPTMSIXDATA;
+ input [31:0] CFGMGMTWRITEDATA;
+ input [31:0] CFGMSGTRANSMITDATA;
+ input [31:0] CFGTPHSTTREADDATA;
+ input [31:0] PIPERX0DATA;
+ input [31:0] PIPERX1DATA;
+ input [31:0] PIPERX2DATA;
+ input [31:0] PIPERX3DATA;
+ input [31:0] PIPERX4DATA;
+ input [31:0] PIPERX5DATA;
+ input [31:0] PIPERX6DATA;
+ input [31:0] PIPERX7DATA;
+ input [32:0] SAXISCCTUSER;
+ input [3:0] CFGINTERRUPTINT;
+ input [3:0] CFGINTERRUPTMSISELECT;
+ input [3:0] CFGMGMTBYTEENABLE;
+ input [4:0] CFGDSDEVICENUMBER;
+ input [59:0] SAXISRQTUSER;
+ input [5:0] CFGVFFLRDONE;
+ input [5:0] PIPEEQFS;
+ input [5:0] PIPEEQLF;
+ input [63:0] CFGDSN;
+ input [63:0] CFGINTERRUPTMSIPENDINGSTATUS;
+ input [63:0] CFGINTERRUPTMSIXADDRESS;
+ input [7:0] CFGDSBUSNUMBER;
+ input [7:0] CFGDSPORTNUMBER;
+ input [7:0] CFGREVID;
+ input [7:0] PLGEN3PCSRXSYNCDONE;
+ input [7:0] SAXISCCTKEEP;
+ input [7:0] SAXISRQTKEEP;
+ input [8:0] CFGINTERRUPTMSITPHSTTAG;
+endmodule
+
+module XADC (...);
+ parameter [15:0] INIT_40 = 16'h0;
+ parameter [15:0] INIT_41 = 16'h0;
+ parameter [15:0] INIT_42 = 16'h0800;
+ parameter [15:0] INIT_43 = 16'h0;
+ parameter [15:0] INIT_44 = 16'h0;
+ parameter [15:0] INIT_45 = 16'h0;
+ parameter [15:0] INIT_46 = 16'h0;
+ parameter [15:0] INIT_47 = 16'h0;
+ parameter [15:0] INIT_48 = 16'h0;
+ parameter [15:0] INIT_49 = 16'h0;
+ parameter [15:0] INIT_4A = 16'h0;
+ parameter [15:0] INIT_4B = 16'h0;
+ parameter [15:0] INIT_4C = 16'h0;
+ parameter [15:0] INIT_4D = 16'h0;
+ parameter [15:0] INIT_4E = 16'h0;
+ parameter [15:0] INIT_4F = 16'h0;
+ parameter [15:0] INIT_50 = 16'h0;
+ parameter [15:0] INIT_51 = 16'h0;
+ parameter [15:0] INIT_52 = 16'h0;
+ parameter [15:0] INIT_53 = 16'h0;
+ parameter [15:0] INIT_54 = 16'h0;
+ parameter [15:0] INIT_55 = 16'h0;
+ parameter [15:0] INIT_56 = 16'h0;
+ parameter [15:0] INIT_57 = 16'h0;
+ parameter [15:0] INIT_58 = 16'h0;
+ parameter [15:0] INIT_59 = 16'h0;
+ parameter [15:0] INIT_5A = 16'h0;
+ parameter [15:0] INIT_5B = 16'h0;
+ parameter [15:0] INIT_5C = 16'h0;
+ parameter [15:0] INIT_5D = 16'h0;
+ parameter [15:0] INIT_5E = 16'h0;
+ parameter [15:0] INIT_5F = 16'h0;
+ parameter IS_CONVSTCLK_INVERTED = 1'b0;
+ parameter IS_DCLK_INVERTED = 1'b0;
+ parameter SIM_DEVICE = "7SERIES";
+ parameter SIM_MONITOR_FILE = "design.txt";
+ output BUSY;
+ output DRDY;
+ output EOC;
+ output EOS;
+ output JTAGBUSY;
+ output JTAGLOCKED;
+ output JTAGMODIFIED;
+ output OT;
+ output [15:0] DO;
+ output [7:0] ALM;
+ output [4:0] CHANNEL;
+ output [4:0] MUXADDR;
+ input CONVST;
+ (* invertible_pin = "IS_CONVSTCLK_INVERTED" *)
+ input CONVSTCLK;
+ (* invertible_pin = "IS_DCLK_INVERTED" *)
+ input DCLK;
+ input DEN;
+ input DWE;
+ input RESET;
+ input VN;
+ input VP;
+ input [15:0] DI;
+ input [15:0] VAUXN;
+ input [15:0] VAUXP;
+ input [6:0] DADDR;
+endmodule
+
+module DSP48E1 (...);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter integer PREG = 1;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_DPORT = "FALSE";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b0;
+ parameter [6:0] IS_OPMODE_INVERTED = 7'b0;
+ output [29:0] ACOUT;
+ output [17:0] BCOUT;
+ output CARRYCASCOUT;
+ output [3:0] CARRYOUT;
+ output MULTSIGNOUT;
+ output OVERFLOW;
+ output [47:0] P;
+ output PATTERNBDETECT;
+ output PATTERNDETECT;
+ output [47:0] PCOUT;
+ output UNDERFLOW;
+ input [29:0] A;
+ input [29:0] ACIN;
+ (* invertible_pin = "IS_ALUMODE_INVERTED" *)
+ input [3:0] ALUMODE;
+ input [17:0] B;
+ input [17:0] BCIN;
+ input [47:0] C;
+ input CARRYCASCIN;
+ (* invertible_pin = "IS_CARRYIN_INVERTED" *)
+ input CARRYIN;
+ input [2:0] CARRYINSEL;
+ input CEA1;
+ input CEA2;
+ input CEAD;
+ input CEALUMODE;
+ input CEB1;
+ input CEB2;
+ input CEC;
+ input CECARRYIN;
+ input CECTRL;
+ input CED;
+ input CEINMODE;
+ input CEM;
+ input CEP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [24:0] D;
+ (* invertible_pin = "IS_INMODE_INVERTED" *)
+ input [4:0] INMODE;
+ input MULTSIGNIN;
+ (* invertible_pin = "IS_OPMODE_INVERTED" *)
+ input [6:0] OPMODE;
+ input [47:0] PCIN;
+ input RSTA;
+ input RSTALLCARRYIN;
+ input RSTALUMODE;
+ input RSTB;
+ input RSTC;
+ input RSTCTRL;
+ input RSTD;
+ input RSTINMODE;
+ input RSTM;
+ input RSTP;
+endmodule
+
+module BUFGCE (...);
+ parameter CE_TYPE = "SYNC";
+ parameter [0:0] IS_CE_INVERTED = 1'b0;
+ parameter [0:0] IS_I_INVERTED = 1'b0;
+ (* clkbuf_driver *)
+ output O;
+ (* invertible_pin = "IS_CE_INVERTED" *)
+ input CE;
+ (* invertible_pin = "IS_I_INVERTED" *)
+ input I;
+endmodule
+
+module BUFGCE_1 (...);
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input I;
+endmodule
+
+module BUFGMUX (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_1 (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_CTRL (...);
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFH (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFIO (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFMR (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFMRCE (...);
+ parameter CE_TYPE = "SYNC";
+ parameter integer INIT_OUT = 0;
+ parameter [0:0] IS_CE_INVERTED = 1'b0;
+ (* clkbuf_driver *)
+ output O;
+ (* invertible_pin = "IS_CE_INVERTED" *)
+ input CE;
+ input I;
+endmodule
+
+module BUFR (...);
+ parameter BUFR_DIVIDE = "BYPASS";
+ parameter SIM_DEVICE = "7SERIES";
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input CLR;
+ input I;
+endmodule
+
+module MMCME2_ADV (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter CLKFBOUT_USE_FINE_PS = "FALSE";
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKIN2_PERIOD = 0.000;
+ parameter real CLKIN_FREQ_MAX = 1066.000;
+ parameter real CLKIN_FREQ_MIN = 10.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter CLKOUT0_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUT1_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter CLKOUT2_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT3_USE_FINE_PS = "FALSE";
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter CLKOUT4_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter CLKOUT5_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter CLKOUT6_USE_FINE_PS = "FALSE";
+ parameter real CLKPFD_FREQ_MAX = 550.000;
+ parameter real CLKPFD_FREQ_MIN = 10.000;
+ parameter COMPENSATION = "ZHOLD";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
+ parameter [0:0] IS_PSEN_INVERTED = 1'b0;
+ parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER1 = 0.010;
+ parameter real REF_JITTER2 = 0.010;
+ parameter SS_EN = "FALSE";
+ parameter SS_MODE = "CENTER_HIGH";
+ parameter integer SS_MOD_PERIOD = 10000;
+ parameter STARTUP_WAIT = "FALSE";
+ parameter real VCOCLK_FREQ_MAX = 1600.000;
+ parameter real VCOCLK_FREQ_MIN = 600.000;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKFBSTOPPED;
+ output CLKINSTOPPED;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output [15:0] DO;
+ output DRDY;
+ output LOCKED;
+ output PSDONE;
+ input CLKFBIN;
+ input CLKIN1;
+ input CLKIN2;
+ (* invertible_pin = "IS_CLKINSEL_INVERTED" *)
+ input CLKINSEL;
+ input [6:0] DADDR;
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ input PSCLK;
+ (* invertible_pin = "IS_PSEN_INVERTED" *)
+ input PSEN;
+ (* invertible_pin = "IS_PSINCDEC_INVERTED" *)
+ input PSINCDEC;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module MMCME2_BASE (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter real REF_JITTER1 = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output LOCKED;
+ input CLKFBIN;
+ input CLKIN1;
+ input PWRDWN;
+ input RST;
+endmodule
+
+module PLLE2_ADV (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter COMPENSATION = "ZHOLD";
+ parameter STARTUP_WAIT = "FALSE";
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter integer CLKFBOUT_MULT = 5;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKIN2_PERIOD = 0.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER1 = 0.010;
+ parameter real REF_JITTER2 = 0.010;
+ parameter real VCOCLK_FREQ_MAX = 2133.000;
+ parameter real VCOCLK_FREQ_MIN = 800.000;
+ parameter real CLKIN_FREQ_MAX = 1066.000;
+ parameter real CLKIN_FREQ_MIN = 19.000;
+ parameter real CLKPFD_FREQ_MAX = 550.0;
+ parameter real CLKPFD_FREQ_MIN = 19.0;
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT1;
+ output CLKOUT2;
+ output CLKOUT3;
+ output CLKOUT4;
+ output CLKOUT5;
+ output DRDY;
+ output LOCKED;
+ output [15:0] DO;
+ input CLKFBIN;
+ input CLKIN1;
+ input CLKIN2;
+ (* invertible_pin = "IS_CLKINSEL_INVERTED" *)
+ input CLKINSEL;
+ input DCLK;
+ input DEN;
+ input DWE;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ input [15:0] DI;
+ input [6:0] DADDR;
+endmodule
+
+module PLLE2_BASE (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter integer CLKFBOUT_MULT = 5;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter real REF_JITTER1 = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT1;
+ output CLKOUT2;
+ output CLKOUT3;
+ output CLKOUT4;
+ output CLKOUT5;
+ output LOCKED;
+ input CLKFBIN;
+ input CLKIN1;
+ input PWRDWN;
+ input RST;
+endmodule
+
+(* keep *)
+module BSCANE2 (...);
+ parameter DISABLE_JTAG = "FALSE";
+ parameter integer JTAG_CHAIN = 1;
+ output CAPTURE;
+ output DRCK;
+ output RESET;
+ output RUNTEST;
+ output SEL;
+ output SHIFT;
+ output TCK;
+ output TDI;
+ output TMS;
+ output UPDATE;
+ input TDO;
+endmodule
+
+(* keep *)
+module CAPTUREE2 (...);
+ parameter ONESHOT = "TRUE";
+ input CAP;
+ input CLK;
+endmodule
+
+module DNA_PORT (...);
+ parameter [56:0] SIM_DNA_VALUE = 57'h0;
+ output DOUT;
+ input CLK;
+ input DIN;
+ input READ;
+ input SHIFT;
+endmodule
+
+module EFUSE_USR (...);
+ parameter [31:0] SIM_EFUSE_VALUE = 32'h00000000;
+ output [31:0] EFUSEUSR;
+endmodule
+
+module FRAME_ECCE2 (...);
+ parameter FARSRC = "EFAR";
+ parameter FRAME_RBT_IN_FILENAME = "NONE";
+ output CRCERROR;
+ output ECCERROR;
+ output ECCERRORSINGLE;
+ output SYNDROMEVALID;
+ output [12:0] SYNDROME;
+ output [25:0] FAR;
+ output [4:0] SYNBIT;
+ output [6:0] SYNWORD;
+endmodule
+
+(* keep *)
+module ICAPE2 (...);
+ parameter [31:0] DEVICE_ID = 32'h04244093;
+ parameter ICAP_WIDTH = "X32";
+ parameter SIM_CFG_FILE_NAME = "NONE";
+ output [31:0] O;
+ input CLK;
+ input CSIB;
+ input RDWRB;
+ input [31:0] I;
+endmodule
+
+(* keep *)
+module STARTUPE2 (...);
+ parameter PROG_USR = "FALSE";
+ parameter real SIM_CCLK_FREQ = 0.0;
+ output CFGCLK;
+ output CFGMCLK;
+ output EOS;
+ output PREQ;
+ input CLK;
+ input GSR;
+ input GTS;
+ input KEYCLEARB;
+ input PACK;
+ input USRCCLKO;
+ input USRCCLKTS;
+ input USRDONEO;
+ input USRDONETS;
+endmodule
+
+module USR_ACCESSE2 (...);
+ output CFGCLK;
+ output DATAVALID;
+ output [31:0] DATA;
+endmodule
+
+(* keep *)
+module DCIRESET (...);
+ output LOCKED;
+ input RST;
+endmodule
+
module IBUF_IBUFDISABLE (...);
parameter IBUF_LOW_PWR = "TRUE";
parameter IOSTANDARD = "DEFAULT";
@@ -2159,57 +4057,6 @@ module IBUFGDS_DIFF_OUT (...);
endmodule
(* keep *)
-module ICAPE2 (...);
- parameter [31:0] DEVICE_ID = 32'h04244093;
- parameter ICAP_WIDTH = "X32";
- parameter SIM_CFG_FILE_NAME = "NONE";
- output [31:0] O;
- input CLK;
- input CSIB;
- input RDWRB;
- input [31:0] I;
-endmodule
-
-module IDDR (...);
- parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
- parameter INIT_Q1 = 1'b0;
- parameter INIT_Q2 = 1'b0;
- parameter [0:0] IS_C_INVERTED = 1'b0;
- parameter [0:0] IS_D_INVERTED = 1'b0;
- parameter SRTYPE = "SYNC";
- parameter MSGON = "TRUE";
- parameter XON = "TRUE";
- output Q1;
- output Q2;
- (* clkbuf_sink *)
- input C;
- input CE;
- input D;
- input R;
- input S;
-endmodule
-
-module IDDR_2CLK (...);
- parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
- parameter INIT_Q1 = 1'b0;
- parameter INIT_Q2 = 1'b0;
- parameter [0:0] IS_CB_INVERTED = 1'b0;
- parameter [0:0] IS_C_INVERTED = 1'b0;
- parameter [0:0] IS_D_INVERTED = 1'b0;
- parameter SRTYPE = "SYNC";
- output Q1;
- output Q2;
- (* clkbuf_sink *)
- input C;
- (* clkbuf_sink *)
- input CB;
- input CE;
- input D;
- input R;
- input S;
-endmodule
-
-(* keep *)
module IDELAYCTRL (...);
parameter SIM_DEVICE = "7SERIES";
output RDY;
@@ -2234,11 +4081,14 @@ module IDELAYE2 (...);
output [4:0] CNTVALUEOUT;
output DATAOUT;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
input C;
input CE;
input CINVCTRL;
input [4:0] CNTVALUEIN;
+ (* invertible_pin = "IS_DATAIN_INVERTED" *)
input DATAIN;
+ (* invertible_pin = "IS_IDATAIN_INVERTED" *)
input IDATAIN;
input INC;
input LD;
@@ -2417,6 +4267,25 @@ module IOBUFDS_DIFF_OUT_INTERMDISABLE (...);
input TS;
endmodule
+module IOBUFDS_INTERMDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter SLEW = "SLOW";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ (* iopad_external_pin *)
+ inout IOB;
+ input I;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+ input T;
+endmodule
+
module ISERDESE2 (...);
parameter DATA_RATE = "DDR";
parameter integer DATA_WIDTH = 4;
@@ -2457,20 +4326,27 @@ module ISERDESE2 (...);
input CE1;
input CE2;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
input CLK;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKB_INVERTED" *)
input CLKB;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKDIV_INVERTED" *)
input CLKDIV;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKDIVP_INVERTED" *)
input CLKDIVP;
+ (* invertible_pin = "IS_D_INVERTED" *)
input D;
input DDLY;
input DYNCLKDIVSEL;
input DYNCLKSEL;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_OCLK_INVERTED" *)
input OCLK;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_OCLKB_INVERTED" *)
input OCLKB;
input OFB;
input RST;
@@ -2482,173 +4358,6 @@ module KEEPER (...);
inout O;
endmodule
-module LDCE (...);
- parameter [0:0] INIT = 1'b0;
- parameter [0:0] IS_CLR_INVERTED = 1'b0;
- parameter [0:0] IS_G_INVERTED = 1'b0;
- parameter MSGON = "TRUE";
- parameter XON = "TRUE";
- output Q;
- input CLR;
- input D;
- input G;
- input GE;
-endmodule
-
-module LDPE (...);
- parameter [0:0] INIT = 1'b1;
- parameter [0:0] IS_G_INVERTED = 1'b0;
- parameter [0:0] IS_PRE_INVERTED = 1'b0;
- parameter MSGON = "TRUE";
- parameter XON = "TRUE";
- output Q;
- input D;
- input G;
- input GE;
- input PRE;
-endmodule
-
-module MMCME2_ADV (...);
- parameter BANDWIDTH = "OPTIMIZED";
- parameter real CLKFBOUT_MULT_F = 5.000;
- parameter real CLKFBOUT_PHASE = 0.000;
- parameter CLKFBOUT_USE_FINE_PS = "FALSE";
- parameter real CLKIN1_PERIOD = 0.000;
- parameter real CLKIN2_PERIOD = 0.000;
- parameter real CLKIN_FREQ_MAX = 1066.000;
- parameter real CLKIN_FREQ_MIN = 10.000;
- parameter real CLKOUT0_DIVIDE_F = 1.000;
- parameter real CLKOUT0_DUTY_CYCLE = 0.500;
- parameter real CLKOUT0_PHASE = 0.000;
- parameter CLKOUT0_USE_FINE_PS = "FALSE";
- parameter integer CLKOUT1_DIVIDE = 1;
- parameter real CLKOUT1_DUTY_CYCLE = 0.500;
- parameter real CLKOUT1_PHASE = 0.000;
- parameter CLKOUT1_USE_FINE_PS = "FALSE";
- parameter integer CLKOUT2_DIVIDE = 1;
- parameter real CLKOUT2_DUTY_CYCLE = 0.500;
- parameter real CLKOUT2_PHASE = 0.000;
- parameter CLKOUT2_USE_FINE_PS = "FALSE";
- parameter integer CLKOUT3_DIVIDE = 1;
- parameter real CLKOUT3_DUTY_CYCLE = 0.500;
- parameter real CLKOUT3_PHASE = 0.000;
- parameter CLKOUT3_USE_FINE_PS = "FALSE";
- parameter CLKOUT4_CASCADE = "FALSE";
- parameter integer CLKOUT4_DIVIDE = 1;
- parameter real CLKOUT4_DUTY_CYCLE = 0.500;
- parameter real CLKOUT4_PHASE = 0.000;
- parameter CLKOUT4_USE_FINE_PS = "FALSE";
- parameter integer CLKOUT5_DIVIDE = 1;
- parameter real CLKOUT5_DUTY_CYCLE = 0.500;
- parameter real CLKOUT5_PHASE = 0.000;
- parameter CLKOUT5_USE_FINE_PS = "FALSE";
- parameter integer CLKOUT6_DIVIDE = 1;
- parameter real CLKOUT6_DUTY_CYCLE = 0.500;
- parameter real CLKOUT6_PHASE = 0.000;
- parameter CLKOUT6_USE_FINE_PS = "FALSE";
- parameter real CLKPFD_FREQ_MAX = 550.000;
- parameter real CLKPFD_FREQ_MIN = 10.000;
- parameter COMPENSATION = "ZHOLD";
- parameter integer DIVCLK_DIVIDE = 1;
- parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
- parameter [0:0] IS_PSEN_INVERTED = 1'b0;
- parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0;
- parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
- parameter [0:0] IS_RST_INVERTED = 1'b0;
- parameter real REF_JITTER1 = 0.010;
- parameter real REF_JITTER2 = 0.010;
- parameter SS_EN = "FALSE";
- parameter SS_MODE = "CENTER_HIGH";
- parameter integer SS_MOD_PERIOD = 10000;
- parameter STARTUP_WAIT = "FALSE";
- parameter real VCOCLK_FREQ_MAX = 1600.000;
- parameter real VCOCLK_FREQ_MIN = 600.000;
- parameter STARTUP_WAIT = "FALSE";
- output CLKFBOUT;
- output CLKFBOUTB;
- output CLKFBSTOPPED;
- output CLKINSTOPPED;
- output CLKOUT0;
- output CLKOUT0B;
- output CLKOUT1;
- output CLKOUT1B;
- output CLKOUT2;
- output CLKOUT2B;
- output CLKOUT3;
- output CLKOUT3B;
- output CLKOUT4;
- output CLKOUT5;
- output CLKOUT6;
- output [15:0] DO;
- output DRDY;
- output LOCKED;
- output PSDONE;
- input CLKFBIN;
- input CLKIN1;
- input CLKIN2;
- input CLKINSEL;
- input [6:0] DADDR;
- input DCLK;
- input DEN;
- input [15:0] DI;
- input DWE;
- input PSCLK;
- input PSEN;
- input PSINCDEC;
- input PWRDWN;
- input RST;
-endmodule
-
-module MMCME2_BASE (...);
- parameter BANDWIDTH = "OPTIMIZED";
- parameter real CLKFBOUT_MULT_F = 5.000;
- parameter real CLKFBOUT_PHASE = 0.000;
- parameter real CLKIN1_PERIOD = 0.000;
- parameter real CLKOUT0_DIVIDE_F = 1.000;
- parameter real CLKOUT0_DUTY_CYCLE = 0.500;
- parameter real CLKOUT0_PHASE = 0.000;
- parameter integer CLKOUT1_DIVIDE = 1;
- parameter real CLKOUT1_DUTY_CYCLE = 0.500;
- parameter real CLKOUT1_PHASE = 0.000;
- parameter integer CLKOUT2_DIVIDE = 1;
- parameter real CLKOUT2_DUTY_CYCLE = 0.500;
- parameter real CLKOUT2_PHASE = 0.000;
- parameter integer CLKOUT3_DIVIDE = 1;
- parameter real CLKOUT3_DUTY_CYCLE = 0.500;
- parameter real CLKOUT3_PHASE = 0.000;
- parameter CLKOUT4_CASCADE = "FALSE";
- parameter integer CLKOUT4_DIVIDE = 1;
- parameter real CLKOUT4_DUTY_CYCLE = 0.500;
- parameter real CLKOUT4_PHASE = 0.000;
- parameter integer CLKOUT5_DIVIDE = 1;
- parameter real CLKOUT5_DUTY_CYCLE = 0.500;
- parameter real CLKOUT5_PHASE = 0.000;
- parameter integer CLKOUT6_DIVIDE = 1;
- parameter real CLKOUT6_DUTY_CYCLE = 0.500;
- parameter real CLKOUT6_PHASE = 0.000;
- parameter integer DIVCLK_DIVIDE = 1;
- parameter real REF_JITTER1 = 0.010;
- parameter STARTUP_WAIT = "FALSE";
- output CLKFBOUT;
- output CLKFBOUTB;
- output CLKOUT0;
- output CLKOUT0B;
- output CLKOUT1;
- output CLKOUT1B;
- output CLKOUT2;
- output CLKOUT2B;
- output CLKOUT3;
- output CLKOUT3B;
- output CLKOUT4;
- output CLKOUT5;
- output CLKOUT6;
- output LOCKED;
- input CLKFBIN;
- input CLKIN1;
- input PWRDWN;
- input RST;
-endmodule
-
module OBUFDS (...);
parameter CAPACITANCE = "DONT_CARE";
parameter IOSTANDARD = "DEFAULT";
@@ -2683,25 +4392,6 @@ module OBUFTDS (...);
input T;
endmodule
-module ODDR (...);
- output Q;
- (* clkbuf_sink *)
- input C;
- input CE;
- input D1;
- input D2;
- input R;
- input S;
- parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
- parameter INIT = 1'b0;
- parameter [0:0] IS_C_INVERTED = 1'b0;
- parameter [0:0] IS_D1_INVERTED = 1'b0;
- parameter [0:0] IS_D2_INVERTED = 1'b0;
- parameter SRTYPE = "SYNC";
- parameter MSGON = "TRUE";
- parameter XON = "TRUE";
-endmodule
-
module ODELAYE2 (...);
parameter CINVCTRL_SEL = "FALSE";
parameter DELAY_SRC = "ODATAIN";
@@ -2717,6 +4407,7 @@ module ODELAYE2 (...);
output [4:0] CNTVALUEOUT;
output DATAOUT;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
input C;
input CE;
input CINVCTRL;
@@ -2725,6 +4416,7 @@ module ODELAYE2 (...);
input INC;
input LD;
input LDPIPEEN;
+ (* invertible_pin = "IS_ODATAIN_INVERTED" *)
input ODATAIN;
input REGRST;
endmodule
@@ -2763,24 +4455,38 @@ module OSERDESE2 (...);
output TFB;
output TQ;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
input CLK;
(* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKDIV_INVERTED" *)
input CLKDIV;
+ (* invertible_pin = "IS_D1_INVERTED" *)
input D1;
+ (* invertible_pin = "IS_D2_INVERTED" *)
input D2;
+ (* invertible_pin = "IS_D3_INVERTED" *)
input D3;
+ (* invertible_pin = "IS_D4_INVERTED" *)
input D4;
+ (* invertible_pin = "IS_D5_INVERTED" *)
input D5;
+ (* invertible_pin = "IS_D6_INVERTED" *)
input D6;
+ (* invertible_pin = "IS_D7_INVERTED" *)
input D7;
+ (* invertible_pin = "IS_D8_INVERTED" *)
input D8;
input OCE;
input RST;
input SHIFTIN1;
input SHIFTIN2;
+ (* invertible_pin = "IS_T1_INVERTED" *)
input T1;
+ (* invertible_pin = "IS_T2_INVERTED" *)
input T2;
+ (* invertible_pin = "IS_T3_INVERTED" *)
input T3;
+ (* invertible_pin = "IS_T4_INVERTED" *)
input T4;
input TBYTEIN;
input TCE;
@@ -2853,6 +4559,7 @@ module PHASER_IN (...);
input FREQREFCLK;
input MEMREFCLK;
input PHASEREFCLK;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
input SYNCIN;
input SYSCLK;
@@ -2894,6 +4601,7 @@ module PHASER_IN_PHY (...);
input FREQREFCLK;
input MEMREFCLK;
input PHASEREFCLK;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
input RSTDQSFIND;
input SYNCIN;
@@ -2936,6 +4644,7 @@ module PHASER_OUT (...);
input FREQREFCLK;
input MEMREFCLK;
input PHASEREFCLK;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
input SELFINEOCLKDELAY;
input SYNCIN;
@@ -2980,6 +4689,7 @@ module PHASER_OUT_PHY (...);
input FREQREFCLK;
input MEMREFCLK;
input PHASEREFCLK;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
input SELFINEOCLKDELAY;
input SYNCIN;
@@ -2993,7 +4703,9 @@ module PHASER_REF (...);
parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
output LOCKED;
input CLKIN;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
endmodule
@@ -3057,105 +4769,424 @@ module PHY_CONTROL (...);
input [31:0] PHYCTLWD;
endmodule
-module PLLE2_ADV (...);
- parameter BANDWIDTH = "OPTIMIZED";
- parameter COMPENSATION = "ZHOLD";
- parameter STARTUP_WAIT = "FALSE";
- parameter integer CLKOUT0_DIVIDE = 1;
- parameter integer CLKOUT1_DIVIDE = 1;
- parameter integer CLKOUT2_DIVIDE = 1;
- parameter integer CLKOUT3_DIVIDE = 1;
- parameter integer CLKOUT4_DIVIDE = 1;
- parameter integer CLKOUT5_DIVIDE = 1;
- parameter integer DIVCLK_DIVIDE = 1;
- parameter integer CLKFBOUT_MULT = 5;
- parameter real CLKFBOUT_PHASE = 0.000;
- parameter real CLKIN1_PERIOD = 0.000;
- parameter real CLKIN2_PERIOD = 0.000;
- parameter real CLKOUT0_DUTY_CYCLE = 0.500;
- parameter real CLKOUT0_PHASE = 0.000;
- parameter real CLKOUT1_DUTY_CYCLE = 0.500;
- parameter real CLKOUT1_PHASE = 0.000;
- parameter real CLKOUT2_DUTY_CYCLE = 0.500;
- parameter real CLKOUT2_PHASE = 0.000;
- parameter real CLKOUT3_DUTY_CYCLE = 0.500;
- parameter real CLKOUT3_PHASE = 0.000;
- parameter real CLKOUT4_DUTY_CYCLE = 0.500;
- parameter real CLKOUT4_PHASE = 0.000;
- parameter real CLKOUT5_DUTY_CYCLE = 0.500;
- parameter real CLKOUT5_PHASE = 0.000;
- parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
- parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
- parameter [0:0] IS_RST_INVERTED = 1'b0;
- parameter real REF_JITTER1 = 0.010;
- parameter real REF_JITTER2 = 0.010;
- parameter real VCOCLK_FREQ_MAX = 2133.000;
- parameter real VCOCLK_FREQ_MIN = 800.000;
- parameter real CLKIN_FREQ_MAX = 1066.000;
- parameter real CLKIN_FREQ_MIN = 19.000;
- parameter real CLKPFD_FREQ_MAX = 550.0;
- parameter real CLKPFD_FREQ_MIN = 19.0;
- output CLKFBOUT;
- output CLKOUT0;
- output CLKOUT1;
- output CLKOUT2;
- output CLKOUT3;
- output CLKOUT4;
- output CLKOUT5;
- output DRDY;
- output LOCKED;
- output [15:0] DO;
- input CLKFBIN;
- input CLKIN1;
- input CLKIN2;
- input CLKINSEL;
- input DCLK;
- input DEN;
- input DWE;
- input PWRDWN;
+module PULLDOWN (...);
+ output O;
+endmodule
+
+module PULLUP (...);
+ output O;
+endmodule
+
+module FIFO18E1 (...);
+ parameter ALMOST_EMPTY_OFFSET = 13'h0080;
+ parameter ALMOST_FULL_OFFSET = 13'h0080;
+ parameter integer DATA_WIDTH = 4;
+ parameter integer DO_REG = 1;
+ parameter EN_SYN = "FALSE";
+ parameter FIFO_MODE = "FIFO18";
+ parameter FIRST_WORD_FALL_THROUGH = "FALSE";
+ parameter INIT = 36'h0;
+ parameter SIM_DEVICE = "VIRTEX6";
+ parameter SRVAL = 36'h0;
+ parameter IS_RDCLK_INVERTED = 1'b0;
+ parameter IS_RDEN_INVERTED = 1'b0;
+ parameter IS_RSTREG_INVERTED = 1'b0;
+ parameter IS_RST_INVERTED = 1'b0;
+ parameter IS_WRCLK_INVERTED = 1'b0;
+ parameter IS_WREN_INVERTED = 1'b0;
+ output ALMOSTEMPTY;
+ output ALMOSTFULL;
+ output [31:0] DO;
+ output [3:0] DOP;
+ output EMPTY;
+ output FULL;
+ output [11:0] RDCOUNT;
+ output RDERR;
+ output [11:0] WRCOUNT;
+ output WRERR;
+ input [31:0] DI;
+ input [3:0] DIP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_RDCLK_INVERTED" *)
+ input RDCLK;
+ (* invertible_pin = "IS_RDEN_INVERTED" *)
+ input RDEN;
+ input REGCE;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
- input [15:0] DI;
- input [6:0] DADDR;
+ (* invertible_pin = "IS_RSTREG_INVERTED" *)
+ input RSTREG;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WRCLK_INVERTED" *)
+ input WRCLK;
+ (* invertible_pin = "IS_WREN_INVERTED" *)
+ input WREN;
endmodule
-module PLLE2_BASE (...);
- parameter BANDWIDTH = "OPTIMIZED";
- parameter integer CLKFBOUT_MULT = 5;
- parameter real CLKFBOUT_PHASE = 0.000;
- parameter real CLKIN1_PERIOD = 0.000;
- parameter integer CLKOUT0_DIVIDE = 1;
- parameter real CLKOUT0_DUTY_CYCLE = 0.500;
- parameter real CLKOUT0_PHASE = 0.000;
- parameter integer CLKOUT1_DIVIDE = 1;
- parameter real CLKOUT1_DUTY_CYCLE = 0.500;
- parameter real CLKOUT1_PHASE = 0.000;
- parameter integer CLKOUT2_DIVIDE = 1;
- parameter real CLKOUT2_DUTY_CYCLE = 0.500;
- parameter real CLKOUT2_PHASE = 0.000;
- parameter integer CLKOUT3_DIVIDE = 1;
- parameter real CLKOUT3_DUTY_CYCLE = 0.500;
- parameter real CLKOUT3_PHASE = 0.000;
- parameter integer CLKOUT4_DIVIDE = 1;
- parameter real CLKOUT4_DUTY_CYCLE = 0.500;
- parameter real CLKOUT4_PHASE = 0.000;
- parameter integer CLKOUT5_DIVIDE = 1;
- parameter real CLKOUT5_DUTY_CYCLE = 0.500;
- parameter real CLKOUT5_PHASE = 0.000;
- parameter integer DIVCLK_DIVIDE = 1;
- parameter real REF_JITTER1 = 0.010;
- parameter STARTUP_WAIT = "FALSE";
- output CLKFBOUT;
- output CLKOUT0;
- output CLKOUT1;
- output CLKOUT2;
- output CLKOUT3;
- output CLKOUT4;
- output CLKOUT5;
- output LOCKED;
- input CLKFBIN;
- input CLKIN1;
- input PWRDWN;
+module FIFO36E1 (...);
+ parameter ALMOST_EMPTY_OFFSET = 13'h0080;
+ parameter ALMOST_FULL_OFFSET = 13'h0080;
+ parameter integer DATA_WIDTH = 4;
+ parameter integer DO_REG = 1;
+ parameter EN_ECC_READ = "FALSE";
+ parameter EN_ECC_WRITE = "FALSE";
+ parameter EN_SYN = "FALSE";
+ parameter FIFO_MODE = "FIFO36";
+ parameter FIRST_WORD_FALL_THROUGH = "FALSE";
+ parameter INIT = 72'h0;
+ parameter SIM_DEVICE = "VIRTEX6";
+ parameter SRVAL = 72'h0;
+ parameter IS_RDCLK_INVERTED = 1'b0;
+ parameter IS_RDEN_INVERTED = 1'b0;
+ parameter IS_RSTREG_INVERTED = 1'b0;
+ parameter IS_RST_INVERTED = 1'b0;
+ parameter IS_WRCLK_INVERTED = 1'b0;
+ parameter IS_WREN_INVERTED = 1'b0;
+ output ALMOSTEMPTY;
+ output ALMOSTFULL;
+ output DBITERR;
+ output [63:0] DO;
+ output [7:0] DOP;
+ output [7:0] ECCPARITY;
+ output EMPTY;
+ output FULL;
+ output [12:0] RDCOUNT;
+ output RDERR;
+ output SBITERR;
+ output [12:0] WRCOUNT;
+ output WRERR;
+ input [63:0] DI;
+ input [7:0] DIP;
+ input INJECTDBITERR;
+ input INJECTSBITERR;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_RDCLK_INVERTED" *)
+ input RDCLK;
+ (* invertible_pin = "IS_RDEN_INVERTED" *)
+ input RDEN;
+ input REGCE;
+ (* invertible_pin = "IS_RST_INVERTED" *)
input RST;
+ (* invertible_pin = "IS_RSTREG_INVERTED" *)
+ input RSTREG;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WRCLK_INVERTED" *)
+ input WRCLK;
+ (* invertible_pin = "IS_WREN_INVERTED" *)
+ input WREN;
+endmodule
+
+module RAM128X1S (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM256X1S (...);
+ parameter [255:0] INIT = 256'h0;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input [7:0] A;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output [1:0] DOA;
+ output [1:0] DOB;
+ output [1:0] DOC;
+ output [1:0] DOD;
+ input [4:0] ADDRA;
+ input [4:0] ADDRB;
+ input [4:0] ADDRC;
+ input [4:0] ADDRD;
+ input [1:0] DIA;
+ input [1:0] DIB;
+ input [1:0] DIC;
+ input [1:0] DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S_1 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X2S (...);
+ parameter [31:0] INIT_00 = 32'h00000000;
+ parameter [31:0] INIT_01 = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O0;
+ output O1;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D0;
+ input D1;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output DOA;
+ output DOB;
+ output DOC;
+ output DOD;
+ input [5:0] ADDRA;
+ input [5:0] ADDRB;
+ input [5:0] ADDRC;
+ input [5:0] ADDRD;
+ input DIA;
+ input DIB;
+ input DIC;
+ input DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S_1 (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X2S (...);
+ parameter [63:0] INIT_00 = 64'h0000000000000000;
+ parameter [63:0] INIT_01 = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O0;
+ output O1;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D0;
+ input D1;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module ROM128X1 (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+endmodule
+
+module ROM256X1 (...);
+ parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input A7;
+endmodule
+
+module ROM32X1 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+endmodule
+
+module ROM64X1 (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+endmodule
+
+module IDDR (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter INIT_Q1 = 1'b0;
+ parameter INIT_Q2 = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D_INVERTED = 1'b0;
+ parameter SRTYPE = "SYNC";
+ parameter MSGON = "TRUE";
+ parameter XON = "TRUE";
+ output Q1;
+ output Q2;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ input CE;
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D;
+ input R;
+ input S;
+endmodule
+
+module IDDR_2CLK (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter INIT_Q1 = 1'b0;
+ parameter INIT_Q2 = 1'b0;
+ parameter [0:0] IS_CB_INVERTED = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D_INVERTED = 1'b0;
+ parameter SRTYPE = "SYNC";
+ output Q1;
+ output Q2;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CB_INVERTED" *)
+ input CB;
+ input CE;
+ (* invertible_pin = "IS_D_INVERTED" *)
+ input D;
+ input R;
+ input S;
+endmodule
+
+module ODDR (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter INIT = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D1_INVERTED = 1'b0;
+ parameter [0:0] IS_D2_INVERTED = 1'b0;
+ parameter SRTYPE = "SYNC";
+ parameter MSGON = "TRUE";
+ parameter XON = "TRUE";
+ output Q;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ input CE;
+ (* invertible_pin = "IS_D1_INVERTED" *)
+ input D1;
+ (* invertible_pin = "IS_D2_INVERTED" *)
+ input D2;
+ input R;
+ input S;
+endmodule
+
+module CFGLUT5 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ output CDO;
+ output O5;
+ output O6;
+ input I4;
+ input I3;
+ input I2;
+ input I1;
+ input I0;
+ input CDI;
+ input CE;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
endmodule
(* keep *)
@@ -3782,318 +5813,3 @@ module PS7 (...);
input [7:0] SAXIHP3WSTRB;
endmodule
-module PULLDOWN (...);
- output O;
-endmodule
-
-module PULLUP (...);
- output O;
-endmodule
-
-module RAM128X1S (...);
- parameter [127:0] INIT = 128'h00000000000000000000000000000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
- input A6;
- input D;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM256X1S (...);
- parameter [255:0] INIT = 256'h0;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O;
- input [7:0] A;
- input D;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM32M (...);
- parameter [63:0] INIT_A = 64'h0000000000000000;
- parameter [63:0] INIT_B = 64'h0000000000000000;
- parameter [63:0] INIT_C = 64'h0000000000000000;
- parameter [63:0] INIT_D = 64'h0000000000000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output [1:0] DOA;
- output [1:0] DOB;
- output [1:0] DOC;
- output [1:0] DOD;
- input [4:0] ADDRA;
- input [4:0] ADDRB;
- input [4:0] ADDRC;
- input [4:0] ADDRD;
- input [1:0] DIA;
- input [1:0] DIB;
- input [1:0] DIC;
- input [1:0] DID;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM32X1S (...);
- parameter [31:0] INIT = 32'h00000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input D;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM32X1S_1 (...);
- parameter [31:0] INIT = 32'h00000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input D;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM32X2S (...);
- parameter [31:0] INIT_00 = 32'h00000000;
- parameter [31:0] INIT_01 = 32'h00000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O0;
- output O1;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input D0;
- input D1;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM64M (...);
- parameter [63:0] INIT_A = 64'h0000000000000000;
- parameter [63:0] INIT_B = 64'h0000000000000000;
- parameter [63:0] INIT_C = 64'h0000000000000000;
- parameter [63:0] INIT_D = 64'h0000000000000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output DOA;
- output DOB;
- output DOC;
- output DOD;
- input [5:0] ADDRA;
- input [5:0] ADDRB;
- input [5:0] ADDRC;
- input [5:0] ADDRD;
- input DIA;
- input DIB;
- input DIC;
- input DID;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM64X1S (...);
- parameter [63:0] INIT = 64'h0000000000000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
- input D;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM64X1S_1 (...);
- parameter [63:0] INIT = 64'h0000000000000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
- input D;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module RAM64X2S (...);
- parameter [63:0] INIT_00 = 64'h0000000000000000;
- parameter [63:0] INIT_01 = 64'h0000000000000000;
- parameter [0:0] IS_WCLK_INVERTED = 1'b0;
- output O0;
- output O1;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
- input D0;
- input D1;
- (* clkbuf_sink *)
- input WCLK;
- input WE;
-endmodule
-
-module ROM128X1 (...);
- parameter [127:0] INIT = 128'h00000000000000000000000000000000;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
- input A6;
-endmodule
-
-module ROM256X1 (...);
- parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
- input A6;
- input A7;
-endmodule
-
-module ROM32X1 (...);
- parameter [31:0] INIT = 32'h00000000;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
-endmodule
-
-module ROM64X1 (...);
- parameter [63:0] INIT = 64'h0000000000000000;
- output O;
- input A0;
- input A1;
- input A2;
- input A3;
- input A4;
- input A5;
-endmodule
-
-(* keep *)
-module STARTUPE2 (...);
- parameter PROG_USR = "FALSE";
- parameter real SIM_CCLK_FREQ = 0.0;
- output CFGCLK;
- output CFGMCLK;
- output EOS;
- output PREQ;
- input CLK;
- input GSR;
- input GTS;
- input KEYCLEARB;
- input PACK;
- input USRCCLKO;
- input USRCCLKTS;
- input USRDONEO;
- input USRDONETS;
-endmodule
-
-module USR_ACCESSE2 (...);
- output CFGCLK;
- output DATAVALID;
- output [31:0] DATA;
-endmodule
-
-module XADC (...);
- output BUSY;
- output DRDY;
- output EOC;
- output EOS;
- output JTAGBUSY;
- output JTAGLOCKED;
- output JTAGMODIFIED;
- output OT;
- output [15:0] DO;
- output [7:0] ALM;
- output [4:0] CHANNEL;
- output [4:0] MUXADDR;
- input CONVST;
- input CONVSTCLK;
- input DCLK;
- input DEN;
- input DWE;
- input RESET;
- input VN;
- input VP;
- input [15:0] DI;
- input [15:0] VAUXN;
- input [15:0] VAUXP;
- input [6:0] DADDR;
- parameter [15:0] INIT_40 = 16'h0;
- parameter [15:0] INIT_41 = 16'h0;
- parameter [15:0] INIT_42 = 16'h0800;
- parameter [15:0] INIT_43 = 16'h0;
- parameter [15:0] INIT_44 = 16'h0;
- parameter [15:0] INIT_45 = 16'h0;
- parameter [15:0] INIT_46 = 16'h0;
- parameter [15:0] INIT_47 = 16'h0;
- parameter [15:0] INIT_48 = 16'h0;
- parameter [15:0] INIT_49 = 16'h0;
- parameter [15:0] INIT_4A = 16'h0;
- parameter [15:0] INIT_4B = 16'h0;
- parameter [15:0] INIT_4C = 16'h0;
- parameter [15:0] INIT_4D = 16'h0;
- parameter [15:0] INIT_4E = 16'h0;
- parameter [15:0] INIT_4F = 16'h0;
- parameter [15:0] INIT_50 = 16'h0;
- parameter [15:0] INIT_51 = 16'h0;
- parameter [15:0] INIT_52 = 16'h0;
- parameter [15:0] INIT_53 = 16'h0;
- parameter [15:0] INIT_54 = 16'h0;
- parameter [15:0] INIT_55 = 16'h0;
- parameter [15:0] INIT_56 = 16'h0;
- parameter [15:0] INIT_57 = 16'h0;
- parameter [15:0] INIT_58 = 16'h0;
- parameter [15:0] INIT_59 = 16'h0;
- parameter [15:0] INIT_5A = 16'h0;
- parameter [15:0] INIT_5B = 16'h0;
- parameter [15:0] INIT_5C = 16'h0;
- parameter [15:0] INIT_5D = 16'h0;
- parameter [15:0] INIT_5E = 16'h0;
- parameter [15:0] INIT_5F = 16'h0;
- parameter IS_CONVSTCLK_INVERTED = 1'b0;
- parameter IS_DCLK_INVERTED = 1'b0;
- parameter SIM_DEVICE = "7SERIES";
- parameter SIM_MONITOR_FILE = "design.txt";
-endmodule
-
diff --git a/techlibs/xilinx/xc7_ff_map.v b/techlibs/xilinx/xc7_ff_map.v
new file mode 100644
index 000000000..32ca9f560
--- /dev/null
+++ b/techlibs/xilinx/xc7_ff_map.v
@@ -0,0 +1,116 @@
+/*
+ * yosys -- Yosys Open SYnthesis Suite
+ *
+ * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+// ============================================================================
+// FF mapping for Virtex 6, Series 7 and Ultrascale. These families support
+// the following features:
+//
+// - a CLB flip-flop can be used as a latch or as a flip-flop
+// - a CLB flip-flop has the following pins:
+//
+// - data input
+// - clock (or gate for latches) (with optional inversion)
+// - clock enable (or gate enable, which is just ANDed with gate — unused by
+// synthesis)
+// - either a set or a reset input, which (for FFs) can be either
+// synchronous or asynchronous (with optional inversion)
+// - data output
+//
+// - a flip-flop also has an initial value, which is set at device
+// initialization (or whenever GSR is asserted)
+
+`ifndef _NO_FFS
+
+module \$_DFF_N_ (input D, C, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDRE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .R(1'b0));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_P_ (input D, C, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDRE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .R(1'b0));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DFFE_NP_ (input D, C, E, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDRE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(1'b0));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFFE_PP_ (input D, C, E, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDRE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(E), .R(1'b0));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DFF_NN0_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDCE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR(!R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_NP0_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDCE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR( R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PN0_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR(!R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PP0_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .CLR( R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DFF_NN1_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDPE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE(!R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_NP1_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDPE_1 #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE( R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PN1_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE(!R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DFF_PP1_ (input D, C, R, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ FDPE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .C(C), .CE(1'b1), .PRE( R));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+module \$_DLATCH_N_ (input E, D, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ LDCE #(.INIT(_TECHMAP_WIREINIT_Q_), .IS_G_INVERTED(1'b1)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(1'b0));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+module \$_DLATCH_P_ (input E, D, output Q);
+ parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
+ LDCE #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_ (.D(D), .Q(Q), .G(E), .GE(1'b1), .CLR(1'b0));
+ wire _TECHMAP_REMOVEINIT_Q_ = 1;
+endmodule
+
+`endif
+
diff --git a/techlibs/xilinx/xcu_cells_xtra.v b/techlibs/xilinx/xcu_cells_xtra.v
new file mode 100644
index 000000000..4523b5210
--- /dev/null
+++ b/techlibs/xilinx/xcu_cells_xtra.v
@@ -0,0 +1,11768 @@
+// Created by cells_xtra.py from Xilinx models
+
+module CMAC (...);
+ parameter CTL_PTP_TRANSPCLK_MODE = "FALSE";
+ parameter CTL_RX_CHECK_ACK = "TRUE";
+ parameter CTL_RX_CHECK_PREAMBLE = "FALSE";
+ parameter CTL_RX_CHECK_SFD = "FALSE";
+ parameter CTL_RX_DELETE_FCS = "TRUE";
+ parameter [15:0] CTL_RX_ETYPE_GCP = 16'h8808;
+ parameter [15:0] CTL_RX_ETYPE_GPP = 16'h8808;
+ parameter [15:0] CTL_RX_ETYPE_PCP = 16'h8808;
+ parameter [15:0] CTL_RX_ETYPE_PPP = 16'h8808;
+ parameter CTL_RX_FORWARD_CONTROL = "FALSE";
+ parameter CTL_RX_IGNORE_FCS = "FALSE";
+ parameter [14:0] CTL_RX_MAX_PACKET_LEN = 15'h2580;
+ parameter [7:0] CTL_RX_MIN_PACKET_LEN = 8'h40;
+ parameter [15:0] CTL_RX_OPCODE_GPP = 16'h0001;
+ parameter [15:0] CTL_RX_OPCODE_MAX_GCP = 16'hFFFF;
+ parameter [15:0] CTL_RX_OPCODE_MAX_PCP = 16'hFFFF;
+ parameter [15:0] CTL_RX_OPCODE_MIN_GCP = 16'h0000;
+ parameter [15:0] CTL_RX_OPCODE_MIN_PCP = 16'h0000;
+ parameter [15:0] CTL_RX_OPCODE_PPP = 16'h0001;
+ parameter [47:0] CTL_RX_PAUSE_DA_MCAST = 48'h0180C2000001;
+ parameter [47:0] CTL_RX_PAUSE_DA_UCAST = 48'h000000000000;
+ parameter [47:0] CTL_RX_PAUSE_SA = 48'h000000000000;
+ parameter CTL_RX_PROCESS_LFI = "FALSE";
+ parameter [15:0] CTL_RX_VL_LENGTH_MINUS1 = 16'h3FFF;
+ parameter [63:0] CTL_RX_VL_MARKER_ID0 = 64'hC16821003E97DE00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID1 = 64'h9D718E00628E7100;
+ parameter [63:0] CTL_RX_VL_MARKER_ID10 = 64'hFD6C990002936600;
+ parameter [63:0] CTL_RX_VL_MARKER_ID11 = 64'hB9915500466EAA00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200;
+ parameter [63:0] CTL_RX_VL_MARKER_ID14 = 64'h83C7CA007C383500;
+ parameter [63:0] CTL_RX_VL_MARKER_ID15 = 64'h3536CD00CAC93200;
+ parameter [63:0] CTL_RX_VL_MARKER_ID16 = 64'hC4314C003BCEB300;
+ parameter [63:0] CTL_RX_VL_MARKER_ID17 = 64'hADD6B70052294800;
+ parameter [63:0] CTL_RX_VL_MARKER_ID18 = 64'h5F662A00A099D500;
+ parameter [63:0] CTL_RX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID2 = 64'h594BE800A6B41700;
+ parameter [63:0] CTL_RX_VL_MARKER_ID3 = 64'h4D957B00B26A8400;
+ parameter [63:0] CTL_RX_VL_MARKER_ID4 = 64'hF50709000AF8F600;
+ parameter [63:0] CTL_RX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID6 = 64'h9A4A260065B5D900;
+ parameter [63:0] CTL_RX_VL_MARKER_ID7 = 64'h7B45660084BA9900;
+ parameter [63:0] CTL_RX_VL_MARKER_ID8 = 64'hA02476005FDB8900;
+ parameter [63:0] CTL_RX_VL_MARKER_ID9 = 64'h68C9FB0097360400;
+ parameter CTL_TEST_MODE_PIN_CHAR = "FALSE";
+ parameter [47:0] CTL_TX_DA_GPP = 48'h0180C2000001;
+ parameter [47:0] CTL_TX_DA_PPP = 48'h0180C2000001;
+ parameter [15:0] CTL_TX_ETHERTYPE_GPP = 16'h8808;
+ parameter [15:0] CTL_TX_ETHERTYPE_PPP = 16'h8808;
+ parameter CTL_TX_FCS_INS_ENABLE = "TRUE";
+ parameter CTL_TX_IGNORE_FCS = "FALSE";
+ parameter [15:0] CTL_TX_OPCODE_GPP = 16'h0001;
+ parameter [15:0] CTL_TX_OPCODE_PPP = 16'h0001;
+ parameter CTL_TX_PTP_1STEP_ENABLE = "FALSE";
+ parameter [10:0] CTL_TX_PTP_LATENCY_ADJUST = 11'h2C1;
+ parameter [47:0] CTL_TX_SA_GPP = 48'h000000000000;
+ parameter [47:0] CTL_TX_SA_PPP = 48'h000000000000;
+ parameter [15:0] CTL_TX_VL_LENGTH_MINUS1 = 16'h3FFF;
+ parameter [63:0] CTL_TX_VL_MARKER_ID0 = 64'hC16821003E97DE00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID1 = 64'h9D718E00628E7100;
+ parameter [63:0] CTL_TX_VL_MARKER_ID10 = 64'hFD6C990002936600;
+ parameter [63:0] CTL_TX_VL_MARKER_ID11 = 64'hB9915500466EAA00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200;
+ parameter [63:0] CTL_TX_VL_MARKER_ID14 = 64'h83C7CA007C383500;
+ parameter [63:0] CTL_TX_VL_MARKER_ID15 = 64'h3536CD00CAC93200;
+ parameter [63:0] CTL_TX_VL_MARKER_ID16 = 64'hC4314C003BCEB300;
+ parameter [63:0] CTL_TX_VL_MARKER_ID17 = 64'hADD6B70052294800;
+ parameter [63:0] CTL_TX_VL_MARKER_ID18 = 64'h5F662A00A099D500;
+ parameter [63:0] CTL_TX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID2 = 64'h594BE800A6B41700;
+ parameter [63:0] CTL_TX_VL_MARKER_ID3 = 64'h4D957B00B26A8400;
+ parameter [63:0] CTL_TX_VL_MARKER_ID4 = 64'hF50709000AF8F600;
+ parameter [63:0] CTL_TX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID6 = 64'h9A4A260065B5D900;
+ parameter [63:0] CTL_TX_VL_MARKER_ID7 = 64'h7B45660084BA9900;
+ parameter [63:0] CTL_TX_VL_MARKER_ID8 = 64'hA02476005FDB8900;
+ parameter [63:0] CTL_TX_VL_MARKER_ID9 = 64'h68C9FB0097360400;
+ parameter SIM_VERSION = "2.0";
+ parameter TEST_MODE_PIN_CHAR = "FALSE";
+ output [15:0] DRP_DO;
+ output DRP_RDY;
+ output [127:0] RX_DATAOUT0;
+ output [127:0] RX_DATAOUT1;
+ output [127:0] RX_DATAOUT2;
+ output [127:0] RX_DATAOUT3;
+ output RX_ENAOUT0;
+ output RX_ENAOUT1;
+ output RX_ENAOUT2;
+ output RX_ENAOUT3;
+ output RX_EOPOUT0;
+ output RX_EOPOUT1;
+ output RX_EOPOUT2;
+ output RX_EOPOUT3;
+ output RX_ERROUT0;
+ output RX_ERROUT1;
+ output RX_ERROUT2;
+ output RX_ERROUT3;
+ output [6:0] RX_LANE_ALIGNER_FILL_0;
+ output [6:0] RX_LANE_ALIGNER_FILL_1;
+ output [6:0] RX_LANE_ALIGNER_FILL_10;
+ output [6:0] RX_LANE_ALIGNER_FILL_11;
+ output [6:0] RX_LANE_ALIGNER_FILL_12;
+ output [6:0] RX_LANE_ALIGNER_FILL_13;
+ output [6:0] RX_LANE_ALIGNER_FILL_14;
+ output [6:0] RX_LANE_ALIGNER_FILL_15;
+ output [6:0] RX_LANE_ALIGNER_FILL_16;
+ output [6:0] RX_LANE_ALIGNER_FILL_17;
+ output [6:0] RX_LANE_ALIGNER_FILL_18;
+ output [6:0] RX_LANE_ALIGNER_FILL_19;
+ output [6:0] RX_LANE_ALIGNER_FILL_2;
+ output [6:0] RX_LANE_ALIGNER_FILL_3;
+ output [6:0] RX_LANE_ALIGNER_FILL_4;
+ output [6:0] RX_LANE_ALIGNER_FILL_5;
+ output [6:0] RX_LANE_ALIGNER_FILL_6;
+ output [6:0] RX_LANE_ALIGNER_FILL_7;
+ output [6:0] RX_LANE_ALIGNER_FILL_8;
+ output [6:0] RX_LANE_ALIGNER_FILL_9;
+ output [3:0] RX_MTYOUT0;
+ output [3:0] RX_MTYOUT1;
+ output [3:0] RX_MTYOUT2;
+ output [3:0] RX_MTYOUT3;
+ output [4:0] RX_PTP_PCSLANE_OUT;
+ output [79:0] RX_PTP_TSTAMP_OUT;
+ output RX_SOPOUT0;
+ output RX_SOPOUT1;
+ output RX_SOPOUT2;
+ output RX_SOPOUT3;
+ output STAT_RX_ALIGNED;
+ output STAT_RX_ALIGNED_ERR;
+ output [6:0] STAT_RX_BAD_CODE;
+ output [3:0] STAT_RX_BAD_FCS;
+ output STAT_RX_BAD_PREAMBLE;
+ output STAT_RX_BAD_SFD;
+ output STAT_RX_BIP_ERR_0;
+ output STAT_RX_BIP_ERR_1;
+ output STAT_RX_BIP_ERR_10;
+ output STAT_RX_BIP_ERR_11;
+ output STAT_RX_BIP_ERR_12;
+ output STAT_RX_BIP_ERR_13;
+ output STAT_RX_BIP_ERR_14;
+ output STAT_RX_BIP_ERR_15;
+ output STAT_RX_BIP_ERR_16;
+ output STAT_RX_BIP_ERR_17;
+ output STAT_RX_BIP_ERR_18;
+ output STAT_RX_BIP_ERR_19;
+ output STAT_RX_BIP_ERR_2;
+ output STAT_RX_BIP_ERR_3;
+ output STAT_RX_BIP_ERR_4;
+ output STAT_RX_BIP_ERR_5;
+ output STAT_RX_BIP_ERR_6;
+ output STAT_RX_BIP_ERR_7;
+ output STAT_RX_BIP_ERR_8;
+ output STAT_RX_BIP_ERR_9;
+ output [19:0] STAT_RX_BLOCK_LOCK;
+ output STAT_RX_BROADCAST;
+ output [3:0] STAT_RX_FRAGMENT;
+ output [3:0] STAT_RX_FRAMING_ERR_0;
+ output [3:0] STAT_RX_FRAMING_ERR_1;
+ output [3:0] STAT_RX_FRAMING_ERR_10;
+ output [3:0] STAT_RX_FRAMING_ERR_11;
+ output [3:0] STAT_RX_FRAMING_ERR_12;
+ output [3:0] STAT_RX_FRAMING_ERR_13;
+ output [3:0] STAT_RX_FRAMING_ERR_14;
+ output [3:0] STAT_RX_FRAMING_ERR_15;
+ output [3:0] STAT_RX_FRAMING_ERR_16;
+ output [3:0] STAT_RX_FRAMING_ERR_17;
+ output [3:0] STAT_RX_FRAMING_ERR_18;
+ output [3:0] STAT_RX_FRAMING_ERR_19;
+ output [3:0] STAT_RX_FRAMING_ERR_2;
+ output [3:0] STAT_RX_FRAMING_ERR_3;
+ output [3:0] STAT_RX_FRAMING_ERR_4;
+ output [3:0] STAT_RX_FRAMING_ERR_5;
+ output [3:0] STAT_RX_FRAMING_ERR_6;
+ output [3:0] STAT_RX_FRAMING_ERR_7;
+ output [3:0] STAT_RX_FRAMING_ERR_8;
+ output [3:0] STAT_RX_FRAMING_ERR_9;
+ output STAT_RX_FRAMING_ERR_VALID_0;
+ output STAT_RX_FRAMING_ERR_VALID_1;
+ output STAT_RX_FRAMING_ERR_VALID_10;
+ output STAT_RX_FRAMING_ERR_VALID_11;
+ output STAT_RX_FRAMING_ERR_VALID_12;
+ output STAT_RX_FRAMING_ERR_VALID_13;
+ output STAT_RX_FRAMING_ERR_VALID_14;
+ output STAT_RX_FRAMING_ERR_VALID_15;
+ output STAT_RX_FRAMING_ERR_VALID_16;
+ output STAT_RX_FRAMING_ERR_VALID_17;
+ output STAT_RX_FRAMING_ERR_VALID_18;
+ output STAT_RX_FRAMING_ERR_VALID_19;
+ output STAT_RX_FRAMING_ERR_VALID_2;
+ output STAT_RX_FRAMING_ERR_VALID_3;
+ output STAT_RX_FRAMING_ERR_VALID_4;
+ output STAT_RX_FRAMING_ERR_VALID_5;
+ output STAT_RX_FRAMING_ERR_VALID_6;
+ output STAT_RX_FRAMING_ERR_VALID_7;
+ output STAT_RX_FRAMING_ERR_VALID_8;
+ output STAT_RX_FRAMING_ERR_VALID_9;
+ output STAT_RX_GOT_SIGNAL_OS;
+ output STAT_RX_HI_BER;
+ output STAT_RX_INRANGEERR;
+ output STAT_RX_INTERNAL_LOCAL_FAULT;
+ output STAT_RX_JABBER;
+ output [7:0] STAT_RX_LANE0_VLM_BIP7;
+ output STAT_RX_LANE0_VLM_BIP7_VALID;
+ output STAT_RX_LOCAL_FAULT;
+ output [19:0] STAT_RX_MF_ERR;
+ output [19:0] STAT_RX_MF_LEN_ERR;
+ output [19:0] STAT_RX_MF_REPEAT_ERR;
+ output STAT_RX_MISALIGNED;
+ output STAT_RX_MULTICAST;
+ output STAT_RX_OVERSIZE;
+ output STAT_RX_PACKET_1024_1518_BYTES;
+ output STAT_RX_PACKET_128_255_BYTES;
+ output STAT_RX_PACKET_1519_1522_BYTES;
+ output STAT_RX_PACKET_1523_1548_BYTES;
+ output STAT_RX_PACKET_1549_2047_BYTES;
+ output STAT_RX_PACKET_2048_4095_BYTES;
+ output STAT_RX_PACKET_256_511_BYTES;
+ output STAT_RX_PACKET_4096_8191_BYTES;
+ output STAT_RX_PACKET_512_1023_BYTES;
+ output STAT_RX_PACKET_64_BYTES;
+ output STAT_RX_PACKET_65_127_BYTES;
+ output STAT_RX_PACKET_8192_9215_BYTES;
+ output STAT_RX_PACKET_BAD_FCS;
+ output STAT_RX_PACKET_LARGE;
+ output [3:0] STAT_RX_PACKET_SMALL;
+ output STAT_RX_PAUSE;
+ output [15:0] STAT_RX_PAUSE_QUANTA0;
+ output [15:0] STAT_RX_PAUSE_QUANTA1;
+ output [15:0] STAT_RX_PAUSE_QUANTA2;
+ output [15:0] STAT_RX_PAUSE_QUANTA3;
+ output [15:0] STAT_RX_PAUSE_QUANTA4;
+ output [15:0] STAT_RX_PAUSE_QUANTA5;
+ output [15:0] STAT_RX_PAUSE_QUANTA6;
+ output [15:0] STAT_RX_PAUSE_QUANTA7;
+ output [15:0] STAT_RX_PAUSE_QUANTA8;
+ output [8:0] STAT_RX_PAUSE_REQ;
+ output [8:0] STAT_RX_PAUSE_VALID;
+ output STAT_RX_RECEIVED_LOCAL_FAULT;
+ output STAT_RX_REMOTE_FAULT;
+ output STAT_RX_STATUS;
+ output [3:0] STAT_RX_STOMPED_FCS;
+ output [19:0] STAT_RX_SYNCED;
+ output [19:0] STAT_RX_SYNCED_ERR;
+ output [2:0] STAT_RX_TEST_PATTERN_MISMATCH;
+ output STAT_RX_TOOLONG;
+ output [7:0] STAT_RX_TOTAL_BYTES;
+ output [13:0] STAT_RX_TOTAL_GOOD_BYTES;
+ output STAT_RX_TOTAL_GOOD_PACKETS;
+ output [3:0] STAT_RX_TOTAL_PACKETS;
+ output STAT_RX_TRUNCATED;
+ output [3:0] STAT_RX_UNDERSIZE;
+ output STAT_RX_UNICAST;
+ output STAT_RX_USER_PAUSE;
+ output STAT_RX_VLAN;
+ output [19:0] STAT_RX_VL_DEMUXED;
+ output [4:0] STAT_RX_VL_NUMBER_0;
+ output [4:0] STAT_RX_VL_NUMBER_1;
+ output [4:0] STAT_RX_VL_NUMBER_10;
+ output [4:0] STAT_RX_VL_NUMBER_11;
+ output [4:0] STAT_RX_VL_NUMBER_12;
+ output [4:0] STAT_RX_VL_NUMBER_13;
+ output [4:0] STAT_RX_VL_NUMBER_14;
+ output [4:0] STAT_RX_VL_NUMBER_15;
+ output [4:0] STAT_RX_VL_NUMBER_16;
+ output [4:0] STAT_RX_VL_NUMBER_17;
+ output [4:0] STAT_RX_VL_NUMBER_18;
+ output [4:0] STAT_RX_VL_NUMBER_19;
+ output [4:0] STAT_RX_VL_NUMBER_2;
+ output [4:0] STAT_RX_VL_NUMBER_3;
+ output [4:0] STAT_RX_VL_NUMBER_4;
+ output [4:0] STAT_RX_VL_NUMBER_5;
+ output [4:0] STAT_RX_VL_NUMBER_6;
+ output [4:0] STAT_RX_VL_NUMBER_7;
+ output [4:0] STAT_RX_VL_NUMBER_8;
+ output [4:0] STAT_RX_VL_NUMBER_9;
+ output STAT_TX_BAD_FCS;
+ output STAT_TX_BROADCAST;
+ output STAT_TX_FRAME_ERROR;
+ output STAT_TX_LOCAL_FAULT;
+ output STAT_TX_MULTICAST;
+ output STAT_TX_PACKET_1024_1518_BYTES;
+ output STAT_TX_PACKET_128_255_BYTES;
+ output STAT_TX_PACKET_1519_1522_BYTES;
+ output STAT_TX_PACKET_1523_1548_BYTES;
+ output STAT_TX_PACKET_1549_2047_BYTES;
+ output STAT_TX_PACKET_2048_4095_BYTES;
+ output STAT_TX_PACKET_256_511_BYTES;
+ output STAT_TX_PACKET_4096_8191_BYTES;
+ output STAT_TX_PACKET_512_1023_BYTES;
+ output STAT_TX_PACKET_64_BYTES;
+ output STAT_TX_PACKET_65_127_BYTES;
+ output STAT_TX_PACKET_8192_9215_BYTES;
+ output STAT_TX_PACKET_LARGE;
+ output STAT_TX_PACKET_SMALL;
+ output STAT_TX_PAUSE;
+ output [8:0] STAT_TX_PAUSE_VALID;
+ output STAT_TX_PTP_FIFO_READ_ERROR;
+ output STAT_TX_PTP_FIFO_WRITE_ERROR;
+ output [6:0] STAT_TX_TOTAL_BYTES;
+ output [13:0] STAT_TX_TOTAL_GOOD_BYTES;
+ output STAT_TX_TOTAL_GOOD_PACKETS;
+ output STAT_TX_TOTAL_PACKETS;
+ output STAT_TX_UNICAST;
+ output STAT_TX_USER_PAUSE;
+ output STAT_TX_VLAN;
+ output TX_OVFOUT;
+ output [4:0] TX_PTP_PCSLANE_OUT;
+ output [79:0] TX_PTP_TSTAMP_OUT;
+ output [15:0] TX_PTP_TSTAMP_TAG_OUT;
+ output TX_PTP_TSTAMP_VALID_OUT;
+ output TX_RDYOUT;
+ output [15:0] TX_SERDES_ALT_DATA0;
+ output [15:0] TX_SERDES_ALT_DATA1;
+ output [15:0] TX_SERDES_ALT_DATA2;
+ output [15:0] TX_SERDES_ALT_DATA3;
+ output [63:0] TX_SERDES_DATA0;
+ output [63:0] TX_SERDES_DATA1;
+ output [63:0] TX_SERDES_DATA2;
+ output [63:0] TX_SERDES_DATA3;
+ output [31:0] TX_SERDES_DATA4;
+ output [31:0] TX_SERDES_DATA5;
+ output [31:0] TX_SERDES_DATA6;
+ output [31:0] TX_SERDES_DATA7;
+ output [31:0] TX_SERDES_DATA8;
+ output [31:0] TX_SERDES_DATA9;
+ output TX_UNFOUT;
+ input CTL_CAUI4_MODE;
+ input CTL_RX_CHECK_ETYPE_GCP;
+ input CTL_RX_CHECK_ETYPE_GPP;
+ input CTL_RX_CHECK_ETYPE_PCP;
+ input CTL_RX_CHECK_ETYPE_PPP;
+ input CTL_RX_CHECK_MCAST_GCP;
+ input CTL_RX_CHECK_MCAST_GPP;
+ input CTL_RX_CHECK_MCAST_PCP;
+ input CTL_RX_CHECK_MCAST_PPP;
+ input CTL_RX_CHECK_OPCODE_GCP;
+ input CTL_RX_CHECK_OPCODE_GPP;
+ input CTL_RX_CHECK_OPCODE_PCP;
+ input CTL_RX_CHECK_OPCODE_PPP;
+ input CTL_RX_CHECK_SA_GCP;
+ input CTL_RX_CHECK_SA_GPP;
+ input CTL_RX_CHECK_SA_PCP;
+ input CTL_RX_CHECK_SA_PPP;
+ input CTL_RX_CHECK_UCAST_GCP;
+ input CTL_RX_CHECK_UCAST_GPP;
+ input CTL_RX_CHECK_UCAST_PCP;
+ input CTL_RX_CHECK_UCAST_PPP;
+ input CTL_RX_ENABLE;
+ input CTL_RX_ENABLE_GCP;
+ input CTL_RX_ENABLE_GPP;
+ input CTL_RX_ENABLE_PCP;
+ input CTL_RX_ENABLE_PPP;
+ input CTL_RX_FORCE_RESYNC;
+ input [8:0] CTL_RX_PAUSE_ACK;
+ input [8:0] CTL_RX_PAUSE_ENABLE;
+ input [79:0] CTL_RX_SYSTEMTIMERIN;
+ input CTL_RX_TEST_PATTERN;
+ input CTL_TX_ENABLE;
+ input CTL_TX_LANE0_VLM_BIP7_OVERRIDE;
+ input [7:0] CTL_TX_LANE0_VLM_BIP7_OVERRIDE_VALUE;
+ input [8:0] CTL_TX_PAUSE_ENABLE;
+ input [15:0] CTL_TX_PAUSE_QUANTA0;
+ input [15:0] CTL_TX_PAUSE_QUANTA1;
+ input [15:0] CTL_TX_PAUSE_QUANTA2;
+ input [15:0] CTL_TX_PAUSE_QUANTA3;
+ input [15:0] CTL_TX_PAUSE_QUANTA4;
+ input [15:0] CTL_TX_PAUSE_QUANTA5;
+ input [15:0] CTL_TX_PAUSE_QUANTA6;
+ input [15:0] CTL_TX_PAUSE_QUANTA7;
+ input [15:0] CTL_TX_PAUSE_QUANTA8;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER0;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER1;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER2;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER3;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER4;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER5;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER6;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER7;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER8;
+ input [8:0] CTL_TX_PAUSE_REQ;
+ input CTL_TX_PTP_VLANE_ADJUST_MODE;
+ input CTL_TX_RESEND_PAUSE;
+ input CTL_TX_SEND_IDLE;
+ input CTL_TX_SEND_RFI;
+ input [79:0] CTL_TX_SYSTEMTIMERIN;
+ input CTL_TX_TEST_PATTERN;
+ input [9:0] DRP_ADDR;
+ input DRP_CLK;
+ input [15:0] DRP_DI;
+ input DRP_EN;
+ input DRP_WE;
+ input RX_CLK;
+ input RX_RESET;
+ input [15:0] RX_SERDES_ALT_DATA0;
+ input [15:0] RX_SERDES_ALT_DATA1;
+ input [15:0] RX_SERDES_ALT_DATA2;
+ input [15:0] RX_SERDES_ALT_DATA3;
+ input [9:0] RX_SERDES_CLK;
+ input [63:0] RX_SERDES_DATA0;
+ input [63:0] RX_SERDES_DATA1;
+ input [63:0] RX_SERDES_DATA2;
+ input [63:0] RX_SERDES_DATA3;
+ input [31:0] RX_SERDES_DATA4;
+ input [31:0] RX_SERDES_DATA5;
+ input [31:0] RX_SERDES_DATA6;
+ input [31:0] RX_SERDES_DATA7;
+ input [31:0] RX_SERDES_DATA8;
+ input [31:0] RX_SERDES_DATA9;
+ input [9:0] RX_SERDES_RESET;
+ input TX_CLK;
+ input [127:0] TX_DATAIN0;
+ input [127:0] TX_DATAIN1;
+ input [127:0] TX_DATAIN2;
+ input [127:0] TX_DATAIN3;
+ input TX_ENAIN0;
+ input TX_ENAIN1;
+ input TX_ENAIN2;
+ input TX_ENAIN3;
+ input TX_EOPIN0;
+ input TX_EOPIN1;
+ input TX_EOPIN2;
+ input TX_EOPIN3;
+ input TX_ERRIN0;
+ input TX_ERRIN1;
+ input TX_ERRIN2;
+ input TX_ERRIN3;
+ input [3:0] TX_MTYIN0;
+ input [3:0] TX_MTYIN1;
+ input [3:0] TX_MTYIN2;
+ input [3:0] TX_MTYIN3;
+ input [1:0] TX_PTP_1588OP_IN;
+ input [15:0] TX_PTP_CHKSUM_OFFSET_IN;
+ input [63:0] TX_PTP_RXTSTAMP_IN;
+ input [15:0] TX_PTP_TAG_FIELD_IN;
+ input [15:0] TX_PTP_TSTAMP_OFFSET_IN;
+ input TX_PTP_UPD_CHKSUM_IN;
+ input TX_RESET;
+ input TX_SOPIN0;
+ input TX_SOPIN1;
+ input TX_SOPIN2;
+ input TX_SOPIN3;
+endmodule
+
+module CMACE4 (...);
+ parameter CTL_PTP_TRANSPCLK_MODE = "FALSE";
+ parameter CTL_RX_CHECK_ACK = "TRUE";
+ parameter CTL_RX_CHECK_PREAMBLE = "FALSE";
+ parameter CTL_RX_CHECK_SFD = "FALSE";
+ parameter CTL_RX_DELETE_FCS = "TRUE";
+ parameter [15:0] CTL_RX_ETYPE_GCP = 16'h8808;
+ parameter [15:0] CTL_RX_ETYPE_GPP = 16'h8808;
+ parameter [15:0] CTL_RX_ETYPE_PCP = 16'h8808;
+ parameter [15:0] CTL_RX_ETYPE_PPP = 16'h8808;
+ parameter CTL_RX_FORWARD_CONTROL = "FALSE";
+ parameter CTL_RX_IGNORE_FCS = "FALSE";
+ parameter [14:0] CTL_RX_MAX_PACKET_LEN = 15'h2580;
+ parameter [7:0] CTL_RX_MIN_PACKET_LEN = 8'h40;
+ parameter [15:0] CTL_RX_OPCODE_GPP = 16'h0001;
+ parameter [15:0] CTL_RX_OPCODE_MAX_GCP = 16'hFFFF;
+ parameter [15:0] CTL_RX_OPCODE_MAX_PCP = 16'hFFFF;
+ parameter [15:0] CTL_RX_OPCODE_MIN_GCP = 16'h0000;
+ parameter [15:0] CTL_RX_OPCODE_MIN_PCP = 16'h0000;
+ parameter [15:0] CTL_RX_OPCODE_PPP = 16'h0001;
+ parameter [47:0] CTL_RX_PAUSE_DA_MCAST = 48'h0180C2000001;
+ parameter [47:0] CTL_RX_PAUSE_DA_UCAST = 48'h000000000000;
+ parameter [47:0] CTL_RX_PAUSE_SA = 48'h000000000000;
+ parameter CTL_RX_PROCESS_LFI = "FALSE";
+ parameter [8:0] CTL_RX_RSFEC_AM_THRESHOLD = 9'h046;
+ parameter [1:0] CTL_RX_RSFEC_FILL_ADJUST = 2'h0;
+ parameter [15:0] CTL_RX_VL_LENGTH_MINUS1 = 16'h3FFF;
+ parameter [63:0] CTL_RX_VL_MARKER_ID0 = 64'hC16821003E97DE00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID1 = 64'h9D718E00628E7100;
+ parameter [63:0] CTL_RX_VL_MARKER_ID10 = 64'hFD6C990002936600;
+ parameter [63:0] CTL_RX_VL_MARKER_ID11 = 64'hB9915500466EAA00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200;
+ parameter [63:0] CTL_RX_VL_MARKER_ID14 = 64'h83C7CA007C383500;
+ parameter [63:0] CTL_RX_VL_MARKER_ID15 = 64'h3536CD00CAC93200;
+ parameter [63:0] CTL_RX_VL_MARKER_ID16 = 64'hC4314C003BCEB300;
+ parameter [63:0] CTL_RX_VL_MARKER_ID17 = 64'hADD6B70052294800;
+ parameter [63:0] CTL_RX_VL_MARKER_ID18 = 64'h5F662A00A099D500;
+ parameter [63:0] CTL_RX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID2 = 64'h594BE800A6B41700;
+ parameter [63:0] CTL_RX_VL_MARKER_ID3 = 64'h4D957B00B26A8400;
+ parameter [63:0] CTL_RX_VL_MARKER_ID4 = 64'hF50709000AF8F600;
+ parameter [63:0] CTL_RX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00;
+ parameter [63:0] CTL_RX_VL_MARKER_ID6 = 64'h9A4A260065B5D900;
+ parameter [63:0] CTL_RX_VL_MARKER_ID7 = 64'h7B45660084BA9900;
+ parameter [63:0] CTL_RX_VL_MARKER_ID8 = 64'hA02476005FDB8900;
+ parameter [63:0] CTL_RX_VL_MARKER_ID9 = 64'h68C9FB0097360400;
+ parameter CTL_TEST_MODE_PIN_CHAR = "FALSE";
+ parameter CTL_TX_CUSTOM_PREAMBLE_ENABLE = "FALSE";
+ parameter [47:0] CTL_TX_DA_GPP = 48'h0180C2000001;
+ parameter [47:0] CTL_TX_DA_PPP = 48'h0180C2000001;
+ parameter [15:0] CTL_TX_ETHERTYPE_GPP = 16'h8808;
+ parameter [15:0] CTL_TX_ETHERTYPE_PPP = 16'h8808;
+ parameter CTL_TX_FCS_INS_ENABLE = "TRUE";
+ parameter CTL_TX_IGNORE_FCS = "FALSE";
+ parameter [3:0] CTL_TX_IPG_VALUE = 4'hC;
+ parameter [15:0] CTL_TX_OPCODE_GPP = 16'h0001;
+ parameter [15:0] CTL_TX_OPCODE_PPP = 16'h0001;
+ parameter CTL_TX_PTP_1STEP_ENABLE = "FALSE";
+ parameter [10:0] CTL_TX_PTP_LATENCY_ADJUST = 11'h2C1;
+ parameter [47:0] CTL_TX_SA_GPP = 48'h000000000000;
+ parameter [47:0] CTL_TX_SA_PPP = 48'h000000000000;
+ parameter [15:0] CTL_TX_VL_LENGTH_MINUS1 = 16'h3FFF;
+ parameter [63:0] CTL_TX_VL_MARKER_ID0 = 64'hC16821003E97DE00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID1 = 64'h9D718E00628E7100;
+ parameter [63:0] CTL_TX_VL_MARKER_ID10 = 64'hFD6C990002936600;
+ parameter [63:0] CTL_TX_VL_MARKER_ID11 = 64'hB9915500466EAA00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID12 = 64'h5CB9B200A3464D00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID13 = 64'h1AF8BD00E5074200;
+ parameter [63:0] CTL_TX_VL_MARKER_ID14 = 64'h83C7CA007C383500;
+ parameter [63:0] CTL_TX_VL_MARKER_ID15 = 64'h3536CD00CAC93200;
+ parameter [63:0] CTL_TX_VL_MARKER_ID16 = 64'hC4314C003BCEB300;
+ parameter [63:0] CTL_TX_VL_MARKER_ID17 = 64'hADD6B70052294800;
+ parameter [63:0] CTL_TX_VL_MARKER_ID18 = 64'h5F662A00A099D500;
+ parameter [63:0] CTL_TX_VL_MARKER_ID19 = 64'hC0F0E5003F0F1A00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID2 = 64'h594BE800A6B41700;
+ parameter [63:0] CTL_TX_VL_MARKER_ID3 = 64'h4D957B00B26A8400;
+ parameter [63:0] CTL_TX_VL_MARKER_ID4 = 64'hF50709000AF8F600;
+ parameter [63:0] CTL_TX_VL_MARKER_ID5 = 64'hDD14C20022EB3D00;
+ parameter [63:0] CTL_TX_VL_MARKER_ID6 = 64'h9A4A260065B5D900;
+ parameter [63:0] CTL_TX_VL_MARKER_ID7 = 64'h7B45660084BA9900;
+ parameter [63:0] CTL_TX_VL_MARKER_ID8 = 64'hA02476005FDB8900;
+ parameter [63:0] CTL_TX_VL_MARKER_ID9 = 64'h68C9FB0097360400;
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter TEST_MODE_PIN_CHAR = "FALSE";
+ output [15:0] DRP_DO;
+ output DRP_RDY;
+ output [329:0] RSFEC_BYPASS_RX_DOUT;
+ output RSFEC_BYPASS_RX_DOUT_CW_START;
+ output RSFEC_BYPASS_RX_DOUT_VALID;
+ output [329:0] RSFEC_BYPASS_TX_DOUT;
+ output RSFEC_BYPASS_TX_DOUT_CW_START;
+ output RSFEC_BYPASS_TX_DOUT_VALID;
+ output [127:0] RX_DATAOUT0;
+ output [127:0] RX_DATAOUT1;
+ output [127:0] RX_DATAOUT2;
+ output [127:0] RX_DATAOUT3;
+ output RX_ENAOUT0;
+ output RX_ENAOUT1;
+ output RX_ENAOUT2;
+ output RX_ENAOUT3;
+ output RX_EOPOUT0;
+ output RX_EOPOUT1;
+ output RX_EOPOUT2;
+ output RX_EOPOUT3;
+ output RX_ERROUT0;
+ output RX_ERROUT1;
+ output RX_ERROUT2;
+ output RX_ERROUT3;
+ output [6:0] RX_LANE_ALIGNER_FILL_0;
+ output [6:0] RX_LANE_ALIGNER_FILL_1;
+ output [6:0] RX_LANE_ALIGNER_FILL_10;
+ output [6:0] RX_LANE_ALIGNER_FILL_11;
+ output [6:0] RX_LANE_ALIGNER_FILL_12;
+ output [6:0] RX_LANE_ALIGNER_FILL_13;
+ output [6:0] RX_LANE_ALIGNER_FILL_14;
+ output [6:0] RX_LANE_ALIGNER_FILL_15;
+ output [6:0] RX_LANE_ALIGNER_FILL_16;
+ output [6:0] RX_LANE_ALIGNER_FILL_17;
+ output [6:0] RX_LANE_ALIGNER_FILL_18;
+ output [6:0] RX_LANE_ALIGNER_FILL_19;
+ output [6:0] RX_LANE_ALIGNER_FILL_2;
+ output [6:0] RX_LANE_ALIGNER_FILL_3;
+ output [6:0] RX_LANE_ALIGNER_FILL_4;
+ output [6:0] RX_LANE_ALIGNER_FILL_5;
+ output [6:0] RX_LANE_ALIGNER_FILL_6;
+ output [6:0] RX_LANE_ALIGNER_FILL_7;
+ output [6:0] RX_LANE_ALIGNER_FILL_8;
+ output [6:0] RX_LANE_ALIGNER_FILL_9;
+ output [3:0] RX_MTYOUT0;
+ output [3:0] RX_MTYOUT1;
+ output [3:0] RX_MTYOUT2;
+ output [3:0] RX_MTYOUT3;
+ output [7:0] RX_OTN_BIP8_0;
+ output [7:0] RX_OTN_BIP8_1;
+ output [7:0] RX_OTN_BIP8_2;
+ output [7:0] RX_OTN_BIP8_3;
+ output [7:0] RX_OTN_BIP8_4;
+ output [65:0] RX_OTN_DATA_0;
+ output [65:0] RX_OTN_DATA_1;
+ output [65:0] RX_OTN_DATA_2;
+ output [65:0] RX_OTN_DATA_3;
+ output [65:0] RX_OTN_DATA_4;
+ output RX_OTN_ENA;
+ output RX_OTN_LANE0;
+ output RX_OTN_VLMARKER;
+ output [55:0] RX_PREOUT;
+ output [4:0] RX_PTP_PCSLANE_OUT;
+ output [79:0] RX_PTP_TSTAMP_OUT;
+ output RX_SOPOUT0;
+ output RX_SOPOUT1;
+ output RX_SOPOUT2;
+ output RX_SOPOUT3;
+ output STAT_RX_ALIGNED;
+ output STAT_RX_ALIGNED_ERR;
+ output [2:0] STAT_RX_BAD_CODE;
+ output [2:0] STAT_RX_BAD_FCS;
+ output STAT_RX_BAD_PREAMBLE;
+ output STAT_RX_BAD_SFD;
+ output STAT_RX_BIP_ERR_0;
+ output STAT_RX_BIP_ERR_1;
+ output STAT_RX_BIP_ERR_10;
+ output STAT_RX_BIP_ERR_11;
+ output STAT_RX_BIP_ERR_12;
+ output STAT_RX_BIP_ERR_13;
+ output STAT_RX_BIP_ERR_14;
+ output STAT_RX_BIP_ERR_15;
+ output STAT_RX_BIP_ERR_16;
+ output STAT_RX_BIP_ERR_17;
+ output STAT_RX_BIP_ERR_18;
+ output STAT_RX_BIP_ERR_19;
+ output STAT_RX_BIP_ERR_2;
+ output STAT_RX_BIP_ERR_3;
+ output STAT_RX_BIP_ERR_4;
+ output STAT_RX_BIP_ERR_5;
+ output STAT_RX_BIP_ERR_6;
+ output STAT_RX_BIP_ERR_7;
+ output STAT_RX_BIP_ERR_8;
+ output STAT_RX_BIP_ERR_9;
+ output [19:0] STAT_RX_BLOCK_LOCK;
+ output STAT_RX_BROADCAST;
+ output [2:0] STAT_RX_FRAGMENT;
+ output [1:0] STAT_RX_FRAMING_ERR_0;
+ output [1:0] STAT_RX_FRAMING_ERR_1;
+ output [1:0] STAT_RX_FRAMING_ERR_10;
+ output [1:0] STAT_RX_FRAMING_ERR_11;
+ output [1:0] STAT_RX_FRAMING_ERR_12;
+ output [1:0] STAT_RX_FRAMING_ERR_13;
+ output [1:0] STAT_RX_FRAMING_ERR_14;
+ output [1:0] STAT_RX_FRAMING_ERR_15;
+ output [1:0] STAT_RX_FRAMING_ERR_16;
+ output [1:0] STAT_RX_FRAMING_ERR_17;
+ output [1:0] STAT_RX_FRAMING_ERR_18;
+ output [1:0] STAT_RX_FRAMING_ERR_19;
+ output [1:0] STAT_RX_FRAMING_ERR_2;
+ output [1:0] STAT_RX_FRAMING_ERR_3;
+ output [1:0] STAT_RX_FRAMING_ERR_4;
+ output [1:0] STAT_RX_FRAMING_ERR_5;
+ output [1:0] STAT_RX_FRAMING_ERR_6;
+ output [1:0] STAT_RX_FRAMING_ERR_7;
+ output [1:0] STAT_RX_FRAMING_ERR_8;
+ output [1:0] STAT_RX_FRAMING_ERR_9;
+ output STAT_RX_FRAMING_ERR_VALID_0;
+ output STAT_RX_FRAMING_ERR_VALID_1;
+ output STAT_RX_FRAMING_ERR_VALID_10;
+ output STAT_RX_FRAMING_ERR_VALID_11;
+ output STAT_RX_FRAMING_ERR_VALID_12;
+ output STAT_RX_FRAMING_ERR_VALID_13;
+ output STAT_RX_FRAMING_ERR_VALID_14;
+ output STAT_RX_FRAMING_ERR_VALID_15;
+ output STAT_RX_FRAMING_ERR_VALID_16;
+ output STAT_RX_FRAMING_ERR_VALID_17;
+ output STAT_RX_FRAMING_ERR_VALID_18;
+ output STAT_RX_FRAMING_ERR_VALID_19;
+ output STAT_RX_FRAMING_ERR_VALID_2;
+ output STAT_RX_FRAMING_ERR_VALID_3;
+ output STAT_RX_FRAMING_ERR_VALID_4;
+ output STAT_RX_FRAMING_ERR_VALID_5;
+ output STAT_RX_FRAMING_ERR_VALID_6;
+ output STAT_RX_FRAMING_ERR_VALID_7;
+ output STAT_RX_FRAMING_ERR_VALID_8;
+ output STAT_RX_FRAMING_ERR_VALID_9;
+ output STAT_RX_GOT_SIGNAL_OS;
+ output STAT_RX_HI_BER;
+ output STAT_RX_INRANGEERR;
+ output STAT_RX_INTERNAL_LOCAL_FAULT;
+ output STAT_RX_JABBER;
+ output [7:0] STAT_RX_LANE0_VLM_BIP7;
+ output STAT_RX_LANE0_VLM_BIP7_VALID;
+ output STAT_RX_LOCAL_FAULT;
+ output [19:0] STAT_RX_MF_ERR;
+ output [19:0] STAT_RX_MF_LEN_ERR;
+ output [19:0] STAT_RX_MF_REPEAT_ERR;
+ output STAT_RX_MISALIGNED;
+ output STAT_RX_MULTICAST;
+ output STAT_RX_OVERSIZE;
+ output STAT_RX_PACKET_1024_1518_BYTES;
+ output STAT_RX_PACKET_128_255_BYTES;
+ output STAT_RX_PACKET_1519_1522_BYTES;
+ output STAT_RX_PACKET_1523_1548_BYTES;
+ output STAT_RX_PACKET_1549_2047_BYTES;
+ output STAT_RX_PACKET_2048_4095_BYTES;
+ output STAT_RX_PACKET_256_511_BYTES;
+ output STAT_RX_PACKET_4096_8191_BYTES;
+ output STAT_RX_PACKET_512_1023_BYTES;
+ output STAT_RX_PACKET_64_BYTES;
+ output STAT_RX_PACKET_65_127_BYTES;
+ output STAT_RX_PACKET_8192_9215_BYTES;
+ output STAT_RX_PACKET_BAD_FCS;
+ output STAT_RX_PACKET_LARGE;
+ output [2:0] STAT_RX_PACKET_SMALL;
+ output STAT_RX_PAUSE;
+ output [15:0] STAT_RX_PAUSE_QUANTA0;
+ output [15:0] STAT_RX_PAUSE_QUANTA1;
+ output [15:0] STAT_RX_PAUSE_QUANTA2;
+ output [15:0] STAT_RX_PAUSE_QUANTA3;
+ output [15:0] STAT_RX_PAUSE_QUANTA4;
+ output [15:0] STAT_RX_PAUSE_QUANTA5;
+ output [15:0] STAT_RX_PAUSE_QUANTA6;
+ output [15:0] STAT_RX_PAUSE_QUANTA7;
+ output [15:0] STAT_RX_PAUSE_QUANTA8;
+ output [8:0] STAT_RX_PAUSE_REQ;
+ output [8:0] STAT_RX_PAUSE_VALID;
+ output STAT_RX_RECEIVED_LOCAL_FAULT;
+ output STAT_RX_REMOTE_FAULT;
+ output STAT_RX_RSFEC_AM_LOCK0;
+ output STAT_RX_RSFEC_AM_LOCK1;
+ output STAT_RX_RSFEC_AM_LOCK2;
+ output STAT_RX_RSFEC_AM_LOCK3;
+ output STAT_RX_RSFEC_CORRECTED_CW_INC;
+ output STAT_RX_RSFEC_CW_INC;
+ output [2:0] STAT_RX_RSFEC_ERR_COUNT0_INC;
+ output [2:0] STAT_RX_RSFEC_ERR_COUNT1_INC;
+ output [2:0] STAT_RX_RSFEC_ERR_COUNT2_INC;
+ output [2:0] STAT_RX_RSFEC_ERR_COUNT3_INC;
+ output STAT_RX_RSFEC_HI_SER;
+ output STAT_RX_RSFEC_LANE_ALIGNMENT_STATUS;
+ output [13:0] STAT_RX_RSFEC_LANE_FILL_0;
+ output [13:0] STAT_RX_RSFEC_LANE_FILL_1;
+ output [13:0] STAT_RX_RSFEC_LANE_FILL_2;
+ output [13:0] STAT_RX_RSFEC_LANE_FILL_3;
+ output [7:0] STAT_RX_RSFEC_LANE_MAPPING;
+ output [31:0] STAT_RX_RSFEC_RSVD;
+ output STAT_RX_RSFEC_UNCORRECTED_CW_INC;
+ output STAT_RX_STATUS;
+ output [2:0] STAT_RX_STOMPED_FCS;
+ output [19:0] STAT_RX_SYNCED;
+ output [19:0] STAT_RX_SYNCED_ERR;
+ output [2:0] STAT_RX_TEST_PATTERN_MISMATCH;
+ output STAT_RX_TOOLONG;
+ output [6:0] STAT_RX_TOTAL_BYTES;
+ output [13:0] STAT_RX_TOTAL_GOOD_BYTES;
+ output STAT_RX_TOTAL_GOOD_PACKETS;
+ output [2:0] STAT_RX_TOTAL_PACKETS;
+ output STAT_RX_TRUNCATED;
+ output [2:0] STAT_RX_UNDERSIZE;
+ output STAT_RX_UNICAST;
+ output STAT_RX_USER_PAUSE;
+ output STAT_RX_VLAN;
+ output [19:0] STAT_RX_VL_DEMUXED;
+ output [4:0] STAT_RX_VL_NUMBER_0;
+ output [4:0] STAT_RX_VL_NUMBER_1;
+ output [4:0] STAT_RX_VL_NUMBER_10;
+ output [4:0] STAT_RX_VL_NUMBER_11;
+ output [4:0] STAT_RX_VL_NUMBER_12;
+ output [4:0] STAT_RX_VL_NUMBER_13;
+ output [4:0] STAT_RX_VL_NUMBER_14;
+ output [4:0] STAT_RX_VL_NUMBER_15;
+ output [4:0] STAT_RX_VL_NUMBER_16;
+ output [4:0] STAT_RX_VL_NUMBER_17;
+ output [4:0] STAT_RX_VL_NUMBER_18;
+ output [4:0] STAT_RX_VL_NUMBER_19;
+ output [4:0] STAT_RX_VL_NUMBER_2;
+ output [4:0] STAT_RX_VL_NUMBER_3;
+ output [4:0] STAT_RX_VL_NUMBER_4;
+ output [4:0] STAT_RX_VL_NUMBER_5;
+ output [4:0] STAT_RX_VL_NUMBER_6;
+ output [4:0] STAT_RX_VL_NUMBER_7;
+ output [4:0] STAT_RX_VL_NUMBER_8;
+ output [4:0] STAT_RX_VL_NUMBER_9;
+ output STAT_TX_BAD_FCS;
+ output STAT_TX_BROADCAST;
+ output STAT_TX_FRAME_ERROR;
+ output STAT_TX_LOCAL_FAULT;
+ output STAT_TX_MULTICAST;
+ output STAT_TX_PACKET_1024_1518_BYTES;
+ output STAT_TX_PACKET_128_255_BYTES;
+ output STAT_TX_PACKET_1519_1522_BYTES;
+ output STAT_TX_PACKET_1523_1548_BYTES;
+ output STAT_TX_PACKET_1549_2047_BYTES;
+ output STAT_TX_PACKET_2048_4095_BYTES;
+ output STAT_TX_PACKET_256_511_BYTES;
+ output STAT_TX_PACKET_4096_8191_BYTES;
+ output STAT_TX_PACKET_512_1023_BYTES;
+ output STAT_TX_PACKET_64_BYTES;
+ output STAT_TX_PACKET_65_127_BYTES;
+ output STAT_TX_PACKET_8192_9215_BYTES;
+ output STAT_TX_PACKET_LARGE;
+ output STAT_TX_PACKET_SMALL;
+ output STAT_TX_PAUSE;
+ output [8:0] STAT_TX_PAUSE_VALID;
+ output STAT_TX_PTP_FIFO_READ_ERROR;
+ output STAT_TX_PTP_FIFO_WRITE_ERROR;
+ output [5:0] STAT_TX_TOTAL_BYTES;
+ output [13:0] STAT_TX_TOTAL_GOOD_BYTES;
+ output STAT_TX_TOTAL_GOOD_PACKETS;
+ output STAT_TX_TOTAL_PACKETS;
+ output STAT_TX_UNICAST;
+ output STAT_TX_USER_PAUSE;
+ output STAT_TX_VLAN;
+ output TX_OVFOUT;
+ output [4:0] TX_PTP_PCSLANE_OUT;
+ output [79:0] TX_PTP_TSTAMP_OUT;
+ output [15:0] TX_PTP_TSTAMP_TAG_OUT;
+ output TX_PTP_TSTAMP_VALID_OUT;
+ output TX_RDYOUT;
+ output [15:0] TX_SERDES_ALT_DATA0;
+ output [15:0] TX_SERDES_ALT_DATA1;
+ output [15:0] TX_SERDES_ALT_DATA2;
+ output [15:0] TX_SERDES_ALT_DATA3;
+ output [63:0] TX_SERDES_DATA0;
+ output [63:0] TX_SERDES_DATA1;
+ output [63:0] TX_SERDES_DATA2;
+ output [63:0] TX_SERDES_DATA3;
+ output [31:0] TX_SERDES_DATA4;
+ output [31:0] TX_SERDES_DATA5;
+ output [31:0] TX_SERDES_DATA6;
+ output [31:0] TX_SERDES_DATA7;
+ output [31:0] TX_SERDES_DATA8;
+ output [31:0] TX_SERDES_DATA9;
+ output TX_UNFOUT;
+ input CTL_CAUI4_MODE;
+ input CTL_RSFEC_ENABLE_TRANSCODER_BYPASS_MODE;
+ input CTL_RSFEC_IEEE_ERROR_INDICATION_MODE;
+ input CTL_RX_CHECK_ETYPE_GCP;
+ input CTL_RX_CHECK_ETYPE_GPP;
+ input CTL_RX_CHECK_ETYPE_PCP;
+ input CTL_RX_CHECK_ETYPE_PPP;
+ input CTL_RX_CHECK_MCAST_GCP;
+ input CTL_RX_CHECK_MCAST_GPP;
+ input CTL_RX_CHECK_MCAST_PCP;
+ input CTL_RX_CHECK_MCAST_PPP;
+ input CTL_RX_CHECK_OPCODE_GCP;
+ input CTL_RX_CHECK_OPCODE_GPP;
+ input CTL_RX_CHECK_OPCODE_PCP;
+ input CTL_RX_CHECK_OPCODE_PPP;
+ input CTL_RX_CHECK_SA_GCP;
+ input CTL_RX_CHECK_SA_GPP;
+ input CTL_RX_CHECK_SA_PCP;
+ input CTL_RX_CHECK_SA_PPP;
+ input CTL_RX_CHECK_UCAST_GCP;
+ input CTL_RX_CHECK_UCAST_GPP;
+ input CTL_RX_CHECK_UCAST_PCP;
+ input CTL_RX_CHECK_UCAST_PPP;
+ input CTL_RX_ENABLE;
+ input CTL_RX_ENABLE_GCP;
+ input CTL_RX_ENABLE_GPP;
+ input CTL_RX_ENABLE_PCP;
+ input CTL_RX_ENABLE_PPP;
+ input CTL_RX_FORCE_RESYNC;
+ input [8:0] CTL_RX_PAUSE_ACK;
+ input [8:0] CTL_RX_PAUSE_ENABLE;
+ input CTL_RX_RSFEC_ENABLE;
+ input CTL_RX_RSFEC_ENABLE_CORRECTION;
+ input CTL_RX_RSFEC_ENABLE_INDICATION;
+ input [79:0] CTL_RX_SYSTEMTIMERIN;
+ input CTL_RX_TEST_PATTERN;
+ input CTL_TX_ENABLE;
+ input CTL_TX_LANE0_VLM_BIP7_OVERRIDE;
+ input [7:0] CTL_TX_LANE0_VLM_BIP7_OVERRIDE_VALUE;
+ input [8:0] CTL_TX_PAUSE_ENABLE;
+ input [15:0] CTL_TX_PAUSE_QUANTA0;
+ input [15:0] CTL_TX_PAUSE_QUANTA1;
+ input [15:0] CTL_TX_PAUSE_QUANTA2;
+ input [15:0] CTL_TX_PAUSE_QUANTA3;
+ input [15:0] CTL_TX_PAUSE_QUANTA4;
+ input [15:0] CTL_TX_PAUSE_QUANTA5;
+ input [15:0] CTL_TX_PAUSE_QUANTA6;
+ input [15:0] CTL_TX_PAUSE_QUANTA7;
+ input [15:0] CTL_TX_PAUSE_QUANTA8;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER0;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER1;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER2;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER3;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER4;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER5;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER6;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER7;
+ input [15:0] CTL_TX_PAUSE_REFRESH_TIMER8;
+ input [8:0] CTL_TX_PAUSE_REQ;
+ input CTL_TX_PTP_VLANE_ADJUST_MODE;
+ input CTL_TX_RESEND_PAUSE;
+ input CTL_TX_RSFEC_ENABLE;
+ input CTL_TX_SEND_IDLE;
+ input CTL_TX_SEND_LFI;
+ input CTL_TX_SEND_RFI;
+ input [79:0] CTL_TX_SYSTEMTIMERIN;
+ input CTL_TX_TEST_PATTERN;
+ input [9:0] DRP_ADDR;
+ input DRP_CLK;
+ input [15:0] DRP_DI;
+ input DRP_EN;
+ input DRP_WE;
+ input [329:0] RSFEC_BYPASS_RX_DIN;
+ input RSFEC_BYPASS_RX_DIN_CW_START;
+ input [329:0] RSFEC_BYPASS_TX_DIN;
+ input RSFEC_BYPASS_TX_DIN_CW_START;
+ input RX_CLK;
+ input RX_RESET;
+ input [15:0] RX_SERDES_ALT_DATA0;
+ input [15:0] RX_SERDES_ALT_DATA1;
+ input [15:0] RX_SERDES_ALT_DATA2;
+ input [15:0] RX_SERDES_ALT_DATA3;
+ input [9:0] RX_SERDES_CLK;
+ input [63:0] RX_SERDES_DATA0;
+ input [63:0] RX_SERDES_DATA1;
+ input [63:0] RX_SERDES_DATA2;
+ input [63:0] RX_SERDES_DATA3;
+ input [31:0] RX_SERDES_DATA4;
+ input [31:0] RX_SERDES_DATA5;
+ input [31:0] RX_SERDES_DATA6;
+ input [31:0] RX_SERDES_DATA7;
+ input [31:0] RX_SERDES_DATA8;
+ input [31:0] RX_SERDES_DATA9;
+ input [9:0] RX_SERDES_RESET;
+ input TX_CLK;
+ input [127:0] TX_DATAIN0;
+ input [127:0] TX_DATAIN1;
+ input [127:0] TX_DATAIN2;
+ input [127:0] TX_DATAIN3;
+ input TX_ENAIN0;
+ input TX_ENAIN1;
+ input TX_ENAIN2;
+ input TX_ENAIN3;
+ input TX_EOPIN0;
+ input TX_EOPIN1;
+ input TX_EOPIN2;
+ input TX_EOPIN3;
+ input TX_ERRIN0;
+ input TX_ERRIN1;
+ input TX_ERRIN2;
+ input TX_ERRIN3;
+ input [3:0] TX_MTYIN0;
+ input [3:0] TX_MTYIN1;
+ input [3:0] TX_MTYIN2;
+ input [3:0] TX_MTYIN3;
+ input [55:0] TX_PREIN;
+ input [1:0] TX_PTP_1588OP_IN;
+ input [15:0] TX_PTP_CHKSUM_OFFSET_IN;
+ input [63:0] TX_PTP_RXTSTAMP_IN;
+ input [15:0] TX_PTP_TAG_FIELD_IN;
+ input [15:0] TX_PTP_TSTAMP_OFFSET_IN;
+ input TX_PTP_UPD_CHKSUM_IN;
+ input TX_RESET;
+ input TX_SOPIN0;
+ input TX_SOPIN1;
+ input TX_SOPIN2;
+ input TX_SOPIN3;
+endmodule
+
+module GTHE3_CHANNEL (...);
+ parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_RESET = 1'b0;
+ parameter [15:0] ADAPT_CFG0 = 16'hF800;
+ parameter [15:0] ADAPT_CFG1 = 16'h0000;
+ parameter ALIGN_COMMA_DOUBLE = "FALSE";
+ parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111;
+ parameter integer ALIGN_COMMA_WORD = 1;
+ parameter ALIGN_MCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011;
+ parameter ALIGN_PCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100;
+ parameter [0:0] A_RXOSCALRESET = 1'b0;
+ parameter [0:0] A_RXPROGDIVRESET = 1'b0;
+ parameter [0:0] A_TXPROGDIVRESET = 1'b0;
+ parameter CBCC_DATA_SOURCE_SEL = "DECODED";
+ parameter [0:0] CDR_SWAP_MODE_EN = 1'b0;
+ parameter CHAN_BOND_KEEP_ALIGN = "FALSE";
+ parameter integer CHAN_BOND_MAX_SKEW = 7;
+ parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111;
+ parameter CHAN_BOND_SEQ_2_USE = "FALSE";
+ parameter integer CHAN_BOND_SEQ_LEN = 2;
+ parameter CLK_CORRECT_USE = "TRUE";
+ parameter CLK_COR_KEEP_IDLE = "FALSE";
+ parameter integer CLK_COR_MAX_LAT = 20;
+ parameter integer CLK_COR_MIN_LAT = 18;
+ parameter CLK_COR_PRECEDENCE = "TRUE";
+ parameter integer CLK_COR_REPEAT_WAIT = 0;
+ parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111;
+ parameter CLK_COR_SEQ_2_USE = "FALSE";
+ parameter integer CLK_COR_SEQ_LEN = 2;
+ parameter [15:0] CPLL_CFG0 = 16'h20F8;
+ parameter [15:0] CPLL_CFG1 = 16'hA494;
+ parameter [15:0] CPLL_CFG2 = 16'hF001;
+ parameter [5:0] CPLL_CFG3 = 6'h00;
+ parameter integer CPLL_FBDIV = 4;
+ parameter integer CPLL_FBDIV_45 = 4;
+ parameter [15:0] CPLL_INIT_CFG0 = 16'h001E;
+ parameter [7:0] CPLL_INIT_CFG1 = 8'h00;
+ parameter [15:0] CPLL_LOCK_CFG = 16'h01E8;
+ parameter integer CPLL_REFCLK_DIV = 1;
+ parameter [1:0] DDI_CTRL = 2'b00;
+ parameter integer DDI_REALIGN_WAIT = 15;
+ parameter DEC_MCOMMA_DETECT = "TRUE";
+ parameter DEC_PCOMMA_DETECT = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY = "TRUE";
+ parameter [0:0] DFE_D_X_REL_POS = 1'b0;
+ parameter [0:0] DFE_VCM_COMP_EN = 1'b0;
+ parameter [9:0] DMONITOR_CFG0 = 10'h000;
+ parameter [7:0] DMONITOR_CFG1 = 8'h00;
+ parameter [0:0] ES_CLK_PHASE_SEL = 1'b0;
+ parameter [5:0] ES_CONTROL = 6'b000000;
+ parameter ES_ERRDET_EN = "FALSE";
+ parameter ES_EYE_SCAN_EN = "FALSE";
+ parameter [11:0] ES_HORZ_OFFSET = 12'h000;
+ parameter [9:0] ES_PMA_CFG = 10'b0000000000;
+ parameter [4:0] ES_PRESCALE = 5'b00000;
+ parameter [15:0] ES_QUALIFIER0 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER1 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER2 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER3 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER4 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK0 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK1 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK2 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK3 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK4 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK0 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK1 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK2 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK3 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK4 = 16'h0000;
+ parameter [10:0] EVODD_PHI_CFG = 11'b00000000000;
+ parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0;
+ parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111;
+ parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111;
+ parameter FTS_LANE_DESKEW_EN = "FALSE";
+ parameter [4:0] GEARBOX_MODE = 5'b00000;
+ parameter [0:0] GM_BIAS_SELECT = 1'b0;
+ parameter [0:0] LOCAL_MASTER = 1'b0;
+ parameter [1:0] OOBDIVCTL = 2'b00;
+ parameter [0:0] OOB_PWRUP = 1'b0;
+ parameter PCI3_AUTO_REALIGN = "FRST_SMPL";
+ parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1;
+ parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00;
+ parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0;
+ parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000;
+ parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000;
+ parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000;
+ parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0;
+ parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0;
+ parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000;
+ parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_RXPMA_CFG = 16'h0000;
+ parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_TXPMA_CFG = 16'h0000;
+ parameter PCS_PCIE_EN = "FALSE";
+ parameter [15:0] PCS_RSVD0 = 16'b0000000000000000;
+ parameter [2:0] PCS_RSVD1 = 3'b000;
+ parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C;
+ parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19;
+ parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64;
+ parameter [1:0] PLL_SEL_MODE_GEN12 = 2'h0;
+ parameter [1:0] PLL_SEL_MODE_GEN3 = 2'h0;
+ parameter [15:0] PMA_RSV1 = 16'h0000;
+ parameter [2:0] PROCESS_PAR = 3'b010;
+ parameter [0:0] RATE_SW_USE_DRP = 1'b0;
+ parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0;
+ parameter [4:0] RXBUFRESET_TIME = 5'b00001;
+ parameter RXBUF_ADDR_MODE = "FULL";
+ parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000;
+ parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000;
+ parameter RXBUF_EN = "TRUE";
+ parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE";
+ parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE";
+ parameter RXBUF_RESET_ON_EIDLE = "FALSE";
+ parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE";
+ parameter integer RXBUF_THRESH_OVFLW = 0;
+ parameter RXBUF_THRESH_OVRD = "FALSE";
+ parameter integer RXBUF_THRESH_UNDFLW = 4;
+ parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001;
+ parameter [4:0] RXCDRPHRESET_TIME = 5'b00001;
+ parameter [15:0] RXCDR_CFG0 = 16'h0000;
+ parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG1 = 16'h0080;
+ parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG2 = 16'h07E6;
+ parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG4 = 16'h0000;
+ parameter [15:0] RXCDR_CFG4_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG5 = 16'h0000;
+ parameter [15:0] RXCDR_CFG5_GEN3 = 16'h0000;
+ parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0;
+ parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0;
+ parameter [15:0] RXCDR_LOCK_CFG0 = 16'h5080;
+ parameter [15:0] RXCDR_LOCK_CFG1 = 16'h07E0;
+ parameter [15:0] RXCDR_LOCK_CFG2 = 16'h7C42;
+ parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0;
+ parameter [15:0] RXCFOK_CFG0 = 16'h4000;
+ parameter [15:0] RXCFOK_CFG1 = 16'h0060;
+ parameter [15:0] RXCFOK_CFG2 = 16'h000E;
+ parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111;
+ parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000;
+ parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0032;
+ parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_CFG0 = 16'h0A00;
+ parameter [15:0] RXDFE_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG1 = 16'h7840;
+ parameter [15:0] RXDFE_GC_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_H3_CFG0 = 16'h4000;
+ parameter [15:0] RXDFE_H3_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_H4_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_H4_CFG1 = 16'h0003;
+ parameter [15:0] RXDFE_H5_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_H5_CFG1 = 16'h0003;
+ parameter [15:0] RXDFE_H6_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_H6_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_H7_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_H7_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_H8_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_H8_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_H9_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_H9_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_HA_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_HA_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_HB_CFG0 = 16'h2000;
+ parameter [15:0] RXDFE_HB_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_HC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HC_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_HD_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HD_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_HE_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HE_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_HF_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HF_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_OS_CFG0 = 16'h8000;
+ parameter [15:0] RXDFE_OS_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_UT_CFG0 = 16'h8000;
+ parameter [15:0] RXDFE_UT_CFG1 = 16'h0003;
+ parameter [15:0] RXDFE_VP_CFG0 = 16'hAA00;
+ parameter [15:0] RXDFE_VP_CFG1 = 16'h0033;
+ parameter [15:0] RXDLY_CFG = 16'h001F;
+ parameter [15:0] RXDLY_LCFG = 16'h0030;
+ parameter RXELECIDLE_CFG = "Sigcfg_4";
+ parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter RXGEARBOX_EN = "FALSE";
+ parameter [4:0] RXISCANRESET_TIME = 5'b00001;
+ parameter [15:0] RXLPM_CFG = 16'h0000;
+ parameter [15:0] RXLPM_GC_CFG = 16'h0000;
+ parameter [15:0] RXLPM_KH_CFG0 = 16'h0000;
+ parameter [15:0] RXLPM_KH_CFG1 = 16'h0002;
+ parameter [15:0] RXLPM_OS_CFG0 = 16'h8000;
+ parameter [15:0] RXLPM_OS_CFG1 = 16'h0002;
+ parameter [8:0] RXOOB_CFG = 9'b000000110;
+ parameter RXOOB_CLK_CFG = "PMA";
+ parameter [4:0] RXOSCALRESET_TIME = 5'b00011;
+ parameter integer RXOUT_DIV = 4;
+ parameter [4:0] RXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] RXPHBEACON_CFG = 16'h0000;
+ parameter [15:0] RXPHDLY_CFG = 16'h2020;
+ parameter [15:0] RXPHSAMP_CFG = 16'h2100;
+ parameter [15:0] RXPHSLIP_CFG = 16'h6622;
+ parameter [4:0] RXPH_MONITOR_SEL = 5'b00000;
+ parameter [1:0] RXPI_CFG0 = 2'b00;
+ parameter [1:0] RXPI_CFG1 = 2'b00;
+ parameter [1:0] RXPI_CFG2 = 2'b00;
+ parameter [1:0] RXPI_CFG3 = 2'b00;
+ parameter [0:0] RXPI_CFG4 = 1'b0;
+ parameter [0:0] RXPI_CFG5 = 1'b1;
+ parameter [2:0] RXPI_CFG6 = 3'b000;
+ parameter [0:0] RXPI_LPM = 1'b0;
+ parameter [0:0] RXPI_VREFSEL = 1'b0;
+ parameter RXPMACLK_SEL = "DATA";
+ parameter [4:0] RXPMARESET_TIME = 5'b00001;
+ parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0;
+ parameter integer RXPRBS_LINKACQ_CNT = 15;
+ parameter integer RXSLIDE_AUTO_WAIT = 7;
+ parameter RXSLIDE_MODE = "OFF";
+ parameter [0:0] RXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] RXSYNC_OVRD = 1'b0;
+ parameter [0:0] RXSYNC_SKIP_DA = 1'b0;
+ parameter [0:0] RX_AFE_CM_EN = 1'b0;
+ parameter [15:0] RX_BIAS_CFG0 = 16'h0AD4;
+ parameter [5:0] RX_BUFFER_CFG = 6'b000000;
+ parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0;
+ parameter integer RX_CLK25_DIV = 8;
+ parameter [0:0] RX_CLKMUX_EN = 1'b1;
+ parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000;
+ parameter [3:0] RX_CM_BUF_CFG = 4'b1010;
+ parameter [0:0] RX_CM_BUF_PD = 1'b0;
+ parameter [1:0] RX_CM_SEL = 2'b11;
+ parameter [3:0] RX_CM_TRIM = 4'b0100;
+ parameter [7:0] RX_CTLE3_LPF = 8'b00000000;
+ parameter integer RX_DATA_WIDTH = 20;
+ parameter [5:0] RX_DDI_SEL = 6'b000000;
+ parameter RX_DEFER_RESET_BUF_EN = "TRUE";
+ parameter [3:0] RX_DFELPM_CFG0 = 4'b0110;
+ parameter [0:0] RX_DFELPM_CFG1 = 1'b0;
+ parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1;
+ parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00;
+ parameter [2:0] RX_DFE_AGC_CFG1 = 3'b100;
+ parameter [1:0] RX_DFE_KL_LPM_KH_CFG0 = 2'b01;
+ parameter [2:0] RX_DFE_KL_LPM_KH_CFG1 = 3'b010;
+ parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01;
+ parameter [2:0] RX_DFE_KL_LPM_KL_CFG1 = 3'b010;
+ parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0;
+ parameter RX_DISPERR_SEQ_MATCH = "TRUE";
+ parameter [4:0] RX_DIVRESET_TIME = 5'b00001;
+ parameter [0:0] RX_EN_HI_LR = 1'b0;
+ parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000;
+ parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0;
+ parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b00;
+ parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0;
+ parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter integer RX_INT_DATAWIDTH = 1;
+ parameter [0:0] RX_PMA_POWER_SAVE = 1'b0;
+ parameter real RX_PROGDIV_CFG = 4.0;
+ parameter [2:0] RX_SAMPLE_PERIOD = 3'b101;
+ parameter integer RX_SIG_VALID_DLY = 11;
+ parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0;
+ parameter [3:0] RX_SUM_IREF_TUNE = 4'b0000;
+ parameter [1:0] RX_SUM_RES_CTRL = 2'b00;
+ parameter [3:0] RX_SUM_VCMTUNE = 4'b0000;
+ parameter [0:0] RX_SUM_VCM_OVWR = 1'b0;
+ parameter [2:0] RX_SUM_VREF_TUNE = 3'b000;
+ parameter [1:0] RX_TUNE_AFE_OS = 2'b00;
+ parameter [0:0] RX_WIDEMODE_CDR = 1'b0;
+ parameter RX_XCLK_SEL = "RXDES";
+ parameter integer SAS_MAX_COM = 64;
+ parameter integer SAS_MIN_COM = 36;
+ parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111;
+ parameter [2:0] SATA_BURST_VAL = 3'b100;
+ parameter SATA_CPLL_CFG = "VCO_3000MHZ";
+ parameter [2:0] SATA_EIDLE_VAL = 3'b100;
+ parameter integer SATA_MAX_BURST = 8;
+ parameter integer SATA_MAX_INIT = 21;
+ parameter integer SATA_MAX_WAKE = 7;
+ parameter integer SATA_MIN_BURST = 4;
+ parameter integer SATA_MIN_INIT = 12;
+ parameter integer SATA_MIN_WAKE = 4;
+ parameter SHOW_REALIGN_COMMA = "TRUE";
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RECEIVER_DETECT_PASS = "TRUE";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter [0:0] SIM_TX_EIDLE_DRIVE_LEVEL = 1'b0;
+ parameter integer SIM_VERSION = 2;
+ parameter [1:0] TAPDLY_SET_TX = 2'h0;
+ parameter [3:0] TEMPERATUR_PAR = 4'b0010;
+ parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000;
+ parameter [2:0] TERM_RCAL_OVRD = 3'b000;
+ parameter [7:0] TRANS_TIME_RATE = 8'h0E;
+ parameter [7:0] TST_RSV0 = 8'h00;
+ parameter [7:0] TST_RSV1 = 8'h00;
+ parameter TXBUF_EN = "TRUE";
+ parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE";
+ parameter [15:0] TXDLY_CFG = 16'h001F;
+ parameter [15:0] TXDLY_LCFG = 16'h0030;
+ parameter [3:0] TXDRVBIAS_N = 4'b1010;
+ parameter [3:0] TXDRVBIAS_P = 4'b1100;
+ parameter TXFIFO_ADDR_CFG = "LOW";
+ parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter TXGEARBOX_EN = "FALSE";
+ parameter integer TXOUT_DIV = 4;
+ parameter [4:0] TXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] TXPHDLY_CFG0 = 16'h2020;
+ parameter [15:0] TXPHDLY_CFG1 = 16'h0001;
+ parameter [15:0] TXPH_CFG = 16'h0980;
+ parameter [4:0] TXPH_MONITOR_SEL = 5'b00000;
+ parameter [1:0] TXPI_CFG0 = 2'b00;
+ parameter [1:0] TXPI_CFG1 = 2'b00;
+ parameter [1:0] TXPI_CFG2 = 2'b00;
+ parameter [0:0] TXPI_CFG3 = 1'b0;
+ parameter [0:0] TXPI_CFG4 = 1'b1;
+ parameter [2:0] TXPI_CFG5 = 3'b000;
+ parameter [0:0] TXPI_GRAY_SEL = 1'b0;
+ parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0;
+ parameter [0:0] TXPI_LPM = 1'b0;
+ parameter TXPI_PPMCLK_SEL = "TXUSRCLK2";
+ parameter [7:0] TXPI_PPM_CFG = 8'b00000000;
+ parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000;
+ parameter [0:0] TXPI_VREFSEL = 1'b0;
+ parameter [4:0] TXPMARESET_TIME = 5'b00001;
+ parameter [0:0] TXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] TXSYNC_OVRD = 1'b0;
+ parameter [0:0] TXSYNC_SKIP_DA = 1'b0;
+ parameter integer TX_CLK25_DIV = 8;
+ parameter [0:0] TX_CLKMUX_EN = 1'b1;
+ parameter integer TX_DATA_WIDTH = 20;
+ parameter [5:0] TX_DCD_CFG = 6'b000010;
+ parameter [0:0] TX_DCD_EN = 1'b0;
+ parameter [5:0] TX_DEEMPH0 = 6'b000000;
+ parameter [5:0] TX_DEEMPH1 = 6'b000000;
+ parameter [4:0] TX_DIVRESET_TIME = 5'b00001;
+ parameter TX_DRIVE_MODE = "DIRECT";
+ parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110;
+ parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100;
+ parameter [0:0] TX_EML_PHI_TUNE = 1'b0;
+ parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0;
+ parameter integer TX_INT_DATAWIDTH = 1;
+ parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE";
+ parameter [0:0] TX_MAINCURSOR_SEL = 1'b0;
+ parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110;
+ parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001;
+ parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101;
+ parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110;
+ parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100;
+ parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000;
+ parameter [2:0] TX_MODE_SEL = 3'b000;
+ parameter [0:0] TX_PMADATA_OPT = 1'b0;
+ parameter [0:0] TX_PMA_POWER_SAVE = 1'b0;
+ parameter TX_PROGCLK_SEL = "POSTPI";
+ parameter real TX_PROGDIV_CFG = 4.0;
+ parameter [0:0] TX_QPI_STATUS_EN = 1'b0;
+ parameter [13:0] TX_RXDETECT_CFG = 14'h0032;
+ parameter [2:0] TX_RXDETECT_REF = 3'b100;
+ parameter [2:0] TX_SAMPLE_PERIOD = 3'b101;
+ parameter [0:0] TX_SARC_LPBK_ENB = 1'b0;
+ parameter TX_XCLK_SEL = "TXOUT";
+ parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0;
+ parameter [1:0] WB_MODE = 2'b00;
+ output [2:0] BUFGTCE;
+ output [2:0] BUFGTCEMASK;
+ output [8:0] BUFGTDIV;
+ output [2:0] BUFGTRESET;
+ output [2:0] BUFGTRSTMASK;
+ output CPLLFBCLKLOST;
+ output CPLLLOCK;
+ output CPLLREFCLKLOST;
+ output [16:0] DMONITOROUT;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output EYESCANDATAERROR;
+ output GTHTXN;
+ output GTHTXP;
+ output GTPOWERGOOD;
+ output GTREFCLKMONITOR;
+ output PCIERATEGEN3;
+ output PCIERATEIDLE;
+ output [1:0] PCIERATEQPLLPD;
+ output [1:0] PCIERATEQPLLRESET;
+ output PCIESYNCTXSYNCDONE;
+ output PCIEUSERGEN3RDY;
+ output PCIEUSERPHYSTATUSRST;
+ output PCIEUSERRATESTART;
+ output [11:0] PCSRSVDOUT;
+ output PHYSTATUS;
+ output [7:0] PINRSRVDAS;
+ output RESETEXCEPTION;
+ output [2:0] RXBUFSTATUS;
+ output RXBYTEISALIGNED;
+ output RXBYTEREALIGN;
+ output RXCDRLOCK;
+ output RXCDRPHDONE;
+ output RXCHANBONDSEQ;
+ output RXCHANISALIGNED;
+ output RXCHANREALIGN;
+ output [4:0] RXCHBONDO;
+ output [1:0] RXCLKCORCNT;
+ output RXCOMINITDET;
+ output RXCOMMADET;
+ output RXCOMSASDET;
+ output RXCOMWAKEDET;
+ output [15:0] RXCTRL0;
+ output [15:0] RXCTRL1;
+ output [7:0] RXCTRL2;
+ output [7:0] RXCTRL3;
+ output [127:0] RXDATA;
+ output [7:0] RXDATAEXTENDRSVD;
+ output [1:0] RXDATAVALID;
+ output RXDLYSRESETDONE;
+ output RXELECIDLE;
+ output [5:0] RXHEADER;
+ output [1:0] RXHEADERVALID;
+ output [6:0] RXMONITOROUT;
+ output RXOSINTDONE;
+ output RXOSINTSTARTED;
+ output RXOSINTSTROBEDONE;
+ output RXOSINTSTROBESTARTED;
+ output RXOUTCLK;
+ output RXOUTCLKFABRIC;
+ output RXOUTCLKPCS;
+ output RXPHALIGNDONE;
+ output RXPHALIGNERR;
+ output RXPMARESETDONE;
+ output RXPRBSERR;
+ output RXPRBSLOCKED;
+ output RXPRGDIVRESETDONE;
+ output RXQPISENN;
+ output RXQPISENP;
+ output RXRATEDONE;
+ output RXRECCLKOUT;
+ output RXRESETDONE;
+ output RXSLIDERDY;
+ output RXSLIPDONE;
+ output RXSLIPOUTCLKRDY;
+ output RXSLIPPMARDY;
+ output [1:0] RXSTARTOFSEQ;
+ output [2:0] RXSTATUS;
+ output RXSYNCDONE;
+ output RXSYNCOUT;
+ output RXVALID;
+ output [1:0] TXBUFSTATUS;
+ output TXCOMFINISH;
+ output TXDLYSRESETDONE;
+ output TXOUTCLK;
+ output TXOUTCLKFABRIC;
+ output TXOUTCLKPCS;
+ output TXPHALIGNDONE;
+ output TXPHINITDONE;
+ output TXPMARESETDONE;
+ output TXPRGDIVRESETDONE;
+ output TXQPISENN;
+ output TXQPISENP;
+ output TXRATEDONE;
+ output TXRESETDONE;
+ output TXSYNCDONE;
+ output TXSYNCOUT;
+ input CFGRESET;
+ input CLKRSVD0;
+ input CLKRSVD1;
+ input CPLLLOCKDETCLK;
+ input CPLLLOCKEN;
+ input CPLLPD;
+ input [2:0] CPLLREFCLKSEL;
+ input CPLLRESET;
+ input DMONFIFORESET;
+ input DMONITORCLK;
+ input [8:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input EVODDPHICALDONE;
+ input EVODDPHICALSTART;
+ input EVODDPHIDRDEN;
+ input EVODDPHIDWREN;
+ input EVODDPHIXRDEN;
+ input EVODDPHIXWREN;
+ input EYESCANMODE;
+ input EYESCANRESET;
+ input EYESCANTRIGGER;
+ input GTGREFCLK;
+ input GTHRXN;
+ input GTHRXP;
+ input GTNORTHREFCLK0;
+ input GTNORTHREFCLK1;
+ input GTREFCLK0;
+ input GTREFCLK1;
+ input GTRESETSEL;
+ input [15:0] GTRSVD;
+ input GTRXRESET;
+ input GTSOUTHREFCLK0;
+ input GTSOUTHREFCLK1;
+ input GTTXRESET;
+ input [2:0] LOOPBACK;
+ input LPBKRXTXSEREN;
+ input LPBKTXRXSEREN;
+ input PCIEEQRXEQADAPTDONE;
+ input PCIERSTIDLE;
+ input PCIERSTTXSYNCSTART;
+ input PCIEUSERRATEDONE;
+ input [15:0] PCSRSVDIN;
+ input [4:0] PCSRSVDIN2;
+ input [4:0] PMARSVDIN;
+ input QPLL0CLK;
+ input QPLL0REFCLK;
+ input QPLL1CLK;
+ input QPLL1REFCLK;
+ input RESETOVRD;
+ input RSTCLKENTX;
+ input RX8B10BEN;
+ input RXBUFRESET;
+ input RXCDRFREQRESET;
+ input RXCDRHOLD;
+ input RXCDROVRDEN;
+ input RXCDRRESET;
+ input RXCDRRESETRSV;
+ input RXCHBONDEN;
+ input [4:0] RXCHBONDI;
+ input [2:0] RXCHBONDLEVEL;
+ input RXCHBONDMASTER;
+ input RXCHBONDSLAVE;
+ input RXCOMMADETEN;
+ input [1:0] RXDFEAGCCTRL;
+ input RXDFEAGCHOLD;
+ input RXDFEAGCOVRDEN;
+ input RXDFELFHOLD;
+ input RXDFELFOVRDEN;
+ input RXDFELPMRESET;
+ input RXDFETAP10HOLD;
+ input RXDFETAP10OVRDEN;
+ input RXDFETAP11HOLD;
+ input RXDFETAP11OVRDEN;
+ input RXDFETAP12HOLD;
+ input RXDFETAP12OVRDEN;
+ input RXDFETAP13HOLD;
+ input RXDFETAP13OVRDEN;
+ input RXDFETAP14HOLD;
+ input RXDFETAP14OVRDEN;
+ input RXDFETAP15HOLD;
+ input RXDFETAP15OVRDEN;
+ input RXDFETAP2HOLD;
+ input RXDFETAP2OVRDEN;
+ input RXDFETAP3HOLD;
+ input RXDFETAP3OVRDEN;
+ input RXDFETAP4HOLD;
+ input RXDFETAP4OVRDEN;
+ input RXDFETAP5HOLD;
+ input RXDFETAP5OVRDEN;
+ input RXDFETAP6HOLD;
+ input RXDFETAP6OVRDEN;
+ input RXDFETAP7HOLD;
+ input RXDFETAP7OVRDEN;
+ input RXDFETAP8HOLD;
+ input RXDFETAP8OVRDEN;
+ input RXDFETAP9HOLD;
+ input RXDFETAP9OVRDEN;
+ input RXDFEUTHOLD;
+ input RXDFEUTOVRDEN;
+ input RXDFEVPHOLD;
+ input RXDFEVPOVRDEN;
+ input RXDFEVSEN;
+ input RXDFEXYDEN;
+ input RXDLYBYPASS;
+ input RXDLYEN;
+ input RXDLYOVRDEN;
+ input RXDLYSRESET;
+ input [1:0] RXELECIDLEMODE;
+ input RXGEARBOXSLIP;
+ input RXLATCLK;
+ input RXLPMEN;
+ input RXLPMGCHOLD;
+ input RXLPMGCOVRDEN;
+ input RXLPMHFHOLD;
+ input RXLPMHFOVRDEN;
+ input RXLPMLFHOLD;
+ input RXLPMLFKLOVRDEN;
+ input RXLPMOSHOLD;
+ input RXLPMOSOVRDEN;
+ input RXMCOMMAALIGNEN;
+ input [1:0] RXMONITORSEL;
+ input RXOOBRESET;
+ input RXOSCALRESET;
+ input RXOSHOLD;
+ input [3:0] RXOSINTCFG;
+ input RXOSINTEN;
+ input RXOSINTHOLD;
+ input RXOSINTOVRDEN;
+ input RXOSINTSTROBE;
+ input RXOSINTTESTOVRDEN;
+ input RXOSOVRDEN;
+ input [2:0] RXOUTCLKSEL;
+ input RXPCOMMAALIGNEN;
+ input RXPCSRESET;
+ input [1:0] RXPD;
+ input RXPHALIGN;
+ input RXPHALIGNEN;
+ input RXPHDLYPD;
+ input RXPHDLYRESET;
+ input RXPHOVRDEN;
+ input [1:0] RXPLLCLKSEL;
+ input RXPMARESET;
+ input RXPOLARITY;
+ input RXPRBSCNTRESET;
+ input [3:0] RXPRBSSEL;
+ input RXPROGDIVRESET;
+ input RXQPIEN;
+ input [2:0] RXRATE;
+ input RXRATEMODE;
+ input RXSLIDE;
+ input RXSLIPOUTCLK;
+ input RXSLIPPMA;
+ input RXSYNCALLIN;
+ input RXSYNCIN;
+ input RXSYNCMODE;
+ input [1:0] RXSYSCLKSEL;
+ input RXUSERRDY;
+ input RXUSRCLK;
+ input RXUSRCLK2;
+ input SIGVALIDCLK;
+ input [19:0] TSTIN;
+ input [7:0] TX8B10BBYPASS;
+ input TX8B10BEN;
+ input [2:0] TXBUFDIFFCTRL;
+ input TXCOMINIT;
+ input TXCOMSAS;
+ input TXCOMWAKE;
+ input [15:0] TXCTRL0;
+ input [15:0] TXCTRL1;
+ input [7:0] TXCTRL2;
+ input [127:0] TXDATA;
+ input [7:0] TXDATAEXTENDRSVD;
+ input TXDEEMPH;
+ input TXDETECTRX;
+ input [3:0] TXDIFFCTRL;
+ input TXDIFFPD;
+ input TXDLYBYPASS;
+ input TXDLYEN;
+ input TXDLYHOLD;
+ input TXDLYOVRDEN;
+ input TXDLYSRESET;
+ input TXDLYUPDOWN;
+ input TXELECIDLE;
+ input [5:0] TXHEADER;
+ input TXINHIBIT;
+ input TXLATCLK;
+ input [6:0] TXMAINCURSOR;
+ input [2:0] TXMARGIN;
+ input [2:0] TXOUTCLKSEL;
+ input TXPCSRESET;
+ input [1:0] TXPD;
+ input TXPDELECIDLEMODE;
+ input TXPHALIGN;
+ input TXPHALIGNEN;
+ input TXPHDLYPD;
+ input TXPHDLYRESET;
+ input TXPHDLYTSTCLK;
+ input TXPHINIT;
+ input TXPHOVRDEN;
+ input TXPIPPMEN;
+ input TXPIPPMOVRDEN;
+ input TXPIPPMPD;
+ input TXPIPPMSEL;
+ input [4:0] TXPIPPMSTEPSIZE;
+ input TXPISOPD;
+ input [1:0] TXPLLCLKSEL;
+ input TXPMARESET;
+ input TXPOLARITY;
+ input [4:0] TXPOSTCURSOR;
+ input TXPOSTCURSORINV;
+ input TXPRBSFORCEERR;
+ input [3:0] TXPRBSSEL;
+ input [4:0] TXPRECURSOR;
+ input TXPRECURSORINV;
+ input TXPROGDIVRESET;
+ input TXQPIBIASEN;
+ input TXQPISTRONGPDOWN;
+ input TXQPIWEAKPUP;
+ input [2:0] TXRATE;
+ input TXRATEMODE;
+ input [6:0] TXSEQUENCE;
+ input TXSWING;
+ input TXSYNCALLIN;
+ input TXSYNCIN;
+ input TXSYNCMODE;
+ input [1:0] TXSYSCLKSEL;
+ input TXUSERRDY;
+ input TXUSRCLK;
+ input TXUSRCLK2;
+endmodule
+
+module GTHE3_COMMON (...);
+ parameter [15:0] BIAS_CFG0 = 16'h0000;
+ parameter [15:0] BIAS_CFG1 = 16'h0000;
+ parameter [15:0] BIAS_CFG2 = 16'h0000;
+ parameter [15:0] BIAS_CFG3 = 16'h0000;
+ parameter [15:0] BIAS_CFG4 = 16'h0000;
+ parameter [9:0] BIAS_CFG_RSVD = 10'b0000000000;
+ parameter [15:0] COMMON_CFG0 = 16'h0000;
+ parameter [15:0] COMMON_CFG1 = 16'h0000;
+ parameter [15:0] POR_CFG = 16'h0004;
+ parameter [15:0] QPLL0_CFG0 = 16'h3018;
+ parameter [15:0] QPLL0_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL0_CFG2 = 16'h0000;
+ parameter [15:0] QPLL0_CFG2_G3 = 16'h0000;
+ parameter [15:0] QPLL0_CFG3 = 16'h0120;
+ parameter [15:0] QPLL0_CFG4 = 16'h0009;
+ parameter [9:0] QPLL0_CP = 10'b0000011111;
+ parameter [9:0] QPLL0_CP_G3 = 10'b0000011111;
+ parameter integer QPLL0_FBDIV = 66;
+ parameter integer QPLL0_FBDIV_G3 = 80;
+ parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL0_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h01E8;
+ parameter [9:0] QPLL0_LPF = 10'b1111111111;
+ parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111;
+ parameter integer QPLL0_REFCLK_DIV = 2;
+ parameter [15:0] QPLL0_SDM_CFG0 = 16'b0000000000000000;
+ parameter [15:0] QPLL0_SDM_CFG1 = 16'b0000000000000000;
+ parameter [15:0] QPLL0_SDM_CFG2 = 16'b0000000000000000;
+ parameter [15:0] QPLL1_CFG0 = 16'h3018;
+ parameter [15:0] QPLL1_CFG1 = 16'h0000;
+ parameter [15:0] QPLL1_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL1_CFG2 = 16'h0000;
+ parameter [15:0] QPLL1_CFG2_G3 = 16'h0000;
+ parameter [15:0] QPLL1_CFG3 = 16'h0120;
+ parameter [15:0] QPLL1_CFG4 = 16'h0009;
+ parameter [9:0] QPLL1_CP = 10'b0000011111;
+ parameter [9:0] QPLL1_CP_G3 = 10'b0000011111;
+ parameter integer QPLL1_FBDIV = 66;
+ parameter integer QPLL1_FBDIV_G3 = 80;
+ parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL1_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL1_LPF = 10'b1111111111;
+ parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111;
+ parameter integer QPLL1_REFCLK_DIV = 2;
+ parameter [15:0] QPLL1_SDM_CFG0 = 16'b0000000000000000;
+ parameter [15:0] QPLL1_SDM_CFG1 = 16'b0000000000000000;
+ parameter [15:0] QPLL1_SDM_CFG2 = 16'b0000000000000000;
+ parameter [15:0] RSVD_ATTR0 = 16'h0000;
+ parameter [15:0] RSVD_ATTR1 = 16'h0000;
+ parameter [15:0] RSVD_ATTR2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR3 = 16'h0000;
+ parameter [1:0] RXRECCLKOUT0_SEL = 2'b00;
+ parameter [1:0] RXRECCLKOUT1_SEL = 2'b00;
+ parameter [0:0] SARC_EN = 1'b1;
+ parameter [0:0] SARC_SEL = 1'b0;
+ parameter [15:0] SDM0DATA1_0 = 16'b0000000000000000;
+ parameter [8:0] SDM0DATA1_1 = 9'b000000000;
+ parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM0INITSEED0_1 = 9'b000000000;
+ parameter [0:0] SDM0_DATA_PIN_SEL = 1'b0;
+ parameter [0:0] SDM0_WIDTH_PIN_SEL = 1'b0;
+ parameter [15:0] SDM1DATA1_0 = 16'b0000000000000000;
+ parameter [8:0] SDM1DATA1_1 = 9'b000000000;
+ parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM1INITSEED0_1 = 9'b000000000;
+ parameter [0:0] SDM1_DATA_PIN_SEL = 1'b0;
+ parameter [0:0] SDM1_WIDTH_PIN_SEL = 1'b0;
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter integer SIM_VERSION = 2;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output [7:0] PMARSVDOUT0;
+ output [7:0] PMARSVDOUT1;
+ output QPLL0FBCLKLOST;
+ output QPLL0LOCK;
+ output QPLL0OUTCLK;
+ output QPLL0OUTREFCLK;
+ output QPLL0REFCLKLOST;
+ output QPLL1FBCLKLOST;
+ output QPLL1LOCK;
+ output QPLL1OUTCLK;
+ output QPLL1OUTREFCLK;
+ output QPLL1REFCLKLOST;
+ output [7:0] QPLLDMONITOR0;
+ output [7:0] QPLLDMONITOR1;
+ output REFCLKOUTMONITOR0;
+ output REFCLKOUTMONITOR1;
+ output [1:0] RXRECCLK0_SEL;
+ output [1:0] RXRECCLK1_SEL;
+ input BGBYPASSB;
+ input BGMONITORENB;
+ input BGPDB;
+ input [4:0] BGRCALOVRD;
+ input BGRCALOVRDENB;
+ input [8:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input GTGREFCLK0;
+ input GTGREFCLK1;
+ input GTNORTHREFCLK00;
+ input GTNORTHREFCLK01;
+ input GTNORTHREFCLK10;
+ input GTNORTHREFCLK11;
+ input GTREFCLK00;
+ input GTREFCLK01;
+ input GTREFCLK10;
+ input GTREFCLK11;
+ input GTSOUTHREFCLK00;
+ input GTSOUTHREFCLK01;
+ input GTSOUTHREFCLK10;
+ input GTSOUTHREFCLK11;
+ input [7:0] PMARSVD0;
+ input [7:0] PMARSVD1;
+ input QPLL0CLKRSVD0;
+ input QPLL0CLKRSVD1;
+ input QPLL0LOCKDETCLK;
+ input QPLL0LOCKEN;
+ input QPLL0PD;
+ input [2:0] QPLL0REFCLKSEL;
+ input QPLL0RESET;
+ input QPLL1CLKRSVD0;
+ input QPLL1CLKRSVD1;
+ input QPLL1LOCKDETCLK;
+ input QPLL1LOCKEN;
+ input QPLL1PD;
+ input [2:0] QPLL1REFCLKSEL;
+ input QPLL1RESET;
+ input [7:0] QPLLRSVD1;
+ input [4:0] QPLLRSVD2;
+ input [4:0] QPLLRSVD3;
+ input [7:0] QPLLRSVD4;
+ input RCALENB;
+endmodule
+
+module GTHE4_CHANNEL (...);
+ parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_RESET = 1'b0;
+ parameter [15:0] ADAPT_CFG0 = 16'h9200;
+ parameter [15:0] ADAPT_CFG1 = 16'h801C;
+ parameter [15:0] ADAPT_CFG2 = 16'h0000;
+ parameter ALIGN_COMMA_DOUBLE = "FALSE";
+ parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111;
+ parameter integer ALIGN_COMMA_WORD = 1;
+ parameter ALIGN_MCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011;
+ parameter ALIGN_PCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100;
+ parameter [0:0] A_RXOSCALRESET = 1'b0;
+ parameter [0:0] A_RXPROGDIVRESET = 1'b0;
+ parameter [0:0] A_RXTERMINATION = 1'b1;
+ parameter [4:0] A_TXDIFFCTRL = 5'b01100;
+ parameter [0:0] A_TXPROGDIVRESET = 1'b0;
+ parameter [0:0] CAPBYPASS_FORCE = 1'b0;
+ parameter CBCC_DATA_SOURCE_SEL = "DECODED";
+ parameter [0:0] CDR_SWAP_MODE_EN = 1'b0;
+ parameter [0:0] CFOK_PWRSVE_EN = 1'b1;
+ parameter CHAN_BOND_KEEP_ALIGN = "FALSE";
+ parameter integer CHAN_BOND_MAX_SKEW = 7;
+ parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111;
+ parameter CHAN_BOND_SEQ_2_USE = "FALSE";
+ parameter integer CHAN_BOND_SEQ_LEN = 2;
+ parameter [15:0] CH_HSPMUX = 16'h2424;
+ parameter [15:0] CKCAL1_CFG_0 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_1 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_2 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_3 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_0 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_1 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_2 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_3 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_4 = 16'b0000000000000000;
+ parameter [15:0] CKCAL_RSVD0 = 16'h4000;
+ parameter [15:0] CKCAL_RSVD1 = 16'h0000;
+ parameter CLK_CORRECT_USE = "TRUE";
+ parameter CLK_COR_KEEP_IDLE = "FALSE";
+ parameter integer CLK_COR_MAX_LAT = 20;
+ parameter integer CLK_COR_MIN_LAT = 18;
+ parameter CLK_COR_PRECEDENCE = "TRUE";
+ parameter integer CLK_COR_REPEAT_WAIT = 0;
+ parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111;
+ parameter CLK_COR_SEQ_2_USE = "FALSE";
+ parameter integer CLK_COR_SEQ_LEN = 2;
+ parameter [15:0] CPLL_CFG0 = 16'h01FA;
+ parameter [15:0] CPLL_CFG1 = 16'h24A9;
+ parameter [15:0] CPLL_CFG2 = 16'h6807;
+ parameter [15:0] CPLL_CFG3 = 16'h0000;
+ parameter integer CPLL_FBDIV = 4;
+ parameter integer CPLL_FBDIV_45 = 4;
+ parameter [15:0] CPLL_INIT_CFG0 = 16'h001E;
+ parameter [15:0] CPLL_LOCK_CFG = 16'h01E8;
+ parameter integer CPLL_REFCLK_DIV = 1;
+ parameter [2:0] CTLE3_OCAP_EXT_CTRL = 3'b000;
+ parameter [0:0] CTLE3_OCAP_EXT_EN = 1'b0;
+ parameter [1:0] DDI_CTRL = 2'b00;
+ parameter integer DDI_REALIGN_WAIT = 15;
+ parameter DEC_MCOMMA_DETECT = "TRUE";
+ parameter DEC_PCOMMA_DETECT = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY = "TRUE";
+ parameter [0:0] DELAY_ELEC = 1'b0;
+ parameter [9:0] DMONITOR_CFG0 = 10'h000;
+ parameter [7:0] DMONITOR_CFG1 = 8'h00;
+ parameter [0:0] ES_CLK_PHASE_SEL = 1'b0;
+ parameter [5:0] ES_CONTROL = 6'b000000;
+ parameter ES_ERRDET_EN = "FALSE";
+ parameter ES_EYE_SCAN_EN = "FALSE";
+ parameter [11:0] ES_HORZ_OFFSET = 12'h800;
+ parameter [4:0] ES_PRESCALE = 5'b00000;
+ parameter [15:0] ES_QUALIFIER0 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER1 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER2 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER3 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER4 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER5 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER6 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER7 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER8 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER9 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK0 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK1 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK2 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK3 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK4 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK5 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK6 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK7 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK8 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK9 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK0 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK1 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK2 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK3 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK4 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK5 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK6 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK7 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK8 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK9 = 16'h0000;
+ parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0;
+ parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111;
+ parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111;
+ parameter FTS_LANE_DESKEW_EN = "FALSE";
+ parameter [4:0] GEARBOX_MODE = 5'b00000;
+ parameter [0:0] ISCAN_CK_PH_SEL2 = 1'b0;
+ parameter [0:0] LOCAL_MASTER = 1'b0;
+ parameter [2:0] LPBK_BIAS_CTRL = 3'b000;
+ parameter [0:0] LPBK_EN_RCAL_B = 1'b0;
+ parameter [3:0] LPBK_EXT_RCAL = 4'b0000;
+ parameter [2:0] LPBK_IND_CTRL0 = 3'b000;
+ parameter [2:0] LPBK_IND_CTRL1 = 3'b000;
+ parameter [2:0] LPBK_IND_CTRL2 = 3'b000;
+ parameter [3:0] LPBK_RG_CTRL = 4'b0000;
+ parameter [1:0] OOBDIVCTL = 2'b00;
+ parameter [0:0] OOB_PWRUP = 1'b0;
+ parameter PCI3_AUTO_REALIGN = "FRST_SMPL";
+ parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1;
+ parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00;
+ parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0;
+ parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000;
+ parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000;
+ parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000;
+ parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0;
+ parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0;
+ parameter [4:0] PCIE3_CLK_COR_EMPTY_THRSH = 5'b00000;
+ parameter [5:0] PCIE3_CLK_COR_FULL_THRSH = 6'b010000;
+ parameter [4:0] PCIE3_CLK_COR_MAX_LAT = 5'b01000;
+ parameter [4:0] PCIE3_CLK_COR_MIN_LAT = 5'b00100;
+ parameter [5:0] PCIE3_CLK_COR_THRSH_TIMER = 6'b001000;
+ parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000;
+ parameter [1:0] PCIE_PLL_SEL_MODE_GEN12 = 2'h0;
+ parameter [1:0] PCIE_PLL_SEL_MODE_GEN3 = 2'h0;
+ parameter [1:0] PCIE_PLL_SEL_MODE_GEN4 = 2'h0;
+ parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_RXPMA_CFG = 16'h0000;
+ parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_TXPMA_CFG = 16'h0000;
+ parameter PCS_PCIE_EN = "FALSE";
+ parameter [15:0] PCS_RSVD0 = 16'b0000000000000000;
+ parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C;
+ parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19;
+ parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64;
+ parameter integer PREIQ_FREQ_BST = 0;
+ parameter [2:0] PROCESS_PAR = 3'b010;
+ parameter [0:0] RATE_SW_USE_DRP = 1'b0;
+ parameter [0:0] RCLK_SIPO_DLY_ENB = 1'b0;
+ parameter [0:0] RCLK_SIPO_INV_EN = 1'b0;
+ parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0;
+ parameter [2:0] RTX_BUF_CML_CTRL = 3'b010;
+ parameter [1:0] RTX_BUF_TERM_CTRL = 2'b00;
+ parameter [4:0] RXBUFRESET_TIME = 5'b00001;
+ parameter RXBUF_ADDR_MODE = "FULL";
+ parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000;
+ parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000;
+ parameter RXBUF_EN = "TRUE";
+ parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE";
+ parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE";
+ parameter RXBUF_RESET_ON_EIDLE = "FALSE";
+ parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE";
+ parameter integer RXBUF_THRESH_OVFLW = 0;
+ parameter RXBUF_THRESH_OVRD = "FALSE";
+ parameter integer RXBUF_THRESH_UNDFLW = 4;
+ parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001;
+ parameter [4:0] RXCDRPHRESET_TIME = 5'b00001;
+ parameter [15:0] RXCDR_CFG0 = 16'h0003;
+ parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0003;
+ parameter [15:0] RXCDR_CFG1 = 16'h0000;
+ parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG2 = 16'h0164;
+ parameter [9:0] RXCDR_CFG2_GEN2 = 10'h164;
+ parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0034;
+ parameter [15:0] RXCDR_CFG2_GEN4 = 16'h0034;
+ parameter [15:0] RXCDR_CFG3 = 16'h0024;
+ parameter [5:0] RXCDR_CFG3_GEN2 = 6'h24;
+ parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0024;
+ parameter [15:0] RXCDR_CFG3_GEN4 = 16'h0024;
+ parameter [15:0] RXCDR_CFG4 = 16'h5CF6;
+ parameter [15:0] RXCDR_CFG4_GEN3 = 16'h5CF6;
+ parameter [15:0] RXCDR_CFG5 = 16'hB46B;
+ parameter [15:0] RXCDR_CFG5_GEN3 = 16'h146B;
+ parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0;
+ parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0;
+ parameter [15:0] RXCDR_LOCK_CFG0 = 16'h0040;
+ parameter [15:0] RXCDR_LOCK_CFG1 = 16'h8000;
+ parameter [15:0] RXCDR_LOCK_CFG2 = 16'h0000;
+ parameter [15:0] RXCDR_LOCK_CFG3 = 16'h0000;
+ parameter [15:0] RXCDR_LOCK_CFG4 = 16'h0000;
+ parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0;
+ parameter [15:0] RXCFOK_CFG0 = 16'h0000;
+ parameter [15:0] RXCFOK_CFG1 = 16'h0002;
+ parameter [15:0] RXCFOK_CFG2 = 16'h002D;
+ parameter [15:0] RXCKCAL1_IQ_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL1_I_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL1_Q_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_DX_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_D_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_S_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_X_LOOP_RST_CFG = 16'h0000;
+ parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111;
+ parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000;
+ parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0022;
+ parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0100;
+ parameter [15:0] RXDFE_CFG0 = 16'h4000;
+ parameter [15:0] RXDFE_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H3_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H3_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H4_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H4_CFG1 = 16'h0003;
+ parameter [15:0] RXDFE_H5_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H5_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H6_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H6_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H7_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H7_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H8_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H8_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H9_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H9_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HA_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HA_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HB_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HB_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HC_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HD_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HD_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HE_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HE_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HF_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HF_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_KH_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_KH_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_KH_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_KH_CFG3 = 16'h0000;
+ parameter [15:0] RXDFE_OS_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_OS_CFG1 = 16'h0002;
+ parameter [0:0] RXDFE_PWR_SAVING = 1'b0;
+ parameter [15:0] RXDFE_UT_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_UT_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_UT_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_VP_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_VP_CFG1 = 16'h0022;
+ parameter [15:0] RXDLY_CFG = 16'h0010;
+ parameter [15:0] RXDLY_LCFG = 16'h0030;
+ parameter RXELECIDLE_CFG = "SIGCFG_4";
+ parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter RXGEARBOX_EN = "FALSE";
+ parameter [4:0] RXISCANRESET_TIME = 5'b00001;
+ parameter [15:0] RXLPM_CFG = 16'h0000;
+ parameter [15:0] RXLPM_GC_CFG = 16'h1000;
+ parameter [15:0] RXLPM_KH_CFG0 = 16'h0000;
+ parameter [15:0] RXLPM_KH_CFG1 = 16'h0002;
+ parameter [15:0] RXLPM_OS_CFG0 = 16'h0000;
+ parameter [15:0] RXLPM_OS_CFG1 = 16'h0000;
+ parameter [8:0] RXOOB_CFG = 9'b000110000;
+ parameter RXOOB_CLK_CFG = "PMA";
+ parameter [4:0] RXOSCALRESET_TIME = 5'b00011;
+ parameter integer RXOUT_DIV = 4;
+ parameter [4:0] RXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] RXPHBEACON_CFG = 16'h0000;
+ parameter [15:0] RXPHDLY_CFG = 16'h2020;
+ parameter [15:0] RXPHSAMP_CFG = 16'h2100;
+ parameter [15:0] RXPHSLIP_CFG = 16'h9933;
+ parameter [4:0] RXPH_MONITOR_SEL = 5'b00000;
+ parameter [0:0] RXPI_AUTO_BW_SEL_BYPASS = 1'b0;
+ parameter [15:0] RXPI_CFG0 = 16'h0002;
+ parameter [15:0] RXPI_CFG1 = 16'b0000000000000000;
+ parameter [0:0] RXPI_LPM = 1'b0;
+ parameter [1:0] RXPI_SEL_LC = 2'b00;
+ parameter [1:0] RXPI_STARTCODE = 2'b00;
+ parameter [0:0] RXPI_VREFSEL = 1'b0;
+ parameter RXPMACLK_SEL = "DATA";
+ parameter [4:0] RXPMARESET_TIME = 5'b00001;
+ parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0;
+ parameter integer RXPRBS_LINKACQ_CNT = 15;
+ parameter [0:0] RXREFCLKDIV2_SEL = 1'b0;
+ parameter integer RXSLIDE_AUTO_WAIT = 7;
+ parameter RXSLIDE_MODE = "OFF";
+ parameter [0:0] RXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] RXSYNC_OVRD = 1'b0;
+ parameter [0:0] RXSYNC_SKIP_DA = 1'b0;
+ parameter [0:0] RX_AFE_CM_EN = 1'b0;
+ parameter [15:0] RX_BIAS_CFG0 = 16'h12B0;
+ parameter [5:0] RX_BUFFER_CFG = 6'b000000;
+ parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0;
+ parameter integer RX_CLK25_DIV = 8;
+ parameter [0:0] RX_CLKMUX_EN = 1'b1;
+ parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000;
+ parameter [3:0] RX_CM_BUF_CFG = 4'b1010;
+ parameter [0:0] RX_CM_BUF_PD = 1'b0;
+ parameter integer RX_CM_SEL = 3;
+ parameter integer RX_CM_TRIM = 12;
+ parameter [7:0] RX_CTLE3_LPF = 8'b00000000;
+ parameter integer RX_DATA_WIDTH = 20;
+ parameter [5:0] RX_DDI_SEL = 6'b000000;
+ parameter RX_DEFER_RESET_BUF_EN = "TRUE";
+ parameter [2:0] RX_DEGEN_CTRL = 3'b011;
+ parameter integer RX_DFELPM_CFG0 = 0;
+ parameter [0:0] RX_DFELPM_CFG1 = 1'b1;
+ parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1;
+ parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00;
+ parameter integer RX_DFE_AGC_CFG1 = 4;
+ parameter integer RX_DFE_KL_LPM_KH_CFG0 = 1;
+ parameter integer RX_DFE_KL_LPM_KH_CFG1 = 4;
+ parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01;
+ parameter integer RX_DFE_KL_LPM_KL_CFG1 = 4;
+ parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0;
+ parameter RX_DISPERR_SEQ_MATCH = "TRUE";
+ parameter [0:0] RX_DIV2_MODE_B = 1'b0;
+ parameter [4:0] RX_DIVRESET_TIME = 5'b00001;
+ parameter [0:0] RX_EN_CTLE_RCAL_B = 1'b0;
+ parameter [0:0] RX_EN_HI_LR = 1'b1;
+ parameter [8:0] RX_EXT_RL_CTRL = 9'b000000000;
+ parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000;
+ parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0;
+ parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b00;
+ parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0;
+ parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter integer RX_INT_DATAWIDTH = 1;
+ parameter [0:0] RX_PMA_POWER_SAVE = 1'b0;
+ parameter [15:0] RX_PMA_RSV0 = 16'h0000;
+ parameter real RX_PROGDIV_CFG = 0.0;
+ parameter [15:0] RX_PROGDIV_RATE = 16'h0001;
+ parameter [3:0] RX_RESLOAD_CTRL = 4'b0000;
+ parameter [0:0] RX_RESLOAD_OVRD = 1'b0;
+ parameter [2:0] RX_SAMPLE_PERIOD = 3'b101;
+ parameter integer RX_SIG_VALID_DLY = 11;
+ parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0;
+ parameter [3:0] RX_SUM_IREF_TUNE = 4'b1001;
+ parameter [3:0] RX_SUM_RESLOAD_CTRL = 4'b0000;
+ parameter [3:0] RX_SUM_VCMTUNE = 4'b1010;
+ parameter [0:0] RX_SUM_VCM_OVWR = 1'b0;
+ parameter [2:0] RX_SUM_VREF_TUNE = 3'b100;
+ parameter [1:0] RX_TUNE_AFE_OS = 2'b00;
+ parameter [2:0] RX_VREG_CTRL = 3'b101;
+ parameter [0:0] RX_VREG_PDB = 1'b1;
+ parameter [1:0] RX_WIDEMODE_CDR = 2'b01;
+ parameter [1:0] RX_WIDEMODE_CDR_GEN3 = 2'b01;
+ parameter [1:0] RX_WIDEMODE_CDR_GEN4 = 2'b01;
+ parameter RX_XCLK_SEL = "RXDES";
+ parameter [0:0] RX_XMODE_SEL = 1'b0;
+ parameter [0:0] SAMPLE_CLK_PHASE = 1'b0;
+ parameter [0:0] SAS_12G_MODE = 1'b0;
+ parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111;
+ parameter [2:0] SATA_BURST_VAL = 3'b100;
+ parameter SATA_CPLL_CFG = "VCO_3000MHZ";
+ parameter [2:0] SATA_EIDLE_VAL = 3'b100;
+ parameter SHOW_REALIGN_COMMA = "TRUE";
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RECEIVER_DETECT_PASS = "TRUE";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter SIM_TX_EIDLE_DRIVE_LEVEL = "Z";
+ parameter [0:0] SRSTMODE = 1'b0;
+ parameter [1:0] TAPDLY_SET_TX = 2'h0;
+ parameter [3:0] TEMPERATURE_PAR = 4'b0010;
+ parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000;
+ parameter [2:0] TERM_RCAL_OVRD = 3'b000;
+ parameter [7:0] TRANS_TIME_RATE = 8'h0E;
+ parameter [7:0] TST_RSV0 = 8'h00;
+ parameter [7:0] TST_RSV1 = 8'h00;
+ parameter TXBUF_EN = "TRUE";
+ parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE";
+ parameter [15:0] TXDLY_CFG = 16'h0010;
+ parameter [15:0] TXDLY_LCFG = 16'h0030;
+ parameter [3:0] TXDRVBIAS_N = 4'b1010;
+ parameter TXFIFO_ADDR_CFG = "LOW";
+ parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter TXGEARBOX_EN = "FALSE";
+ parameter integer TXOUT_DIV = 4;
+ parameter [4:0] TXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] TXPHDLY_CFG0 = 16'h6020;
+ parameter [15:0] TXPHDLY_CFG1 = 16'h0002;
+ parameter [15:0] TXPH_CFG = 16'h0123;
+ parameter [15:0] TXPH_CFG2 = 16'h0000;
+ parameter [4:0] TXPH_MONITOR_SEL = 5'b00000;
+ parameter [15:0] TXPI_CFG = 16'h0000;
+ parameter [1:0] TXPI_CFG0 = 2'b00;
+ parameter [1:0] TXPI_CFG1 = 2'b00;
+ parameter [1:0] TXPI_CFG2 = 2'b00;
+ parameter [0:0] TXPI_CFG3 = 1'b0;
+ parameter [0:0] TXPI_CFG4 = 1'b1;
+ parameter [2:0] TXPI_CFG5 = 3'b000;
+ parameter [0:0] TXPI_GRAY_SEL = 1'b0;
+ parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0;
+ parameter [0:0] TXPI_LPM = 1'b0;
+ parameter [0:0] TXPI_PPM = 1'b0;
+ parameter TXPI_PPMCLK_SEL = "TXUSRCLK2";
+ parameter [7:0] TXPI_PPM_CFG = 8'b00000000;
+ parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000;
+ parameter [0:0] TXPI_VREFSEL = 1'b0;
+ parameter [4:0] TXPMARESET_TIME = 5'b00001;
+ parameter [0:0] TXREFCLKDIV2_SEL = 1'b0;
+ parameter [0:0] TXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] TXSYNC_OVRD = 1'b0;
+ parameter [0:0] TXSYNC_SKIP_DA = 1'b0;
+ parameter integer TX_CLK25_DIV = 8;
+ parameter [0:0] TX_CLKMUX_EN = 1'b1;
+ parameter integer TX_DATA_WIDTH = 20;
+ parameter [15:0] TX_DCC_LOOP_RST_CFG = 16'h0000;
+ parameter [5:0] TX_DEEMPH0 = 6'b000000;
+ parameter [5:0] TX_DEEMPH1 = 6'b000000;
+ parameter [5:0] TX_DEEMPH2 = 6'b000000;
+ parameter [5:0] TX_DEEMPH3 = 6'b000000;
+ parameter [4:0] TX_DIVRESET_TIME = 5'b00001;
+ parameter TX_DRIVE_MODE = "DIRECT";
+ parameter integer TX_DRVMUX_CTRL = 2;
+ parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110;
+ parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100;
+ parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter [0:0] TX_FIFO_BYP_EN = 1'b0;
+ parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0;
+ parameter integer TX_INT_DATAWIDTH = 1;
+ parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE";
+ parameter [0:0] TX_MAINCURSOR_SEL = 1'b0;
+ parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110;
+ parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001;
+ parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101;
+ parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110;
+ parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100;
+ parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000;
+ parameter [15:0] TX_PHICAL_CFG0 = 16'h0000;
+ parameter [15:0] TX_PHICAL_CFG1 = 16'h003F;
+ parameter [15:0] TX_PHICAL_CFG2 = 16'h0000;
+ parameter integer TX_PI_BIASSET = 0;
+ parameter [1:0] TX_PI_IBIAS_MID = 2'b00;
+ parameter [0:0] TX_PMADATA_OPT = 1'b0;
+ parameter [0:0] TX_PMA_POWER_SAVE = 1'b0;
+ parameter [15:0] TX_PMA_RSV0 = 16'h0008;
+ parameter integer TX_PREDRV_CTRL = 2;
+ parameter TX_PROGCLK_SEL = "POSTPI";
+ parameter real TX_PROGDIV_CFG = 0.0;
+ parameter [15:0] TX_PROGDIV_RATE = 16'h0001;
+ parameter [0:0] TX_QPI_STATUS_EN = 1'b0;
+ parameter [13:0] TX_RXDETECT_CFG = 14'h0032;
+ parameter integer TX_RXDETECT_REF = 3;
+ parameter [2:0] TX_SAMPLE_PERIOD = 3'b101;
+ parameter [0:0] TX_SARC_LPBK_ENB = 1'b0;
+ parameter [1:0] TX_SW_MEAS = 2'b00;
+ parameter [2:0] TX_VREG_CTRL = 3'b000;
+ parameter [0:0] TX_VREG_PDB = 1'b0;
+ parameter [1:0] TX_VREG_VREFSEL = 2'b00;
+ parameter TX_XCLK_SEL = "TXOUT";
+ parameter [0:0] USB_BOTH_BURST_IDLE = 1'b0;
+ parameter [6:0] USB_BURSTMAX_U3WAKE = 7'b1111111;
+ parameter [6:0] USB_BURSTMIN_U3WAKE = 7'b1100011;
+ parameter [0:0] USB_CLK_COR_EQ_EN = 1'b0;
+ parameter [0:0] USB_EXT_CNTL = 1'b1;
+ parameter [9:0] USB_IDLEMAX_POLLING = 10'b1010111011;
+ parameter [9:0] USB_IDLEMIN_POLLING = 10'b0100101011;
+ parameter [8:0] USB_LFPSPING_BURST = 9'b000000101;
+ parameter [8:0] USB_LFPSPOLLING_BURST = 9'b000110001;
+ parameter [8:0] USB_LFPSPOLLING_IDLE_MS = 9'b000000100;
+ parameter [8:0] USB_LFPSU1EXIT_BURST = 9'b000011101;
+ parameter [8:0] USB_LFPSU2LPEXIT_BURST_MS = 9'b001100011;
+ parameter [8:0] USB_LFPSU3WAKE_BURST_MS = 9'b111110011;
+ parameter [3:0] USB_LFPS_TPERIOD = 4'b0011;
+ parameter [0:0] USB_LFPS_TPERIOD_ACCURATE = 1'b1;
+ parameter [0:0] USB_MODE = 1'b0;
+ parameter [0:0] USB_PCIE_ERR_REP_DIS = 1'b0;
+ parameter integer USB_PING_SATA_MAX_INIT = 21;
+ parameter integer USB_PING_SATA_MIN_INIT = 12;
+ parameter integer USB_POLL_SATA_MAX_BURST = 8;
+ parameter integer USB_POLL_SATA_MIN_BURST = 4;
+ parameter [0:0] USB_RAW_ELEC = 1'b0;
+ parameter [0:0] USB_RXIDLE_P0_CTRL = 1'b1;
+ parameter [0:0] USB_TXIDLE_TUNE_ENABLE = 1'b1;
+ parameter integer USB_U1_SATA_MAX_WAKE = 7;
+ parameter integer USB_U1_SATA_MIN_WAKE = 4;
+ parameter integer USB_U2_SAS_MAX_COM = 64;
+ parameter integer USB_U2_SAS_MIN_COM = 36;
+ parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0;
+ parameter [0:0] Y_ALL_MODE = 1'b0;
+ output BUFGTCE;
+ output [2:0] BUFGTCEMASK;
+ output [8:0] BUFGTDIV;
+ output BUFGTRESET;
+ output [2:0] BUFGTRSTMASK;
+ output CPLLFBCLKLOST;
+ output CPLLLOCK;
+ output CPLLREFCLKLOST;
+ output [15:0] DMONITOROUT;
+ output DMONITOROUTCLK;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output EYESCANDATAERROR;
+ output GTHTXN;
+ output GTHTXP;
+ output GTPOWERGOOD;
+ output GTREFCLKMONITOR;
+ output PCIERATEGEN3;
+ output PCIERATEIDLE;
+ output [1:0] PCIERATEQPLLPD;
+ output [1:0] PCIERATEQPLLRESET;
+ output PCIESYNCTXSYNCDONE;
+ output PCIEUSERGEN3RDY;
+ output PCIEUSERPHYSTATUSRST;
+ output PCIEUSERRATESTART;
+ output [15:0] PCSRSVDOUT;
+ output PHYSTATUS;
+ output [15:0] PINRSRVDAS;
+ output POWERPRESENT;
+ output RESETEXCEPTION;
+ output [2:0] RXBUFSTATUS;
+ output RXBYTEISALIGNED;
+ output RXBYTEREALIGN;
+ output RXCDRLOCK;
+ output RXCDRPHDONE;
+ output RXCHANBONDSEQ;
+ output RXCHANISALIGNED;
+ output RXCHANREALIGN;
+ output [4:0] RXCHBONDO;
+ output RXCKCALDONE;
+ output [1:0] RXCLKCORCNT;
+ output RXCOMINITDET;
+ output RXCOMMADET;
+ output RXCOMSASDET;
+ output RXCOMWAKEDET;
+ output [15:0] RXCTRL0;
+ output [15:0] RXCTRL1;
+ output [7:0] RXCTRL2;
+ output [7:0] RXCTRL3;
+ output [127:0] RXDATA;
+ output [7:0] RXDATAEXTENDRSVD;
+ output [1:0] RXDATAVALID;
+ output RXDLYSRESETDONE;
+ output RXELECIDLE;
+ output [5:0] RXHEADER;
+ output [1:0] RXHEADERVALID;
+ output RXLFPSTRESETDET;
+ output RXLFPSU2LPEXITDET;
+ output RXLFPSU3WAKEDET;
+ output [7:0] RXMONITOROUT;
+ output RXOSINTDONE;
+ output RXOSINTSTARTED;
+ output RXOSINTSTROBEDONE;
+ output RXOSINTSTROBESTARTED;
+ output RXOUTCLK;
+ output RXOUTCLKFABRIC;
+ output RXOUTCLKPCS;
+ output RXPHALIGNDONE;
+ output RXPHALIGNERR;
+ output RXPMARESETDONE;
+ output RXPRBSERR;
+ output RXPRBSLOCKED;
+ output RXPRGDIVRESETDONE;
+ output RXQPISENN;
+ output RXQPISENP;
+ output RXRATEDONE;
+ output RXRECCLKOUT;
+ output RXRESETDONE;
+ output RXSLIDERDY;
+ output RXSLIPDONE;
+ output RXSLIPOUTCLKRDY;
+ output RXSLIPPMARDY;
+ output [1:0] RXSTARTOFSEQ;
+ output [2:0] RXSTATUS;
+ output RXSYNCDONE;
+ output RXSYNCOUT;
+ output RXVALID;
+ output [1:0] TXBUFSTATUS;
+ output TXCOMFINISH;
+ output TXDCCDONE;
+ output TXDLYSRESETDONE;
+ output TXOUTCLK;
+ output TXOUTCLKFABRIC;
+ output TXOUTCLKPCS;
+ output TXPHALIGNDONE;
+ output TXPHINITDONE;
+ output TXPMARESETDONE;
+ output TXPRGDIVRESETDONE;
+ output TXQPISENN;
+ output TXQPISENP;
+ output TXRATEDONE;
+ output TXRESETDONE;
+ output TXSYNCDONE;
+ output TXSYNCOUT;
+ input CDRSTEPDIR;
+ input CDRSTEPSQ;
+ input CDRSTEPSX;
+ input CFGRESET;
+ input CLKRSVD0;
+ input CLKRSVD1;
+ input CPLLFREQLOCK;
+ input CPLLLOCKDETCLK;
+ input CPLLLOCKEN;
+ input CPLLPD;
+ input [2:0] CPLLREFCLKSEL;
+ input CPLLRESET;
+ input DMONFIFORESET;
+ input DMONITORCLK;
+ input [9:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPRST;
+ input DRPWE;
+ input EYESCANRESET;
+ input EYESCANTRIGGER;
+ input FREQOS;
+ input GTGREFCLK;
+ input GTHRXN;
+ input GTHRXP;
+ input GTNORTHREFCLK0;
+ input GTNORTHREFCLK1;
+ input GTREFCLK0;
+ input GTREFCLK1;
+ input [15:0] GTRSVD;
+ input GTRXRESET;
+ input GTRXRESETSEL;
+ input GTSOUTHREFCLK0;
+ input GTSOUTHREFCLK1;
+ input GTTXRESET;
+ input GTTXRESETSEL;
+ input INCPCTRL;
+ input [2:0] LOOPBACK;
+ input PCIEEQRXEQADAPTDONE;
+ input PCIERSTIDLE;
+ input PCIERSTTXSYNCSTART;
+ input PCIEUSERRATEDONE;
+ input [15:0] PCSRSVDIN;
+ input QPLL0CLK;
+ input QPLL0FREQLOCK;
+ input QPLL0REFCLK;
+ input QPLL1CLK;
+ input QPLL1FREQLOCK;
+ input QPLL1REFCLK;
+ input RESETOVRD;
+ input RX8B10BEN;
+ input RXAFECFOKEN;
+ input RXBUFRESET;
+ input RXCDRFREQRESET;
+ input RXCDRHOLD;
+ input RXCDROVRDEN;
+ input RXCDRRESET;
+ input RXCHBONDEN;
+ input [4:0] RXCHBONDI;
+ input [2:0] RXCHBONDLEVEL;
+ input RXCHBONDMASTER;
+ input RXCHBONDSLAVE;
+ input RXCKCALRESET;
+ input [6:0] RXCKCALSTART;
+ input RXCOMMADETEN;
+ input [1:0] RXDFEAGCCTRL;
+ input RXDFEAGCHOLD;
+ input RXDFEAGCOVRDEN;
+ input [3:0] RXDFECFOKFCNUM;
+ input RXDFECFOKFEN;
+ input RXDFECFOKFPULSE;
+ input RXDFECFOKHOLD;
+ input RXDFECFOKOVREN;
+ input RXDFEKHHOLD;
+ input RXDFEKHOVRDEN;
+ input RXDFELFHOLD;
+ input RXDFELFOVRDEN;
+ input RXDFELPMRESET;
+ input RXDFETAP10HOLD;
+ input RXDFETAP10OVRDEN;
+ input RXDFETAP11HOLD;
+ input RXDFETAP11OVRDEN;
+ input RXDFETAP12HOLD;
+ input RXDFETAP12OVRDEN;
+ input RXDFETAP13HOLD;
+ input RXDFETAP13OVRDEN;
+ input RXDFETAP14HOLD;
+ input RXDFETAP14OVRDEN;
+ input RXDFETAP15HOLD;
+ input RXDFETAP15OVRDEN;
+ input RXDFETAP2HOLD;
+ input RXDFETAP2OVRDEN;
+ input RXDFETAP3HOLD;
+ input RXDFETAP3OVRDEN;
+ input RXDFETAP4HOLD;
+ input RXDFETAP4OVRDEN;
+ input RXDFETAP5HOLD;
+ input RXDFETAP5OVRDEN;
+ input RXDFETAP6HOLD;
+ input RXDFETAP6OVRDEN;
+ input RXDFETAP7HOLD;
+ input RXDFETAP7OVRDEN;
+ input RXDFETAP8HOLD;
+ input RXDFETAP8OVRDEN;
+ input RXDFETAP9HOLD;
+ input RXDFETAP9OVRDEN;
+ input RXDFEUTHOLD;
+ input RXDFEUTOVRDEN;
+ input RXDFEVPHOLD;
+ input RXDFEVPOVRDEN;
+ input RXDFEXYDEN;
+ input RXDLYBYPASS;
+ input RXDLYEN;
+ input RXDLYOVRDEN;
+ input RXDLYSRESET;
+ input [1:0] RXELECIDLEMODE;
+ input RXEQTRAINING;
+ input RXGEARBOXSLIP;
+ input RXLATCLK;
+ input RXLPMEN;
+ input RXLPMGCHOLD;
+ input RXLPMGCOVRDEN;
+ input RXLPMHFHOLD;
+ input RXLPMHFOVRDEN;
+ input RXLPMLFHOLD;
+ input RXLPMLFKLOVRDEN;
+ input RXLPMOSHOLD;
+ input RXLPMOSOVRDEN;
+ input RXMCOMMAALIGNEN;
+ input [1:0] RXMONITORSEL;
+ input RXOOBRESET;
+ input RXOSCALRESET;
+ input RXOSHOLD;
+ input RXOSOVRDEN;
+ input [2:0] RXOUTCLKSEL;
+ input RXPCOMMAALIGNEN;
+ input RXPCSRESET;
+ input [1:0] RXPD;
+ input RXPHALIGN;
+ input RXPHALIGNEN;
+ input RXPHDLYPD;
+ input RXPHDLYRESET;
+ input RXPHOVRDEN;
+ input [1:0] RXPLLCLKSEL;
+ input RXPMARESET;
+ input RXPOLARITY;
+ input RXPRBSCNTRESET;
+ input [3:0] RXPRBSSEL;
+ input RXPROGDIVRESET;
+ input RXQPIEN;
+ input [2:0] RXRATE;
+ input RXRATEMODE;
+ input RXSLIDE;
+ input RXSLIPOUTCLK;
+ input RXSLIPPMA;
+ input RXSYNCALLIN;
+ input RXSYNCIN;
+ input RXSYNCMODE;
+ input [1:0] RXSYSCLKSEL;
+ input RXTERMINATION;
+ input RXUSERRDY;
+ input RXUSRCLK;
+ input RXUSRCLK2;
+ input SIGVALIDCLK;
+ input [19:0] TSTIN;
+ input [7:0] TX8B10BBYPASS;
+ input TX8B10BEN;
+ input TXCOMINIT;
+ input TXCOMSAS;
+ input TXCOMWAKE;
+ input [15:0] TXCTRL0;
+ input [15:0] TXCTRL1;
+ input [7:0] TXCTRL2;
+ input [127:0] TXDATA;
+ input [7:0] TXDATAEXTENDRSVD;
+ input TXDCCFORCESTART;
+ input TXDCCRESET;
+ input [1:0] TXDEEMPH;
+ input TXDETECTRX;
+ input [4:0] TXDIFFCTRL;
+ input TXDLYBYPASS;
+ input TXDLYEN;
+ input TXDLYHOLD;
+ input TXDLYOVRDEN;
+ input TXDLYSRESET;
+ input TXDLYUPDOWN;
+ input TXELECIDLE;
+ input [5:0] TXHEADER;
+ input TXINHIBIT;
+ input TXLATCLK;
+ input TXLFPSTRESET;
+ input TXLFPSU2LPEXIT;
+ input TXLFPSU3WAKE;
+ input [6:0] TXMAINCURSOR;
+ input [2:0] TXMARGIN;
+ input TXMUXDCDEXHOLD;
+ input TXMUXDCDORWREN;
+ input TXONESZEROS;
+ input [2:0] TXOUTCLKSEL;
+ input TXPCSRESET;
+ input [1:0] TXPD;
+ input TXPDELECIDLEMODE;
+ input TXPHALIGN;
+ input TXPHALIGNEN;
+ input TXPHDLYPD;
+ input TXPHDLYRESET;
+ input TXPHDLYTSTCLK;
+ input TXPHINIT;
+ input TXPHOVRDEN;
+ input TXPIPPMEN;
+ input TXPIPPMOVRDEN;
+ input TXPIPPMPD;
+ input TXPIPPMSEL;
+ input [4:0] TXPIPPMSTEPSIZE;
+ input TXPISOPD;
+ input [1:0] TXPLLCLKSEL;
+ input TXPMARESET;
+ input TXPOLARITY;
+ input [4:0] TXPOSTCURSOR;
+ input TXPRBSFORCEERR;
+ input [3:0] TXPRBSSEL;
+ input [4:0] TXPRECURSOR;
+ input TXPROGDIVRESET;
+ input TXQPIBIASEN;
+ input TXQPIWEAKPUP;
+ input [2:0] TXRATE;
+ input TXRATEMODE;
+ input [6:0] TXSEQUENCE;
+ input TXSWING;
+ input TXSYNCALLIN;
+ input TXSYNCIN;
+ input TXSYNCMODE;
+ input [1:0] TXSYSCLKSEL;
+ input TXUSERRDY;
+ input TXUSRCLK;
+ input TXUSRCLK2;
+endmodule
+
+module GTHE4_COMMON (...);
+ parameter [0:0] AEN_QPLL0_FBDIV = 1'b1;
+ parameter [0:0] AEN_QPLL1_FBDIV = 1'b1;
+ parameter [0:0] AEN_SDM0TOGGLE = 1'b0;
+ parameter [0:0] AEN_SDM1TOGGLE = 1'b0;
+ parameter [0:0] A_SDM0TOGGLE = 1'b0;
+ parameter [8:0] A_SDM1DATA_HIGH = 9'b000000000;
+ parameter [15:0] A_SDM1DATA_LOW = 16'b0000000000000000;
+ parameter [0:0] A_SDM1TOGGLE = 1'b0;
+ parameter [15:0] BIAS_CFG0 = 16'h0000;
+ parameter [15:0] BIAS_CFG1 = 16'h0000;
+ parameter [15:0] BIAS_CFG2 = 16'h0000;
+ parameter [15:0] BIAS_CFG3 = 16'h0000;
+ parameter [15:0] BIAS_CFG4 = 16'h0000;
+ parameter [15:0] BIAS_CFG_RSVD = 16'h0000;
+ parameter [15:0] COMMON_CFG0 = 16'h0000;
+ parameter [15:0] COMMON_CFG1 = 16'h0000;
+ parameter [15:0] POR_CFG = 16'h0000;
+ parameter [15:0] PPF0_CFG = 16'h0F00;
+ parameter [15:0] PPF1_CFG = 16'h0F00;
+ parameter QPLL0CLKOUT_RATE = "FULL";
+ parameter [15:0] QPLL0_CFG0 = 16'h391C;
+ parameter [15:0] QPLL0_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL0_CFG2 = 16'h0F80;
+ parameter [15:0] QPLL0_CFG2_G3 = 16'h0F80;
+ parameter [15:0] QPLL0_CFG3 = 16'h0120;
+ parameter [15:0] QPLL0_CFG4 = 16'h0002;
+ parameter [9:0] QPLL0_CP = 10'b0000011111;
+ parameter [9:0] QPLL0_CP_G3 = 10'b0000011111;
+ parameter integer QPLL0_FBDIV = 66;
+ parameter integer QPLL0_FBDIV_G3 = 80;
+ parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL0_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL0_LPF = 10'b1011111111;
+ parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111;
+ parameter [0:0] QPLL0_PCI_EN = 1'b0;
+ parameter [0:0] QPLL0_RATE_SW_USE_DRP = 1'b0;
+ parameter integer QPLL0_REFCLK_DIV = 1;
+ parameter [15:0] QPLL0_SDM_CFG0 = 16'h0040;
+ parameter [15:0] QPLL0_SDM_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_SDM_CFG2 = 16'h0000;
+ parameter QPLL1CLKOUT_RATE = "FULL";
+ parameter [15:0] QPLL1_CFG0 = 16'h691C;
+ parameter [15:0] QPLL1_CFG1 = 16'h0020;
+ parameter [15:0] QPLL1_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL1_CFG2 = 16'h0F80;
+ parameter [15:0] QPLL1_CFG2_G3 = 16'h0F80;
+ parameter [15:0] QPLL1_CFG3 = 16'h0120;
+ parameter [15:0] QPLL1_CFG4 = 16'h0002;
+ parameter [9:0] QPLL1_CP = 10'b0000011111;
+ parameter [9:0] QPLL1_CP_G3 = 10'b0000011111;
+ parameter integer QPLL1_FBDIV = 66;
+ parameter integer QPLL1_FBDIV_G3 = 80;
+ parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL1_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL1_LPF = 10'b1011111111;
+ parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111;
+ parameter [0:0] QPLL1_PCI_EN = 1'b0;
+ parameter [0:0] QPLL1_RATE_SW_USE_DRP = 1'b0;
+ parameter integer QPLL1_REFCLK_DIV = 1;
+ parameter [15:0] QPLL1_SDM_CFG0 = 16'h0000;
+ parameter [15:0] QPLL1_SDM_CFG1 = 16'h0000;
+ parameter [15:0] QPLL1_SDM_CFG2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR0 = 16'h0000;
+ parameter [15:0] RSVD_ATTR1 = 16'h0000;
+ parameter [15:0] RSVD_ATTR2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR3 = 16'h0000;
+ parameter [1:0] RXRECCLKOUT0_SEL = 2'b00;
+ parameter [1:0] RXRECCLKOUT1_SEL = 2'b00;
+ parameter [0:0] SARC_ENB = 1'b0;
+ parameter [0:0] SARC_SEL = 1'b0;
+ parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM0INITSEED0_1 = 9'b000000000;
+ parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM1INITSEED0_1 = 9'b000000000;
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output [7:0] PMARSVDOUT0;
+ output [7:0] PMARSVDOUT1;
+ output QPLL0FBCLKLOST;
+ output QPLL0LOCK;
+ output QPLL0OUTCLK;
+ output QPLL0OUTREFCLK;
+ output QPLL0REFCLKLOST;
+ output QPLL1FBCLKLOST;
+ output QPLL1LOCK;
+ output QPLL1OUTCLK;
+ output QPLL1OUTREFCLK;
+ output QPLL1REFCLKLOST;
+ output [7:0] QPLLDMONITOR0;
+ output [7:0] QPLLDMONITOR1;
+ output REFCLKOUTMONITOR0;
+ output REFCLKOUTMONITOR1;
+ output [1:0] RXRECCLK0SEL;
+ output [1:0] RXRECCLK1SEL;
+ output [3:0] SDM0FINALOUT;
+ output [14:0] SDM0TESTDATA;
+ output [3:0] SDM1FINALOUT;
+ output [14:0] SDM1TESTDATA;
+ output [9:0] TCONGPO;
+ output TCONRSVDOUT0;
+ input BGBYPASSB;
+ input BGMONITORENB;
+ input BGPDB;
+ input [4:0] BGRCALOVRD;
+ input BGRCALOVRDENB;
+ input [15:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input GTGREFCLK0;
+ input GTGREFCLK1;
+ input GTNORTHREFCLK00;
+ input GTNORTHREFCLK01;
+ input GTNORTHREFCLK10;
+ input GTNORTHREFCLK11;
+ input GTREFCLK00;
+ input GTREFCLK01;
+ input GTREFCLK10;
+ input GTREFCLK11;
+ input GTSOUTHREFCLK00;
+ input GTSOUTHREFCLK01;
+ input GTSOUTHREFCLK10;
+ input GTSOUTHREFCLK11;
+ input [2:0] PCIERATEQPLL0;
+ input [2:0] PCIERATEQPLL1;
+ input [7:0] PMARSVD0;
+ input [7:0] PMARSVD1;
+ input QPLL0CLKRSVD0;
+ input QPLL0CLKRSVD1;
+ input [7:0] QPLL0FBDIV;
+ input QPLL0LOCKDETCLK;
+ input QPLL0LOCKEN;
+ input QPLL0PD;
+ input [2:0] QPLL0REFCLKSEL;
+ input QPLL0RESET;
+ input QPLL1CLKRSVD0;
+ input QPLL1CLKRSVD1;
+ input [7:0] QPLL1FBDIV;
+ input QPLL1LOCKDETCLK;
+ input QPLL1LOCKEN;
+ input QPLL1PD;
+ input [2:0] QPLL1REFCLKSEL;
+ input QPLL1RESET;
+ input [7:0] QPLLRSVD1;
+ input [4:0] QPLLRSVD2;
+ input [4:0] QPLLRSVD3;
+ input [7:0] QPLLRSVD4;
+ input RCALENB;
+ input [24:0] SDM0DATA;
+ input SDM0RESET;
+ input SDM0TOGGLE;
+ input [1:0] SDM0WIDTH;
+ input [24:0] SDM1DATA;
+ input SDM1RESET;
+ input SDM1TOGGLE;
+ input [1:0] SDM1WIDTH;
+ input [9:0] TCONGPI;
+ input TCONPOWERUP;
+ input [1:0] TCONRESET;
+ input [1:0] TCONRSVDIN1;
+endmodule
+
+module GTYE3_CHANNEL (...);
+ parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_RESET = 1'b0;
+ parameter [15:0] ADAPT_CFG0 = 16'h9200;
+ parameter [15:0] ADAPT_CFG1 = 16'h801C;
+ parameter [15:0] ADAPT_CFG2 = 16'b0000000000000000;
+ parameter ALIGN_COMMA_DOUBLE = "FALSE";
+ parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111;
+ parameter integer ALIGN_COMMA_WORD = 1;
+ parameter ALIGN_MCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011;
+ parameter ALIGN_PCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100;
+ parameter [0:0] AUTO_BW_SEL_BYPASS = 1'b0;
+ parameter [0:0] A_RXOSCALRESET = 1'b0;
+ parameter [0:0] A_RXPROGDIVRESET = 1'b0;
+ parameter [4:0] A_TXDIFFCTRL = 5'b01100;
+ parameter [0:0] A_TXPROGDIVRESET = 1'b0;
+ parameter [0:0] CAPBYPASS_FORCE = 1'b0;
+ parameter CBCC_DATA_SOURCE_SEL = "DECODED";
+ parameter [0:0] CDR_SWAP_MODE_EN = 1'b0;
+ parameter CHAN_BOND_KEEP_ALIGN = "FALSE";
+ parameter integer CHAN_BOND_MAX_SKEW = 7;
+ parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111;
+ parameter CHAN_BOND_SEQ_2_USE = "FALSE";
+ parameter integer CHAN_BOND_SEQ_LEN = 2;
+ parameter [15:0] CH_HSPMUX = 16'h0000;
+ parameter [15:0] CKCAL1_CFG_0 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_1 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_2 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_3 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_0 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_1 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_2 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_3 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_4 = 16'b0000000000000000;
+ parameter [15:0] CKCAL_RSVD0 = 16'h0000;
+ parameter [15:0] CKCAL_RSVD1 = 16'h0000;
+ parameter CLK_CORRECT_USE = "TRUE";
+ parameter CLK_COR_KEEP_IDLE = "FALSE";
+ parameter integer CLK_COR_MAX_LAT = 20;
+ parameter integer CLK_COR_MIN_LAT = 18;
+ parameter CLK_COR_PRECEDENCE = "TRUE";
+ parameter integer CLK_COR_REPEAT_WAIT = 0;
+ parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111;
+ parameter CLK_COR_SEQ_2_USE = "FALSE";
+ parameter integer CLK_COR_SEQ_LEN = 2;
+ parameter [15:0] CPLL_CFG0 = 16'h20F8;
+ parameter [15:0] CPLL_CFG1 = 16'hA494;
+ parameter [15:0] CPLL_CFG2 = 16'hF001;
+ parameter [5:0] CPLL_CFG3 = 6'h00;
+ parameter integer CPLL_FBDIV = 4;
+ parameter integer CPLL_FBDIV_45 = 4;
+ parameter [15:0] CPLL_INIT_CFG0 = 16'h001E;
+ parameter [7:0] CPLL_INIT_CFG1 = 8'h00;
+ parameter [15:0] CPLL_LOCK_CFG = 16'h01E8;
+ parameter integer CPLL_REFCLK_DIV = 1;
+ parameter [2:0] CTLE3_OCAP_EXT_CTRL = 3'b000;
+ parameter [0:0] CTLE3_OCAP_EXT_EN = 1'b0;
+ parameter [1:0] DDI_CTRL = 2'b00;
+ parameter integer DDI_REALIGN_WAIT = 15;
+ parameter DEC_MCOMMA_DETECT = "TRUE";
+ parameter DEC_PCOMMA_DETECT = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY = "TRUE";
+ parameter [0:0] DFE_D_X_REL_POS = 1'b0;
+ parameter [0:0] DFE_VCM_COMP_EN = 1'b0;
+ parameter [9:0] DMONITOR_CFG0 = 10'h000;
+ parameter [7:0] DMONITOR_CFG1 = 8'h00;
+ parameter [0:0] ES_CLK_PHASE_SEL = 1'b0;
+ parameter [5:0] ES_CONTROL = 6'b000000;
+ parameter ES_ERRDET_EN = "FALSE";
+ parameter ES_EYE_SCAN_EN = "FALSE";
+ parameter [11:0] ES_HORZ_OFFSET = 12'h000;
+ parameter [9:0] ES_PMA_CFG = 10'b0000000000;
+ parameter [4:0] ES_PRESCALE = 5'b00000;
+ parameter [15:0] ES_QUALIFIER0 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER1 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER2 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER3 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER4 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER5 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER6 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER7 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER8 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER9 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK0 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK1 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK2 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK3 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK4 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK5 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK6 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK7 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK8 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK9 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK0 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK1 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK2 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK3 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK4 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK5 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK6 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK7 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK8 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK9 = 16'h0000;
+ parameter [10:0] EVODD_PHI_CFG = 11'b00000000000;
+ parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0;
+ parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111;
+ parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111;
+ parameter FTS_LANE_DESKEW_EN = "FALSE";
+ parameter [4:0] GEARBOX_MODE = 5'b00000;
+ parameter [0:0] GM_BIAS_SELECT = 1'b0;
+ parameter [0:0] ISCAN_CK_PH_SEL2 = 1'b0;
+ parameter [0:0] LOCAL_MASTER = 1'b0;
+ parameter [15:0] LOOP0_CFG = 16'h0000;
+ parameter [15:0] LOOP10_CFG = 16'h0000;
+ parameter [15:0] LOOP11_CFG = 16'h0000;
+ parameter [15:0] LOOP12_CFG = 16'h0000;
+ parameter [15:0] LOOP13_CFG = 16'h0000;
+ parameter [15:0] LOOP1_CFG = 16'h0000;
+ parameter [15:0] LOOP2_CFG = 16'h0000;
+ parameter [15:0] LOOP3_CFG = 16'h0000;
+ parameter [15:0] LOOP4_CFG = 16'h0000;
+ parameter [15:0] LOOP5_CFG = 16'h0000;
+ parameter [15:0] LOOP6_CFG = 16'h0000;
+ parameter [15:0] LOOP7_CFG = 16'h0000;
+ parameter [15:0] LOOP8_CFG = 16'h0000;
+ parameter [15:0] LOOP9_CFG = 16'h0000;
+ parameter [2:0] LPBK_BIAS_CTRL = 3'b000;
+ parameter [0:0] LPBK_EN_RCAL_B = 1'b0;
+ parameter [3:0] LPBK_EXT_RCAL = 4'b0000;
+ parameter [3:0] LPBK_RG_CTRL = 4'b0000;
+ parameter [1:0] OOBDIVCTL = 2'b00;
+ parameter [0:0] OOB_PWRUP = 1'b0;
+ parameter PCI3_AUTO_REALIGN = "FRST_SMPL";
+ parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1;
+ parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00;
+ parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0;
+ parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000;
+ parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000;
+ parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000;
+ parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0;
+ parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0;
+ parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000;
+ parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_RXPMA_CFG = 16'h0000;
+ parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_TXPMA_CFG = 16'h0000;
+ parameter PCS_PCIE_EN = "FALSE";
+ parameter [15:0] PCS_RSVD0 = 16'b0000000000000000;
+ parameter [2:0] PCS_RSVD1 = 3'b000;
+ parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C;
+ parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19;
+ parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64;
+ parameter [1:0] PLL_SEL_MODE_GEN12 = 2'h0;
+ parameter [1:0] PLL_SEL_MODE_GEN3 = 2'h0;
+ parameter [15:0] PMA_RSV0 = 16'h0000;
+ parameter [15:0] PMA_RSV1 = 16'h0000;
+ parameter integer PREIQ_FREQ_BST = 0;
+ parameter [2:0] PROCESS_PAR = 3'b010;
+ parameter [0:0] RATE_SW_USE_DRP = 1'b0;
+ parameter [0:0] RESET_POWERSAVE_DISABLE = 1'b0;
+ parameter [4:0] RXBUFRESET_TIME = 5'b00001;
+ parameter RXBUF_ADDR_MODE = "FULL";
+ parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000;
+ parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000;
+ parameter RXBUF_EN = "TRUE";
+ parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE";
+ parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE";
+ parameter RXBUF_RESET_ON_EIDLE = "FALSE";
+ parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE";
+ parameter integer RXBUF_THRESH_OVFLW = 0;
+ parameter RXBUF_THRESH_OVRD = "FALSE";
+ parameter integer RXBUF_THRESH_UNDFLW = 4;
+ parameter [4:0] RXCDRFREQRESET_TIME = 5'b00001;
+ parameter [4:0] RXCDRPHRESET_TIME = 5'b00001;
+ parameter [15:0] RXCDR_CFG0 = 16'h0000;
+ parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG1 = 16'h0300;
+ parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0300;
+ parameter [15:0] RXCDR_CFG2 = 16'h0060;
+ parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0060;
+ parameter [15:0] RXCDR_CFG3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG4 = 16'h0002;
+ parameter [15:0] RXCDR_CFG4_GEN3 = 16'h0002;
+ parameter [15:0] RXCDR_CFG5 = 16'h0000;
+ parameter [15:0] RXCDR_CFG5_GEN3 = 16'h0000;
+ parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0;
+ parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0;
+ parameter [15:0] RXCDR_LOCK_CFG0 = 16'h0001;
+ parameter [15:0] RXCDR_LOCK_CFG1 = 16'h0000;
+ parameter [15:0] RXCDR_LOCK_CFG2 = 16'h0000;
+ parameter [15:0] RXCDR_LOCK_CFG3 = 16'h0000;
+ parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0;
+ parameter [1:0] RXCFOKDONE_SRC = 2'b00;
+ parameter [15:0] RXCFOK_CFG0 = 16'h3E00;
+ parameter [15:0] RXCFOK_CFG1 = 16'h0042;
+ parameter [15:0] RXCFOK_CFG2 = 16'h002D;
+ parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111;
+ parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000;
+ parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0022;
+ parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0100;
+ parameter [15:0] RXDFE_CFG0 = 16'h4C00;
+ parameter [15:0] RXDFE_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG0 = 16'h1E00;
+ parameter [15:0] RXDFE_GC_CFG1 = 16'h1900;
+ parameter [15:0] RXDFE_GC_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H3_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H3_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H4_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H4_CFG1 = 16'h0003;
+ parameter [15:0] RXDFE_H5_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H5_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H6_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H6_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H7_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H7_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H8_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H8_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H9_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H9_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HA_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HA_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HB_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HB_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HC_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HD_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HD_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HE_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HE_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HF_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HF_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_OS_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_OS_CFG1 = 16'h0200;
+ parameter [0:0] RXDFE_PWR_SAVING = 1'b0;
+ parameter [15:0] RXDFE_UT_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_UT_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_VP_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_VP_CFG1 = 16'h0022;
+ parameter [15:0] RXDLY_CFG = 16'h001F;
+ parameter [15:0] RXDLY_LCFG = 16'h0030;
+ parameter RXELECIDLE_CFG = "SIGCFG_4";
+ parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter RXGEARBOX_EN = "FALSE";
+ parameter [4:0] RXISCANRESET_TIME = 5'b00001;
+ parameter [15:0] RXLPM_CFG = 16'h0000;
+ parameter [15:0] RXLPM_GC_CFG = 16'h0200;
+ parameter [15:0] RXLPM_KH_CFG0 = 16'h0000;
+ parameter [15:0] RXLPM_KH_CFG1 = 16'h0002;
+ parameter [15:0] RXLPM_OS_CFG0 = 16'h0400;
+ parameter [15:0] RXLPM_OS_CFG1 = 16'h0000;
+ parameter [8:0] RXOOB_CFG = 9'b000000110;
+ parameter RXOOB_CLK_CFG = "PMA";
+ parameter [4:0] RXOSCALRESET_TIME = 5'b00011;
+ parameter integer RXOUT_DIV = 4;
+ parameter [4:0] RXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] RXPHBEACON_CFG = 16'h0000;
+ parameter [15:0] RXPHDLY_CFG = 16'h2020;
+ parameter [15:0] RXPHSAMP_CFG = 16'h2100;
+ parameter [15:0] RXPHSLIP_CFG = 16'h9933;
+ parameter [4:0] RXPH_MONITOR_SEL = 5'b00000;
+ parameter [0:0] RXPI_AUTO_BW_SEL_BYPASS = 1'b0;
+ parameter [15:0] RXPI_CFG = 16'h0100;
+ parameter [0:0] RXPI_LPM = 1'b0;
+ parameter [15:0] RXPI_RSV0 = 16'h0000;
+ parameter [1:0] RXPI_SEL_LC = 2'b00;
+ parameter [1:0] RXPI_STARTCODE = 2'b00;
+ parameter [0:0] RXPI_VREFSEL = 1'b0;
+ parameter RXPMACLK_SEL = "DATA";
+ parameter [4:0] RXPMARESET_TIME = 5'b00001;
+ parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0;
+ parameter integer RXPRBS_LINKACQ_CNT = 15;
+ parameter integer RXSLIDE_AUTO_WAIT = 7;
+ parameter RXSLIDE_MODE = "OFF";
+ parameter [0:0] RXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] RXSYNC_OVRD = 1'b0;
+ parameter [0:0] RXSYNC_SKIP_DA = 1'b0;
+ parameter [0:0] RX_AFE_CM_EN = 1'b0;
+ parameter [15:0] RX_BIAS_CFG0 = 16'h1534;
+ parameter [5:0] RX_BUFFER_CFG = 6'b000000;
+ parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0;
+ parameter integer RX_CLK25_DIV = 8;
+ parameter [0:0] RX_CLKMUX_EN = 1'b1;
+ parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000;
+ parameter [3:0] RX_CM_BUF_CFG = 4'b1010;
+ parameter [0:0] RX_CM_BUF_PD = 1'b0;
+ parameter integer RX_CM_SEL = 3;
+ parameter integer RX_CM_TRIM = 10;
+ parameter [0:0] RX_CTLE1_KHKL = 1'b0;
+ parameter [0:0] RX_CTLE2_KHKL = 1'b0;
+ parameter [0:0] RX_CTLE3_AGC = 1'b0;
+ parameter integer RX_DATA_WIDTH = 20;
+ parameter [5:0] RX_DDI_SEL = 6'b000000;
+ parameter RX_DEFER_RESET_BUF_EN = "TRUE";
+ parameter [2:0] RX_DEGEN_CTRL = 3'b010;
+ parameter integer RX_DFELPM_CFG0 = 6;
+ parameter [0:0] RX_DFELPM_CFG1 = 1'b0;
+ parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1;
+ parameter [1:0] RX_DFE_AGC_CFG0 = 2'b00;
+ parameter integer RX_DFE_AGC_CFG1 = 4;
+ parameter integer RX_DFE_KL_LPM_KH_CFG0 = 1;
+ parameter integer RX_DFE_KL_LPM_KH_CFG1 = 2;
+ parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01;
+ parameter [2:0] RX_DFE_KL_LPM_KL_CFG1 = 3'b010;
+ parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0;
+ parameter RX_DISPERR_SEQ_MATCH = "TRUE";
+ parameter [0:0] RX_DIV2_MODE_B = 1'b0;
+ parameter [4:0] RX_DIVRESET_TIME = 5'b00001;
+ parameter [0:0] RX_EN_CTLE_RCAL_B = 1'b0;
+ parameter [0:0] RX_EN_HI_LR = 1'b0;
+ parameter [8:0] RX_EXT_RL_CTRL = 9'b000000000;
+ parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000;
+ parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0;
+ parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b00;
+ parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0;
+ parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter integer RX_INT_DATAWIDTH = 1;
+ parameter [0:0] RX_PMA_POWER_SAVE = 1'b0;
+ parameter real RX_PROGDIV_CFG = 0.0;
+ parameter [15:0] RX_PROGDIV_RATE = 16'h0001;
+ parameter [3:0] RX_RESLOAD_CTRL = 4'b0000;
+ parameter [0:0] RX_RESLOAD_OVRD = 1'b0;
+ parameter [2:0] RX_SAMPLE_PERIOD = 3'b101;
+ parameter integer RX_SIG_VALID_DLY = 11;
+ parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0;
+ parameter [3:0] RX_SUM_IREF_TUNE = 4'b0000;
+ parameter [3:0] RX_SUM_VCMTUNE = 4'b1000;
+ parameter [0:0] RX_SUM_VCM_OVWR = 1'b0;
+ parameter [2:0] RX_SUM_VREF_TUNE = 3'b100;
+ parameter [1:0] RX_TUNE_AFE_OS = 2'b00;
+ parameter [2:0] RX_VREG_CTRL = 3'b101;
+ parameter [0:0] RX_VREG_PDB = 1'b1;
+ parameter [1:0] RX_WIDEMODE_CDR = 2'b01;
+ parameter RX_XCLK_SEL = "RXDES";
+ parameter [0:0] RX_XMODE_SEL = 1'b0;
+ parameter integer SAS_MAX_COM = 64;
+ parameter integer SAS_MIN_COM = 36;
+ parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111;
+ parameter [2:0] SATA_BURST_VAL = 3'b100;
+ parameter SATA_CPLL_CFG = "VCO_3000MHZ";
+ parameter [2:0] SATA_EIDLE_VAL = 3'b100;
+ parameter integer SATA_MAX_BURST = 8;
+ parameter integer SATA_MAX_INIT = 21;
+ parameter integer SATA_MAX_WAKE = 7;
+ parameter integer SATA_MIN_BURST = 4;
+ parameter integer SATA_MIN_INIT = 12;
+ parameter integer SATA_MIN_WAKE = 4;
+ parameter SHOW_REALIGN_COMMA = "TRUE";
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RECEIVER_DETECT_PASS = "TRUE";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter [0:0] SIM_TX_EIDLE_DRIVE_LEVEL = 1'b0;
+ parameter integer SIM_VERSION = 2;
+ parameter [1:0] TAPDLY_SET_TX = 2'h0;
+ parameter [3:0] TEMPERATURE_PAR = 4'b0010;
+ parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000;
+ parameter [2:0] TERM_RCAL_OVRD = 3'b000;
+ parameter [7:0] TRANS_TIME_RATE = 8'h0E;
+ parameter [7:0] TST_RSV0 = 8'h00;
+ parameter [7:0] TST_RSV1 = 8'h00;
+ parameter TXBUF_EN = "TRUE";
+ parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE";
+ parameter [15:0] TXDLY_CFG = 16'h001F;
+ parameter [15:0] TXDLY_LCFG = 16'h0030;
+ parameter TXFIFO_ADDR_CFG = "LOW";
+ parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter TXGEARBOX_EN = "FALSE";
+ parameter integer TXOUT_DIV = 4;
+ parameter [4:0] TXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] TXPHDLY_CFG0 = 16'h2020;
+ parameter [15:0] TXPHDLY_CFG1 = 16'h0001;
+ parameter [15:0] TXPH_CFG = 16'h0123;
+ parameter [15:0] TXPH_CFG2 = 16'h0000;
+ parameter [4:0] TXPH_MONITOR_SEL = 5'b00000;
+ parameter [1:0] TXPI_CFG0 = 2'b00;
+ parameter [1:0] TXPI_CFG1 = 2'b00;
+ parameter [1:0] TXPI_CFG2 = 2'b00;
+ parameter [0:0] TXPI_CFG3 = 1'b0;
+ parameter [0:0] TXPI_CFG4 = 1'b1;
+ parameter [2:0] TXPI_CFG5 = 3'b000;
+ parameter [0:0] TXPI_GRAY_SEL = 1'b0;
+ parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0;
+ parameter [0:0] TXPI_LPM = 1'b0;
+ parameter TXPI_PPMCLK_SEL = "TXUSRCLK2";
+ parameter [7:0] TXPI_PPM_CFG = 8'b00000000;
+ parameter [15:0] TXPI_RSV0 = 16'h0000;
+ parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000;
+ parameter [0:0] TXPI_VREFSEL = 1'b0;
+ parameter [4:0] TXPMARESET_TIME = 5'b00001;
+ parameter [0:0] TXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] TXSYNC_OVRD = 1'b0;
+ parameter [0:0] TXSYNC_SKIP_DA = 1'b0;
+ parameter integer TX_CLK25_DIV = 8;
+ parameter [0:0] TX_CLKMUX_EN = 1'b1;
+ parameter [0:0] TX_CLKREG_PDB = 1'b0;
+ parameter [2:0] TX_CLKREG_SET = 3'b000;
+ parameter integer TX_DATA_WIDTH = 20;
+ parameter [5:0] TX_DCD_CFG = 6'b000010;
+ parameter [0:0] TX_DCD_EN = 1'b0;
+ parameter [5:0] TX_DEEMPH0 = 6'b000000;
+ parameter [5:0] TX_DEEMPH1 = 6'b000000;
+ parameter [4:0] TX_DIVRESET_TIME = 5'b00001;
+ parameter TX_DRIVE_MODE = "DIRECT";
+ parameter integer TX_DRVMUX_CTRL = 2;
+ parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110;
+ parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100;
+ parameter [0:0] TX_EML_PHI_TUNE = 1'b0;
+ parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter [0:0] TX_FIFO_BYP_EN = 1'b0;
+ parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0;
+ parameter integer TX_INT_DATAWIDTH = 1;
+ parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE";
+ parameter [0:0] TX_MAINCURSOR_SEL = 1'b0;
+ parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110;
+ parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001;
+ parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101;
+ parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110;
+ parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100;
+ parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000;
+ parameter [2:0] TX_MODE_SEL = 3'b000;
+ parameter [15:0] TX_PHICAL_CFG0 = 16'h0000;
+ parameter [15:0] TX_PHICAL_CFG1 = 16'h7E00;
+ parameter [15:0] TX_PHICAL_CFG2 = 16'h0000;
+ parameter integer TX_PI_BIASSET = 0;
+ parameter [15:0] TX_PI_CFG0 = 16'h0000;
+ parameter [15:0] TX_PI_CFG1 = 16'h0000;
+ parameter [0:0] TX_PI_DIV2_MODE_B = 1'b0;
+ parameter [0:0] TX_PI_SEL_QPLL0 = 1'b0;
+ parameter [0:0] TX_PI_SEL_QPLL1 = 1'b0;
+ parameter [0:0] TX_PMADATA_OPT = 1'b0;
+ parameter [0:0] TX_PMA_POWER_SAVE = 1'b0;
+ parameter integer TX_PREDRV_CTRL = 2;
+ parameter TX_PROGCLK_SEL = "POSTPI";
+ parameter real TX_PROGDIV_CFG = 0.0;
+ parameter [15:0] TX_PROGDIV_RATE = 16'h0001;
+ parameter [13:0] TX_RXDETECT_CFG = 14'h0032;
+ parameter integer TX_RXDETECT_REF = 4;
+ parameter [2:0] TX_SAMPLE_PERIOD = 3'b101;
+ parameter [0:0] TX_SARC_LPBK_ENB = 1'b0;
+ parameter TX_XCLK_SEL = "TXOUT";
+ parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0;
+ output [2:0] BUFGTCE;
+ output [2:0] BUFGTCEMASK;
+ output [8:0] BUFGTDIV;
+ output [2:0] BUFGTRESET;
+ output [2:0] BUFGTRSTMASK;
+ output CPLLFBCLKLOST;
+ output CPLLLOCK;
+ output CPLLREFCLKLOST;
+ output [16:0] DMONITOROUT;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output EYESCANDATAERROR;
+ output GTPOWERGOOD;
+ output GTREFCLKMONITOR;
+ output GTYTXN;
+ output GTYTXP;
+ output PCIERATEGEN3;
+ output PCIERATEIDLE;
+ output [1:0] PCIERATEQPLLPD;
+ output [1:0] PCIERATEQPLLRESET;
+ output PCIESYNCTXSYNCDONE;
+ output PCIEUSERGEN3RDY;
+ output PCIEUSERPHYSTATUSRST;
+ output PCIEUSERRATESTART;
+ output [15:0] PCSRSVDOUT;
+ output PHYSTATUS;
+ output [7:0] PINRSRVDAS;
+ output RESETEXCEPTION;
+ output [2:0] RXBUFSTATUS;
+ output RXBYTEISALIGNED;
+ output RXBYTEREALIGN;
+ output RXCDRLOCK;
+ output RXCDRPHDONE;
+ output RXCHANBONDSEQ;
+ output RXCHANISALIGNED;
+ output RXCHANREALIGN;
+ output [4:0] RXCHBONDO;
+ output RXCKCALDONE;
+ output [1:0] RXCLKCORCNT;
+ output RXCOMINITDET;
+ output RXCOMMADET;
+ output RXCOMSASDET;
+ output RXCOMWAKEDET;
+ output [15:0] RXCTRL0;
+ output [15:0] RXCTRL1;
+ output [7:0] RXCTRL2;
+ output [7:0] RXCTRL3;
+ output [127:0] RXDATA;
+ output [7:0] RXDATAEXTENDRSVD;
+ output [1:0] RXDATAVALID;
+ output RXDLYSRESETDONE;
+ output RXELECIDLE;
+ output [5:0] RXHEADER;
+ output [1:0] RXHEADERVALID;
+ output [6:0] RXMONITOROUT;
+ output RXOSINTDONE;
+ output RXOSINTSTARTED;
+ output RXOSINTSTROBEDONE;
+ output RXOSINTSTROBESTARTED;
+ output RXOUTCLK;
+ output RXOUTCLKFABRIC;
+ output RXOUTCLKPCS;
+ output RXPHALIGNDONE;
+ output RXPHALIGNERR;
+ output RXPMARESETDONE;
+ output RXPRBSERR;
+ output RXPRBSLOCKED;
+ output RXPRGDIVRESETDONE;
+ output RXRATEDONE;
+ output RXRECCLKOUT;
+ output RXRESETDONE;
+ output RXSLIDERDY;
+ output RXSLIPDONE;
+ output RXSLIPOUTCLKRDY;
+ output RXSLIPPMARDY;
+ output [1:0] RXSTARTOFSEQ;
+ output [2:0] RXSTATUS;
+ output RXSYNCDONE;
+ output RXSYNCOUT;
+ output RXVALID;
+ output [1:0] TXBUFSTATUS;
+ output TXCOMFINISH;
+ output TXDCCDONE;
+ output TXDLYSRESETDONE;
+ output TXOUTCLK;
+ output TXOUTCLKFABRIC;
+ output TXOUTCLKPCS;
+ output TXPHALIGNDONE;
+ output TXPHINITDONE;
+ output TXPMARESETDONE;
+ output TXPRGDIVRESETDONE;
+ output TXRATEDONE;
+ output TXRESETDONE;
+ output TXSYNCDONE;
+ output TXSYNCOUT;
+ input CDRSTEPDIR;
+ input CDRSTEPSQ;
+ input CDRSTEPSX;
+ input CFGRESET;
+ input CLKRSVD0;
+ input CLKRSVD1;
+ input CPLLLOCKDETCLK;
+ input CPLLLOCKEN;
+ input CPLLPD;
+ input [2:0] CPLLREFCLKSEL;
+ input CPLLRESET;
+ input DMONFIFORESET;
+ input DMONITORCLK;
+ input [9:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input ELPCALDVORWREN;
+ input ELPCALPAORWREN;
+ input EVODDPHICALDONE;
+ input EVODDPHICALSTART;
+ input EVODDPHIDRDEN;
+ input EVODDPHIDWREN;
+ input EVODDPHIXRDEN;
+ input EVODDPHIXWREN;
+ input EYESCANMODE;
+ input EYESCANRESET;
+ input EYESCANTRIGGER;
+ input GTGREFCLK;
+ input GTNORTHREFCLK0;
+ input GTNORTHREFCLK1;
+ input GTREFCLK0;
+ input GTREFCLK1;
+ input GTRESETSEL;
+ input [15:0] GTRSVD;
+ input GTRXRESET;
+ input GTSOUTHREFCLK0;
+ input GTSOUTHREFCLK1;
+ input GTTXRESET;
+ input GTYRXN;
+ input GTYRXP;
+ input [2:0] LOOPBACK;
+ input [15:0] LOOPRSVD;
+ input LPBKRXTXSEREN;
+ input LPBKTXRXSEREN;
+ input PCIEEQRXEQADAPTDONE;
+ input PCIERSTIDLE;
+ input PCIERSTTXSYNCSTART;
+ input PCIEUSERRATEDONE;
+ input [15:0] PCSRSVDIN;
+ input [4:0] PCSRSVDIN2;
+ input [4:0] PMARSVDIN;
+ input QPLL0CLK;
+ input QPLL0REFCLK;
+ input QPLL1CLK;
+ input QPLL1REFCLK;
+ input RESETOVRD;
+ input RSTCLKENTX;
+ input RX8B10BEN;
+ input RXBUFRESET;
+ input RXCDRFREQRESET;
+ input RXCDRHOLD;
+ input RXCDROVRDEN;
+ input RXCDRRESET;
+ input RXCDRRESETRSV;
+ input RXCHBONDEN;
+ input [4:0] RXCHBONDI;
+ input [2:0] RXCHBONDLEVEL;
+ input RXCHBONDMASTER;
+ input RXCHBONDSLAVE;
+ input RXCKCALRESET;
+ input RXCOMMADETEN;
+ input RXDCCFORCESTART;
+ input RXDFEAGCHOLD;
+ input RXDFEAGCOVRDEN;
+ input RXDFELFHOLD;
+ input RXDFELFOVRDEN;
+ input RXDFELPMRESET;
+ input RXDFETAP10HOLD;
+ input RXDFETAP10OVRDEN;
+ input RXDFETAP11HOLD;
+ input RXDFETAP11OVRDEN;
+ input RXDFETAP12HOLD;
+ input RXDFETAP12OVRDEN;
+ input RXDFETAP13HOLD;
+ input RXDFETAP13OVRDEN;
+ input RXDFETAP14HOLD;
+ input RXDFETAP14OVRDEN;
+ input RXDFETAP15HOLD;
+ input RXDFETAP15OVRDEN;
+ input RXDFETAP2HOLD;
+ input RXDFETAP2OVRDEN;
+ input RXDFETAP3HOLD;
+ input RXDFETAP3OVRDEN;
+ input RXDFETAP4HOLD;
+ input RXDFETAP4OVRDEN;
+ input RXDFETAP5HOLD;
+ input RXDFETAP5OVRDEN;
+ input RXDFETAP6HOLD;
+ input RXDFETAP6OVRDEN;
+ input RXDFETAP7HOLD;
+ input RXDFETAP7OVRDEN;
+ input RXDFETAP8HOLD;
+ input RXDFETAP8OVRDEN;
+ input RXDFETAP9HOLD;
+ input RXDFETAP9OVRDEN;
+ input RXDFEUTHOLD;
+ input RXDFEUTOVRDEN;
+ input RXDFEVPHOLD;
+ input RXDFEVPOVRDEN;
+ input RXDFEVSEN;
+ input RXDFEXYDEN;
+ input RXDLYBYPASS;
+ input RXDLYEN;
+ input RXDLYOVRDEN;
+ input RXDLYSRESET;
+ input [1:0] RXELECIDLEMODE;
+ input RXGEARBOXSLIP;
+ input RXLATCLK;
+ input RXLPMEN;
+ input RXLPMGCHOLD;
+ input RXLPMGCOVRDEN;
+ input RXLPMHFHOLD;
+ input RXLPMHFOVRDEN;
+ input RXLPMLFHOLD;
+ input RXLPMLFKLOVRDEN;
+ input RXLPMOSHOLD;
+ input RXLPMOSOVRDEN;
+ input RXMCOMMAALIGNEN;
+ input [1:0] RXMONITORSEL;
+ input RXOOBRESET;
+ input RXOSCALRESET;
+ input RXOSHOLD;
+ input [3:0] RXOSINTCFG;
+ input RXOSINTEN;
+ input RXOSINTHOLD;
+ input RXOSINTOVRDEN;
+ input RXOSINTSTROBE;
+ input RXOSINTTESTOVRDEN;
+ input RXOSOVRDEN;
+ input [2:0] RXOUTCLKSEL;
+ input RXPCOMMAALIGNEN;
+ input RXPCSRESET;
+ input [1:0] RXPD;
+ input RXPHALIGN;
+ input RXPHALIGNEN;
+ input RXPHDLYPD;
+ input RXPHDLYRESET;
+ input RXPHOVRDEN;
+ input [1:0] RXPLLCLKSEL;
+ input RXPMARESET;
+ input RXPOLARITY;
+ input RXPRBSCNTRESET;
+ input [3:0] RXPRBSSEL;
+ input RXPROGDIVRESET;
+ input [2:0] RXRATE;
+ input RXRATEMODE;
+ input RXSLIDE;
+ input RXSLIPOUTCLK;
+ input RXSLIPPMA;
+ input RXSYNCALLIN;
+ input RXSYNCIN;
+ input RXSYNCMODE;
+ input [1:0] RXSYSCLKSEL;
+ input RXUSERRDY;
+ input RXUSRCLK;
+ input RXUSRCLK2;
+ input SIGVALIDCLK;
+ input [19:0] TSTIN;
+ input [7:0] TX8B10BBYPASS;
+ input TX8B10BEN;
+ input [2:0] TXBUFDIFFCTRL;
+ input TXCOMINIT;
+ input TXCOMSAS;
+ input TXCOMWAKE;
+ input [15:0] TXCTRL0;
+ input [15:0] TXCTRL1;
+ input [7:0] TXCTRL2;
+ input [127:0] TXDATA;
+ input [7:0] TXDATAEXTENDRSVD;
+ input TXDCCFORCESTART;
+ input TXDCCRESET;
+ input TXDEEMPH;
+ input TXDETECTRX;
+ input [4:0] TXDIFFCTRL;
+ input TXDIFFPD;
+ input TXDLYBYPASS;
+ input TXDLYEN;
+ input TXDLYHOLD;
+ input TXDLYOVRDEN;
+ input TXDLYSRESET;
+ input TXDLYUPDOWN;
+ input TXELECIDLE;
+ input TXELFORCESTART;
+ input [5:0] TXHEADER;
+ input TXINHIBIT;
+ input TXLATCLK;
+ input [6:0] TXMAINCURSOR;
+ input [2:0] TXMARGIN;
+ input [2:0] TXOUTCLKSEL;
+ input TXPCSRESET;
+ input [1:0] TXPD;
+ input TXPDELECIDLEMODE;
+ input TXPHALIGN;
+ input TXPHALIGNEN;
+ input TXPHDLYPD;
+ input TXPHDLYRESET;
+ input TXPHDLYTSTCLK;
+ input TXPHINIT;
+ input TXPHOVRDEN;
+ input TXPIPPMEN;
+ input TXPIPPMOVRDEN;
+ input TXPIPPMPD;
+ input TXPIPPMSEL;
+ input [4:0] TXPIPPMSTEPSIZE;
+ input TXPISOPD;
+ input [1:0] TXPLLCLKSEL;
+ input TXPMARESET;
+ input TXPOLARITY;
+ input [4:0] TXPOSTCURSOR;
+ input TXPRBSFORCEERR;
+ input [3:0] TXPRBSSEL;
+ input [4:0] TXPRECURSOR;
+ input TXPROGDIVRESET;
+ input [2:0] TXRATE;
+ input TXRATEMODE;
+ input [6:0] TXSEQUENCE;
+ input TXSWING;
+ input TXSYNCALLIN;
+ input TXSYNCIN;
+ input TXSYNCMODE;
+ input [1:0] TXSYSCLKSEL;
+ input TXUSERRDY;
+ input TXUSRCLK;
+ input TXUSRCLK2;
+endmodule
+
+module GTYE3_COMMON (...);
+ parameter [15:0] A_SDM1DATA1_0 = 16'b0000000000000000;
+ parameter [8:0] A_SDM1DATA1_1 = 9'b000000000;
+ parameter [15:0] BIAS_CFG0 = 16'h0000;
+ parameter [15:0] BIAS_CFG1 = 16'h0000;
+ parameter [15:0] BIAS_CFG2 = 16'h0000;
+ parameter [15:0] BIAS_CFG3 = 16'h0000;
+ parameter [15:0] BIAS_CFG4 = 16'h0000;
+ parameter [9:0] BIAS_CFG_RSVD = 10'b0000000000;
+ parameter [15:0] COMMON_CFG0 = 16'h0000;
+ parameter [15:0] COMMON_CFG1 = 16'h0000;
+ parameter [15:0] POR_CFG = 16'h0004;
+ parameter [15:0] PPF0_CFG = 16'h0FFF;
+ parameter [15:0] PPF1_CFG = 16'h0FFF;
+ parameter QPLL0CLKOUT_RATE = "FULL";
+ parameter [15:0] QPLL0_CFG0 = 16'h301C;
+ parameter [15:0] QPLL0_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL0_CFG2 = 16'h0780;
+ parameter [15:0] QPLL0_CFG2_G3 = 16'h0780;
+ parameter [15:0] QPLL0_CFG3 = 16'h0120;
+ parameter [15:0] QPLL0_CFG4 = 16'h0021;
+ parameter [9:0] QPLL0_CP = 10'b0000011111;
+ parameter [9:0] QPLL0_CP_G3 = 10'b0000011111;
+ parameter integer QPLL0_FBDIV = 66;
+ parameter integer QPLL0_FBDIV_G3 = 80;
+ parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL0_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL0_LPF = 10'b1111111111;
+ parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111;
+ parameter integer QPLL0_REFCLK_DIV = 2;
+ parameter [15:0] QPLL0_SDM_CFG0 = 16'h0040;
+ parameter [15:0] QPLL0_SDM_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_SDM_CFG2 = 16'h0000;
+ parameter QPLL1CLKOUT_RATE = "FULL";
+ parameter [15:0] QPLL1_CFG0 = 16'h301C;
+ parameter [15:0] QPLL1_CFG1 = 16'h0000;
+ parameter [15:0] QPLL1_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL1_CFG2 = 16'h0780;
+ parameter [15:0] QPLL1_CFG2_G3 = 16'h0780;
+ parameter [15:0] QPLL1_CFG3 = 16'h0120;
+ parameter [15:0] QPLL1_CFG4 = 16'h0021;
+ parameter [9:0] QPLL1_CP = 10'b0000011111;
+ parameter [9:0] QPLL1_CP_G3 = 10'b0000011111;
+ parameter integer QPLL1_FBDIV = 66;
+ parameter integer QPLL1_FBDIV_G3 = 80;
+ parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL1_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL1_LPF = 10'b1111111111;
+ parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111;
+ parameter integer QPLL1_REFCLK_DIV = 2;
+ parameter [15:0] QPLL1_SDM_CFG0 = 16'h0040;
+ parameter [15:0] QPLL1_SDM_CFG1 = 16'h0000;
+ parameter [15:0] QPLL1_SDM_CFG2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR0 = 16'h0000;
+ parameter [15:0] RSVD_ATTR1 = 16'h0000;
+ parameter [15:0] RSVD_ATTR2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR3 = 16'h0000;
+ parameter [1:0] RXRECCLKOUT0_SEL = 2'b00;
+ parameter [1:0] RXRECCLKOUT1_SEL = 2'b00;
+ parameter [0:0] SARC_EN = 1'b1;
+ parameter [0:0] SARC_SEL = 1'b0;
+ parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM0INITSEED0_1 = 9'b000000000;
+ parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM1INITSEED0_1 = 9'b000000000;
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter integer SIM_VERSION = 2;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output [7:0] PMARSVDOUT0;
+ output [7:0] PMARSVDOUT1;
+ output QPLL0FBCLKLOST;
+ output QPLL0LOCK;
+ output QPLL0OUTCLK;
+ output QPLL0OUTREFCLK;
+ output QPLL0REFCLKLOST;
+ output QPLL1FBCLKLOST;
+ output QPLL1LOCK;
+ output QPLL1OUTCLK;
+ output QPLL1OUTREFCLK;
+ output QPLL1REFCLKLOST;
+ output [7:0] QPLLDMONITOR0;
+ output [7:0] QPLLDMONITOR1;
+ output REFCLKOUTMONITOR0;
+ output REFCLKOUTMONITOR1;
+ output [1:0] RXRECCLK0_SEL;
+ output [1:0] RXRECCLK1_SEL;
+ output [3:0] SDM0FINALOUT;
+ output [14:0] SDM0TESTDATA;
+ output [3:0] SDM1FINALOUT;
+ output [14:0] SDM1TESTDATA;
+ input BGBYPASSB;
+ input BGMONITORENB;
+ input BGPDB;
+ input [4:0] BGRCALOVRD;
+ input BGRCALOVRDENB;
+ input [9:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input GTGREFCLK0;
+ input GTGREFCLK1;
+ input GTNORTHREFCLK00;
+ input GTNORTHREFCLK01;
+ input GTNORTHREFCLK10;
+ input GTNORTHREFCLK11;
+ input GTREFCLK00;
+ input GTREFCLK01;
+ input GTREFCLK10;
+ input GTREFCLK11;
+ input GTSOUTHREFCLK00;
+ input GTSOUTHREFCLK01;
+ input GTSOUTHREFCLK10;
+ input GTSOUTHREFCLK11;
+ input [7:0] PMARSVD0;
+ input [7:0] PMARSVD1;
+ input QPLL0CLKRSVD0;
+ input QPLL0LOCKDETCLK;
+ input QPLL0LOCKEN;
+ input QPLL0PD;
+ input [2:0] QPLL0REFCLKSEL;
+ input QPLL0RESET;
+ input QPLL1CLKRSVD0;
+ input QPLL1LOCKDETCLK;
+ input QPLL1LOCKEN;
+ input QPLL1PD;
+ input [2:0] QPLL1REFCLKSEL;
+ input QPLL1RESET;
+ input [7:0] QPLLRSVD1;
+ input [4:0] QPLLRSVD2;
+ input [4:0] QPLLRSVD3;
+ input [7:0] QPLLRSVD4;
+ input RCALENB;
+ input [24:0] SDM0DATA;
+ input SDM0RESET;
+ input [1:0] SDM0WIDTH;
+ input [24:0] SDM1DATA;
+ input SDM1RESET;
+ input [1:0] SDM1WIDTH;
+endmodule
+
+module GTYE4_CHANNEL (...);
+ parameter [0:0] ACJTAG_DEBUG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_MODE = 1'b0;
+ parameter [0:0] ACJTAG_RESET = 1'b0;
+ parameter [15:0] ADAPT_CFG0 = 16'h9200;
+ parameter [15:0] ADAPT_CFG1 = 16'h801C;
+ parameter [15:0] ADAPT_CFG2 = 16'h0000;
+ parameter ALIGN_COMMA_DOUBLE = "FALSE";
+ parameter [9:0] ALIGN_COMMA_ENABLE = 10'b0001111111;
+ parameter integer ALIGN_COMMA_WORD = 1;
+ parameter ALIGN_MCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_MCOMMA_VALUE = 10'b1010000011;
+ parameter ALIGN_PCOMMA_DET = "TRUE";
+ parameter [9:0] ALIGN_PCOMMA_VALUE = 10'b0101111100;
+ parameter [0:0] A_RXOSCALRESET = 1'b0;
+ parameter [0:0] A_RXPROGDIVRESET = 1'b0;
+ parameter [0:0] A_RXTERMINATION = 1'b1;
+ parameter [4:0] A_TXDIFFCTRL = 5'b01100;
+ parameter [0:0] A_TXPROGDIVRESET = 1'b0;
+ parameter CBCC_DATA_SOURCE_SEL = "DECODED";
+ parameter [0:0] CDR_SWAP_MODE_EN = 1'b0;
+ parameter [0:0] CFOK_PWRSVE_EN = 1'b1;
+ parameter CHAN_BOND_KEEP_ALIGN = "FALSE";
+ parameter integer CHAN_BOND_MAX_SKEW = 7;
+ parameter [9:0] CHAN_BOND_SEQ_1_1 = 10'b0101111100;
+ parameter [9:0] CHAN_BOND_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CHAN_BOND_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CHAN_BOND_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CHAN_BOND_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CHAN_BOND_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CHAN_BOND_SEQ_2_ENABLE = 4'b1111;
+ parameter CHAN_BOND_SEQ_2_USE = "FALSE";
+ parameter integer CHAN_BOND_SEQ_LEN = 2;
+ parameter [15:0] CH_HSPMUX = 16'h2424;
+ parameter [15:0] CKCAL1_CFG_0 = 16'b1100000011000000;
+ parameter [15:0] CKCAL1_CFG_1 = 16'b0101000011000000;
+ parameter [15:0] CKCAL1_CFG_2 = 16'b0000000000000000;
+ parameter [15:0] CKCAL1_CFG_3 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_0 = 16'b1100000011000000;
+ parameter [15:0] CKCAL2_CFG_1 = 16'b1000000011000000;
+ parameter [15:0] CKCAL2_CFG_2 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_3 = 16'b0000000000000000;
+ parameter [15:0] CKCAL2_CFG_4 = 16'b0000000000000000;
+ parameter CLK_CORRECT_USE = "TRUE";
+ parameter CLK_COR_KEEP_IDLE = "FALSE";
+ parameter integer CLK_COR_MAX_LAT = 20;
+ parameter integer CLK_COR_MIN_LAT = 18;
+ parameter CLK_COR_PRECEDENCE = "TRUE";
+ parameter integer CLK_COR_REPEAT_WAIT = 0;
+ parameter [9:0] CLK_COR_SEQ_1_1 = 10'b0100011100;
+ parameter [9:0] CLK_COR_SEQ_1_2 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_3 = 10'b0000000000;
+ parameter [9:0] CLK_COR_SEQ_1_4 = 10'b0000000000;
+ parameter [3:0] CLK_COR_SEQ_1_ENABLE = 4'b1111;
+ parameter [9:0] CLK_COR_SEQ_2_1 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_2 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_3 = 10'b0100000000;
+ parameter [9:0] CLK_COR_SEQ_2_4 = 10'b0100000000;
+ parameter [3:0] CLK_COR_SEQ_2_ENABLE = 4'b1111;
+ parameter CLK_COR_SEQ_2_USE = "FALSE";
+ parameter integer CLK_COR_SEQ_LEN = 2;
+ parameter [15:0] CPLL_CFG0 = 16'h01FA;
+ parameter [15:0] CPLL_CFG1 = 16'h24A9;
+ parameter [15:0] CPLL_CFG2 = 16'h6807;
+ parameter [15:0] CPLL_CFG3 = 16'h0000;
+ parameter integer CPLL_FBDIV = 4;
+ parameter integer CPLL_FBDIV_45 = 4;
+ parameter [15:0] CPLL_INIT_CFG0 = 16'h001E;
+ parameter [15:0] CPLL_LOCK_CFG = 16'h01E8;
+ parameter integer CPLL_REFCLK_DIV = 1;
+ parameter [2:0] CTLE3_OCAP_EXT_CTRL = 3'b000;
+ parameter [0:0] CTLE3_OCAP_EXT_EN = 1'b0;
+ parameter [1:0] DDI_CTRL = 2'b00;
+ parameter integer DDI_REALIGN_WAIT = 15;
+ parameter DEC_MCOMMA_DETECT = "TRUE";
+ parameter DEC_PCOMMA_DETECT = "TRUE";
+ parameter DEC_VALID_COMMA_ONLY = "TRUE";
+ parameter [0:0] DELAY_ELEC = 1'b0;
+ parameter [9:0] DMONITOR_CFG0 = 10'h000;
+ parameter [7:0] DMONITOR_CFG1 = 8'h00;
+ parameter [0:0] ES_CLK_PHASE_SEL = 1'b0;
+ parameter [5:0] ES_CONTROL = 6'b000000;
+ parameter ES_ERRDET_EN = "FALSE";
+ parameter ES_EYE_SCAN_EN = "FALSE";
+ parameter [11:0] ES_HORZ_OFFSET = 12'h800;
+ parameter [4:0] ES_PRESCALE = 5'b00000;
+ parameter [15:0] ES_QUALIFIER0 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER1 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER2 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER3 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER4 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER5 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER6 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER7 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER8 = 16'h0000;
+ parameter [15:0] ES_QUALIFIER9 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK0 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK1 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK2 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK3 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK4 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK5 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK6 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK7 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK8 = 16'h0000;
+ parameter [15:0] ES_QUAL_MASK9 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK0 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK1 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK2 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK3 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK4 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK5 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK6 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK7 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK8 = 16'h0000;
+ parameter [15:0] ES_SDATA_MASK9 = 16'h0000;
+ parameter integer EYESCAN_VP_RANGE = 0;
+ parameter [0:0] EYE_SCAN_SWAP_EN = 1'b0;
+ parameter [3:0] FTS_DESKEW_SEQ_ENABLE = 4'b1111;
+ parameter [3:0] FTS_LANE_DESKEW_CFG = 4'b1111;
+ parameter FTS_LANE_DESKEW_EN = "FALSE";
+ parameter [4:0] GEARBOX_MODE = 5'b00000;
+ parameter [0:0] ISCAN_CK_PH_SEL2 = 1'b0;
+ parameter [0:0] LOCAL_MASTER = 1'b0;
+ parameter integer LPBK_BIAS_CTRL = 4;
+ parameter [0:0] LPBK_EN_RCAL_B = 1'b0;
+ parameter [3:0] LPBK_EXT_RCAL = 4'b0000;
+ parameter integer LPBK_IND_CTRL0 = 5;
+ parameter integer LPBK_IND_CTRL1 = 5;
+ parameter integer LPBK_IND_CTRL2 = 5;
+ parameter integer LPBK_RG_CTRL = 2;
+ parameter [1:0] OOBDIVCTL = 2'b00;
+ parameter [0:0] OOB_PWRUP = 1'b0;
+ parameter PCI3_AUTO_REALIGN = "FRST_SMPL";
+ parameter [0:0] PCI3_PIPE_RX_ELECIDLE = 1'b1;
+ parameter [1:0] PCI3_RX_ASYNC_EBUF_BYPASS = 2'b00;
+ parameter [0:0] PCI3_RX_ELECIDLE_EI2_ENABLE = 1'b0;
+ parameter [5:0] PCI3_RX_ELECIDLE_H2L_COUNT = 6'b000000;
+ parameter [2:0] PCI3_RX_ELECIDLE_H2L_DISABLE = 3'b000;
+ parameter [5:0] PCI3_RX_ELECIDLE_HI_COUNT = 6'b000000;
+ parameter [0:0] PCI3_RX_ELECIDLE_LP4_DISABLE = 1'b0;
+ parameter [0:0] PCI3_RX_FIFO_DISABLE = 1'b0;
+ parameter [4:0] PCIE3_CLK_COR_EMPTY_THRSH = 5'b00000;
+ parameter [5:0] PCIE3_CLK_COR_FULL_THRSH = 6'b010000;
+ parameter [4:0] PCIE3_CLK_COR_MAX_LAT = 5'b01000;
+ parameter [4:0] PCIE3_CLK_COR_MIN_LAT = 5'b00100;
+ parameter [5:0] PCIE3_CLK_COR_THRSH_TIMER = 6'b001000;
+ parameter PCIE_64B_DYN_CLKSW_DIS = "FALSE";
+ parameter [15:0] PCIE_BUFG_DIV_CTRL = 16'h0000;
+ parameter PCIE_GEN4_64BIT_INT_EN = "FALSE";
+ parameter [1:0] PCIE_PLL_SEL_MODE_GEN12 = 2'h0;
+ parameter [1:0] PCIE_PLL_SEL_MODE_GEN3 = 2'h0;
+ parameter [1:0] PCIE_PLL_SEL_MODE_GEN4 = 2'h0;
+ parameter [15:0] PCIE_RXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_RXPMA_CFG = 16'h0000;
+ parameter [15:0] PCIE_TXPCS_CFG_GEN3 = 16'h0000;
+ parameter [15:0] PCIE_TXPMA_CFG = 16'h0000;
+ parameter PCS_PCIE_EN = "FALSE";
+ parameter [15:0] PCS_RSVD0 = 16'h0000;
+ parameter [11:0] PD_TRANS_TIME_FROM_P2 = 12'h03C;
+ parameter [7:0] PD_TRANS_TIME_NONE_P2 = 8'h19;
+ parameter [7:0] PD_TRANS_TIME_TO_P2 = 8'h64;
+ parameter integer PREIQ_FREQ_BST = 0;
+ parameter [0:0] RATE_SW_USE_DRP = 1'b0;
+ parameter [0:0] RCLK_SIPO_DLY_ENB = 1'b0;
+ parameter [0:0] RCLK_SIPO_INV_EN = 1'b0;
+ parameter [2:0] RTX_BUF_CML_CTRL = 3'b010;
+ parameter [1:0] RTX_BUF_TERM_CTRL = 2'b00;
+ parameter [4:0] RXBUFRESET_TIME = 5'b00001;
+ parameter RXBUF_ADDR_MODE = "FULL";
+ parameter [3:0] RXBUF_EIDLE_HI_CNT = 4'b1000;
+ parameter [3:0] RXBUF_EIDLE_LO_CNT = 4'b0000;
+ parameter RXBUF_EN = "TRUE";
+ parameter RXBUF_RESET_ON_CB_CHANGE = "TRUE";
+ parameter RXBUF_RESET_ON_COMMAALIGN = "FALSE";
+ parameter RXBUF_RESET_ON_EIDLE = "FALSE";
+ parameter RXBUF_RESET_ON_RATE_CHANGE = "TRUE";
+ parameter integer RXBUF_THRESH_OVFLW = 0;
+ parameter RXBUF_THRESH_OVRD = "FALSE";
+ parameter integer RXBUF_THRESH_UNDFLW = 4;
+ parameter [4:0] RXCDRFREQRESET_TIME = 5'b10000;
+ parameter [4:0] RXCDRPHRESET_TIME = 5'b00001;
+ parameter [15:0] RXCDR_CFG0 = 16'h0003;
+ parameter [15:0] RXCDR_CFG0_GEN3 = 16'h0003;
+ parameter [15:0] RXCDR_CFG1 = 16'h0000;
+ parameter [15:0] RXCDR_CFG1_GEN3 = 16'h0000;
+ parameter [15:0] RXCDR_CFG2 = 16'h0164;
+ parameter [9:0] RXCDR_CFG2_GEN2 = 10'h164;
+ parameter [15:0] RXCDR_CFG2_GEN3 = 16'h0034;
+ parameter [15:0] RXCDR_CFG2_GEN4 = 16'h0034;
+ parameter [15:0] RXCDR_CFG3 = 16'h0024;
+ parameter [5:0] RXCDR_CFG3_GEN2 = 6'h24;
+ parameter [15:0] RXCDR_CFG3_GEN3 = 16'h0024;
+ parameter [15:0] RXCDR_CFG3_GEN4 = 16'h0024;
+ parameter [15:0] RXCDR_CFG4 = 16'h5CF6;
+ parameter [15:0] RXCDR_CFG4_GEN3 = 16'h5CF6;
+ parameter [15:0] RXCDR_CFG5 = 16'hB46B;
+ parameter [15:0] RXCDR_CFG5_GEN3 = 16'h146B;
+ parameter [0:0] RXCDR_FR_RESET_ON_EIDLE = 1'b0;
+ parameter [0:0] RXCDR_HOLD_DURING_EIDLE = 1'b0;
+ parameter [15:0] RXCDR_LOCK_CFG0 = 16'h0040;
+ parameter [15:0] RXCDR_LOCK_CFG1 = 16'h8000;
+ parameter [15:0] RXCDR_LOCK_CFG2 = 16'h0000;
+ parameter [15:0] RXCDR_LOCK_CFG3 = 16'h0000;
+ parameter [15:0] RXCDR_LOCK_CFG4 = 16'h0000;
+ parameter [0:0] RXCDR_PH_RESET_ON_EIDLE = 1'b0;
+ parameter [15:0] RXCFOK_CFG0 = 16'h0000;
+ parameter [15:0] RXCFOK_CFG1 = 16'h0002;
+ parameter [15:0] RXCFOK_CFG2 = 16'h002D;
+ parameter [15:0] RXCKCAL1_IQ_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL1_I_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL1_Q_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_DX_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_D_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_S_LOOP_RST_CFG = 16'h0000;
+ parameter [15:0] RXCKCAL2_X_LOOP_RST_CFG = 16'h0000;
+ parameter [6:0] RXDFELPMRESET_TIME = 7'b0001111;
+ parameter [15:0] RXDFELPM_KL_CFG0 = 16'h0000;
+ parameter [15:0] RXDFELPM_KL_CFG1 = 16'h0022;
+ parameter [15:0] RXDFELPM_KL_CFG2 = 16'h0100;
+ parameter [15:0] RXDFE_CFG0 = 16'h4000;
+ parameter [15:0] RXDFE_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_GC_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H2_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H3_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H3_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H4_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H4_CFG1 = 16'h0003;
+ parameter [15:0] RXDFE_H5_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H5_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H6_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H6_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H7_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H7_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H8_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H8_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_H9_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_H9_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HA_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HA_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HB_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HB_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HC_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HC_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HD_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HD_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HE_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HE_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_HF_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_HF_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_KH_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_KH_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_KH_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_KH_CFG3 = 16'h0000;
+ parameter [15:0] RXDFE_OS_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_OS_CFG1 = 16'h0000;
+ parameter [15:0] RXDFE_UT_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_UT_CFG1 = 16'h0002;
+ parameter [15:0] RXDFE_UT_CFG2 = 16'h0000;
+ parameter [15:0] RXDFE_VP_CFG0 = 16'h0000;
+ parameter [15:0] RXDFE_VP_CFG1 = 16'h0022;
+ parameter [15:0] RXDLY_CFG = 16'h0010;
+ parameter [15:0] RXDLY_LCFG = 16'h0030;
+ parameter RXELECIDLE_CFG = "SIGCFG_4";
+ parameter integer RXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter RXGEARBOX_EN = "FALSE";
+ parameter [4:0] RXISCANRESET_TIME = 5'b00001;
+ parameter [15:0] RXLPM_CFG = 16'h0000;
+ parameter [15:0] RXLPM_GC_CFG = 16'h1000;
+ parameter [15:0] RXLPM_KH_CFG0 = 16'h0000;
+ parameter [15:0] RXLPM_KH_CFG1 = 16'h0002;
+ parameter [15:0] RXLPM_OS_CFG0 = 16'h0000;
+ parameter [15:0] RXLPM_OS_CFG1 = 16'h0000;
+ parameter [8:0] RXOOB_CFG = 9'b000110000;
+ parameter RXOOB_CLK_CFG = "PMA";
+ parameter [4:0] RXOSCALRESET_TIME = 5'b00011;
+ parameter integer RXOUT_DIV = 4;
+ parameter [4:0] RXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] RXPHBEACON_CFG = 16'h0000;
+ parameter [15:0] RXPHDLY_CFG = 16'h2020;
+ parameter [15:0] RXPHSAMP_CFG = 16'h2100;
+ parameter [15:0] RXPHSLIP_CFG = 16'h9933;
+ parameter [4:0] RXPH_MONITOR_SEL = 5'b00000;
+ parameter [15:0] RXPI_CFG0 = 16'h0102;
+ parameter [15:0] RXPI_CFG1 = 16'b0000000001010100;
+ parameter RXPMACLK_SEL = "DATA";
+ parameter [4:0] RXPMARESET_TIME = 5'b00001;
+ parameter [0:0] RXPRBS_ERR_LOOPBACK = 1'b0;
+ parameter integer RXPRBS_LINKACQ_CNT = 15;
+ parameter [0:0] RXREFCLKDIV2_SEL = 1'b0;
+ parameter integer RXSLIDE_AUTO_WAIT = 7;
+ parameter RXSLIDE_MODE = "OFF";
+ parameter [0:0] RXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] RXSYNC_OVRD = 1'b0;
+ parameter [0:0] RXSYNC_SKIP_DA = 1'b0;
+ parameter [0:0] RX_AFE_CM_EN = 1'b0;
+ parameter [15:0] RX_BIAS_CFG0 = 16'h12B0;
+ parameter [5:0] RX_BUFFER_CFG = 6'b000000;
+ parameter [0:0] RX_CAPFF_SARC_ENB = 1'b0;
+ parameter integer RX_CLK25_DIV = 8;
+ parameter [0:0] RX_CLKMUX_EN = 1'b1;
+ parameter [4:0] RX_CLK_SLIP_OVRD = 5'b00000;
+ parameter [3:0] RX_CM_BUF_CFG = 4'b1010;
+ parameter [0:0] RX_CM_BUF_PD = 1'b0;
+ parameter integer RX_CM_SEL = 3;
+ parameter integer RX_CM_TRIM = 12;
+ parameter [0:0] RX_CTLE_PWR_SAVING = 1'b0;
+ parameter [3:0] RX_CTLE_RES_CTRL = 4'b0000;
+ parameter integer RX_DATA_WIDTH = 20;
+ parameter [5:0] RX_DDI_SEL = 6'b000000;
+ parameter RX_DEFER_RESET_BUF_EN = "TRUE";
+ parameter [2:0] RX_DEGEN_CTRL = 3'b100;
+ parameter integer RX_DFELPM_CFG0 = 0;
+ parameter [0:0] RX_DFELPM_CFG1 = 1'b1;
+ parameter [0:0] RX_DFELPM_KLKH_AGC_STUP_EN = 1'b1;
+ parameter integer RX_DFE_AGC_CFG1 = 4;
+ parameter integer RX_DFE_KL_LPM_KH_CFG0 = 1;
+ parameter integer RX_DFE_KL_LPM_KH_CFG1 = 4;
+ parameter [1:0] RX_DFE_KL_LPM_KL_CFG0 = 2'b01;
+ parameter integer RX_DFE_KL_LPM_KL_CFG1 = 4;
+ parameter [0:0] RX_DFE_LPM_HOLD_DURING_EIDLE = 1'b0;
+ parameter RX_DISPERR_SEQ_MATCH = "TRUE";
+ parameter [4:0] RX_DIVRESET_TIME = 5'b00001;
+ parameter [0:0] RX_EN_CTLE_RCAL_B = 1'b0;
+ parameter integer RX_EN_SUM_RCAL_B = 0;
+ parameter [6:0] RX_EYESCAN_VS_CODE = 7'b0000000;
+ parameter [0:0] RX_EYESCAN_VS_NEG_DIR = 1'b0;
+ parameter [1:0] RX_EYESCAN_VS_RANGE = 2'b10;
+ parameter [0:0] RX_EYESCAN_VS_UT_SIGN = 1'b0;
+ parameter [0:0] RX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter [0:0] RX_I2V_FILTER_EN = 1'b1;
+ parameter integer RX_INT_DATAWIDTH = 1;
+ parameter [0:0] RX_PMA_POWER_SAVE = 1'b0;
+ parameter [15:0] RX_PMA_RSV0 = 16'h000F;
+ parameter real RX_PROGDIV_CFG = 0.0;
+ parameter [15:0] RX_PROGDIV_RATE = 16'h0001;
+ parameter [3:0] RX_RESLOAD_CTRL = 4'b0000;
+ parameter [0:0] RX_RESLOAD_OVRD = 1'b0;
+ parameter [2:0] RX_SAMPLE_PERIOD = 3'b101;
+ parameter integer RX_SIG_VALID_DLY = 11;
+ parameter integer RX_SUM_DEGEN_AVTT_OVERITE = 0;
+ parameter [0:0] RX_SUM_DFETAPREP_EN = 1'b0;
+ parameter [3:0] RX_SUM_IREF_TUNE = 4'b0000;
+ parameter integer RX_SUM_PWR_SAVING = 0;
+ parameter [3:0] RX_SUM_RES_CTRL = 4'b0000;
+ parameter [3:0] RX_SUM_VCMTUNE = 4'b0011;
+ parameter [0:0] RX_SUM_VCM_BIAS_TUNE_EN = 1'b1;
+ parameter [0:0] RX_SUM_VCM_OVWR = 1'b0;
+ parameter [2:0] RX_SUM_VREF_TUNE = 3'b100;
+ parameter [1:0] RX_TUNE_AFE_OS = 2'b00;
+ parameter [2:0] RX_VREG_CTRL = 3'b010;
+ parameter [0:0] RX_VREG_PDB = 1'b1;
+ parameter [1:0] RX_WIDEMODE_CDR = 2'b01;
+ parameter [1:0] RX_WIDEMODE_CDR_GEN3 = 2'b01;
+ parameter [1:0] RX_WIDEMODE_CDR_GEN4 = 2'b01;
+ parameter RX_XCLK_SEL = "RXDES";
+ parameter [0:0] RX_XMODE_SEL = 1'b0;
+ parameter [0:0] SAMPLE_CLK_PHASE = 1'b0;
+ parameter [0:0] SAS_12G_MODE = 1'b0;
+ parameter [3:0] SATA_BURST_SEQ_LEN = 4'b1111;
+ parameter [2:0] SATA_BURST_VAL = 3'b100;
+ parameter SATA_CPLL_CFG = "VCO_3000MHZ";
+ parameter [2:0] SATA_EIDLE_VAL = 3'b100;
+ parameter SHOW_REALIGN_COMMA = "TRUE";
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RECEIVER_DETECT_PASS = "TRUE";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter SIM_TX_EIDLE_DRIVE_LEVEL = "Z";
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter [0:0] SRSTMODE = 1'b0;
+ parameter [1:0] TAPDLY_SET_TX = 2'h0;
+ parameter [14:0] TERM_RCAL_CFG = 15'b100001000010000;
+ parameter [2:0] TERM_RCAL_OVRD = 3'b000;
+ parameter [7:0] TRANS_TIME_RATE = 8'h0E;
+ parameter [7:0] TST_RSV0 = 8'h00;
+ parameter [7:0] TST_RSV1 = 8'h00;
+ parameter TXBUF_EN = "TRUE";
+ parameter TXBUF_RESET_ON_RATE_CHANGE = "FALSE";
+ parameter [15:0] TXDLY_CFG = 16'h0010;
+ parameter [15:0] TXDLY_LCFG = 16'h0030;
+ parameter integer TXDRV_FREQBAND = 0;
+ parameter [15:0] TXFE_CFG0 = 16'b0000000000000000;
+ parameter [15:0] TXFE_CFG1 = 16'b0000000000000000;
+ parameter [15:0] TXFE_CFG2 = 16'b0000000000000000;
+ parameter [15:0] TXFE_CFG3 = 16'b0000000000000000;
+ parameter TXFIFO_ADDR_CFG = "LOW";
+ parameter integer TXGBOX_FIFO_INIT_RD_ADDR = 4;
+ parameter TXGEARBOX_EN = "FALSE";
+ parameter integer TXOUT_DIV = 4;
+ parameter [4:0] TXPCSRESET_TIME = 5'b00001;
+ parameter [15:0] TXPHDLY_CFG0 = 16'h6020;
+ parameter [15:0] TXPHDLY_CFG1 = 16'h0002;
+ parameter [15:0] TXPH_CFG = 16'h0123;
+ parameter [15:0] TXPH_CFG2 = 16'h0000;
+ parameter [4:0] TXPH_MONITOR_SEL = 5'b00000;
+ parameter [15:0] TXPI_CFG0 = 16'b0000000100000000;
+ parameter [15:0] TXPI_CFG1 = 16'b0000000000000000;
+ parameter [0:0] TXPI_GRAY_SEL = 1'b0;
+ parameter [0:0] TXPI_INVSTROBE_SEL = 1'b0;
+ parameter [0:0] TXPI_PPM = 1'b0;
+ parameter [7:0] TXPI_PPM_CFG = 8'b00000000;
+ parameter [2:0] TXPI_SYNFREQ_PPM = 3'b000;
+ parameter [4:0] TXPMARESET_TIME = 5'b00001;
+ parameter [0:0] TXREFCLKDIV2_SEL = 1'b0;
+ parameter integer TXSWBST_BST = 1;
+ parameter integer TXSWBST_EN = 0;
+ parameter integer TXSWBST_MAG = 6;
+ parameter [0:0] TXSYNC_MULTILANE = 1'b0;
+ parameter [0:0] TXSYNC_OVRD = 1'b0;
+ parameter [0:0] TXSYNC_SKIP_DA = 1'b0;
+ parameter integer TX_CLK25_DIV = 8;
+ parameter [0:0] TX_CLKMUX_EN = 1'b1;
+ parameter integer TX_DATA_WIDTH = 20;
+ parameter [15:0] TX_DCC_LOOP_RST_CFG = 16'h0000;
+ parameter [5:0] TX_DEEMPH0 = 6'b000000;
+ parameter [5:0] TX_DEEMPH1 = 6'b000000;
+ parameter [5:0] TX_DEEMPH2 = 6'b000000;
+ parameter [5:0] TX_DEEMPH3 = 6'b000000;
+ parameter [4:0] TX_DIVRESET_TIME = 5'b00001;
+ parameter TX_DRIVE_MODE = "DIRECT";
+ parameter [2:0] TX_EIDLE_ASSERT_DELAY = 3'b110;
+ parameter [2:0] TX_EIDLE_DEASSERT_DELAY = 3'b100;
+ parameter [0:0] TX_FABINT_USRCLK_FLOP = 1'b0;
+ parameter [0:0] TX_FIFO_BYP_EN = 1'b0;
+ parameter [0:0] TX_IDLE_DATA_ZERO = 1'b0;
+ parameter integer TX_INT_DATAWIDTH = 1;
+ parameter TX_LOOPBACK_DRIVE_HIZ = "FALSE";
+ parameter [0:0] TX_MAINCURSOR_SEL = 1'b0;
+ parameter [6:0] TX_MARGIN_FULL_0 = 7'b1001110;
+ parameter [6:0] TX_MARGIN_FULL_1 = 7'b1001001;
+ parameter [6:0] TX_MARGIN_FULL_2 = 7'b1000101;
+ parameter [6:0] TX_MARGIN_FULL_3 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_FULL_4 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_0 = 7'b1000110;
+ parameter [6:0] TX_MARGIN_LOW_1 = 7'b1000100;
+ parameter [6:0] TX_MARGIN_LOW_2 = 7'b1000010;
+ parameter [6:0] TX_MARGIN_LOW_3 = 7'b1000000;
+ parameter [6:0] TX_MARGIN_LOW_4 = 7'b1000000;
+ parameter [15:0] TX_PHICAL_CFG0 = 16'h0000;
+ parameter [15:0] TX_PHICAL_CFG1 = 16'h003F;
+ parameter integer TX_PI_BIASSET = 0;
+ parameter [0:0] TX_PMADATA_OPT = 1'b0;
+ parameter [0:0] TX_PMA_POWER_SAVE = 1'b0;
+ parameter [15:0] TX_PMA_RSV0 = 16'h0000;
+ parameter [15:0] TX_PMA_RSV1 = 16'h0000;
+ parameter TX_PROGCLK_SEL = "POSTPI";
+ parameter real TX_PROGDIV_CFG = 0.0;
+ parameter [15:0] TX_PROGDIV_RATE = 16'h0001;
+ parameter [13:0] TX_RXDETECT_CFG = 14'h0032;
+ parameter integer TX_RXDETECT_REF = 3;
+ parameter [2:0] TX_SAMPLE_PERIOD = 3'b101;
+ parameter [1:0] TX_SW_MEAS = 2'b00;
+ parameter [2:0] TX_VREG_CTRL = 3'b000;
+ parameter [0:0] TX_VREG_PDB = 1'b0;
+ parameter [1:0] TX_VREG_VREFSEL = 2'b00;
+ parameter TX_XCLK_SEL = "TXOUT";
+ parameter [0:0] USB_BOTH_BURST_IDLE = 1'b0;
+ parameter [6:0] USB_BURSTMAX_U3WAKE = 7'b1111111;
+ parameter [6:0] USB_BURSTMIN_U3WAKE = 7'b1100011;
+ parameter [0:0] USB_CLK_COR_EQ_EN = 1'b0;
+ parameter [0:0] USB_EXT_CNTL = 1'b1;
+ parameter [9:0] USB_IDLEMAX_POLLING = 10'b1010111011;
+ parameter [9:0] USB_IDLEMIN_POLLING = 10'b0100101011;
+ parameter [8:0] USB_LFPSPING_BURST = 9'b000000101;
+ parameter [8:0] USB_LFPSPOLLING_BURST = 9'b000110001;
+ parameter [8:0] USB_LFPSPOLLING_IDLE_MS = 9'b000000100;
+ parameter [8:0] USB_LFPSU1EXIT_BURST = 9'b000011101;
+ parameter [8:0] USB_LFPSU2LPEXIT_BURST_MS = 9'b001100011;
+ parameter [8:0] USB_LFPSU3WAKE_BURST_MS = 9'b111110011;
+ parameter [3:0] USB_LFPS_TPERIOD = 4'b0011;
+ parameter [0:0] USB_LFPS_TPERIOD_ACCURATE = 1'b1;
+ parameter [0:0] USB_MODE = 1'b0;
+ parameter [0:0] USB_PCIE_ERR_REP_DIS = 1'b0;
+ parameter integer USB_PING_SATA_MAX_INIT = 21;
+ parameter integer USB_PING_SATA_MIN_INIT = 12;
+ parameter integer USB_POLL_SATA_MAX_BURST = 8;
+ parameter integer USB_POLL_SATA_MIN_BURST = 4;
+ parameter [0:0] USB_RAW_ELEC = 1'b0;
+ parameter [0:0] USB_RXIDLE_P0_CTRL = 1'b1;
+ parameter [0:0] USB_TXIDLE_TUNE_ENABLE = 1'b1;
+ parameter integer USB_U1_SATA_MAX_WAKE = 7;
+ parameter integer USB_U1_SATA_MIN_WAKE = 4;
+ parameter integer USB_U2_SAS_MAX_COM = 64;
+ parameter integer USB_U2_SAS_MIN_COM = 36;
+ parameter [0:0] USE_PCS_CLK_PHASE_SEL = 1'b0;
+ parameter [0:0] Y_ALL_MODE = 1'b0;
+ output BUFGTCE;
+ output [2:0] BUFGTCEMASK;
+ output [8:0] BUFGTDIV;
+ output BUFGTRESET;
+ output [2:0] BUFGTRSTMASK;
+ output CPLLFBCLKLOST;
+ output CPLLLOCK;
+ output CPLLREFCLKLOST;
+ output [15:0] DMONITOROUT;
+ output DMONITOROUTCLK;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output EYESCANDATAERROR;
+ output GTPOWERGOOD;
+ output GTREFCLKMONITOR;
+ output GTYTXN;
+ output GTYTXP;
+ output PCIERATEGEN3;
+ output PCIERATEIDLE;
+ output [1:0] PCIERATEQPLLPD;
+ output [1:0] PCIERATEQPLLRESET;
+ output PCIESYNCTXSYNCDONE;
+ output PCIEUSERGEN3RDY;
+ output PCIEUSERPHYSTATUSRST;
+ output PCIEUSERRATESTART;
+ output [15:0] PCSRSVDOUT;
+ output PHYSTATUS;
+ output [15:0] PINRSRVDAS;
+ output POWERPRESENT;
+ output RESETEXCEPTION;
+ output [2:0] RXBUFSTATUS;
+ output RXBYTEISALIGNED;
+ output RXBYTEREALIGN;
+ output RXCDRLOCK;
+ output RXCDRPHDONE;
+ output RXCHANBONDSEQ;
+ output RXCHANISALIGNED;
+ output RXCHANREALIGN;
+ output [4:0] RXCHBONDO;
+ output RXCKCALDONE;
+ output [1:0] RXCLKCORCNT;
+ output RXCOMINITDET;
+ output RXCOMMADET;
+ output RXCOMSASDET;
+ output RXCOMWAKEDET;
+ output [15:0] RXCTRL0;
+ output [15:0] RXCTRL1;
+ output [7:0] RXCTRL2;
+ output [7:0] RXCTRL3;
+ output [127:0] RXDATA;
+ output [7:0] RXDATAEXTENDRSVD;
+ output [1:0] RXDATAVALID;
+ output RXDLYSRESETDONE;
+ output RXELECIDLE;
+ output [5:0] RXHEADER;
+ output [1:0] RXHEADERVALID;
+ output RXLFPSTRESETDET;
+ output RXLFPSU2LPEXITDET;
+ output RXLFPSU3WAKEDET;
+ output [7:0] RXMONITOROUT;
+ output RXOSINTDONE;
+ output RXOSINTSTARTED;
+ output RXOSINTSTROBEDONE;
+ output RXOSINTSTROBESTARTED;
+ output RXOUTCLK;
+ output RXOUTCLKFABRIC;
+ output RXOUTCLKPCS;
+ output RXPHALIGNDONE;
+ output RXPHALIGNERR;
+ output RXPMARESETDONE;
+ output RXPRBSERR;
+ output RXPRBSLOCKED;
+ output RXPRGDIVRESETDONE;
+ output RXRATEDONE;
+ output RXRECCLKOUT;
+ output RXRESETDONE;
+ output RXSLIDERDY;
+ output RXSLIPDONE;
+ output RXSLIPOUTCLKRDY;
+ output RXSLIPPMARDY;
+ output [1:0] RXSTARTOFSEQ;
+ output [2:0] RXSTATUS;
+ output RXSYNCDONE;
+ output RXSYNCOUT;
+ output RXVALID;
+ output [1:0] TXBUFSTATUS;
+ output TXCOMFINISH;
+ output TXDCCDONE;
+ output TXDLYSRESETDONE;
+ output TXOUTCLK;
+ output TXOUTCLKFABRIC;
+ output TXOUTCLKPCS;
+ output TXPHALIGNDONE;
+ output TXPHINITDONE;
+ output TXPMARESETDONE;
+ output TXPRGDIVRESETDONE;
+ output TXRATEDONE;
+ output TXRESETDONE;
+ output TXSYNCDONE;
+ output TXSYNCOUT;
+ input CDRSTEPDIR;
+ input CDRSTEPSQ;
+ input CDRSTEPSX;
+ input CFGRESET;
+ input CLKRSVD0;
+ input CLKRSVD1;
+ input CPLLFREQLOCK;
+ input CPLLLOCKDETCLK;
+ input CPLLLOCKEN;
+ input CPLLPD;
+ input [2:0] CPLLREFCLKSEL;
+ input CPLLRESET;
+ input DMONFIFORESET;
+ input DMONITORCLK;
+ input [9:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPRST;
+ input DRPWE;
+ input EYESCANRESET;
+ input EYESCANTRIGGER;
+ input FREQOS;
+ input GTGREFCLK;
+ input GTNORTHREFCLK0;
+ input GTNORTHREFCLK1;
+ input GTREFCLK0;
+ input GTREFCLK1;
+ input [15:0] GTRSVD;
+ input GTRXRESET;
+ input GTRXRESETSEL;
+ input GTSOUTHREFCLK0;
+ input GTSOUTHREFCLK1;
+ input GTTXRESET;
+ input GTTXRESETSEL;
+ input GTYRXN;
+ input GTYRXP;
+ input INCPCTRL;
+ input [2:0] LOOPBACK;
+ input PCIEEQRXEQADAPTDONE;
+ input PCIERSTIDLE;
+ input PCIERSTTXSYNCSTART;
+ input PCIEUSERRATEDONE;
+ input [15:0] PCSRSVDIN;
+ input QPLL0CLK;
+ input QPLL0FREQLOCK;
+ input QPLL0REFCLK;
+ input QPLL1CLK;
+ input QPLL1FREQLOCK;
+ input QPLL1REFCLK;
+ input RESETOVRD;
+ input RX8B10BEN;
+ input RXAFECFOKEN;
+ input RXBUFRESET;
+ input RXCDRFREQRESET;
+ input RXCDRHOLD;
+ input RXCDROVRDEN;
+ input RXCDRRESET;
+ input RXCHBONDEN;
+ input [4:0] RXCHBONDI;
+ input [2:0] RXCHBONDLEVEL;
+ input RXCHBONDMASTER;
+ input RXCHBONDSLAVE;
+ input RXCKCALRESET;
+ input [6:0] RXCKCALSTART;
+ input RXCOMMADETEN;
+ input RXDFEAGCHOLD;
+ input RXDFEAGCOVRDEN;
+ input [3:0] RXDFECFOKFCNUM;
+ input RXDFECFOKFEN;
+ input RXDFECFOKFPULSE;
+ input RXDFECFOKHOLD;
+ input RXDFECFOKOVREN;
+ input RXDFEKHHOLD;
+ input RXDFEKHOVRDEN;
+ input RXDFELFHOLD;
+ input RXDFELFOVRDEN;
+ input RXDFELPMRESET;
+ input RXDFETAP10HOLD;
+ input RXDFETAP10OVRDEN;
+ input RXDFETAP11HOLD;
+ input RXDFETAP11OVRDEN;
+ input RXDFETAP12HOLD;
+ input RXDFETAP12OVRDEN;
+ input RXDFETAP13HOLD;
+ input RXDFETAP13OVRDEN;
+ input RXDFETAP14HOLD;
+ input RXDFETAP14OVRDEN;
+ input RXDFETAP15HOLD;
+ input RXDFETAP15OVRDEN;
+ input RXDFETAP2HOLD;
+ input RXDFETAP2OVRDEN;
+ input RXDFETAP3HOLD;
+ input RXDFETAP3OVRDEN;
+ input RXDFETAP4HOLD;
+ input RXDFETAP4OVRDEN;
+ input RXDFETAP5HOLD;
+ input RXDFETAP5OVRDEN;
+ input RXDFETAP6HOLD;
+ input RXDFETAP6OVRDEN;
+ input RXDFETAP7HOLD;
+ input RXDFETAP7OVRDEN;
+ input RXDFETAP8HOLD;
+ input RXDFETAP8OVRDEN;
+ input RXDFETAP9HOLD;
+ input RXDFETAP9OVRDEN;
+ input RXDFEUTHOLD;
+ input RXDFEUTOVRDEN;
+ input RXDFEVPHOLD;
+ input RXDFEVPOVRDEN;
+ input RXDFEXYDEN;
+ input RXDLYBYPASS;
+ input RXDLYEN;
+ input RXDLYOVRDEN;
+ input RXDLYSRESET;
+ input [1:0] RXELECIDLEMODE;
+ input RXEQTRAINING;
+ input RXGEARBOXSLIP;
+ input RXLATCLK;
+ input RXLPMEN;
+ input RXLPMGCHOLD;
+ input RXLPMGCOVRDEN;
+ input RXLPMHFHOLD;
+ input RXLPMHFOVRDEN;
+ input RXLPMLFHOLD;
+ input RXLPMLFKLOVRDEN;
+ input RXLPMOSHOLD;
+ input RXLPMOSOVRDEN;
+ input RXMCOMMAALIGNEN;
+ input [1:0] RXMONITORSEL;
+ input RXOOBRESET;
+ input RXOSCALRESET;
+ input RXOSHOLD;
+ input RXOSOVRDEN;
+ input [2:0] RXOUTCLKSEL;
+ input RXPCOMMAALIGNEN;
+ input RXPCSRESET;
+ input [1:0] RXPD;
+ input RXPHALIGN;
+ input RXPHALIGNEN;
+ input RXPHDLYPD;
+ input RXPHDLYRESET;
+ input [1:0] RXPLLCLKSEL;
+ input RXPMARESET;
+ input RXPOLARITY;
+ input RXPRBSCNTRESET;
+ input [3:0] RXPRBSSEL;
+ input RXPROGDIVRESET;
+ input [2:0] RXRATE;
+ input RXRATEMODE;
+ input RXSLIDE;
+ input RXSLIPOUTCLK;
+ input RXSLIPPMA;
+ input RXSYNCALLIN;
+ input RXSYNCIN;
+ input RXSYNCMODE;
+ input [1:0] RXSYSCLKSEL;
+ input RXTERMINATION;
+ input RXUSERRDY;
+ input RXUSRCLK;
+ input RXUSRCLK2;
+ input SIGVALIDCLK;
+ input [19:0] TSTIN;
+ input [7:0] TX8B10BBYPASS;
+ input TX8B10BEN;
+ input TXCOMINIT;
+ input TXCOMSAS;
+ input TXCOMWAKE;
+ input [15:0] TXCTRL0;
+ input [15:0] TXCTRL1;
+ input [7:0] TXCTRL2;
+ input [127:0] TXDATA;
+ input [7:0] TXDATAEXTENDRSVD;
+ input TXDCCFORCESTART;
+ input TXDCCRESET;
+ input [1:0] TXDEEMPH;
+ input TXDETECTRX;
+ input [4:0] TXDIFFCTRL;
+ input TXDLYBYPASS;
+ input TXDLYEN;
+ input TXDLYHOLD;
+ input TXDLYOVRDEN;
+ input TXDLYSRESET;
+ input TXDLYUPDOWN;
+ input TXELECIDLE;
+ input [5:0] TXHEADER;
+ input TXINHIBIT;
+ input TXLATCLK;
+ input TXLFPSTRESET;
+ input TXLFPSU2LPEXIT;
+ input TXLFPSU3WAKE;
+ input [6:0] TXMAINCURSOR;
+ input [2:0] TXMARGIN;
+ input TXMUXDCDEXHOLD;
+ input TXMUXDCDORWREN;
+ input TXONESZEROS;
+ input [2:0] TXOUTCLKSEL;
+ input TXPCSRESET;
+ input [1:0] TXPD;
+ input TXPDELECIDLEMODE;
+ input TXPHALIGN;
+ input TXPHALIGNEN;
+ input TXPHDLYPD;
+ input TXPHDLYRESET;
+ input TXPHDLYTSTCLK;
+ input TXPHINIT;
+ input TXPHOVRDEN;
+ input TXPIPPMEN;
+ input TXPIPPMOVRDEN;
+ input TXPIPPMPD;
+ input TXPIPPMSEL;
+ input [4:0] TXPIPPMSTEPSIZE;
+ input TXPISOPD;
+ input [1:0] TXPLLCLKSEL;
+ input TXPMARESET;
+ input TXPOLARITY;
+ input [4:0] TXPOSTCURSOR;
+ input TXPRBSFORCEERR;
+ input [3:0] TXPRBSSEL;
+ input [4:0] TXPRECURSOR;
+ input TXPROGDIVRESET;
+ input [2:0] TXRATE;
+ input TXRATEMODE;
+ input [6:0] TXSEQUENCE;
+ input TXSWING;
+ input TXSYNCALLIN;
+ input TXSYNCIN;
+ input TXSYNCMODE;
+ input [1:0] TXSYSCLKSEL;
+ input TXUSERRDY;
+ input TXUSRCLK;
+ input TXUSRCLK2;
+endmodule
+
+module GTYE4_COMMON (...);
+ parameter [0:0] AEN_QPLL0_FBDIV = 1'b1;
+ parameter [0:0] AEN_QPLL1_FBDIV = 1'b1;
+ parameter [0:0] AEN_SDM0TOGGLE = 1'b0;
+ parameter [0:0] AEN_SDM1TOGGLE = 1'b0;
+ parameter [0:0] A_SDM0TOGGLE = 1'b0;
+ parameter [8:0] A_SDM1DATA_HIGH = 9'b000000000;
+ parameter [15:0] A_SDM1DATA_LOW = 16'b0000000000000000;
+ parameter [0:0] A_SDM1TOGGLE = 1'b0;
+ parameter [15:0] BIAS_CFG0 = 16'h0000;
+ parameter [15:0] BIAS_CFG1 = 16'h0000;
+ parameter [15:0] BIAS_CFG2 = 16'h0000;
+ parameter [15:0] BIAS_CFG3 = 16'h0000;
+ parameter [15:0] BIAS_CFG4 = 16'h0000;
+ parameter [15:0] BIAS_CFG_RSVD = 16'h0000;
+ parameter [15:0] COMMON_CFG0 = 16'h0000;
+ parameter [15:0] COMMON_CFG1 = 16'h0000;
+ parameter [15:0] POR_CFG = 16'h0000;
+ parameter [15:0] PPF0_CFG = 16'h0F00;
+ parameter [15:0] PPF1_CFG = 16'h0F00;
+ parameter QPLL0CLKOUT_RATE = "FULL";
+ parameter [15:0] QPLL0_CFG0 = 16'h391C;
+ parameter [15:0] QPLL0_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL0_CFG2 = 16'h0F80;
+ parameter [15:0] QPLL0_CFG2_G3 = 16'h0F80;
+ parameter [15:0] QPLL0_CFG3 = 16'h0120;
+ parameter [15:0] QPLL0_CFG4 = 16'h0002;
+ parameter [9:0] QPLL0_CP = 10'b0000011111;
+ parameter [9:0] QPLL0_CP_G3 = 10'b0000011111;
+ parameter integer QPLL0_FBDIV = 66;
+ parameter integer QPLL0_FBDIV_G3 = 80;
+ parameter [15:0] QPLL0_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL0_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL0_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL0_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL0_LPF = 10'b1011111111;
+ parameter [9:0] QPLL0_LPF_G3 = 10'b1111111111;
+ parameter [0:0] QPLL0_PCI_EN = 1'b0;
+ parameter [0:0] QPLL0_RATE_SW_USE_DRP = 1'b0;
+ parameter integer QPLL0_REFCLK_DIV = 1;
+ parameter [15:0] QPLL0_SDM_CFG0 = 16'h0040;
+ parameter [15:0] QPLL0_SDM_CFG1 = 16'h0000;
+ parameter [15:0] QPLL0_SDM_CFG2 = 16'h0000;
+ parameter QPLL1CLKOUT_RATE = "FULL";
+ parameter [15:0] QPLL1_CFG0 = 16'h691C;
+ parameter [15:0] QPLL1_CFG1 = 16'h0020;
+ parameter [15:0] QPLL1_CFG1_G3 = 16'h0020;
+ parameter [15:0] QPLL1_CFG2 = 16'h0F80;
+ parameter [15:0] QPLL1_CFG2_G3 = 16'h0F80;
+ parameter [15:0] QPLL1_CFG3 = 16'h0120;
+ parameter [15:0] QPLL1_CFG4 = 16'h0002;
+ parameter [9:0] QPLL1_CP = 10'b0000011111;
+ parameter [9:0] QPLL1_CP_G3 = 10'b0000011111;
+ parameter integer QPLL1_FBDIV = 66;
+ parameter integer QPLL1_FBDIV_G3 = 80;
+ parameter [15:0] QPLL1_INIT_CFG0 = 16'h0000;
+ parameter [7:0] QPLL1_INIT_CFG1 = 8'h00;
+ parameter [15:0] QPLL1_LOCK_CFG = 16'h01E8;
+ parameter [15:0] QPLL1_LOCK_CFG_G3 = 16'h21E8;
+ parameter [9:0] QPLL1_LPF = 10'b1011111111;
+ parameter [9:0] QPLL1_LPF_G3 = 10'b1111111111;
+ parameter [0:0] QPLL1_PCI_EN = 1'b0;
+ parameter [0:0] QPLL1_RATE_SW_USE_DRP = 1'b0;
+ parameter integer QPLL1_REFCLK_DIV = 1;
+ parameter [15:0] QPLL1_SDM_CFG0 = 16'h0000;
+ parameter [15:0] QPLL1_SDM_CFG1 = 16'h0000;
+ parameter [15:0] QPLL1_SDM_CFG2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR0 = 16'h0000;
+ parameter [15:0] RSVD_ATTR1 = 16'h0000;
+ parameter [15:0] RSVD_ATTR2 = 16'h0000;
+ parameter [15:0] RSVD_ATTR3 = 16'h0000;
+ parameter [1:0] RXRECCLKOUT0_SEL = 2'b00;
+ parameter [1:0] RXRECCLKOUT1_SEL = 2'b00;
+ parameter [0:0] SARC_ENB = 1'b0;
+ parameter [0:0] SARC_SEL = 1'b0;
+ parameter [15:0] SDM0INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM0INITSEED0_1 = 9'b000000000;
+ parameter [15:0] SDM1INITSEED0_0 = 16'b0000000000000000;
+ parameter [8:0] SDM1INITSEED0_1 = 9'b000000000;
+ parameter SIM_MODE = "FAST";
+ parameter SIM_RESET_SPEEDUP = "TRUE";
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter [15:0] UB_CFG0 = 16'h0000;
+ parameter [15:0] UB_CFG1 = 16'h0000;
+ parameter [15:0] UB_CFG2 = 16'h0000;
+ parameter [15:0] UB_CFG3 = 16'h0000;
+ parameter [15:0] UB_CFG4 = 16'h0000;
+ parameter [15:0] UB_CFG5 = 16'h0400;
+ parameter [15:0] UB_CFG6 = 16'h0000;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output [7:0] PMARSVDOUT0;
+ output [7:0] PMARSVDOUT1;
+ output QPLL0FBCLKLOST;
+ output QPLL0LOCK;
+ output QPLL0OUTCLK;
+ output QPLL0OUTREFCLK;
+ output QPLL0REFCLKLOST;
+ output QPLL1FBCLKLOST;
+ output QPLL1LOCK;
+ output QPLL1OUTCLK;
+ output QPLL1OUTREFCLK;
+ output QPLL1REFCLKLOST;
+ output [7:0] QPLLDMONITOR0;
+ output [7:0] QPLLDMONITOR1;
+ output REFCLKOUTMONITOR0;
+ output REFCLKOUTMONITOR1;
+ output [1:0] RXRECCLK0SEL;
+ output [1:0] RXRECCLK1SEL;
+ output [3:0] SDM0FINALOUT;
+ output [14:0] SDM0TESTDATA;
+ output [3:0] SDM1FINALOUT;
+ output [14:0] SDM1TESTDATA;
+ output [15:0] UBDADDR;
+ output UBDEN;
+ output [15:0] UBDI;
+ output UBDWE;
+ output UBMDMTDO;
+ output UBRSVDOUT;
+ output UBTXUART;
+ input BGBYPASSB;
+ input BGMONITORENB;
+ input BGPDB;
+ input [4:0] BGRCALOVRD;
+ input BGRCALOVRDENB;
+ input [15:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input GTGREFCLK0;
+ input GTGREFCLK1;
+ input GTNORTHREFCLK00;
+ input GTNORTHREFCLK01;
+ input GTNORTHREFCLK10;
+ input GTNORTHREFCLK11;
+ input GTREFCLK00;
+ input GTREFCLK01;
+ input GTREFCLK10;
+ input GTREFCLK11;
+ input GTSOUTHREFCLK00;
+ input GTSOUTHREFCLK01;
+ input GTSOUTHREFCLK10;
+ input GTSOUTHREFCLK11;
+ input [2:0] PCIERATEQPLL0;
+ input [2:0] PCIERATEQPLL1;
+ input [7:0] PMARSVD0;
+ input [7:0] PMARSVD1;
+ input QPLL0CLKRSVD0;
+ input QPLL0CLKRSVD1;
+ input [7:0] QPLL0FBDIV;
+ input QPLL0LOCKDETCLK;
+ input QPLL0LOCKEN;
+ input QPLL0PD;
+ input [2:0] QPLL0REFCLKSEL;
+ input QPLL0RESET;
+ input QPLL1CLKRSVD0;
+ input QPLL1CLKRSVD1;
+ input [7:0] QPLL1FBDIV;
+ input QPLL1LOCKDETCLK;
+ input QPLL1LOCKEN;
+ input QPLL1PD;
+ input [2:0] QPLL1REFCLKSEL;
+ input QPLL1RESET;
+ input [7:0] QPLLRSVD1;
+ input [4:0] QPLLRSVD2;
+ input [4:0] QPLLRSVD3;
+ input [7:0] QPLLRSVD4;
+ input RCALENB;
+ input [24:0] SDM0DATA;
+ input SDM0RESET;
+ input SDM0TOGGLE;
+ input [1:0] SDM0WIDTH;
+ input [24:0] SDM1DATA;
+ input SDM1RESET;
+ input SDM1TOGGLE;
+ input [1:0] SDM1WIDTH;
+ input UBCFGSTREAMEN;
+ input [15:0] UBDO;
+ input UBDRDY;
+ input UBENABLE;
+ input [1:0] UBGPI;
+ input [1:0] UBINTR;
+ input UBIOLMBRST;
+ input UBMBRST;
+ input UBMDMCAPTURE;
+ input UBMDMDBGRST;
+ input UBMDMDBGUPDATE;
+ input [3:0] UBMDMREGEN;
+ input UBMDMSHIFT;
+ input UBMDMSYSRST;
+ input UBMDMTCK;
+ input UBMDMTDI;
+endmodule
+
+module IBUFDS_GTE3 (...);
+ parameter [0:0] REFCLK_EN_TX_PATH = 1'b0;
+ parameter [1:0] REFCLK_HROW_CK_SEL = 2'b00;
+ parameter [1:0] REFCLK_ICNTL_RX = 2'b00;
+ output O;
+ output ODIV2;
+ input CEB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFDS_GTE4 (...);
+ parameter [0:0] REFCLK_EN_TX_PATH = 1'b0;
+ parameter [1:0] REFCLK_HROW_CK_SEL = 2'b00;
+ parameter [1:0] REFCLK_ICNTL_RX = 2'b00;
+ output O;
+ output ODIV2;
+ input CEB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module ILKN (...);
+ parameter BYPASS = "FALSE";
+ parameter [1:0] CTL_RX_BURSTMAX = 2'h3;
+ parameter [1:0] CTL_RX_CHAN_EXT = 2'h0;
+ parameter [3:0] CTL_RX_LAST_LANE = 4'hB;
+ parameter [15:0] CTL_RX_MFRAMELEN_MINUS1 = 16'h07FF;
+ parameter CTL_RX_PACKET_MODE = "TRUE";
+ parameter [2:0] CTL_RX_RETRANS_MULT = 3'h0;
+ parameter [3:0] CTL_RX_RETRANS_RETRY = 4'h2;
+ parameter [15:0] CTL_RX_RETRANS_TIMER1 = 16'h0000;
+ parameter [15:0] CTL_RX_RETRANS_TIMER2 = 16'h0008;
+ parameter [11:0] CTL_RX_RETRANS_WDOG = 12'h000;
+ parameter [7:0] CTL_RX_RETRANS_WRAP_TIMER = 8'h00;
+ parameter CTL_TEST_MODE_PIN_CHAR = "FALSE";
+ parameter [1:0] CTL_TX_BURSTMAX = 2'h3;
+ parameter [2:0] CTL_TX_BURSTSHORT = 3'h1;
+ parameter [1:0] CTL_TX_CHAN_EXT = 2'h0;
+ parameter CTL_TX_DISABLE_SKIPWORD = "TRUE";
+ parameter [6:0] CTL_TX_FC_CALLEN = 7'h00;
+ parameter [3:0] CTL_TX_LAST_LANE = 4'hB;
+ parameter [15:0] CTL_TX_MFRAMELEN_MINUS1 = 16'h07FF;
+ parameter [13:0] CTL_TX_RETRANS_DEPTH = 14'h0800;
+ parameter [2:0] CTL_TX_RETRANS_MULT = 3'h0;
+ parameter [1:0] CTL_TX_RETRANS_RAM_BANKS = 2'h3;
+ parameter MODE = "TRUE";
+ parameter SIM_VERSION = "2.0";
+ parameter TEST_MODE_PIN_CHAR = "FALSE";
+ output [15:0] DRP_DO;
+ output DRP_RDY;
+ output [65:0] RX_BYPASS_DATAOUT00;
+ output [65:0] RX_BYPASS_DATAOUT01;
+ output [65:0] RX_BYPASS_DATAOUT02;
+ output [65:0] RX_BYPASS_DATAOUT03;
+ output [65:0] RX_BYPASS_DATAOUT04;
+ output [65:0] RX_BYPASS_DATAOUT05;
+ output [65:0] RX_BYPASS_DATAOUT06;
+ output [65:0] RX_BYPASS_DATAOUT07;
+ output [65:0] RX_BYPASS_DATAOUT08;
+ output [65:0] RX_BYPASS_DATAOUT09;
+ output [65:0] RX_BYPASS_DATAOUT10;
+ output [65:0] RX_BYPASS_DATAOUT11;
+ output [11:0] RX_BYPASS_ENAOUT;
+ output [11:0] RX_BYPASS_IS_AVAILOUT;
+ output [11:0] RX_BYPASS_IS_BADLYFRAMEDOUT;
+ output [11:0] RX_BYPASS_IS_OVERFLOWOUT;
+ output [11:0] RX_BYPASS_IS_SYNCEDOUT;
+ output [11:0] RX_BYPASS_IS_SYNCWORDOUT;
+ output [10:0] RX_CHANOUT0;
+ output [10:0] RX_CHANOUT1;
+ output [10:0] RX_CHANOUT2;
+ output [10:0] RX_CHANOUT3;
+ output [127:0] RX_DATAOUT0;
+ output [127:0] RX_DATAOUT1;
+ output [127:0] RX_DATAOUT2;
+ output [127:0] RX_DATAOUT3;
+ output RX_ENAOUT0;
+ output RX_ENAOUT1;
+ output RX_ENAOUT2;
+ output RX_ENAOUT3;
+ output RX_EOPOUT0;
+ output RX_EOPOUT1;
+ output RX_EOPOUT2;
+ output RX_EOPOUT3;
+ output RX_ERROUT0;
+ output RX_ERROUT1;
+ output RX_ERROUT2;
+ output RX_ERROUT3;
+ output [3:0] RX_MTYOUT0;
+ output [3:0] RX_MTYOUT1;
+ output [3:0] RX_MTYOUT2;
+ output [3:0] RX_MTYOUT3;
+ output RX_OVFOUT;
+ output RX_SOPOUT0;
+ output RX_SOPOUT1;
+ output RX_SOPOUT2;
+ output RX_SOPOUT3;
+ output STAT_RX_ALIGNED;
+ output STAT_RX_ALIGNED_ERR;
+ output [11:0] STAT_RX_BAD_TYPE_ERR;
+ output STAT_RX_BURSTMAX_ERR;
+ output STAT_RX_BURST_ERR;
+ output STAT_RX_CRC24_ERR;
+ output [11:0] STAT_RX_CRC32_ERR;
+ output [11:0] STAT_RX_CRC32_VALID;
+ output [11:0] STAT_RX_DESCRAM_ERR;
+ output [11:0] STAT_RX_DIAGWORD_INTFSTAT;
+ output [11:0] STAT_RX_DIAGWORD_LANESTAT;
+ output [255:0] STAT_RX_FC_STAT;
+ output [11:0] STAT_RX_FRAMING_ERR;
+ output STAT_RX_MEOP_ERR;
+ output [11:0] STAT_RX_MF_ERR;
+ output [11:0] STAT_RX_MF_LEN_ERR;
+ output [11:0] STAT_RX_MF_REPEAT_ERR;
+ output STAT_RX_MISALIGNED;
+ output STAT_RX_MSOP_ERR;
+ output [7:0] STAT_RX_MUBITS;
+ output STAT_RX_MUBITS_UPDATED;
+ output STAT_RX_OVERFLOW_ERR;
+ output STAT_RX_RETRANS_CRC24_ERR;
+ output STAT_RX_RETRANS_DISC;
+ output [15:0] STAT_RX_RETRANS_LATENCY;
+ output STAT_RX_RETRANS_REQ;
+ output STAT_RX_RETRANS_RETRY_ERR;
+ output [7:0] STAT_RX_RETRANS_SEQ;
+ output STAT_RX_RETRANS_SEQ_UPDATED;
+ output [2:0] STAT_RX_RETRANS_STATE;
+ output [4:0] STAT_RX_RETRANS_SUBSEQ;
+ output STAT_RX_RETRANS_WDOG_ERR;
+ output STAT_RX_RETRANS_WRAP_ERR;
+ output [11:0] STAT_RX_SYNCED;
+ output [11:0] STAT_RX_SYNCED_ERR;
+ output [11:0] STAT_RX_WORD_SYNC;
+ output STAT_TX_BURST_ERR;
+ output STAT_TX_ERRINJ_BITERR_DONE;
+ output STAT_TX_OVERFLOW_ERR;
+ output STAT_TX_RETRANS_BURST_ERR;
+ output STAT_TX_RETRANS_BUSY;
+ output STAT_TX_RETRANS_RAM_PERROUT;
+ output [8:0] STAT_TX_RETRANS_RAM_RADDR;
+ output STAT_TX_RETRANS_RAM_RD_B0;
+ output STAT_TX_RETRANS_RAM_RD_B1;
+ output STAT_TX_RETRANS_RAM_RD_B2;
+ output STAT_TX_RETRANS_RAM_RD_B3;
+ output [1:0] STAT_TX_RETRANS_RAM_RSEL;
+ output [8:0] STAT_TX_RETRANS_RAM_WADDR;
+ output [643:0] STAT_TX_RETRANS_RAM_WDATA;
+ output STAT_TX_RETRANS_RAM_WE_B0;
+ output STAT_TX_RETRANS_RAM_WE_B1;
+ output STAT_TX_RETRANS_RAM_WE_B2;
+ output STAT_TX_RETRANS_RAM_WE_B3;
+ output STAT_TX_UNDERFLOW_ERR;
+ output TX_OVFOUT;
+ output TX_RDYOUT;
+ output [63:0] TX_SERDES_DATA00;
+ output [63:0] TX_SERDES_DATA01;
+ output [63:0] TX_SERDES_DATA02;
+ output [63:0] TX_SERDES_DATA03;
+ output [63:0] TX_SERDES_DATA04;
+ output [63:0] TX_SERDES_DATA05;
+ output [63:0] TX_SERDES_DATA06;
+ output [63:0] TX_SERDES_DATA07;
+ output [63:0] TX_SERDES_DATA08;
+ output [63:0] TX_SERDES_DATA09;
+ output [63:0] TX_SERDES_DATA10;
+ output [63:0] TX_SERDES_DATA11;
+ input CORE_CLK;
+ input CTL_RX_FORCE_RESYNC;
+ input CTL_RX_RETRANS_ACK;
+ input CTL_RX_RETRANS_ENABLE;
+ input CTL_RX_RETRANS_ERRIN;
+ input CTL_RX_RETRANS_FORCE_REQ;
+ input CTL_RX_RETRANS_RESET;
+ input CTL_RX_RETRANS_RESET_MODE;
+ input CTL_TX_DIAGWORD_INTFSTAT;
+ input [11:0] CTL_TX_DIAGWORD_LANESTAT;
+ input CTL_TX_ENABLE;
+ input CTL_TX_ERRINJ_BITERR_GO;
+ input [3:0] CTL_TX_ERRINJ_BITERR_LANE;
+ input [255:0] CTL_TX_FC_STAT;
+ input [7:0] CTL_TX_MUBITS;
+ input CTL_TX_RETRANS_ENABLE;
+ input CTL_TX_RETRANS_RAM_PERRIN;
+ input [643:0] CTL_TX_RETRANS_RAM_RDATA;
+ input CTL_TX_RETRANS_REQ;
+ input CTL_TX_RETRANS_REQ_VALID;
+ input [11:0] CTL_TX_RLIM_DELTA;
+ input CTL_TX_RLIM_ENABLE;
+ input [7:0] CTL_TX_RLIM_INTV;
+ input [11:0] CTL_TX_RLIM_MAX;
+ input [9:0] DRP_ADDR;
+ input DRP_CLK;
+ input [15:0] DRP_DI;
+ input DRP_EN;
+ input DRP_WE;
+ input LBUS_CLK;
+ input RX_BYPASS_FORCE_REALIGNIN;
+ input RX_BYPASS_RDIN;
+ input RX_RESET;
+ input [11:0] RX_SERDES_CLK;
+ input [63:0] RX_SERDES_DATA00;
+ input [63:0] RX_SERDES_DATA01;
+ input [63:0] RX_SERDES_DATA02;
+ input [63:0] RX_SERDES_DATA03;
+ input [63:0] RX_SERDES_DATA04;
+ input [63:0] RX_SERDES_DATA05;
+ input [63:0] RX_SERDES_DATA06;
+ input [63:0] RX_SERDES_DATA07;
+ input [63:0] RX_SERDES_DATA08;
+ input [63:0] RX_SERDES_DATA09;
+ input [63:0] RX_SERDES_DATA10;
+ input [63:0] RX_SERDES_DATA11;
+ input [11:0] RX_SERDES_RESET;
+ input TX_BCTLIN0;
+ input TX_BCTLIN1;
+ input TX_BCTLIN2;
+ input TX_BCTLIN3;
+ input [11:0] TX_BYPASS_CTRLIN;
+ input [63:0] TX_BYPASS_DATAIN00;
+ input [63:0] TX_BYPASS_DATAIN01;
+ input [63:0] TX_BYPASS_DATAIN02;
+ input [63:0] TX_BYPASS_DATAIN03;
+ input [63:0] TX_BYPASS_DATAIN04;
+ input [63:0] TX_BYPASS_DATAIN05;
+ input [63:0] TX_BYPASS_DATAIN06;
+ input [63:0] TX_BYPASS_DATAIN07;
+ input [63:0] TX_BYPASS_DATAIN08;
+ input [63:0] TX_BYPASS_DATAIN09;
+ input [63:0] TX_BYPASS_DATAIN10;
+ input [63:0] TX_BYPASS_DATAIN11;
+ input TX_BYPASS_ENAIN;
+ input [7:0] TX_BYPASS_GEARBOX_SEQIN;
+ input [3:0] TX_BYPASS_MFRAMER_STATEIN;
+ input [10:0] TX_CHANIN0;
+ input [10:0] TX_CHANIN1;
+ input [10:0] TX_CHANIN2;
+ input [10:0] TX_CHANIN3;
+ input [127:0] TX_DATAIN0;
+ input [127:0] TX_DATAIN1;
+ input [127:0] TX_DATAIN2;
+ input [127:0] TX_DATAIN3;
+ input TX_ENAIN0;
+ input TX_ENAIN1;
+ input TX_ENAIN2;
+ input TX_ENAIN3;
+ input TX_EOPIN0;
+ input TX_EOPIN1;
+ input TX_EOPIN2;
+ input TX_EOPIN3;
+ input TX_ERRIN0;
+ input TX_ERRIN1;
+ input TX_ERRIN2;
+ input TX_ERRIN3;
+ input [3:0] TX_MTYIN0;
+ input [3:0] TX_MTYIN1;
+ input [3:0] TX_MTYIN2;
+ input [3:0] TX_MTYIN3;
+ input TX_RESET;
+ input TX_SERDES_REFCLK;
+ input TX_SERDES_REFCLK_RESET;
+ input TX_SOPIN0;
+ input TX_SOPIN1;
+ input TX_SOPIN2;
+ input TX_SOPIN3;
+endmodule
+
+module ILKNE4 (...);
+ parameter BYPASS = "FALSE";
+ parameter [1:0] CTL_RX_BURSTMAX = 2'h3;
+ parameter [1:0] CTL_RX_CHAN_EXT = 2'h0;
+ parameter [3:0] CTL_RX_LAST_LANE = 4'hB;
+ parameter [15:0] CTL_RX_MFRAMELEN_MINUS1 = 16'h07FF;
+ parameter CTL_RX_PACKET_MODE = "FALSE";
+ parameter [2:0] CTL_RX_RETRANS_MULT = 3'h0;
+ parameter [3:0] CTL_RX_RETRANS_RETRY = 4'h2;
+ parameter [15:0] CTL_RX_RETRANS_TIMER1 = 16'h0009;
+ parameter [15:0] CTL_RX_RETRANS_TIMER2 = 16'h0000;
+ parameter [11:0] CTL_RX_RETRANS_WDOG = 12'h000;
+ parameter [7:0] CTL_RX_RETRANS_WRAP_TIMER = 8'h00;
+ parameter CTL_TEST_MODE_PIN_CHAR = "FALSE";
+ parameter [1:0] CTL_TX_BURSTMAX = 2'h3;
+ parameter [2:0] CTL_TX_BURSTSHORT = 3'h1;
+ parameter [1:0] CTL_TX_CHAN_EXT = 2'h0;
+ parameter CTL_TX_DISABLE_SKIPWORD = "FALSE";
+ parameter [3:0] CTL_TX_FC_CALLEN = 4'hF;
+ parameter [3:0] CTL_TX_LAST_LANE = 4'hB;
+ parameter [15:0] CTL_TX_MFRAMELEN_MINUS1 = 16'h07FF;
+ parameter [13:0] CTL_TX_RETRANS_DEPTH = 14'h0800;
+ parameter [2:0] CTL_TX_RETRANS_MULT = 3'h0;
+ parameter [1:0] CTL_TX_RETRANS_RAM_BANKS = 2'h3;
+ parameter MODE = "TRUE";
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter TEST_MODE_PIN_CHAR = "FALSE";
+ output [15:0] DRP_DO;
+ output DRP_RDY;
+ output [65:0] RX_BYPASS_DATAOUT00;
+ output [65:0] RX_BYPASS_DATAOUT01;
+ output [65:0] RX_BYPASS_DATAOUT02;
+ output [65:0] RX_BYPASS_DATAOUT03;
+ output [65:0] RX_BYPASS_DATAOUT04;
+ output [65:0] RX_BYPASS_DATAOUT05;
+ output [65:0] RX_BYPASS_DATAOUT06;
+ output [65:0] RX_BYPASS_DATAOUT07;
+ output [65:0] RX_BYPASS_DATAOUT08;
+ output [65:0] RX_BYPASS_DATAOUT09;
+ output [65:0] RX_BYPASS_DATAOUT10;
+ output [65:0] RX_BYPASS_DATAOUT11;
+ output [11:0] RX_BYPASS_ENAOUT;
+ output [11:0] RX_BYPASS_IS_AVAILOUT;
+ output [11:0] RX_BYPASS_IS_BADLYFRAMEDOUT;
+ output [11:0] RX_BYPASS_IS_OVERFLOWOUT;
+ output [11:0] RX_BYPASS_IS_SYNCEDOUT;
+ output [11:0] RX_BYPASS_IS_SYNCWORDOUT;
+ output [10:0] RX_CHANOUT0;
+ output [10:0] RX_CHANOUT1;
+ output [10:0] RX_CHANOUT2;
+ output [10:0] RX_CHANOUT3;
+ output [127:0] RX_DATAOUT0;
+ output [127:0] RX_DATAOUT1;
+ output [127:0] RX_DATAOUT2;
+ output [127:0] RX_DATAOUT3;
+ output RX_ENAOUT0;
+ output RX_ENAOUT1;
+ output RX_ENAOUT2;
+ output RX_ENAOUT3;
+ output RX_EOPOUT0;
+ output RX_EOPOUT1;
+ output RX_EOPOUT2;
+ output RX_EOPOUT3;
+ output RX_ERROUT0;
+ output RX_ERROUT1;
+ output RX_ERROUT2;
+ output RX_ERROUT3;
+ output [3:0] RX_MTYOUT0;
+ output [3:0] RX_MTYOUT1;
+ output [3:0] RX_MTYOUT2;
+ output [3:0] RX_MTYOUT3;
+ output RX_OVFOUT;
+ output RX_SOPOUT0;
+ output RX_SOPOUT1;
+ output RX_SOPOUT2;
+ output RX_SOPOUT3;
+ output STAT_RX_ALIGNED;
+ output STAT_RX_ALIGNED_ERR;
+ output [11:0] STAT_RX_BAD_TYPE_ERR;
+ output STAT_RX_BURSTMAX_ERR;
+ output STAT_RX_BURST_ERR;
+ output STAT_RX_CRC24_ERR;
+ output [11:0] STAT_RX_CRC32_ERR;
+ output [11:0] STAT_RX_CRC32_VALID;
+ output [11:0] STAT_RX_DESCRAM_ERR;
+ output [11:0] STAT_RX_DIAGWORD_INTFSTAT;
+ output [11:0] STAT_RX_DIAGWORD_LANESTAT;
+ output [255:0] STAT_RX_FC_STAT;
+ output [11:0] STAT_RX_FRAMING_ERR;
+ output STAT_RX_MEOP_ERR;
+ output [11:0] STAT_RX_MF_ERR;
+ output [11:0] STAT_RX_MF_LEN_ERR;
+ output [11:0] STAT_RX_MF_REPEAT_ERR;
+ output STAT_RX_MISALIGNED;
+ output STAT_RX_MSOP_ERR;
+ output [7:0] STAT_RX_MUBITS;
+ output STAT_RX_MUBITS_UPDATED;
+ output STAT_RX_OVERFLOW_ERR;
+ output STAT_RX_RETRANS_CRC24_ERR;
+ output STAT_RX_RETRANS_DISC;
+ output [15:0] STAT_RX_RETRANS_LATENCY;
+ output STAT_RX_RETRANS_REQ;
+ output STAT_RX_RETRANS_RETRY_ERR;
+ output [7:0] STAT_RX_RETRANS_SEQ;
+ output STAT_RX_RETRANS_SEQ_UPDATED;
+ output [2:0] STAT_RX_RETRANS_STATE;
+ output [4:0] STAT_RX_RETRANS_SUBSEQ;
+ output STAT_RX_RETRANS_WDOG_ERR;
+ output STAT_RX_RETRANS_WRAP_ERR;
+ output [11:0] STAT_RX_SYNCED;
+ output [11:0] STAT_RX_SYNCED_ERR;
+ output [11:0] STAT_RX_WORD_SYNC;
+ output STAT_TX_BURST_ERR;
+ output STAT_TX_ERRINJ_BITERR_DONE;
+ output STAT_TX_OVERFLOW_ERR;
+ output STAT_TX_RETRANS_BURST_ERR;
+ output STAT_TX_RETRANS_BUSY;
+ output STAT_TX_RETRANS_RAM_PERROUT;
+ output [8:0] STAT_TX_RETRANS_RAM_RADDR;
+ output STAT_TX_RETRANS_RAM_RD_B0;
+ output STAT_TX_RETRANS_RAM_RD_B1;
+ output STAT_TX_RETRANS_RAM_RD_B2;
+ output STAT_TX_RETRANS_RAM_RD_B3;
+ output [1:0] STAT_TX_RETRANS_RAM_RSEL;
+ output [8:0] STAT_TX_RETRANS_RAM_WADDR;
+ output [643:0] STAT_TX_RETRANS_RAM_WDATA;
+ output STAT_TX_RETRANS_RAM_WE_B0;
+ output STAT_TX_RETRANS_RAM_WE_B1;
+ output STAT_TX_RETRANS_RAM_WE_B2;
+ output STAT_TX_RETRANS_RAM_WE_B3;
+ output STAT_TX_UNDERFLOW_ERR;
+ output TX_OVFOUT;
+ output TX_RDYOUT;
+ output [63:0] TX_SERDES_DATA00;
+ output [63:0] TX_SERDES_DATA01;
+ output [63:0] TX_SERDES_DATA02;
+ output [63:0] TX_SERDES_DATA03;
+ output [63:0] TX_SERDES_DATA04;
+ output [63:0] TX_SERDES_DATA05;
+ output [63:0] TX_SERDES_DATA06;
+ output [63:0] TX_SERDES_DATA07;
+ output [63:0] TX_SERDES_DATA08;
+ output [63:0] TX_SERDES_DATA09;
+ output [63:0] TX_SERDES_DATA10;
+ output [63:0] TX_SERDES_DATA11;
+ input CORE_CLK;
+ input CTL_RX_FORCE_RESYNC;
+ input CTL_RX_RETRANS_ACK;
+ input CTL_RX_RETRANS_ENABLE;
+ input CTL_RX_RETRANS_ERRIN;
+ input CTL_RX_RETRANS_FORCE_REQ;
+ input CTL_RX_RETRANS_RESET;
+ input CTL_RX_RETRANS_RESET_MODE;
+ input CTL_TX_DIAGWORD_INTFSTAT;
+ input [11:0] CTL_TX_DIAGWORD_LANESTAT;
+ input CTL_TX_ENABLE;
+ input CTL_TX_ERRINJ_BITERR_GO;
+ input [3:0] CTL_TX_ERRINJ_BITERR_LANE;
+ input [255:0] CTL_TX_FC_STAT;
+ input [7:0] CTL_TX_MUBITS;
+ input CTL_TX_RETRANS_ENABLE;
+ input CTL_TX_RETRANS_RAM_PERRIN;
+ input [643:0] CTL_TX_RETRANS_RAM_RDATA;
+ input CTL_TX_RETRANS_REQ;
+ input CTL_TX_RETRANS_REQ_VALID;
+ input [11:0] CTL_TX_RLIM_DELTA;
+ input CTL_TX_RLIM_ENABLE;
+ input [7:0] CTL_TX_RLIM_INTV;
+ input [11:0] CTL_TX_RLIM_MAX;
+ input [9:0] DRP_ADDR;
+ input DRP_CLK;
+ input [15:0] DRP_DI;
+ input DRP_EN;
+ input DRP_WE;
+ input LBUS_CLK;
+ input RX_BYPASS_FORCE_REALIGNIN;
+ input RX_BYPASS_RDIN;
+ input RX_RESET;
+ input [11:0] RX_SERDES_CLK;
+ input [63:0] RX_SERDES_DATA00;
+ input [63:0] RX_SERDES_DATA01;
+ input [63:0] RX_SERDES_DATA02;
+ input [63:0] RX_SERDES_DATA03;
+ input [63:0] RX_SERDES_DATA04;
+ input [63:0] RX_SERDES_DATA05;
+ input [63:0] RX_SERDES_DATA06;
+ input [63:0] RX_SERDES_DATA07;
+ input [63:0] RX_SERDES_DATA08;
+ input [63:0] RX_SERDES_DATA09;
+ input [63:0] RX_SERDES_DATA10;
+ input [63:0] RX_SERDES_DATA11;
+ input [11:0] RX_SERDES_RESET;
+ input TX_BCTLIN0;
+ input TX_BCTLIN1;
+ input TX_BCTLIN2;
+ input TX_BCTLIN3;
+ input [11:0] TX_BYPASS_CTRLIN;
+ input [63:0] TX_BYPASS_DATAIN00;
+ input [63:0] TX_BYPASS_DATAIN01;
+ input [63:0] TX_BYPASS_DATAIN02;
+ input [63:0] TX_BYPASS_DATAIN03;
+ input [63:0] TX_BYPASS_DATAIN04;
+ input [63:0] TX_BYPASS_DATAIN05;
+ input [63:0] TX_BYPASS_DATAIN06;
+ input [63:0] TX_BYPASS_DATAIN07;
+ input [63:0] TX_BYPASS_DATAIN08;
+ input [63:0] TX_BYPASS_DATAIN09;
+ input [63:0] TX_BYPASS_DATAIN10;
+ input [63:0] TX_BYPASS_DATAIN11;
+ input TX_BYPASS_ENAIN;
+ input [7:0] TX_BYPASS_GEARBOX_SEQIN;
+ input [3:0] TX_BYPASS_MFRAMER_STATEIN;
+ input [10:0] TX_CHANIN0;
+ input [10:0] TX_CHANIN1;
+ input [10:0] TX_CHANIN2;
+ input [10:0] TX_CHANIN3;
+ input [127:0] TX_DATAIN0;
+ input [127:0] TX_DATAIN1;
+ input [127:0] TX_DATAIN2;
+ input [127:0] TX_DATAIN3;
+ input TX_ENAIN0;
+ input TX_ENAIN1;
+ input TX_ENAIN2;
+ input TX_ENAIN3;
+ input TX_EOPIN0;
+ input TX_EOPIN1;
+ input TX_EOPIN2;
+ input TX_EOPIN3;
+ input TX_ERRIN0;
+ input TX_ERRIN1;
+ input TX_ERRIN2;
+ input TX_ERRIN3;
+ input [3:0] TX_MTYIN0;
+ input [3:0] TX_MTYIN1;
+ input [3:0] TX_MTYIN2;
+ input [3:0] TX_MTYIN3;
+ input TX_RESET;
+ input TX_SERDES_REFCLK;
+ input TX_SERDES_REFCLK_RESET;
+ input TX_SOPIN0;
+ input TX_SOPIN1;
+ input TX_SOPIN2;
+ input TX_SOPIN3;
+endmodule
+
+module OBUFDS_GTE3 (...);
+ parameter [0:0] REFCLK_EN_TX_PATH = 1'b0;
+ parameter [4:0] REFCLK_ICNTL_TX = 5'b00000;
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input CEB;
+ input I;
+endmodule
+
+module OBUFDS_GTE3_ADV (...);
+ parameter [0:0] REFCLK_EN_TX_PATH = 1'b0;
+ parameter [4:0] REFCLK_ICNTL_TX = 5'b00000;
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input CEB;
+ input [3:0] I;
+ input [1:0] RXRECCLK_SEL;
+endmodule
+
+module OBUFDS_GTE4 (...);
+ parameter [0:0] REFCLK_EN_TX_PATH = 1'b0;
+ parameter [4:0] REFCLK_ICNTL_TX = 5'b00000;
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input CEB;
+ input I;
+endmodule
+
+module OBUFDS_GTE4_ADV (...);
+ parameter [0:0] REFCLK_EN_TX_PATH = 1'b0;
+ parameter [4:0] REFCLK_ICNTL_TX = 5'b00000;
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input CEB;
+ input [3:0] I;
+ input [1:0] RXRECCLK_SEL;
+endmodule
+
+module PCIE40E4 (...);
+ parameter ARI_CAP_ENABLE = "FALSE";
+ parameter AUTO_FLR_RESPONSE = "FALSE";
+ parameter [1:0] AXISTEN_IF_CC_ALIGNMENT_MODE = 2'h0;
+ parameter [23:0] AXISTEN_IF_COMPL_TIMEOUT_REG0 = 24'hBEBC20;
+ parameter [27:0] AXISTEN_IF_COMPL_TIMEOUT_REG1 = 28'h2FAF080;
+ parameter [1:0] AXISTEN_IF_CQ_ALIGNMENT_MODE = 2'h0;
+ parameter AXISTEN_IF_CQ_EN_POISONED_MEM_WR = "FALSE";
+ parameter AXISTEN_IF_ENABLE_256_TAGS = "FALSE";
+ parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE";
+ parameter AXISTEN_IF_ENABLE_INTERNAL_MSIX_TABLE = "FALSE";
+ parameter AXISTEN_IF_ENABLE_MESSAGE_RID_CHECK = "TRUE";
+ parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000;
+ parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE";
+ parameter AXISTEN_IF_EXT_512 = "FALSE";
+ parameter AXISTEN_IF_EXT_512_CC_STRADDLE = "FALSE";
+ parameter AXISTEN_IF_EXT_512_CQ_STRADDLE = "FALSE";
+ parameter AXISTEN_IF_EXT_512_RC_STRADDLE = "FALSE";
+ parameter AXISTEN_IF_EXT_512_RQ_STRADDLE = "FALSE";
+ parameter AXISTEN_IF_LEGACY_MODE_ENABLE = "FALSE";
+ parameter AXISTEN_IF_MSIX_FROM_RAM_PIPELINE = "FALSE";
+ parameter AXISTEN_IF_MSIX_RX_PARITY_EN = "TRUE";
+ parameter AXISTEN_IF_MSIX_TO_RAM_PIPELINE = "FALSE";
+ parameter [1:0] AXISTEN_IF_RC_ALIGNMENT_MODE = 2'h0;
+ parameter AXISTEN_IF_RC_STRADDLE = "FALSE";
+ parameter [1:0] AXISTEN_IF_RQ_ALIGNMENT_MODE = 2'h0;
+ parameter AXISTEN_IF_RX_PARITY_EN = "TRUE";
+ parameter AXISTEN_IF_SIM_SHORT_CPL_TIMEOUT = "FALSE";
+ parameter AXISTEN_IF_TX_PARITY_EN = "TRUE";
+ parameter [1:0] AXISTEN_IF_WIDTH = 2'h2;
+ parameter CFG_BYPASS_MODE_ENABLE = "FALSE";
+ parameter CRM_CORE_CLK_FREQ_500 = "TRUE";
+ parameter [1:0] CRM_USER_CLK_FREQ = 2'h2;
+ parameter [15:0] DEBUG_AXI4ST_SPARE = 16'h0000;
+ parameter [7:0] DEBUG_AXIST_DISABLE_FEATURE_BIT = 8'h00;
+ parameter [3:0] DEBUG_CAR_SPARE = 4'h0;
+ parameter [15:0] DEBUG_CFG_SPARE = 16'h0000;
+ parameter [15:0] DEBUG_LL_SPARE = 16'h0000;
+ parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_DEFRAMER_ERROR = "FALSE";
+ parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_SKP_ERROR = "FALSE";
+ parameter DEBUG_PL_DISABLE_LES_UPDATE_ON_SKP_PARITY_ERROR = "FALSE";
+ parameter DEBUG_PL_DISABLE_REC_ENTRY_ON_DYNAMIC_DSKEW_FAIL = "FALSE";
+ parameter DEBUG_PL_DISABLE_REC_ENTRY_ON_RX_BUFFER_UNDER_OVER_FLOW = "FALSE";
+ parameter DEBUG_PL_DISABLE_SCRAMBLING = "FALSE";
+ parameter DEBUG_PL_SIM_RESET_LFSR = "FALSE";
+ parameter [15:0] DEBUG_PL_SPARE = 16'h0000;
+ parameter DEBUG_TL_DISABLE_FC_TIMEOUT = "FALSE";
+ parameter DEBUG_TL_DISABLE_RX_TLP_ORDER_CHECKS = "FALSE";
+ parameter [15:0] DEBUG_TL_SPARE = 16'h0000;
+ parameter [7:0] DNSTREAM_LINK_NUM = 8'h00;
+ parameter DSN_CAP_ENABLE = "FALSE";
+ parameter EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE";
+ parameter HEADER_TYPE_OVERRIDE = "FALSE";
+ parameter IS_SWITCH_PORT = "FALSE";
+ parameter LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE";
+ parameter [8:0] LL_ACK_TIMEOUT = 9'h000;
+ parameter LL_ACK_TIMEOUT_EN = "FALSE";
+ parameter integer LL_ACK_TIMEOUT_FUNC = 0;
+ parameter LL_DISABLE_SCHED_TX_NAK = "FALSE";
+ parameter LL_REPLAY_FROM_RAM_PIPELINE = "FALSE";
+ parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000;
+ parameter LL_REPLAY_TIMEOUT_EN = "FALSE";
+ parameter integer LL_REPLAY_TIMEOUT_FUNC = 0;
+ parameter LL_REPLAY_TO_RAM_PIPELINE = "FALSE";
+ parameter LL_RX_TLP_PARITY_GEN = "TRUE";
+ parameter LL_TX_TLP_PARITY_CHK = "TRUE";
+ parameter [15:0] LL_USER_SPARE = 16'h0000;
+ parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h250;
+ parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE";
+ parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE";
+ parameter [11:0] MCAP_CAP_NEXTPTR = 12'h000;
+ parameter MCAP_CONFIGURE_OVERRIDE = "FALSE";
+ parameter MCAP_ENABLE = "FALSE";
+ parameter MCAP_EOS_DESIGN_SWITCH = "FALSE";
+ parameter [31:0] MCAP_FPGA_BITSTREAM_VERSION = 32'h00000000;
+ parameter MCAP_GATE_IO_ENABLE_DESIGN_SWITCH = "FALSE";
+ parameter MCAP_GATE_MEM_ENABLE_DESIGN_SWITCH = "FALSE";
+ parameter MCAP_INPUT_GATE_DESIGN_SWITCH = "FALSE";
+ parameter MCAP_INTERRUPT_ON_MCAP_EOS = "FALSE";
+ parameter MCAP_INTERRUPT_ON_MCAP_ERROR = "FALSE";
+ parameter [15:0] MCAP_VSEC_ID = 16'h0000;
+ parameter [11:0] MCAP_VSEC_LEN = 12'h02C;
+ parameter [3:0] MCAP_VSEC_REV = 4'h0;
+ parameter PF0_AER_CAP_ECRC_GEN_AND_CHECK_CAPABLE = "FALSE";
+ parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [3:0] PF0_ARI_CAP_VER = 4'h1;
+ parameter [5:0] PF0_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF0_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF0_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF0_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF0_CAPABILITY_POINTER = 8'h80;
+ parameter [23:0] PF0_CLASS_CODE = 24'h000000;
+ parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_ARI_FORWARD_ENABLE = "FALSE";
+ parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE";
+ parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE";
+ parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0;
+ parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE";
+ parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0;
+ parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0;
+ parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE";
+ parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE";
+ parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF0_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [2:0] PF0_INTERRUPT_PIN = 3'h1;
+ parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN4 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN4 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN4 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN4 = 7;
+ parameter [0:0] PF0_LINK_CONTROL_RCB = 1'h0;
+ parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE";
+ parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000;
+ parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000;
+ parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000;
+ parameter [3:0] PF0_LTR_CAP_VER = 4'h1;
+ parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF0_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF0_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [5:0] PF0_MSIX_VECTOR_COUNT = 6'h04;
+ parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF0_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [7:0] PF0_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [7:0] PF0_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00;
+ parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE";
+ parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE";
+ parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE";
+ parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE";
+ parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3;
+ parameter PF0_PM_CSR_NOSOFTRESET = "TRUE";
+ parameter [11:0] PF0_SECONDARY_PCIE_CAP_NEXTPTR = 12'h000;
+ parameter PF0_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE";
+ parameter [5:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF0_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF0_TPHR_CAP_VER = 4'h1;
+ parameter PF0_VC_CAP_ENABLE = "FALSE";
+ parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000;
+ parameter [3:0] PF0_VC_CAP_VER = 4'h1;
+ parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [5:0] PF1_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF1_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF1_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF1_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF1_CAPABILITY_POINTER = 8'h80;
+ parameter [23:0] PF1_CLASS_CODE = 24'h000000;
+ parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF1_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [2:0] PF1_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF1_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF1_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF1_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [7:0] PF1_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00;
+ parameter PF1_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE";
+ parameter [5:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [11:0] PF2_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF2_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF2_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [5:0] PF2_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF2_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF2_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF2_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF2_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF2_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF2_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF2_CAPABILITY_POINTER = 8'h80;
+ parameter [23:0] PF2_CLASS_CODE = 24'h000000;
+ parameter [2:0] PF2_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF2_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF2_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF2_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [2:0] PF2_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF2_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF2_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF2_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF2_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF2_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF2_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF2_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF2_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [7:0] PF2_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [7:0] PF2_PM_CAP_NEXTPTR = 8'h00;
+ parameter PF2_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE";
+ parameter [5:0] PF2_SRIOV_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF2_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF2_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF2_SRIOV_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF2_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF2_SRIOV_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF2_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF2_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF2_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF2_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF2_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF2_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF2_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF2_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF2_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [11:0] PF2_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF2_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [11:0] PF3_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF3_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF3_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [5:0] PF3_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF3_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF3_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF3_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF3_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF3_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF3_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF3_CAPABILITY_POINTER = 8'h80;
+ parameter [23:0] PF3_CLASS_CODE = 24'h000000;
+ parameter [2:0] PF3_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF3_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF3_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF3_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [2:0] PF3_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF3_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF3_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF3_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF3_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF3_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF3_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF3_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF3_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [7:0] PF3_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [7:0] PF3_PM_CAP_NEXTPTR = 8'h00;
+ parameter PF3_SRIOV_ARI_CAPBL_HIER_PRESERVED = "FALSE";
+ parameter [5:0] PF3_SRIOV_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF3_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF3_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [5:0] PF3_SRIOV_BAR2_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF3_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [5:0] PF3_SRIOV_BAR4_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF3_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF3_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF3_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF3_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF3_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF3_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF3_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF3_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF3_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [11:0] PF3_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF3_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter PL_CFG_STATE_ROBUSTNESS_ENABLE = "TRUE";
+ parameter PL_DEEMPH_SOURCE_SELECT = "TRUE";
+ parameter PL_DESKEW_ON_SKIP_IN_GEN12 = "FALSE";
+ parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN3 = "FALSE";
+ parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN4 = "FALSE";
+ parameter PL_DISABLE_AUTO_SPEED_CHANGE_TO_GEN2 = "FALSE";
+ parameter PL_DISABLE_DC_BALANCE = "FALSE";
+ parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE";
+ parameter PL_DISABLE_LANE_REVERSAL = "FALSE";
+ parameter [1:0] PL_DISABLE_LFSR_UPDATE_ON_SKP = 2'h0;
+ parameter PL_DISABLE_RETRAIN_ON_EB_ERROR = "FALSE";
+ parameter PL_DISABLE_RETRAIN_ON_FRAMING_ERROR = "FALSE";
+ parameter [15:0] PL_DISABLE_RETRAIN_ON_SPECIFIC_FRAMING_ERROR = 16'h0000;
+ parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE";
+ parameter [1:0] PL_EQ_ADAPT_DISABLE_COEFF_CHECK = 2'h0;
+ parameter [1:0] PL_EQ_ADAPT_DISABLE_PRESET_CHECK = 2'h0;
+ parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02;
+ parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1;
+ parameter [1:0] PL_EQ_BYPASS_PHASE23 = 2'h0;
+ parameter [5:0] PL_EQ_DEFAULT_RX_PRESET_HINT = 6'h33;
+ parameter [7:0] PL_EQ_DEFAULT_TX_PRESET = 8'h44;
+ parameter PL_EQ_DISABLE_MISMATCH_CHECK = "TRUE";
+ parameter [1:0] PL_EQ_RX_ADAPT_EQ_PHASE0 = 2'h0;
+ parameter [1:0] PL_EQ_RX_ADAPT_EQ_PHASE1 = 2'h0;
+ parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE";
+ parameter PL_EQ_TX_8G_EQ_TS2_ENABLE = "FALSE";
+ parameter PL_EXIT_LOOPBACK_ON_EI_ENTRY = "TRUE";
+ parameter PL_INFER_EI_DISABLE_LPBK_ACTIVE = "TRUE";
+ parameter PL_INFER_EI_DISABLE_REC_RC = "FALSE";
+ parameter PL_INFER_EI_DISABLE_REC_SPD = "FALSE";
+ parameter [31:0] PL_LANE0_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE10_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE11_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE12_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE13_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE14_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE15_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE1_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE2_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE3_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE4_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE5_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE6_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE7_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE8_EQ_CONTROL = 32'h00003F00;
+ parameter [31:0] PL_LANE9_EQ_CONTROL = 32'h00003F00;
+ parameter [3:0] PL_LINK_CAP_MAX_LINK_SPEED = 4'h4;
+ parameter [4:0] PL_LINK_CAP_MAX_LINK_WIDTH = 5'h08;
+ parameter integer PL_N_FTS = 255;
+ parameter PL_QUIESCE_GUARANTEE_DISABLE = "FALSE";
+ parameter PL_REDO_EQ_SOURCE_SELECT = "TRUE";
+ parameter [7:0] PL_REPORT_ALL_PHY_ERRORS = 8'h00;
+ parameter [1:0] PL_RX_ADAPT_TIMER_CLWS_CLOBBER_TX_TS = 2'h0;
+ parameter [3:0] PL_RX_ADAPT_TIMER_CLWS_GEN3 = 4'h0;
+ parameter [3:0] PL_RX_ADAPT_TIMER_CLWS_GEN4 = 4'h0;
+ parameter [1:0] PL_RX_ADAPT_TIMER_RRL_CLOBBER_TX_TS = 2'h0;
+ parameter [3:0] PL_RX_ADAPT_TIMER_RRL_GEN3 = 4'h0;
+ parameter [3:0] PL_RX_ADAPT_TIMER_RRL_GEN4 = 4'h0;
+ parameter [1:0] PL_RX_L0S_EXIT_TO_RECOVERY = 2'h0;
+ parameter [1:0] PL_SIM_FAST_LINK_TRAINING = 2'h0;
+ parameter PL_SRIS_ENABLE = "FALSE";
+ parameter [6:0] PL_SRIS_SKPOS_GEN_SPD_VEC = 7'h00;
+ parameter [6:0] PL_SRIS_SKPOS_REC_SPD_VEC = 7'h00;
+ parameter PL_UPSTREAM_FACING = "TRUE";
+ parameter [15:0] PL_USER_SPARE = 16'h0000;
+ parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h1500;
+ parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h003E8;
+ parameter PM_ENABLE_L23_ENTRY = "FALSE";
+ parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE";
+ parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000100;
+ parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h00000;
+ parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0100;
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter [31:0] SIM_JTAG_IDCODE = 32'h00000000;
+ parameter SIM_VERSION = "1.0";
+ parameter SPARE_BIT0 = "FALSE";
+ parameter integer SPARE_BIT1 = 0;
+ parameter integer SPARE_BIT2 = 0;
+ parameter SPARE_BIT3 = "FALSE";
+ parameter integer SPARE_BIT4 = 0;
+ parameter integer SPARE_BIT5 = 0;
+ parameter integer SPARE_BIT6 = 0;
+ parameter integer SPARE_BIT7 = 0;
+ parameter integer SPARE_BIT8 = 0;
+ parameter [7:0] SPARE_BYTE0 = 8'h00;
+ parameter [7:0] SPARE_BYTE1 = 8'h00;
+ parameter [7:0] SPARE_BYTE2 = 8'h00;
+ parameter [7:0] SPARE_BYTE3 = 8'h00;
+ parameter [31:0] SPARE_WORD0 = 32'h00000000;
+ parameter [31:0] SPARE_WORD1 = 32'h00000000;
+ parameter [31:0] SPARE_WORD2 = 32'h00000000;
+ parameter [31:0] SPARE_WORD3 = 32'h00000000;
+ parameter [3:0] SRIOV_CAP_ENABLE = 4'h0;
+ parameter TL2CFG_IF_PARITY_CHK = "TRUE";
+ parameter [1:0] TL_COMPLETION_RAM_NUM_TLPS = 2'h0;
+ parameter [1:0] TL_COMPLETION_RAM_SIZE = 2'h1;
+ parameter [11:0] TL_CREDITS_CD = 12'h000;
+ parameter [7:0] TL_CREDITS_CH = 8'h00;
+ parameter [11:0] TL_CREDITS_NPD = 12'h004;
+ parameter [7:0] TL_CREDITS_NPH = 8'h20;
+ parameter [11:0] TL_CREDITS_PD = 12'h0E0;
+ parameter [7:0] TL_CREDITS_PH = 8'h20;
+ parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TIME = 5'h02;
+ parameter [4:0] TL_FC_UPDATE_MIN_INTERVAL_TLP_COUNT = 5'h08;
+ parameter [1:0] TL_PF_ENABLE_REG = 2'h0;
+ parameter [0:0] TL_POSTED_RAM_SIZE = 1'h0;
+ parameter TL_RX_COMPLETION_FROM_RAM_READ_PIPELINE = "FALSE";
+ parameter TL_RX_COMPLETION_TO_RAM_READ_PIPELINE = "FALSE";
+ parameter TL_RX_COMPLETION_TO_RAM_WRITE_PIPELINE = "FALSE";
+ parameter TL_RX_POSTED_FROM_RAM_READ_PIPELINE = "FALSE";
+ parameter TL_RX_POSTED_TO_RAM_READ_PIPELINE = "FALSE";
+ parameter TL_RX_POSTED_TO_RAM_WRITE_PIPELINE = "FALSE";
+ parameter TL_TX_MUX_STRICT_PRIORITY = "TRUE";
+ parameter TL_TX_TLP_STRADDLE_ENABLE = "FALSE";
+ parameter TL_TX_TLP_TERMINATE_PARITY = "FALSE";
+ parameter [15:0] TL_USER_SPARE = 16'h0000;
+ parameter TPH_FROM_RAM_PIPELINE = "FALSE";
+ parameter TPH_TO_RAM_PIPELINE = "FALSE";
+ parameter [7:0] VF0_CAPABILITY_POINTER = 8'h80;
+ parameter [11:0] VFG0_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] VFG0_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer VFG0_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VFG0_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VFG0_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VFG0_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VFG0_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [7:0] VFG0_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [11:0] VFG0_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VFG0_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [11:0] VFG1_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] VFG1_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer VFG1_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VFG1_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VFG1_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VFG1_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VFG1_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [7:0] VFG1_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [11:0] VFG1_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VFG1_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [11:0] VFG2_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] VFG2_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer VFG2_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VFG2_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VFG2_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VFG2_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VFG2_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [7:0] VFG2_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [11:0] VFG2_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VFG2_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [11:0] VFG3_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] VFG3_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer VFG3_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VFG3_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VFG3_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VFG3_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VFG3_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter [7:0] VFG3_PCIE_CAP_NEXTPTR = 8'h00;
+ parameter [11:0] VFG3_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VFG3_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ output [7:0] AXIUSEROUT;
+ output [7:0] CFGBUSNUMBER;
+ output [1:0] CFGCURRENTSPEED;
+ output CFGERRCOROUT;
+ output CFGERRFATALOUT;
+ output CFGERRNONFATALOUT;
+ output [7:0] CFGEXTFUNCTIONNUMBER;
+ output CFGEXTREADRECEIVED;
+ output [9:0] CFGEXTREGISTERNUMBER;
+ output [3:0] CFGEXTWRITEBYTEENABLE;
+ output [31:0] CFGEXTWRITEDATA;
+ output CFGEXTWRITERECEIVED;
+ output [11:0] CFGFCCPLD;
+ output [7:0] CFGFCCPLH;
+ output [11:0] CFGFCNPD;
+ output [7:0] CFGFCNPH;
+ output [11:0] CFGFCPD;
+ output [7:0] CFGFCPH;
+ output [3:0] CFGFLRINPROCESS;
+ output [11:0] CFGFUNCTIONPOWERSTATE;
+ output [15:0] CFGFUNCTIONSTATUS;
+ output CFGHOTRESETOUT;
+ output [31:0] CFGINTERRUPTMSIDATA;
+ output [3:0] CFGINTERRUPTMSIENABLE;
+ output CFGINTERRUPTMSIFAIL;
+ output CFGINTERRUPTMSIMASKUPDATE;
+ output [11:0] CFGINTERRUPTMSIMMENABLE;
+ output CFGINTERRUPTMSISENT;
+ output [3:0] CFGINTERRUPTMSIXENABLE;
+ output [3:0] CFGINTERRUPTMSIXMASK;
+ output CFGINTERRUPTMSIXVECPENDINGSTATUS;
+ output CFGINTERRUPTSENT;
+ output [1:0] CFGLINKPOWERSTATE;
+ output [4:0] CFGLOCALERROROUT;
+ output CFGLOCALERRORVALID;
+ output CFGLTRENABLE;
+ output [5:0] CFGLTSSMSTATE;
+ output [1:0] CFGMAXPAYLOAD;
+ output [2:0] CFGMAXREADREQ;
+ output [31:0] CFGMGMTREADDATA;
+ output CFGMGMTREADWRITEDONE;
+ output CFGMSGRECEIVED;
+ output [7:0] CFGMSGRECEIVEDDATA;
+ output [4:0] CFGMSGRECEIVEDTYPE;
+ output CFGMSGTRANSMITDONE;
+ output [12:0] CFGMSIXRAMADDRESS;
+ output CFGMSIXRAMREADENABLE;
+ output [3:0] CFGMSIXRAMWRITEBYTEENABLE;
+ output [35:0] CFGMSIXRAMWRITEDATA;
+ output [2:0] CFGNEGOTIATEDWIDTH;
+ output [1:0] CFGOBFFENABLE;
+ output CFGPHYLINKDOWN;
+ output [1:0] CFGPHYLINKSTATUS;
+ output CFGPLSTATUSCHANGE;
+ output CFGPOWERSTATECHANGEINTERRUPT;
+ output [3:0] CFGRCBSTATUS;
+ output [1:0] CFGRXPMSTATE;
+ output [11:0] CFGTPHRAMADDRESS;
+ output CFGTPHRAMREADENABLE;
+ output [3:0] CFGTPHRAMWRITEBYTEENABLE;
+ output [35:0] CFGTPHRAMWRITEDATA;
+ output [3:0] CFGTPHREQUESTERENABLE;
+ output [11:0] CFGTPHSTMODE;
+ output [1:0] CFGTXPMSTATE;
+ output CONFMCAPDESIGNSWITCH;
+ output CONFMCAPEOS;
+ output CONFMCAPINUSEBYPCIE;
+ output CONFREQREADY;
+ output [31:0] CONFRESPRDATA;
+ output CONFRESPVALID;
+ output [31:0] DBGCTRL0OUT;
+ output [31:0] DBGCTRL1OUT;
+ output [255:0] DBGDATA0OUT;
+ output [255:0] DBGDATA1OUT;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output [255:0] MAXISCQTDATA;
+ output [7:0] MAXISCQTKEEP;
+ output MAXISCQTLAST;
+ output [87:0] MAXISCQTUSER;
+ output MAXISCQTVALID;
+ output [255:0] MAXISRCTDATA;
+ output [7:0] MAXISRCTKEEP;
+ output MAXISRCTLAST;
+ output [74:0] MAXISRCTUSER;
+ output MAXISRCTVALID;
+ output [8:0] MIREPLAYRAMADDRESS0;
+ output [8:0] MIREPLAYRAMADDRESS1;
+ output MIREPLAYRAMREADENABLE0;
+ output MIREPLAYRAMREADENABLE1;
+ output [127:0] MIREPLAYRAMWRITEDATA0;
+ output [127:0] MIREPLAYRAMWRITEDATA1;
+ output MIREPLAYRAMWRITEENABLE0;
+ output MIREPLAYRAMWRITEENABLE1;
+ output [8:0] MIRXCOMPLETIONRAMREADADDRESS0;
+ output [8:0] MIRXCOMPLETIONRAMREADADDRESS1;
+ output [1:0] MIRXCOMPLETIONRAMREADENABLE0;
+ output [1:0] MIRXCOMPLETIONRAMREADENABLE1;
+ output [8:0] MIRXCOMPLETIONRAMWRITEADDRESS0;
+ output [8:0] MIRXCOMPLETIONRAMWRITEADDRESS1;
+ output [143:0] MIRXCOMPLETIONRAMWRITEDATA0;
+ output [143:0] MIRXCOMPLETIONRAMWRITEDATA1;
+ output [1:0] MIRXCOMPLETIONRAMWRITEENABLE0;
+ output [1:0] MIRXCOMPLETIONRAMWRITEENABLE1;
+ output [8:0] MIRXPOSTEDREQUESTRAMREADADDRESS0;
+ output [8:0] MIRXPOSTEDREQUESTRAMREADADDRESS1;
+ output MIRXPOSTEDREQUESTRAMREADENABLE0;
+ output MIRXPOSTEDREQUESTRAMREADENABLE1;
+ output [8:0] MIRXPOSTEDREQUESTRAMWRITEADDRESS0;
+ output [8:0] MIRXPOSTEDREQUESTRAMWRITEADDRESS1;
+ output [143:0] MIRXPOSTEDREQUESTRAMWRITEDATA0;
+ output [143:0] MIRXPOSTEDREQUESTRAMWRITEDATA1;
+ output MIRXPOSTEDREQUESTRAMWRITEENABLE0;
+ output MIRXPOSTEDREQUESTRAMWRITEENABLE1;
+ output [5:0] PCIECQNPREQCOUNT;
+ output PCIEPERST0B;
+ output PCIEPERST1B;
+ output [5:0] PCIERQSEQNUM0;
+ output [5:0] PCIERQSEQNUM1;
+ output PCIERQSEQNUMVLD0;
+ output PCIERQSEQNUMVLD1;
+ output [7:0] PCIERQTAG0;
+ output [7:0] PCIERQTAG1;
+ output [3:0] PCIERQTAGAV;
+ output PCIERQTAGVLD0;
+ output PCIERQTAGVLD1;
+ output [3:0] PCIETFCNPDAV;
+ output [3:0] PCIETFCNPHAV;
+ output [1:0] PIPERX00EQCONTROL;
+ output PIPERX00POLARITY;
+ output [1:0] PIPERX01EQCONTROL;
+ output PIPERX01POLARITY;
+ output [1:0] PIPERX02EQCONTROL;
+ output PIPERX02POLARITY;
+ output [1:0] PIPERX03EQCONTROL;
+ output PIPERX03POLARITY;
+ output [1:0] PIPERX04EQCONTROL;
+ output PIPERX04POLARITY;
+ output [1:0] PIPERX05EQCONTROL;
+ output PIPERX05POLARITY;
+ output [1:0] PIPERX06EQCONTROL;
+ output PIPERX06POLARITY;
+ output [1:0] PIPERX07EQCONTROL;
+ output PIPERX07POLARITY;
+ output [1:0] PIPERX08EQCONTROL;
+ output PIPERX08POLARITY;
+ output [1:0] PIPERX09EQCONTROL;
+ output PIPERX09POLARITY;
+ output [1:0] PIPERX10EQCONTROL;
+ output PIPERX10POLARITY;
+ output [1:0] PIPERX11EQCONTROL;
+ output PIPERX11POLARITY;
+ output [1:0] PIPERX12EQCONTROL;
+ output PIPERX12POLARITY;
+ output [1:0] PIPERX13EQCONTROL;
+ output PIPERX13POLARITY;
+ output [1:0] PIPERX14EQCONTROL;
+ output PIPERX14POLARITY;
+ output [1:0] PIPERX15EQCONTROL;
+ output PIPERX15POLARITY;
+ output [5:0] PIPERXEQLPLFFS;
+ output [3:0] PIPERXEQLPTXPRESET;
+ output [1:0] PIPETX00CHARISK;
+ output PIPETX00COMPLIANCE;
+ output [31:0] PIPETX00DATA;
+ output PIPETX00DATAVALID;
+ output PIPETX00ELECIDLE;
+ output [1:0] PIPETX00EQCONTROL;
+ output [5:0] PIPETX00EQDEEMPH;
+ output [1:0] PIPETX00POWERDOWN;
+ output PIPETX00STARTBLOCK;
+ output [1:0] PIPETX00SYNCHEADER;
+ output [1:0] PIPETX01CHARISK;
+ output PIPETX01COMPLIANCE;
+ output [31:0] PIPETX01DATA;
+ output PIPETX01DATAVALID;
+ output PIPETX01ELECIDLE;
+ output [1:0] PIPETX01EQCONTROL;
+ output [5:0] PIPETX01EQDEEMPH;
+ output [1:0] PIPETX01POWERDOWN;
+ output PIPETX01STARTBLOCK;
+ output [1:0] PIPETX01SYNCHEADER;
+ output [1:0] PIPETX02CHARISK;
+ output PIPETX02COMPLIANCE;
+ output [31:0] PIPETX02DATA;
+ output PIPETX02DATAVALID;
+ output PIPETX02ELECIDLE;
+ output [1:0] PIPETX02EQCONTROL;
+ output [5:0] PIPETX02EQDEEMPH;
+ output [1:0] PIPETX02POWERDOWN;
+ output PIPETX02STARTBLOCK;
+ output [1:0] PIPETX02SYNCHEADER;
+ output [1:0] PIPETX03CHARISK;
+ output PIPETX03COMPLIANCE;
+ output [31:0] PIPETX03DATA;
+ output PIPETX03DATAVALID;
+ output PIPETX03ELECIDLE;
+ output [1:0] PIPETX03EQCONTROL;
+ output [5:0] PIPETX03EQDEEMPH;
+ output [1:0] PIPETX03POWERDOWN;
+ output PIPETX03STARTBLOCK;
+ output [1:0] PIPETX03SYNCHEADER;
+ output [1:0] PIPETX04CHARISK;
+ output PIPETX04COMPLIANCE;
+ output [31:0] PIPETX04DATA;
+ output PIPETX04DATAVALID;
+ output PIPETX04ELECIDLE;
+ output [1:0] PIPETX04EQCONTROL;
+ output [5:0] PIPETX04EQDEEMPH;
+ output [1:0] PIPETX04POWERDOWN;
+ output PIPETX04STARTBLOCK;
+ output [1:0] PIPETX04SYNCHEADER;
+ output [1:0] PIPETX05CHARISK;
+ output PIPETX05COMPLIANCE;
+ output [31:0] PIPETX05DATA;
+ output PIPETX05DATAVALID;
+ output PIPETX05ELECIDLE;
+ output [1:0] PIPETX05EQCONTROL;
+ output [5:0] PIPETX05EQDEEMPH;
+ output [1:0] PIPETX05POWERDOWN;
+ output PIPETX05STARTBLOCK;
+ output [1:0] PIPETX05SYNCHEADER;
+ output [1:0] PIPETX06CHARISK;
+ output PIPETX06COMPLIANCE;
+ output [31:0] PIPETX06DATA;
+ output PIPETX06DATAVALID;
+ output PIPETX06ELECIDLE;
+ output [1:0] PIPETX06EQCONTROL;
+ output [5:0] PIPETX06EQDEEMPH;
+ output [1:0] PIPETX06POWERDOWN;
+ output PIPETX06STARTBLOCK;
+ output [1:0] PIPETX06SYNCHEADER;
+ output [1:0] PIPETX07CHARISK;
+ output PIPETX07COMPLIANCE;
+ output [31:0] PIPETX07DATA;
+ output PIPETX07DATAVALID;
+ output PIPETX07ELECIDLE;
+ output [1:0] PIPETX07EQCONTROL;
+ output [5:0] PIPETX07EQDEEMPH;
+ output [1:0] PIPETX07POWERDOWN;
+ output PIPETX07STARTBLOCK;
+ output [1:0] PIPETX07SYNCHEADER;
+ output [1:0] PIPETX08CHARISK;
+ output PIPETX08COMPLIANCE;
+ output [31:0] PIPETX08DATA;
+ output PIPETX08DATAVALID;
+ output PIPETX08ELECIDLE;
+ output [1:0] PIPETX08EQCONTROL;
+ output [5:0] PIPETX08EQDEEMPH;
+ output [1:0] PIPETX08POWERDOWN;
+ output PIPETX08STARTBLOCK;
+ output [1:0] PIPETX08SYNCHEADER;
+ output [1:0] PIPETX09CHARISK;
+ output PIPETX09COMPLIANCE;
+ output [31:0] PIPETX09DATA;
+ output PIPETX09DATAVALID;
+ output PIPETX09ELECIDLE;
+ output [1:0] PIPETX09EQCONTROL;
+ output [5:0] PIPETX09EQDEEMPH;
+ output [1:0] PIPETX09POWERDOWN;
+ output PIPETX09STARTBLOCK;
+ output [1:0] PIPETX09SYNCHEADER;
+ output [1:0] PIPETX10CHARISK;
+ output PIPETX10COMPLIANCE;
+ output [31:0] PIPETX10DATA;
+ output PIPETX10DATAVALID;
+ output PIPETX10ELECIDLE;
+ output [1:0] PIPETX10EQCONTROL;
+ output [5:0] PIPETX10EQDEEMPH;
+ output [1:0] PIPETX10POWERDOWN;
+ output PIPETX10STARTBLOCK;
+ output [1:0] PIPETX10SYNCHEADER;
+ output [1:0] PIPETX11CHARISK;
+ output PIPETX11COMPLIANCE;
+ output [31:0] PIPETX11DATA;
+ output PIPETX11DATAVALID;
+ output PIPETX11ELECIDLE;
+ output [1:0] PIPETX11EQCONTROL;
+ output [5:0] PIPETX11EQDEEMPH;
+ output [1:0] PIPETX11POWERDOWN;
+ output PIPETX11STARTBLOCK;
+ output [1:0] PIPETX11SYNCHEADER;
+ output [1:0] PIPETX12CHARISK;
+ output PIPETX12COMPLIANCE;
+ output [31:0] PIPETX12DATA;
+ output PIPETX12DATAVALID;
+ output PIPETX12ELECIDLE;
+ output [1:0] PIPETX12EQCONTROL;
+ output [5:0] PIPETX12EQDEEMPH;
+ output [1:0] PIPETX12POWERDOWN;
+ output PIPETX12STARTBLOCK;
+ output [1:0] PIPETX12SYNCHEADER;
+ output [1:0] PIPETX13CHARISK;
+ output PIPETX13COMPLIANCE;
+ output [31:0] PIPETX13DATA;
+ output PIPETX13DATAVALID;
+ output PIPETX13ELECIDLE;
+ output [1:0] PIPETX13EQCONTROL;
+ output [5:0] PIPETX13EQDEEMPH;
+ output [1:0] PIPETX13POWERDOWN;
+ output PIPETX13STARTBLOCK;
+ output [1:0] PIPETX13SYNCHEADER;
+ output [1:0] PIPETX14CHARISK;
+ output PIPETX14COMPLIANCE;
+ output [31:0] PIPETX14DATA;
+ output PIPETX14DATAVALID;
+ output PIPETX14ELECIDLE;
+ output [1:0] PIPETX14EQCONTROL;
+ output [5:0] PIPETX14EQDEEMPH;
+ output [1:0] PIPETX14POWERDOWN;
+ output PIPETX14STARTBLOCK;
+ output [1:0] PIPETX14SYNCHEADER;
+ output [1:0] PIPETX15CHARISK;
+ output PIPETX15COMPLIANCE;
+ output [31:0] PIPETX15DATA;
+ output PIPETX15DATAVALID;
+ output PIPETX15ELECIDLE;
+ output [1:0] PIPETX15EQCONTROL;
+ output [5:0] PIPETX15EQDEEMPH;
+ output [1:0] PIPETX15POWERDOWN;
+ output PIPETX15STARTBLOCK;
+ output [1:0] PIPETX15SYNCHEADER;
+ output PIPETXDEEMPH;
+ output [2:0] PIPETXMARGIN;
+ output [1:0] PIPETXRATE;
+ output PIPETXRCVRDET;
+ output PIPETXRESET;
+ output PIPETXSWING;
+ output PLEQINPROGRESS;
+ output [1:0] PLEQPHASE;
+ output PLGEN34EQMISMATCH;
+ output [3:0] SAXISCCTREADY;
+ output [3:0] SAXISRQTREADY;
+ output [31:0] USERSPAREOUT;
+ input [7:0] AXIUSERIN;
+ input CFGCONFIGSPACEENABLE;
+ input [15:0] CFGDEVIDPF0;
+ input [15:0] CFGDEVIDPF1;
+ input [15:0] CFGDEVIDPF2;
+ input [15:0] CFGDEVIDPF3;
+ input [7:0] CFGDSBUSNUMBER;
+ input [4:0] CFGDSDEVICENUMBER;
+ input [2:0] CFGDSFUNCTIONNUMBER;
+ input [63:0] CFGDSN;
+ input [7:0] CFGDSPORTNUMBER;
+ input CFGERRCORIN;
+ input CFGERRUNCORIN;
+ input [31:0] CFGEXTREADDATA;
+ input CFGEXTREADDATAVALID;
+ input [2:0] CFGFCSEL;
+ input [3:0] CFGFLRDONE;
+ input CFGHOTRESETIN;
+ input [3:0] CFGINTERRUPTINT;
+ input [2:0] CFGINTERRUPTMSIATTR;
+ input [7:0] CFGINTERRUPTMSIFUNCTIONNUMBER;
+ input [31:0] CFGINTERRUPTMSIINT;
+ input [31:0] CFGINTERRUPTMSIPENDINGSTATUS;
+ input CFGINTERRUPTMSIPENDINGSTATUSDATAENABLE;
+ input [1:0] CFGINTERRUPTMSIPENDINGSTATUSFUNCTIONNUM;
+ input [1:0] CFGINTERRUPTMSISELECT;
+ input CFGINTERRUPTMSITPHPRESENT;
+ input [7:0] CFGINTERRUPTMSITPHSTTAG;
+ input [1:0] CFGINTERRUPTMSITPHTYPE;
+ input [63:0] CFGINTERRUPTMSIXADDRESS;
+ input [31:0] CFGINTERRUPTMSIXDATA;
+ input CFGINTERRUPTMSIXINT;
+ input [1:0] CFGINTERRUPTMSIXVECPENDING;
+ input [3:0] CFGINTERRUPTPENDING;
+ input CFGLINKTRAININGENABLE;
+ input [9:0] CFGMGMTADDR;
+ input [3:0] CFGMGMTBYTEENABLE;
+ input CFGMGMTDEBUGACCESS;
+ input [7:0] CFGMGMTFUNCTIONNUMBER;
+ input CFGMGMTREAD;
+ input CFGMGMTWRITE;
+ input [31:0] CFGMGMTWRITEDATA;
+ input CFGMSGTRANSMIT;
+ input [31:0] CFGMSGTRANSMITDATA;
+ input [2:0] CFGMSGTRANSMITTYPE;
+ input [35:0] CFGMSIXRAMREADDATA;
+ input CFGPMASPML1ENTRYREJECT;
+ input CFGPMASPMTXL0SENTRYDISABLE;
+ input CFGPOWERSTATECHANGEACK;
+ input CFGREQPMTRANSITIONL23READY;
+ input [7:0] CFGREVIDPF0;
+ input [7:0] CFGREVIDPF1;
+ input [7:0] CFGREVIDPF2;
+ input [7:0] CFGREVIDPF3;
+ input [15:0] CFGSUBSYSIDPF0;
+ input [15:0] CFGSUBSYSIDPF1;
+ input [15:0] CFGSUBSYSIDPF2;
+ input [15:0] CFGSUBSYSIDPF3;
+ input [15:0] CFGSUBSYSVENDID;
+ input [35:0] CFGTPHRAMREADDATA;
+ input [15:0] CFGVENDID;
+ input CFGVFFLRDONE;
+ input [7:0] CFGVFFLRFUNCNUM;
+ input CONFMCAPREQUESTBYCONF;
+ input [31:0] CONFREQDATA;
+ input [3:0] CONFREQREGNUM;
+ input [1:0] CONFREQTYPE;
+ input CONFREQVALID;
+ input CORECLK;
+ input CORECLKMIREPLAYRAM0;
+ input CORECLKMIREPLAYRAM1;
+ input CORECLKMIRXCOMPLETIONRAM0;
+ input CORECLKMIRXCOMPLETIONRAM1;
+ input CORECLKMIRXPOSTEDREQUESTRAM0;
+ input CORECLKMIRXPOSTEDREQUESTRAM1;
+ input [5:0] DBGSEL0;
+ input [5:0] DBGSEL1;
+ input [9:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input [21:0] MAXISCQTREADY;
+ input [21:0] MAXISRCTREADY;
+ input MCAPCLK;
+ input MCAPPERST0B;
+ input MCAPPERST1B;
+ input MGMTRESETN;
+ input MGMTSTICKYRESETN;
+ input [5:0] MIREPLAYRAMERRCOR;
+ input [5:0] MIREPLAYRAMERRUNCOR;
+ input [127:0] MIREPLAYRAMREADDATA0;
+ input [127:0] MIREPLAYRAMREADDATA1;
+ input [11:0] MIRXCOMPLETIONRAMERRCOR;
+ input [11:0] MIRXCOMPLETIONRAMERRUNCOR;
+ input [143:0] MIRXCOMPLETIONRAMREADDATA0;
+ input [143:0] MIRXCOMPLETIONRAMREADDATA1;
+ input [5:0] MIRXPOSTEDREQUESTRAMERRCOR;
+ input [5:0] MIRXPOSTEDREQUESTRAMERRUNCOR;
+ input [143:0] MIRXPOSTEDREQUESTRAMREADDATA0;
+ input [143:0] MIRXPOSTEDREQUESTRAMREADDATA1;
+ input [1:0] PCIECOMPLDELIVERED;
+ input [7:0] PCIECOMPLDELIVEREDTAG0;
+ input [7:0] PCIECOMPLDELIVEREDTAG1;
+ input [1:0] PCIECQNPREQ;
+ input PCIECQNPUSERCREDITRCVD;
+ input PCIECQPIPELINEEMPTY;
+ input PCIEPOSTEDREQDELIVERED;
+ input PIPECLK;
+ input PIPECLKEN;
+ input [5:0] PIPEEQFS;
+ input [5:0] PIPEEQLF;
+ input PIPERESETN;
+ input [1:0] PIPERX00CHARISK;
+ input [31:0] PIPERX00DATA;
+ input PIPERX00DATAVALID;
+ input PIPERX00ELECIDLE;
+ input PIPERX00EQDONE;
+ input PIPERX00EQLPADAPTDONE;
+ input PIPERX00EQLPLFFSSEL;
+ input [17:0] PIPERX00EQLPNEWTXCOEFFORPRESET;
+ input PIPERX00PHYSTATUS;
+ input [1:0] PIPERX00STARTBLOCK;
+ input [2:0] PIPERX00STATUS;
+ input [1:0] PIPERX00SYNCHEADER;
+ input PIPERX00VALID;
+ input [1:0] PIPERX01CHARISK;
+ input [31:0] PIPERX01DATA;
+ input PIPERX01DATAVALID;
+ input PIPERX01ELECIDLE;
+ input PIPERX01EQDONE;
+ input PIPERX01EQLPADAPTDONE;
+ input PIPERX01EQLPLFFSSEL;
+ input [17:0] PIPERX01EQLPNEWTXCOEFFORPRESET;
+ input PIPERX01PHYSTATUS;
+ input [1:0] PIPERX01STARTBLOCK;
+ input [2:0] PIPERX01STATUS;
+ input [1:0] PIPERX01SYNCHEADER;
+ input PIPERX01VALID;
+ input [1:0] PIPERX02CHARISK;
+ input [31:0] PIPERX02DATA;
+ input PIPERX02DATAVALID;
+ input PIPERX02ELECIDLE;
+ input PIPERX02EQDONE;
+ input PIPERX02EQLPADAPTDONE;
+ input PIPERX02EQLPLFFSSEL;
+ input [17:0] PIPERX02EQLPNEWTXCOEFFORPRESET;
+ input PIPERX02PHYSTATUS;
+ input [1:0] PIPERX02STARTBLOCK;
+ input [2:0] PIPERX02STATUS;
+ input [1:0] PIPERX02SYNCHEADER;
+ input PIPERX02VALID;
+ input [1:0] PIPERX03CHARISK;
+ input [31:0] PIPERX03DATA;
+ input PIPERX03DATAVALID;
+ input PIPERX03ELECIDLE;
+ input PIPERX03EQDONE;
+ input PIPERX03EQLPADAPTDONE;
+ input PIPERX03EQLPLFFSSEL;
+ input [17:0] PIPERX03EQLPNEWTXCOEFFORPRESET;
+ input PIPERX03PHYSTATUS;
+ input [1:0] PIPERX03STARTBLOCK;
+ input [2:0] PIPERX03STATUS;
+ input [1:0] PIPERX03SYNCHEADER;
+ input PIPERX03VALID;
+ input [1:0] PIPERX04CHARISK;
+ input [31:0] PIPERX04DATA;
+ input PIPERX04DATAVALID;
+ input PIPERX04ELECIDLE;
+ input PIPERX04EQDONE;
+ input PIPERX04EQLPADAPTDONE;
+ input PIPERX04EQLPLFFSSEL;
+ input [17:0] PIPERX04EQLPNEWTXCOEFFORPRESET;
+ input PIPERX04PHYSTATUS;
+ input [1:0] PIPERX04STARTBLOCK;
+ input [2:0] PIPERX04STATUS;
+ input [1:0] PIPERX04SYNCHEADER;
+ input PIPERX04VALID;
+ input [1:0] PIPERX05CHARISK;
+ input [31:0] PIPERX05DATA;
+ input PIPERX05DATAVALID;
+ input PIPERX05ELECIDLE;
+ input PIPERX05EQDONE;
+ input PIPERX05EQLPADAPTDONE;
+ input PIPERX05EQLPLFFSSEL;
+ input [17:0] PIPERX05EQLPNEWTXCOEFFORPRESET;
+ input PIPERX05PHYSTATUS;
+ input [1:0] PIPERX05STARTBLOCK;
+ input [2:0] PIPERX05STATUS;
+ input [1:0] PIPERX05SYNCHEADER;
+ input PIPERX05VALID;
+ input [1:0] PIPERX06CHARISK;
+ input [31:0] PIPERX06DATA;
+ input PIPERX06DATAVALID;
+ input PIPERX06ELECIDLE;
+ input PIPERX06EQDONE;
+ input PIPERX06EQLPADAPTDONE;
+ input PIPERX06EQLPLFFSSEL;
+ input [17:0] PIPERX06EQLPNEWTXCOEFFORPRESET;
+ input PIPERX06PHYSTATUS;
+ input [1:0] PIPERX06STARTBLOCK;
+ input [2:0] PIPERX06STATUS;
+ input [1:0] PIPERX06SYNCHEADER;
+ input PIPERX06VALID;
+ input [1:0] PIPERX07CHARISK;
+ input [31:0] PIPERX07DATA;
+ input PIPERX07DATAVALID;
+ input PIPERX07ELECIDLE;
+ input PIPERX07EQDONE;
+ input PIPERX07EQLPADAPTDONE;
+ input PIPERX07EQLPLFFSSEL;
+ input [17:0] PIPERX07EQLPNEWTXCOEFFORPRESET;
+ input PIPERX07PHYSTATUS;
+ input [1:0] PIPERX07STARTBLOCK;
+ input [2:0] PIPERX07STATUS;
+ input [1:0] PIPERX07SYNCHEADER;
+ input PIPERX07VALID;
+ input [1:0] PIPERX08CHARISK;
+ input [31:0] PIPERX08DATA;
+ input PIPERX08DATAVALID;
+ input PIPERX08ELECIDLE;
+ input PIPERX08EQDONE;
+ input PIPERX08EQLPADAPTDONE;
+ input PIPERX08EQLPLFFSSEL;
+ input [17:0] PIPERX08EQLPNEWTXCOEFFORPRESET;
+ input PIPERX08PHYSTATUS;
+ input [1:0] PIPERX08STARTBLOCK;
+ input [2:0] PIPERX08STATUS;
+ input [1:0] PIPERX08SYNCHEADER;
+ input PIPERX08VALID;
+ input [1:0] PIPERX09CHARISK;
+ input [31:0] PIPERX09DATA;
+ input PIPERX09DATAVALID;
+ input PIPERX09ELECIDLE;
+ input PIPERX09EQDONE;
+ input PIPERX09EQLPADAPTDONE;
+ input PIPERX09EQLPLFFSSEL;
+ input [17:0] PIPERX09EQLPNEWTXCOEFFORPRESET;
+ input PIPERX09PHYSTATUS;
+ input [1:0] PIPERX09STARTBLOCK;
+ input [2:0] PIPERX09STATUS;
+ input [1:0] PIPERX09SYNCHEADER;
+ input PIPERX09VALID;
+ input [1:0] PIPERX10CHARISK;
+ input [31:0] PIPERX10DATA;
+ input PIPERX10DATAVALID;
+ input PIPERX10ELECIDLE;
+ input PIPERX10EQDONE;
+ input PIPERX10EQLPADAPTDONE;
+ input PIPERX10EQLPLFFSSEL;
+ input [17:0] PIPERX10EQLPNEWTXCOEFFORPRESET;
+ input PIPERX10PHYSTATUS;
+ input [1:0] PIPERX10STARTBLOCK;
+ input [2:0] PIPERX10STATUS;
+ input [1:0] PIPERX10SYNCHEADER;
+ input PIPERX10VALID;
+ input [1:0] PIPERX11CHARISK;
+ input [31:0] PIPERX11DATA;
+ input PIPERX11DATAVALID;
+ input PIPERX11ELECIDLE;
+ input PIPERX11EQDONE;
+ input PIPERX11EQLPADAPTDONE;
+ input PIPERX11EQLPLFFSSEL;
+ input [17:0] PIPERX11EQLPNEWTXCOEFFORPRESET;
+ input PIPERX11PHYSTATUS;
+ input [1:0] PIPERX11STARTBLOCK;
+ input [2:0] PIPERX11STATUS;
+ input [1:0] PIPERX11SYNCHEADER;
+ input PIPERX11VALID;
+ input [1:0] PIPERX12CHARISK;
+ input [31:0] PIPERX12DATA;
+ input PIPERX12DATAVALID;
+ input PIPERX12ELECIDLE;
+ input PIPERX12EQDONE;
+ input PIPERX12EQLPADAPTDONE;
+ input PIPERX12EQLPLFFSSEL;
+ input [17:0] PIPERX12EQLPNEWTXCOEFFORPRESET;
+ input PIPERX12PHYSTATUS;
+ input [1:0] PIPERX12STARTBLOCK;
+ input [2:0] PIPERX12STATUS;
+ input [1:0] PIPERX12SYNCHEADER;
+ input PIPERX12VALID;
+ input [1:0] PIPERX13CHARISK;
+ input [31:0] PIPERX13DATA;
+ input PIPERX13DATAVALID;
+ input PIPERX13ELECIDLE;
+ input PIPERX13EQDONE;
+ input PIPERX13EQLPADAPTDONE;
+ input PIPERX13EQLPLFFSSEL;
+ input [17:0] PIPERX13EQLPNEWTXCOEFFORPRESET;
+ input PIPERX13PHYSTATUS;
+ input [1:0] PIPERX13STARTBLOCK;
+ input [2:0] PIPERX13STATUS;
+ input [1:0] PIPERX13SYNCHEADER;
+ input PIPERX13VALID;
+ input [1:0] PIPERX14CHARISK;
+ input [31:0] PIPERX14DATA;
+ input PIPERX14DATAVALID;
+ input PIPERX14ELECIDLE;
+ input PIPERX14EQDONE;
+ input PIPERX14EQLPADAPTDONE;
+ input PIPERX14EQLPLFFSSEL;
+ input [17:0] PIPERX14EQLPNEWTXCOEFFORPRESET;
+ input PIPERX14PHYSTATUS;
+ input [1:0] PIPERX14STARTBLOCK;
+ input [2:0] PIPERX14STATUS;
+ input [1:0] PIPERX14SYNCHEADER;
+ input PIPERX14VALID;
+ input [1:0] PIPERX15CHARISK;
+ input [31:0] PIPERX15DATA;
+ input PIPERX15DATAVALID;
+ input PIPERX15ELECIDLE;
+ input PIPERX15EQDONE;
+ input PIPERX15EQLPADAPTDONE;
+ input PIPERX15EQLPLFFSSEL;
+ input [17:0] PIPERX15EQLPNEWTXCOEFFORPRESET;
+ input PIPERX15PHYSTATUS;
+ input [1:0] PIPERX15STARTBLOCK;
+ input [2:0] PIPERX15STATUS;
+ input [1:0] PIPERX15SYNCHEADER;
+ input PIPERX15VALID;
+ input [17:0] PIPETX00EQCOEFF;
+ input PIPETX00EQDONE;
+ input [17:0] PIPETX01EQCOEFF;
+ input PIPETX01EQDONE;
+ input [17:0] PIPETX02EQCOEFF;
+ input PIPETX02EQDONE;
+ input [17:0] PIPETX03EQCOEFF;
+ input PIPETX03EQDONE;
+ input [17:0] PIPETX04EQCOEFF;
+ input PIPETX04EQDONE;
+ input [17:0] PIPETX05EQCOEFF;
+ input PIPETX05EQDONE;
+ input [17:0] PIPETX06EQCOEFF;
+ input PIPETX06EQDONE;
+ input [17:0] PIPETX07EQCOEFF;
+ input PIPETX07EQDONE;
+ input [17:0] PIPETX08EQCOEFF;
+ input PIPETX08EQDONE;
+ input [17:0] PIPETX09EQCOEFF;
+ input PIPETX09EQDONE;
+ input [17:0] PIPETX10EQCOEFF;
+ input PIPETX10EQDONE;
+ input [17:0] PIPETX11EQCOEFF;
+ input PIPETX11EQDONE;
+ input [17:0] PIPETX12EQCOEFF;
+ input PIPETX12EQDONE;
+ input [17:0] PIPETX13EQCOEFF;
+ input PIPETX13EQDONE;
+ input [17:0] PIPETX14EQCOEFF;
+ input PIPETX14EQDONE;
+ input [17:0] PIPETX15EQCOEFF;
+ input PIPETX15EQDONE;
+ input PLEQRESETEIEOSCOUNT;
+ input PLGEN2UPSTREAMPREFERDEEMPH;
+ input PLGEN34REDOEQSPEED;
+ input PLGEN34REDOEQUALIZATION;
+ input RESETN;
+ input [255:0] SAXISCCTDATA;
+ input [7:0] SAXISCCTKEEP;
+ input SAXISCCTLAST;
+ input [32:0] SAXISCCTUSER;
+ input SAXISCCTVALID;
+ input [255:0] SAXISRQTDATA;
+ input [7:0] SAXISRQTKEEP;
+ input SAXISRQTLAST;
+ input [61:0] SAXISRQTUSER;
+ input SAXISRQTVALID;
+ input USERCLK;
+ input USERCLK2;
+ input USERCLKEN;
+ input [31:0] USERSPAREIN;
+endmodule
+
+module PCIE_3_1 (...);
+ parameter ARI_CAP_ENABLE = "FALSE";
+ parameter AXISTEN_IF_CC_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_CC_PARITY_CHK = "TRUE";
+ parameter AXISTEN_IF_CQ_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_ENABLE_CLIENT_TAG = "FALSE";
+ parameter [17:0] AXISTEN_IF_ENABLE_MSG_ROUTE = 18'h00000;
+ parameter AXISTEN_IF_ENABLE_RX_MSG_INTFC = "FALSE";
+ parameter AXISTEN_IF_RC_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_RC_STRADDLE = "FALSE";
+ parameter AXISTEN_IF_RQ_ALIGNMENT_MODE = "FALSE";
+ parameter AXISTEN_IF_RQ_PARITY_CHK = "TRUE";
+ parameter [1:0] AXISTEN_IF_WIDTH = 2'h2;
+ parameter CRM_CORE_CLK_FREQ_500 = "TRUE";
+ parameter [1:0] CRM_USER_CLK_FREQ = 2'h2;
+ parameter DEBUG_CFG_LOCAL_MGMT_REG_ACCESS_OVERRIDE = "FALSE";
+ parameter DEBUG_PL_DISABLE_EI_INFER_IN_L0 = "FALSE";
+ parameter DEBUG_TL_DISABLE_RX_TLP_ORDER_CHECKS = "FALSE";
+ parameter [7:0] DNSTREAM_LINK_NUM = 8'h00;
+ parameter [8:0] LL_ACK_TIMEOUT = 9'h000;
+ parameter LL_ACK_TIMEOUT_EN = "FALSE";
+ parameter integer LL_ACK_TIMEOUT_FUNC = 0;
+ parameter [15:0] LL_CPL_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_CPL_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [15:0] LL_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [15:0] LL_NP_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_NP_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [15:0] LL_P_FC_UPDATE_TIMER = 16'h0000;
+ parameter LL_P_FC_UPDATE_TIMER_OVERRIDE = "FALSE";
+ parameter [8:0] LL_REPLAY_TIMEOUT = 9'h000;
+ parameter LL_REPLAY_TIMEOUT_EN = "FALSE";
+ parameter integer LL_REPLAY_TIMEOUT_FUNC = 0;
+ parameter [9:0] LTR_TX_MESSAGE_MINIMUM_INTERVAL = 10'h0FA;
+ parameter LTR_TX_MESSAGE_ON_FUNC_POWER_STATE_CHANGE = "FALSE";
+ parameter LTR_TX_MESSAGE_ON_LTR_ENABLE = "FALSE";
+ parameter [11:0] MCAP_CAP_NEXTPTR = 12'h000;
+ parameter MCAP_CONFIGURE_OVERRIDE = "FALSE";
+ parameter MCAP_ENABLE = "FALSE";
+ parameter MCAP_EOS_DESIGN_SWITCH = "FALSE";
+ parameter [31:0] MCAP_FPGA_BITSTREAM_VERSION = 32'h00000000;
+ parameter MCAP_GATE_IO_ENABLE_DESIGN_SWITCH = "FALSE";
+ parameter MCAP_GATE_MEM_ENABLE_DESIGN_SWITCH = "FALSE";
+ parameter MCAP_INPUT_GATE_DESIGN_SWITCH = "FALSE";
+ parameter MCAP_INTERRUPT_ON_MCAP_EOS = "FALSE";
+ parameter MCAP_INTERRUPT_ON_MCAP_ERROR = "FALSE";
+ parameter [15:0] MCAP_VSEC_ID = 16'h0000;
+ parameter [11:0] MCAP_VSEC_LEN = 12'h02C;
+ parameter [3:0] MCAP_VSEC_REV = 4'h0;
+ parameter PF0_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter PF0_AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [11:0] PF0_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF0_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF0_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [3:0] PF0_ARI_CAP_VER = 4'h1;
+ parameter [5:0] PF0_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF0_BAR0_CONTROL = 3'h4;
+ parameter [5:0] PF0_BAR1_APERTURE_SIZE = 6'h00;
+ parameter [2:0] PF0_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF0_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF0_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF0_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF0_BIST_REGISTER = 8'h00;
+ parameter [7:0] PF0_CAPABILITY_POINTER = 8'h50;
+ parameter [23:0] PF0_CLASS_CODE = 24'h000000;
+ parameter [15:0] PF0_DEVICE_ID = 16'h0000;
+ parameter PF0_DEV_CAP2_128B_CAS_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_32B_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_64B_ATOMIC_COMPLETER_SUPPORT = "TRUE";
+ parameter PF0_DEV_CAP2_ARI_FORWARD_ENABLE = "FALSE";
+ parameter PF0_DEV_CAP2_CPL_TIMEOUT_DISABLE = "TRUE";
+ parameter PF0_DEV_CAP2_LTR_SUPPORT = "TRUE";
+ parameter [1:0] PF0_DEV_CAP2_OBFF_SUPPORT = 2'h0;
+ parameter PF0_DEV_CAP2_TPH_COMPLETER_SUPPORT = "FALSE";
+ parameter integer PF0_DEV_CAP_ENDPOINT_L0S_LATENCY = 0;
+ parameter integer PF0_DEV_CAP_ENDPOINT_L1_LATENCY = 0;
+ parameter PF0_DEV_CAP_EXT_TAG_SUPPORTED = "TRUE";
+ parameter PF0_DEV_CAP_FUNCTION_LEVEL_RESET_CAPABLE = "TRUE";
+ parameter [2:0] PF0_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF0_DPA_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF0_DPA_CAP_SUB_STATE_CONTROL = 5'h00;
+ parameter PF0_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE";
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00;
+ parameter [7:0] PF0_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00;
+ parameter [3:0] PF0_DPA_CAP_VER = 4'h1;
+ parameter [11:0] PF0_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF0_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF0_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [7:0] PF0_INTERRUPT_LINE = 8'h00;
+ parameter [2:0] PF0_INTERRUPT_PIN = 3'h1;
+ parameter integer PF0_LINK_CAP_ASPM_SUPPORT = 0;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_COMCLK_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L0S_EXIT_LATENCY_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_COMCLK_GEN3 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN1 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN2 = 7;
+ parameter integer PF0_LINK_CAP_L1_EXIT_LATENCY_GEN3 = 7;
+ parameter PF0_LINK_STATUS_SLOT_CLOCK_CONFIG = "TRUE";
+ parameter [9:0] PF0_LTR_CAP_MAX_NOSNOOP_LAT = 10'h000;
+ parameter [9:0] PF0_LTR_CAP_MAX_SNOOP_LAT = 10'h000;
+ parameter [11:0] PF0_LTR_CAP_NEXTPTR = 12'h000;
+ parameter [3:0] PF0_LTR_CAP_VER = 4'h1;
+ parameter [7:0] PF0_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF0_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF0_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF0_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF0_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF0_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF0_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF0_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [31:0] PF0_PB_CAP_DATA_REG_D0 = 32'h00000000;
+ parameter [31:0] PF0_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000;
+ parameter [31:0] PF0_PB_CAP_DATA_REG_D1 = 32'h00000000;
+ parameter [31:0] PF0_PB_CAP_DATA_REG_D3HOT = 32'h00000000;
+ parameter [11:0] PF0_PB_CAP_NEXTPTR = 12'h000;
+ parameter PF0_PB_CAP_SYSTEM_ALLOCATED = "FALSE";
+ parameter [3:0] PF0_PB_CAP_VER = 4'h1;
+ parameter [7:0] PF0_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF0_PM_CAP_NEXTPTR = 8'h00;
+ parameter PF0_PM_CAP_PMESUPPORT_D0 = "TRUE";
+ parameter PF0_PM_CAP_PMESUPPORT_D1 = "TRUE";
+ parameter PF0_PM_CAP_PMESUPPORT_D3HOT = "TRUE";
+ parameter PF0_PM_CAP_SUPP_D1_STATE = "TRUE";
+ parameter [2:0] PF0_PM_CAP_VER_ID = 3'h3;
+ parameter PF0_PM_CSR_NOSOFTRESET = "TRUE";
+ parameter PF0_RBAR_CAP_ENABLE = "FALSE";
+ parameter [11:0] PF0_RBAR_CAP_NEXTPTR = 12'h000;
+ parameter [19:0] PF0_RBAR_CAP_SIZE0 = 20'h00000;
+ parameter [19:0] PF0_RBAR_CAP_SIZE1 = 20'h00000;
+ parameter [19:0] PF0_RBAR_CAP_SIZE2 = 20'h00000;
+ parameter [3:0] PF0_RBAR_CAP_VER = 4'h1;
+ parameter [2:0] PF0_RBAR_CONTROL_INDEX0 = 3'h0;
+ parameter [2:0] PF0_RBAR_CONTROL_INDEX1 = 3'h0;
+ parameter [2:0] PF0_RBAR_CONTROL_INDEX2 = 3'h0;
+ parameter [4:0] PF0_RBAR_CONTROL_SIZE0 = 5'h00;
+ parameter [4:0] PF0_RBAR_CONTROL_SIZE1 = 5'h00;
+ parameter [4:0] PF0_RBAR_CONTROL_SIZE2 = 5'h00;
+ parameter [2:0] PF0_RBAR_NUM = 3'h1;
+ parameter [7:0] PF0_REVISION_ID = 8'h00;
+ parameter [11:0] PF0_SECONDARY_PCIE_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF0_SRIOV_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF0_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF0_SRIOV_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF0_SRIOV_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF0_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF0_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF0_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF0_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF0_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF0_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF0_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF0_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF0_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF0_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [15:0] PF0_SUBSYSTEM_ID = 16'h0000;
+ parameter PF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF0_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF0_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF0_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF0_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF0_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF0_TPHR_CAP_VER = 4'h1;
+ parameter PF0_VC_CAP_ENABLE = "FALSE";
+ parameter [11:0] PF0_VC_CAP_NEXTPTR = 12'h000;
+ parameter [3:0] PF0_VC_CAP_VER = 4'h1;
+ parameter PF1_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter PF1_AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [11:0] PF1_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF1_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF1_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [5:0] PF1_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF1_BAR0_CONTROL = 3'h4;
+ parameter [5:0] PF1_BAR1_APERTURE_SIZE = 6'h00;
+ parameter [2:0] PF1_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF1_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF1_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF1_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF1_BIST_REGISTER = 8'h00;
+ parameter [7:0] PF1_CAPABILITY_POINTER = 8'h50;
+ parameter [23:0] PF1_CLASS_CODE = 24'h000000;
+ parameter [15:0] PF1_DEVICE_ID = 16'h0000;
+ parameter [2:0] PF1_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF1_DPA_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF1_DPA_CAP_SUB_STATE_CONTROL = 5'h00;
+ parameter PF1_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE";
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00;
+ parameter [7:0] PF1_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00;
+ parameter [3:0] PF1_DPA_CAP_VER = 4'h1;
+ parameter [11:0] PF1_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF1_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF1_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [7:0] PF1_INTERRUPT_LINE = 8'h00;
+ parameter [2:0] PF1_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF1_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF1_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF1_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF1_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF1_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF1_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF1_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF1_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [31:0] PF1_PB_CAP_DATA_REG_D0 = 32'h00000000;
+ parameter [31:0] PF1_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000;
+ parameter [31:0] PF1_PB_CAP_DATA_REG_D1 = 32'h00000000;
+ parameter [31:0] PF1_PB_CAP_DATA_REG_D3HOT = 32'h00000000;
+ parameter [11:0] PF1_PB_CAP_NEXTPTR = 12'h000;
+ parameter PF1_PB_CAP_SYSTEM_ALLOCATED = "FALSE";
+ parameter [3:0] PF1_PB_CAP_VER = 4'h1;
+ parameter [7:0] PF1_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF1_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] PF1_PM_CAP_VER_ID = 3'h3;
+ parameter PF1_RBAR_CAP_ENABLE = "FALSE";
+ parameter [11:0] PF1_RBAR_CAP_NEXTPTR = 12'h000;
+ parameter [19:0] PF1_RBAR_CAP_SIZE0 = 20'h00000;
+ parameter [19:0] PF1_RBAR_CAP_SIZE1 = 20'h00000;
+ parameter [19:0] PF1_RBAR_CAP_SIZE2 = 20'h00000;
+ parameter [3:0] PF1_RBAR_CAP_VER = 4'h1;
+ parameter [2:0] PF1_RBAR_CONTROL_INDEX0 = 3'h0;
+ parameter [2:0] PF1_RBAR_CONTROL_INDEX1 = 3'h0;
+ parameter [2:0] PF1_RBAR_CONTROL_INDEX2 = 3'h0;
+ parameter [4:0] PF1_RBAR_CONTROL_SIZE0 = 5'h00;
+ parameter [4:0] PF1_RBAR_CONTROL_SIZE1 = 5'h00;
+ parameter [4:0] PF1_RBAR_CONTROL_SIZE2 = 5'h00;
+ parameter [2:0] PF1_RBAR_NUM = 3'h1;
+ parameter [7:0] PF1_REVISION_ID = 8'h00;
+ parameter [4:0] PF1_SRIOV_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF1_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF1_SRIOV_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF1_SRIOV_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF1_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF1_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF1_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF1_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF1_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF1_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF1_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF1_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF1_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF1_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [15:0] PF1_SUBSYSTEM_ID = 16'h0000;
+ parameter PF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF1_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF1_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF1_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF1_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF1_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF1_TPHR_CAP_VER = 4'h1;
+ parameter PF2_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter PF2_AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [11:0] PF2_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF2_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF2_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [5:0] PF2_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF2_BAR0_CONTROL = 3'h4;
+ parameter [5:0] PF2_BAR1_APERTURE_SIZE = 6'h00;
+ parameter [2:0] PF2_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF2_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF2_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF2_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF2_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF2_BIST_REGISTER = 8'h00;
+ parameter [7:0] PF2_CAPABILITY_POINTER = 8'h50;
+ parameter [23:0] PF2_CLASS_CODE = 24'h000000;
+ parameter [15:0] PF2_DEVICE_ID = 16'h0000;
+ parameter [2:0] PF2_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF2_DPA_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF2_DPA_CAP_SUB_STATE_CONTROL = 5'h00;
+ parameter PF2_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE";
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00;
+ parameter [7:0] PF2_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00;
+ parameter [3:0] PF2_DPA_CAP_VER = 4'h1;
+ parameter [11:0] PF2_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF2_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF2_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [7:0] PF2_INTERRUPT_LINE = 8'h00;
+ parameter [2:0] PF2_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF2_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF2_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF2_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF2_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF2_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF2_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF2_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF2_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [31:0] PF2_PB_CAP_DATA_REG_D0 = 32'h00000000;
+ parameter [31:0] PF2_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000;
+ parameter [31:0] PF2_PB_CAP_DATA_REG_D1 = 32'h00000000;
+ parameter [31:0] PF2_PB_CAP_DATA_REG_D3HOT = 32'h00000000;
+ parameter [11:0] PF2_PB_CAP_NEXTPTR = 12'h000;
+ parameter PF2_PB_CAP_SYSTEM_ALLOCATED = "FALSE";
+ parameter [3:0] PF2_PB_CAP_VER = 4'h1;
+ parameter [7:0] PF2_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF2_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] PF2_PM_CAP_VER_ID = 3'h3;
+ parameter PF2_RBAR_CAP_ENABLE = "FALSE";
+ parameter [11:0] PF2_RBAR_CAP_NEXTPTR = 12'h000;
+ parameter [19:0] PF2_RBAR_CAP_SIZE0 = 20'h00000;
+ parameter [19:0] PF2_RBAR_CAP_SIZE1 = 20'h00000;
+ parameter [19:0] PF2_RBAR_CAP_SIZE2 = 20'h00000;
+ parameter [3:0] PF2_RBAR_CAP_VER = 4'h1;
+ parameter [2:0] PF2_RBAR_CONTROL_INDEX0 = 3'h0;
+ parameter [2:0] PF2_RBAR_CONTROL_INDEX1 = 3'h0;
+ parameter [2:0] PF2_RBAR_CONTROL_INDEX2 = 3'h0;
+ parameter [4:0] PF2_RBAR_CONTROL_SIZE0 = 5'h00;
+ parameter [4:0] PF2_RBAR_CONTROL_SIZE1 = 5'h00;
+ parameter [4:0] PF2_RBAR_CONTROL_SIZE2 = 5'h00;
+ parameter [2:0] PF2_RBAR_NUM = 3'h1;
+ parameter [7:0] PF2_REVISION_ID = 8'h00;
+ parameter [4:0] PF2_SRIOV_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF2_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF2_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF2_SRIOV_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF2_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF2_SRIOV_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF2_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF2_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF2_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF2_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF2_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF2_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF2_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF2_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF2_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF2_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [15:0] PF2_SUBSYSTEM_ID = 16'h0000;
+ parameter PF2_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF2_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF2_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF2_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF2_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF2_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF2_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF2_TPHR_CAP_VER = 4'h1;
+ parameter PF3_AER_CAP_ECRC_CHECK_CAPABLE = "FALSE";
+ parameter PF3_AER_CAP_ECRC_GEN_CAPABLE = "FALSE";
+ parameter [11:0] PF3_AER_CAP_NEXTPTR = 12'h000;
+ parameter [11:0] PF3_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] PF3_ARI_CAP_NEXT_FUNC = 8'h00;
+ parameter [5:0] PF3_BAR0_APERTURE_SIZE = 6'h03;
+ parameter [2:0] PF3_BAR0_CONTROL = 3'h4;
+ parameter [5:0] PF3_BAR1_APERTURE_SIZE = 6'h00;
+ parameter [2:0] PF3_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF3_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF3_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF3_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF3_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_BAR5_CONTROL = 3'h0;
+ parameter [7:0] PF3_BIST_REGISTER = 8'h00;
+ parameter [7:0] PF3_CAPABILITY_POINTER = 8'h50;
+ parameter [23:0] PF3_CLASS_CODE = 24'h000000;
+ parameter [15:0] PF3_DEVICE_ID = 16'h0000;
+ parameter [2:0] PF3_DEV_CAP_MAX_PAYLOAD_SIZE = 3'h3;
+ parameter [11:0] PF3_DPA_CAP_NEXTPTR = 12'h000;
+ parameter [4:0] PF3_DPA_CAP_SUB_STATE_CONTROL = 5'h00;
+ parameter PF3_DPA_CAP_SUB_STATE_CONTROL_EN = "TRUE";
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION0 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION1 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION2 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION3 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION4 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION5 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION6 = 8'h00;
+ parameter [7:0] PF3_DPA_CAP_SUB_STATE_POWER_ALLOCATION7 = 8'h00;
+ parameter [3:0] PF3_DPA_CAP_VER = 4'h1;
+ parameter [11:0] PF3_DSN_CAP_NEXTPTR = 12'h10C;
+ parameter [4:0] PF3_EXPANSION_ROM_APERTURE_SIZE = 5'h03;
+ parameter PF3_EXPANSION_ROM_ENABLE = "FALSE";
+ parameter [7:0] PF3_INTERRUPT_LINE = 8'h00;
+ parameter [2:0] PF3_INTERRUPT_PIN = 3'h1;
+ parameter [7:0] PF3_MSIX_CAP_NEXTPTR = 8'h00;
+ parameter integer PF3_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] PF3_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer PF3_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] PF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] PF3_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer PF3_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] PF3_MSI_CAP_NEXTPTR = 8'h00;
+ parameter PF3_MSI_CAP_PERVECMASKCAP = "FALSE";
+ parameter [31:0] PF3_PB_CAP_DATA_REG_D0 = 32'h00000000;
+ parameter [31:0] PF3_PB_CAP_DATA_REG_D0_SUSTAINED = 32'h00000000;
+ parameter [31:0] PF3_PB_CAP_DATA_REG_D1 = 32'h00000000;
+ parameter [31:0] PF3_PB_CAP_DATA_REG_D3HOT = 32'h00000000;
+ parameter [11:0] PF3_PB_CAP_NEXTPTR = 12'h000;
+ parameter PF3_PB_CAP_SYSTEM_ALLOCATED = "FALSE";
+ parameter [3:0] PF3_PB_CAP_VER = 4'h1;
+ parameter [7:0] PF3_PM_CAP_ID = 8'h01;
+ parameter [7:0] PF3_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] PF3_PM_CAP_VER_ID = 3'h3;
+ parameter PF3_RBAR_CAP_ENABLE = "FALSE";
+ parameter [11:0] PF3_RBAR_CAP_NEXTPTR = 12'h000;
+ parameter [19:0] PF3_RBAR_CAP_SIZE0 = 20'h00000;
+ parameter [19:0] PF3_RBAR_CAP_SIZE1 = 20'h00000;
+ parameter [19:0] PF3_RBAR_CAP_SIZE2 = 20'h00000;
+ parameter [3:0] PF3_RBAR_CAP_VER = 4'h1;
+ parameter [2:0] PF3_RBAR_CONTROL_INDEX0 = 3'h0;
+ parameter [2:0] PF3_RBAR_CONTROL_INDEX1 = 3'h0;
+ parameter [2:0] PF3_RBAR_CONTROL_INDEX2 = 3'h0;
+ parameter [4:0] PF3_RBAR_CONTROL_SIZE0 = 5'h00;
+ parameter [4:0] PF3_RBAR_CONTROL_SIZE1 = 5'h00;
+ parameter [4:0] PF3_RBAR_CONTROL_SIZE2 = 5'h00;
+ parameter [2:0] PF3_RBAR_NUM = 3'h1;
+ parameter [7:0] PF3_REVISION_ID = 8'h00;
+ parameter [4:0] PF3_SRIOV_BAR0_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR0_CONTROL = 3'h4;
+ parameter [4:0] PF3_SRIOV_BAR1_APERTURE_SIZE = 5'h00;
+ parameter [2:0] PF3_SRIOV_BAR1_CONTROL = 3'h0;
+ parameter [4:0] PF3_SRIOV_BAR2_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR2_CONTROL = 3'h4;
+ parameter [4:0] PF3_SRIOV_BAR3_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR3_CONTROL = 3'h0;
+ parameter [4:0] PF3_SRIOV_BAR4_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR4_CONTROL = 3'h4;
+ parameter [4:0] PF3_SRIOV_BAR5_APERTURE_SIZE = 5'h03;
+ parameter [2:0] PF3_SRIOV_BAR5_CONTROL = 3'h0;
+ parameter [15:0] PF3_SRIOV_CAP_INITIAL_VF = 16'h0000;
+ parameter [11:0] PF3_SRIOV_CAP_NEXTPTR = 12'h000;
+ parameter [15:0] PF3_SRIOV_CAP_TOTAL_VF = 16'h0000;
+ parameter [3:0] PF3_SRIOV_CAP_VER = 4'h1;
+ parameter [15:0] PF3_SRIOV_FIRST_VF_OFFSET = 16'h0000;
+ parameter [15:0] PF3_SRIOV_FUNC_DEP_LINK = 16'h0000;
+ parameter [31:0] PF3_SRIOV_SUPPORTED_PAGE_SIZE = 32'h00000000;
+ parameter [15:0] PF3_SRIOV_VF_DEVICE_ID = 16'h0000;
+ parameter [15:0] PF3_SUBSYSTEM_ID = 16'h0000;
+ parameter PF3_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter PF3_TPHR_CAP_ENABLE = "FALSE";
+ parameter PF3_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] PF3_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] PF3_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] PF3_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] PF3_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] PF3_TPHR_CAP_VER = 4'h1;
+ parameter PL_DISABLE_AUTO_EQ_SPEED_CHANGE_TO_GEN3 = "FALSE";
+ parameter PL_DISABLE_AUTO_SPEED_CHANGE_TO_GEN2 = "FALSE";
+ parameter PL_DISABLE_EI_INFER_IN_L0 = "FALSE";
+ parameter PL_DISABLE_GEN3_DC_BALANCE = "FALSE";
+ parameter PL_DISABLE_GEN3_LFSR_UPDATE_ON_SKP = "TRUE";
+ parameter PL_DISABLE_RETRAIN_ON_FRAMING_ERROR = "FALSE";
+ parameter PL_DISABLE_SCRAMBLING = "FALSE";
+ parameter PL_DISABLE_SYNC_HEADER_FRAMING_ERROR = "FALSE";
+ parameter PL_DISABLE_UPCONFIG_CAPABLE = "FALSE";
+ parameter PL_EQ_ADAPT_DISABLE_COEFF_CHECK = "FALSE";
+ parameter PL_EQ_ADAPT_DISABLE_PRESET_CHECK = "FALSE";
+ parameter [4:0] PL_EQ_ADAPT_ITER_COUNT = 5'h02;
+ parameter [1:0] PL_EQ_ADAPT_REJECT_RETRY_COUNT = 2'h1;
+ parameter PL_EQ_BYPASS_PHASE23 = "FALSE";
+ parameter [2:0] PL_EQ_DEFAULT_GEN3_RX_PRESET_HINT = 3'h3;
+ parameter [3:0] PL_EQ_DEFAULT_GEN3_TX_PRESET = 4'h4;
+ parameter PL_EQ_PHASE01_RX_ADAPT = "FALSE";
+ parameter PL_EQ_SHORT_ADAPT_PHASE = "FALSE";
+ parameter [15:0] PL_LANE0_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE1_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE2_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE3_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE4_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE5_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE6_EQ_CONTROL = 16'h3F00;
+ parameter [15:0] PL_LANE7_EQ_CONTROL = 16'h3F00;
+ parameter [2:0] PL_LINK_CAP_MAX_LINK_SPEED = 3'h4;
+ parameter [3:0] PL_LINK_CAP_MAX_LINK_WIDTH = 4'h8;
+ parameter integer PL_N_FTS_COMCLK_GEN1 = 255;
+ parameter integer PL_N_FTS_COMCLK_GEN2 = 255;
+ parameter integer PL_N_FTS_COMCLK_GEN3 = 255;
+ parameter integer PL_N_FTS_GEN1 = 255;
+ parameter integer PL_N_FTS_GEN2 = 255;
+ parameter integer PL_N_FTS_GEN3 = 255;
+ parameter PL_REPORT_ALL_PHY_ERRORS = "TRUE";
+ parameter PL_SIM_FAST_LINK_TRAINING = "FALSE";
+ parameter PL_UPSTREAM_FACING = "TRUE";
+ parameter [15:0] PM_ASPML0S_TIMEOUT = 16'h05DC;
+ parameter [19:0] PM_ASPML1_ENTRY_DELAY = 20'h00000;
+ parameter PM_ENABLE_L23_ENTRY = "FALSE";
+ parameter PM_ENABLE_SLOT_POWER_CAPTURE = "TRUE";
+ parameter [31:0] PM_L1_REENTRY_DELAY = 32'h00000000;
+ parameter [19:0] PM_PME_SERVICE_TIMEOUT_DELAY = 20'h186A0;
+ parameter [15:0] PM_PME_TURNOFF_ACK_DELAY = 16'h0064;
+ parameter [31:0] SIM_JTAG_IDCODE = 32'h00000000;
+ parameter SIM_VERSION = "1.0";
+ parameter integer SPARE_BIT0 = 0;
+ parameter integer SPARE_BIT1 = 0;
+ parameter integer SPARE_BIT2 = 0;
+ parameter integer SPARE_BIT3 = 0;
+ parameter integer SPARE_BIT4 = 0;
+ parameter integer SPARE_BIT5 = 0;
+ parameter integer SPARE_BIT6 = 0;
+ parameter integer SPARE_BIT7 = 0;
+ parameter integer SPARE_BIT8 = 0;
+ parameter [7:0] SPARE_BYTE0 = 8'h00;
+ parameter [7:0] SPARE_BYTE1 = 8'h00;
+ parameter [7:0] SPARE_BYTE2 = 8'h00;
+ parameter [7:0] SPARE_BYTE3 = 8'h00;
+ parameter [31:0] SPARE_WORD0 = 32'h00000000;
+ parameter [31:0] SPARE_WORD1 = 32'h00000000;
+ parameter [31:0] SPARE_WORD2 = 32'h00000000;
+ parameter [31:0] SPARE_WORD3 = 32'h00000000;
+ parameter SRIOV_CAP_ENABLE = "FALSE";
+ parameter TL_COMPLETION_RAM_SIZE_16K = "TRUE";
+ parameter [23:0] TL_COMPL_TIMEOUT_REG0 = 24'hBEBC20;
+ parameter [27:0] TL_COMPL_TIMEOUT_REG1 = 28'h2FAF080;
+ parameter [11:0] TL_CREDITS_CD = 12'h3E0;
+ parameter [7:0] TL_CREDITS_CH = 8'h20;
+ parameter [11:0] TL_CREDITS_NPD = 12'h028;
+ parameter [7:0] TL_CREDITS_NPH = 8'h20;
+ parameter [11:0] TL_CREDITS_PD = 12'h198;
+ parameter [7:0] TL_CREDITS_PH = 8'h20;
+ parameter TL_ENABLE_MESSAGE_RID_CHECK_ENABLE = "TRUE";
+ parameter TL_EXTENDED_CFG_EXTEND_INTERFACE_ENABLE = "FALSE";
+ parameter TL_LEGACY_CFG_EXTEND_INTERFACE_ENABLE = "FALSE";
+ parameter TL_LEGACY_MODE_ENABLE = "FALSE";
+ parameter [1:0] TL_PF_ENABLE_REG = 2'h0;
+ parameter TL_TX_MUX_STRICT_PRIORITY = "TRUE";
+ parameter TWO_LAYER_MODE_DLCMSM_ENABLE = "TRUE";
+ parameter TWO_LAYER_MODE_ENABLE = "FALSE";
+ parameter TWO_LAYER_MODE_WIDTH_256 = "TRUE";
+ parameter [11:0] VF0_ARI_CAP_NEXTPTR = 12'h000;
+ parameter [7:0] VF0_CAPABILITY_POINTER = 8'h50;
+ parameter integer VF0_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF0_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF0_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF0_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF0_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF0_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF0_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF0_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF0_PM_CAP_VER_ID = 3'h3;
+ parameter VF0_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF0_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF0_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF0_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF0_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF0_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF0_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF0_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF1_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF1_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF1_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF1_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF1_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF1_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF1_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF1_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF1_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF1_PM_CAP_VER_ID = 3'h3;
+ parameter VF1_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF1_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF1_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF1_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF1_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF1_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF1_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF1_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF2_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF2_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF2_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF2_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF2_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF2_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF2_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF2_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF2_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF2_PM_CAP_VER_ID = 3'h3;
+ parameter VF2_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF2_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF2_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF2_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF2_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF2_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF2_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF2_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF3_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF3_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF3_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF3_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF3_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF3_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF3_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF3_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF3_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF3_PM_CAP_VER_ID = 3'h3;
+ parameter VF3_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF3_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF3_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF3_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF3_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF3_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF3_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF3_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF4_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF4_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF4_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF4_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF4_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF4_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF4_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF4_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF4_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF4_PM_CAP_VER_ID = 3'h3;
+ parameter VF4_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF4_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF4_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF4_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF4_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF4_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF4_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF4_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF5_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF5_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF5_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF5_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF5_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF5_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF5_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF5_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF5_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF5_PM_CAP_VER_ID = 3'h3;
+ parameter VF5_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF5_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF5_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF5_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF5_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF5_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF5_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF5_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF6_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF6_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF6_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF6_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF6_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF6_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF6_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF6_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF6_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF6_PM_CAP_VER_ID = 3'h3;
+ parameter VF6_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF6_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF6_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF6_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF6_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF6_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF6_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF6_TPHR_CAP_VER = 4'h1;
+ parameter [11:0] VF7_ARI_CAP_NEXTPTR = 12'h000;
+ parameter integer VF7_MSIX_CAP_PBA_BIR = 0;
+ parameter [28:0] VF7_MSIX_CAP_PBA_OFFSET = 29'h00000050;
+ parameter integer VF7_MSIX_CAP_TABLE_BIR = 0;
+ parameter [28:0] VF7_MSIX_CAP_TABLE_OFFSET = 29'h00000040;
+ parameter [10:0] VF7_MSIX_CAP_TABLE_SIZE = 11'h000;
+ parameter integer VF7_MSI_CAP_MULTIMSGCAP = 0;
+ parameter [7:0] VF7_PM_CAP_ID = 8'h01;
+ parameter [7:0] VF7_PM_CAP_NEXTPTR = 8'h00;
+ parameter [2:0] VF7_PM_CAP_VER_ID = 3'h3;
+ parameter VF7_TPHR_CAP_DEV_SPECIFIC_MODE = "TRUE";
+ parameter VF7_TPHR_CAP_ENABLE = "FALSE";
+ parameter VF7_TPHR_CAP_INT_VEC_MODE = "TRUE";
+ parameter [11:0] VF7_TPHR_CAP_NEXTPTR = 12'h000;
+ parameter [2:0] VF7_TPHR_CAP_ST_MODE_SEL = 3'h0;
+ parameter [1:0] VF7_TPHR_CAP_ST_TABLE_LOC = 2'h0;
+ parameter [10:0] VF7_TPHR_CAP_ST_TABLE_SIZE = 11'h000;
+ parameter [3:0] VF7_TPHR_CAP_VER = 4'h1;
+ output [2:0] CFGCURRENTSPEED;
+ output [3:0] CFGDPASUBSTATECHANGE;
+ output CFGERRCOROUT;
+ output CFGERRFATALOUT;
+ output CFGERRNONFATALOUT;
+ output [7:0] CFGEXTFUNCTIONNUMBER;
+ output CFGEXTREADRECEIVED;
+ output [9:0] CFGEXTREGISTERNUMBER;
+ output [3:0] CFGEXTWRITEBYTEENABLE;
+ output [31:0] CFGEXTWRITEDATA;
+ output CFGEXTWRITERECEIVED;
+ output [11:0] CFGFCCPLD;
+ output [7:0] CFGFCCPLH;
+ output [11:0] CFGFCNPD;
+ output [7:0] CFGFCNPH;
+ output [11:0] CFGFCPD;
+ output [7:0] CFGFCPH;
+ output [3:0] CFGFLRINPROCESS;
+ output [11:0] CFGFUNCTIONPOWERSTATE;
+ output [15:0] CFGFUNCTIONSTATUS;
+ output CFGHOTRESETOUT;
+ output [31:0] CFGINTERRUPTMSIDATA;
+ output [3:0] CFGINTERRUPTMSIENABLE;
+ output CFGINTERRUPTMSIFAIL;
+ output CFGINTERRUPTMSIMASKUPDATE;
+ output [11:0] CFGINTERRUPTMSIMMENABLE;
+ output CFGINTERRUPTMSISENT;
+ output [7:0] CFGINTERRUPTMSIVFENABLE;
+ output [3:0] CFGINTERRUPTMSIXENABLE;
+ output CFGINTERRUPTMSIXFAIL;
+ output [3:0] CFGINTERRUPTMSIXMASK;
+ output CFGINTERRUPTMSIXSENT;
+ output [7:0] CFGINTERRUPTMSIXVFENABLE;
+ output [7:0] CFGINTERRUPTMSIXVFMASK;
+ output CFGINTERRUPTSENT;
+ output [1:0] CFGLINKPOWERSTATE;
+ output CFGLOCALERROR;
+ output CFGLTRENABLE;
+ output [5:0] CFGLTSSMSTATE;
+ output [2:0] CFGMAXPAYLOAD;
+ output [2:0] CFGMAXREADREQ;
+ output [31:0] CFGMGMTREADDATA;
+ output CFGMGMTREADWRITEDONE;
+ output CFGMSGRECEIVED;
+ output [7:0] CFGMSGRECEIVEDDATA;
+ output [4:0] CFGMSGRECEIVEDTYPE;
+ output CFGMSGTRANSMITDONE;
+ output [3:0] CFGNEGOTIATEDWIDTH;
+ output [1:0] CFGOBFFENABLE;
+ output [15:0] CFGPERFUNCSTATUSDATA;
+ output CFGPERFUNCTIONUPDATEDONE;
+ output CFGPHYLINKDOWN;
+ output [1:0] CFGPHYLINKSTATUS;
+ output CFGPLSTATUSCHANGE;
+ output CFGPOWERSTATECHANGEINTERRUPT;
+ output [3:0] CFGRCBSTATUS;
+ output [3:0] CFGTPHFUNCTIONNUM;
+ output [3:0] CFGTPHREQUESTERENABLE;
+ output [11:0] CFGTPHSTMODE;
+ output [4:0] CFGTPHSTTADDRESS;
+ output CFGTPHSTTREADENABLE;
+ output [3:0] CFGTPHSTTWRITEBYTEVALID;
+ output [31:0] CFGTPHSTTWRITEDATA;
+ output CFGTPHSTTWRITEENABLE;
+ output [7:0] CFGVFFLRINPROCESS;
+ output [23:0] CFGVFPOWERSTATE;
+ output [15:0] CFGVFSTATUS;
+ output [7:0] CFGVFTPHREQUESTERENABLE;
+ output [23:0] CFGVFTPHSTMODE;
+ output CONFMCAPDESIGNSWITCH;
+ output CONFMCAPEOS;
+ output CONFMCAPINUSEBYPCIE;
+ output CONFREQREADY;
+ output [31:0] CONFRESPRDATA;
+ output CONFRESPVALID;
+ output [15:0] DBGDATAOUT;
+ output DBGMCAPCSB;
+ output [31:0] DBGMCAPDATA;
+ output DBGMCAPEOS;
+ output DBGMCAPERROR;
+ output DBGMCAPMODE;
+ output DBGMCAPRDATAVALID;
+ output DBGMCAPRDWRB;
+ output DBGMCAPRESET;
+ output DBGPLDATABLOCKRECEIVEDAFTEREDS;
+ output DBGPLGEN3FRAMINGERRORDETECTED;
+ output DBGPLGEN3SYNCHEADERERRORDETECTED;
+ output [7:0] DBGPLINFERREDRXELECTRICALIDLE;
+ output [15:0] DRPDO;
+ output DRPRDY;
+ output LL2LMMASTERTLPSENT0;
+ output LL2LMMASTERTLPSENT1;
+ output [3:0] LL2LMMASTERTLPSENTTLPID0;
+ output [3:0] LL2LMMASTERTLPSENTTLPID1;
+ output [255:0] LL2LMMAXISRXTDATA;
+ output [17:0] LL2LMMAXISRXTUSER;
+ output [7:0] LL2LMMAXISRXTVALID;
+ output [7:0] LL2LMSAXISTXTREADY;
+ output [255:0] MAXISCQTDATA;
+ output [7:0] MAXISCQTKEEP;
+ output MAXISCQTLAST;
+ output [84:0] MAXISCQTUSER;
+ output MAXISCQTVALID;
+ output [255:0] MAXISRCTDATA;
+ output [7:0] MAXISRCTKEEP;
+ output MAXISRCTLAST;
+ output [74:0] MAXISRCTUSER;
+ output MAXISRCTVALID;
+ output [9:0] MICOMPLETIONRAMREADADDRESSAL;
+ output [9:0] MICOMPLETIONRAMREADADDRESSAU;
+ output [9:0] MICOMPLETIONRAMREADADDRESSBL;
+ output [9:0] MICOMPLETIONRAMREADADDRESSBU;
+ output [3:0] MICOMPLETIONRAMREADENABLEL;
+ output [3:0] MICOMPLETIONRAMREADENABLEU;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSAL;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSAU;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSBL;
+ output [9:0] MICOMPLETIONRAMWRITEADDRESSBU;
+ output [71:0] MICOMPLETIONRAMWRITEDATAL;
+ output [71:0] MICOMPLETIONRAMWRITEDATAU;
+ output [3:0] MICOMPLETIONRAMWRITEENABLEL;
+ output [3:0] MICOMPLETIONRAMWRITEENABLEU;
+ output [8:0] MIREPLAYRAMADDRESS;
+ output [1:0] MIREPLAYRAMREADENABLE;
+ output [143:0] MIREPLAYRAMWRITEDATA;
+ output [1:0] MIREPLAYRAMWRITEENABLE;
+ output [8:0] MIREQUESTRAMREADADDRESSA;
+ output [8:0] MIREQUESTRAMREADADDRESSB;
+ output [3:0] MIREQUESTRAMREADENABLE;
+ output [8:0] MIREQUESTRAMWRITEADDRESSA;
+ output [8:0] MIREQUESTRAMWRITEADDRESSB;
+ output [143:0] MIREQUESTRAMWRITEDATA;
+ output [3:0] MIREQUESTRAMWRITEENABLE;
+ output [5:0] PCIECQNPREQCOUNT;
+ output PCIEPERST0B;
+ output PCIEPERST1B;
+ output [3:0] PCIERQSEQNUM;
+ output PCIERQSEQNUMVLD;
+ output [5:0] PCIERQTAG;
+ output [1:0] PCIERQTAGAV;
+ output PCIERQTAGVLD;
+ output [1:0] PCIETFCNPDAV;
+ output [1:0] PCIETFCNPHAV;
+ output [1:0] PIPERX0EQCONTROL;
+ output [5:0] PIPERX0EQLPLFFS;
+ output [3:0] PIPERX0EQLPTXPRESET;
+ output [2:0] PIPERX0EQPRESET;
+ output PIPERX0POLARITY;
+ output [1:0] PIPERX1EQCONTROL;
+ output [5:0] PIPERX1EQLPLFFS;
+ output [3:0] PIPERX1EQLPTXPRESET;
+ output [2:0] PIPERX1EQPRESET;
+ output PIPERX1POLARITY;
+ output [1:0] PIPERX2EQCONTROL;
+ output [5:0] PIPERX2EQLPLFFS;
+ output [3:0] PIPERX2EQLPTXPRESET;
+ output [2:0] PIPERX2EQPRESET;
+ output PIPERX2POLARITY;
+ output [1:0] PIPERX3EQCONTROL;
+ output [5:0] PIPERX3EQLPLFFS;
+ output [3:0] PIPERX3EQLPTXPRESET;
+ output [2:0] PIPERX3EQPRESET;
+ output PIPERX3POLARITY;
+ output [1:0] PIPERX4EQCONTROL;
+ output [5:0] PIPERX4EQLPLFFS;
+ output [3:0] PIPERX4EQLPTXPRESET;
+ output [2:0] PIPERX4EQPRESET;
+ output PIPERX4POLARITY;
+ output [1:0] PIPERX5EQCONTROL;
+ output [5:0] PIPERX5EQLPLFFS;
+ output [3:0] PIPERX5EQLPTXPRESET;
+ output [2:0] PIPERX5EQPRESET;
+ output PIPERX5POLARITY;
+ output [1:0] PIPERX6EQCONTROL;
+ output [5:0] PIPERX6EQLPLFFS;
+ output [3:0] PIPERX6EQLPTXPRESET;
+ output [2:0] PIPERX6EQPRESET;
+ output PIPERX6POLARITY;
+ output [1:0] PIPERX7EQCONTROL;
+ output [5:0] PIPERX7EQLPLFFS;
+ output [3:0] PIPERX7EQLPTXPRESET;
+ output [2:0] PIPERX7EQPRESET;
+ output PIPERX7POLARITY;
+ output [1:0] PIPETX0CHARISK;
+ output PIPETX0COMPLIANCE;
+ output [31:0] PIPETX0DATA;
+ output PIPETX0DATAVALID;
+ output PIPETX0DEEMPH;
+ output PIPETX0ELECIDLE;
+ output [1:0] PIPETX0EQCONTROL;
+ output [5:0] PIPETX0EQDEEMPH;
+ output [3:0] PIPETX0EQPRESET;
+ output [2:0] PIPETX0MARGIN;
+ output [1:0] PIPETX0POWERDOWN;
+ output [1:0] PIPETX0RATE;
+ output PIPETX0RCVRDET;
+ output PIPETX0RESET;
+ output PIPETX0STARTBLOCK;
+ output PIPETX0SWING;
+ output [1:0] PIPETX0SYNCHEADER;
+ output [1:0] PIPETX1CHARISK;
+ output PIPETX1COMPLIANCE;
+ output [31:0] PIPETX1DATA;
+ output PIPETX1DATAVALID;
+ output PIPETX1DEEMPH;
+ output PIPETX1ELECIDLE;
+ output [1:0] PIPETX1EQCONTROL;
+ output [5:0] PIPETX1EQDEEMPH;
+ output [3:0] PIPETX1EQPRESET;
+ output [2:0] PIPETX1MARGIN;
+ output [1:0] PIPETX1POWERDOWN;
+ output [1:0] PIPETX1RATE;
+ output PIPETX1RCVRDET;
+ output PIPETX1RESET;
+ output PIPETX1STARTBLOCK;
+ output PIPETX1SWING;
+ output [1:0] PIPETX1SYNCHEADER;
+ output [1:0] PIPETX2CHARISK;
+ output PIPETX2COMPLIANCE;
+ output [31:0] PIPETX2DATA;
+ output PIPETX2DATAVALID;
+ output PIPETX2DEEMPH;
+ output PIPETX2ELECIDLE;
+ output [1:0] PIPETX2EQCONTROL;
+ output [5:0] PIPETX2EQDEEMPH;
+ output [3:0] PIPETX2EQPRESET;
+ output [2:0] PIPETX2MARGIN;
+ output [1:0] PIPETX2POWERDOWN;
+ output [1:0] PIPETX2RATE;
+ output PIPETX2RCVRDET;
+ output PIPETX2RESET;
+ output PIPETX2STARTBLOCK;
+ output PIPETX2SWING;
+ output [1:0] PIPETX2SYNCHEADER;
+ output [1:0] PIPETX3CHARISK;
+ output PIPETX3COMPLIANCE;
+ output [31:0] PIPETX3DATA;
+ output PIPETX3DATAVALID;
+ output PIPETX3DEEMPH;
+ output PIPETX3ELECIDLE;
+ output [1:0] PIPETX3EQCONTROL;
+ output [5:0] PIPETX3EQDEEMPH;
+ output [3:0] PIPETX3EQPRESET;
+ output [2:0] PIPETX3MARGIN;
+ output [1:0] PIPETX3POWERDOWN;
+ output [1:0] PIPETX3RATE;
+ output PIPETX3RCVRDET;
+ output PIPETX3RESET;
+ output PIPETX3STARTBLOCK;
+ output PIPETX3SWING;
+ output [1:0] PIPETX3SYNCHEADER;
+ output [1:0] PIPETX4CHARISK;
+ output PIPETX4COMPLIANCE;
+ output [31:0] PIPETX4DATA;
+ output PIPETX4DATAVALID;
+ output PIPETX4DEEMPH;
+ output PIPETX4ELECIDLE;
+ output [1:0] PIPETX4EQCONTROL;
+ output [5:0] PIPETX4EQDEEMPH;
+ output [3:0] PIPETX4EQPRESET;
+ output [2:0] PIPETX4MARGIN;
+ output [1:0] PIPETX4POWERDOWN;
+ output [1:0] PIPETX4RATE;
+ output PIPETX4RCVRDET;
+ output PIPETX4RESET;
+ output PIPETX4STARTBLOCK;
+ output PIPETX4SWING;
+ output [1:0] PIPETX4SYNCHEADER;
+ output [1:0] PIPETX5CHARISK;
+ output PIPETX5COMPLIANCE;
+ output [31:0] PIPETX5DATA;
+ output PIPETX5DATAVALID;
+ output PIPETX5DEEMPH;
+ output PIPETX5ELECIDLE;
+ output [1:0] PIPETX5EQCONTROL;
+ output [5:0] PIPETX5EQDEEMPH;
+ output [3:0] PIPETX5EQPRESET;
+ output [2:0] PIPETX5MARGIN;
+ output [1:0] PIPETX5POWERDOWN;
+ output [1:0] PIPETX5RATE;
+ output PIPETX5RCVRDET;
+ output PIPETX5RESET;
+ output PIPETX5STARTBLOCK;
+ output PIPETX5SWING;
+ output [1:0] PIPETX5SYNCHEADER;
+ output [1:0] PIPETX6CHARISK;
+ output PIPETX6COMPLIANCE;
+ output [31:0] PIPETX6DATA;
+ output PIPETX6DATAVALID;
+ output PIPETX6DEEMPH;
+ output PIPETX6ELECIDLE;
+ output [1:0] PIPETX6EQCONTROL;
+ output [5:0] PIPETX6EQDEEMPH;
+ output [3:0] PIPETX6EQPRESET;
+ output [2:0] PIPETX6MARGIN;
+ output [1:0] PIPETX6POWERDOWN;
+ output [1:0] PIPETX6RATE;
+ output PIPETX6RCVRDET;
+ output PIPETX6RESET;
+ output PIPETX6STARTBLOCK;
+ output PIPETX6SWING;
+ output [1:0] PIPETX6SYNCHEADER;
+ output [1:0] PIPETX7CHARISK;
+ output PIPETX7COMPLIANCE;
+ output [31:0] PIPETX7DATA;
+ output PIPETX7DATAVALID;
+ output PIPETX7DEEMPH;
+ output PIPETX7ELECIDLE;
+ output [1:0] PIPETX7EQCONTROL;
+ output [5:0] PIPETX7EQDEEMPH;
+ output [3:0] PIPETX7EQPRESET;
+ output [2:0] PIPETX7MARGIN;
+ output [1:0] PIPETX7POWERDOWN;
+ output [1:0] PIPETX7RATE;
+ output PIPETX7RCVRDET;
+ output PIPETX7RESET;
+ output PIPETX7STARTBLOCK;
+ output PIPETX7SWING;
+ output [1:0] PIPETX7SYNCHEADER;
+ output PLEQINPROGRESS;
+ output [1:0] PLEQPHASE;
+ output [3:0] SAXISCCTREADY;
+ output [3:0] SAXISRQTREADY;
+ output [31:0] SPAREOUT;
+ input CFGCONFIGSPACEENABLE;
+ input [15:0] CFGDEVID;
+ input [7:0] CFGDSBUSNUMBER;
+ input [4:0] CFGDSDEVICENUMBER;
+ input [2:0] CFGDSFUNCTIONNUMBER;
+ input [63:0] CFGDSN;
+ input [7:0] CFGDSPORTNUMBER;
+ input CFGERRCORIN;
+ input CFGERRUNCORIN;
+ input [31:0] CFGEXTREADDATA;
+ input CFGEXTREADDATAVALID;
+ input [2:0] CFGFCSEL;
+ input [3:0] CFGFLRDONE;
+ input CFGHOTRESETIN;
+ input [3:0] CFGINTERRUPTINT;
+ input [2:0] CFGINTERRUPTMSIATTR;
+ input [3:0] CFGINTERRUPTMSIFUNCTIONNUMBER;
+ input [31:0] CFGINTERRUPTMSIINT;
+ input [31:0] CFGINTERRUPTMSIPENDINGSTATUS;
+ input CFGINTERRUPTMSIPENDINGSTATUSDATAENABLE;
+ input [3:0] CFGINTERRUPTMSIPENDINGSTATUSFUNCTIONNUM;
+ input [3:0] CFGINTERRUPTMSISELECT;
+ input CFGINTERRUPTMSITPHPRESENT;
+ input [8:0] CFGINTERRUPTMSITPHSTTAG;
+ input [1:0] CFGINTERRUPTMSITPHTYPE;
+ input [63:0] CFGINTERRUPTMSIXADDRESS;
+ input [31:0] CFGINTERRUPTMSIXDATA;
+ input CFGINTERRUPTMSIXINT;
+ input [3:0] CFGINTERRUPTPENDING;
+ input CFGLINKTRAININGENABLE;
+ input [18:0] CFGMGMTADDR;
+ input [3:0] CFGMGMTBYTEENABLE;
+ input CFGMGMTREAD;
+ input CFGMGMTTYPE1CFGREGACCESS;
+ input CFGMGMTWRITE;
+ input [31:0] CFGMGMTWRITEDATA;
+ input CFGMSGTRANSMIT;
+ input [31:0] CFGMSGTRANSMITDATA;
+ input [2:0] CFGMSGTRANSMITTYPE;
+ input [2:0] CFGPERFUNCSTATUSCONTROL;
+ input [3:0] CFGPERFUNCTIONNUMBER;
+ input CFGPERFUNCTIONOUTPUTREQUEST;
+ input CFGPOWERSTATECHANGEACK;
+ input CFGREQPMTRANSITIONL23READY;
+ input [7:0] CFGREVID;
+ input [15:0] CFGSUBSYSID;
+ input [15:0] CFGSUBSYSVENDID;
+ input [31:0] CFGTPHSTTREADDATA;
+ input CFGTPHSTTREADDATAVALID;
+ input [15:0] CFGVENDID;
+ input [7:0] CFGVFFLRDONE;
+ input CONFMCAPREQUESTBYCONF;
+ input [31:0] CONFREQDATA;
+ input [3:0] CONFREQREGNUM;
+ input [1:0] CONFREQTYPE;
+ input CONFREQVALID;
+ input CORECLK;
+ input CORECLKMICOMPLETIONRAML;
+ input CORECLKMICOMPLETIONRAMU;
+ input CORECLKMIREPLAYRAM;
+ input CORECLKMIREQUESTRAM;
+ input DBGCFGLOCALMGMTREGOVERRIDE;
+ input [3:0] DBGDATASEL;
+ input [9:0] DRPADDR;
+ input DRPCLK;
+ input [15:0] DRPDI;
+ input DRPEN;
+ input DRPWE;
+ input [13:0] LL2LMSAXISTXTUSER;
+ input LL2LMSAXISTXTVALID;
+ input [3:0] LL2LMTXTLPID0;
+ input [3:0] LL2LMTXTLPID1;
+ input [21:0] MAXISCQTREADY;
+ input [21:0] MAXISRCTREADY;
+ input MCAPCLK;
+ input MCAPPERST0B;
+ input MCAPPERST1B;
+ input MGMTRESETN;
+ input MGMTSTICKYRESETN;
+ input [143:0] MICOMPLETIONRAMREADDATA;
+ input [143:0] MIREPLAYRAMREADDATA;
+ input [143:0] MIREQUESTRAMREADDATA;
+ input PCIECQNPREQ;
+ input PIPECLK;
+ input [5:0] PIPEEQFS;
+ input [5:0] PIPEEQLF;
+ input PIPERESETN;
+ input [1:0] PIPERX0CHARISK;
+ input [31:0] PIPERX0DATA;
+ input PIPERX0DATAVALID;
+ input PIPERX0ELECIDLE;
+ input PIPERX0EQDONE;
+ input PIPERX0EQLPADAPTDONE;
+ input PIPERX0EQLPLFFSSEL;
+ input [17:0] PIPERX0EQLPNEWTXCOEFFORPRESET;
+ input PIPERX0PHYSTATUS;
+ input PIPERX0STARTBLOCK;
+ input [2:0] PIPERX0STATUS;
+ input [1:0] PIPERX0SYNCHEADER;
+ input PIPERX0VALID;
+ input [1:0] PIPERX1CHARISK;
+ input [31:0] PIPERX1DATA;
+ input PIPERX1DATAVALID;
+ input PIPERX1ELECIDLE;
+ input PIPERX1EQDONE;
+ input PIPERX1EQLPADAPTDONE;
+ input PIPERX1EQLPLFFSSEL;
+ input [17:0] PIPERX1EQLPNEWTXCOEFFORPRESET;
+ input PIPERX1PHYSTATUS;
+ input PIPERX1STARTBLOCK;
+ input [2:0] PIPERX1STATUS;
+ input [1:0] PIPERX1SYNCHEADER;
+ input PIPERX1VALID;
+ input [1:0] PIPERX2CHARISK;
+ input [31:0] PIPERX2DATA;
+ input PIPERX2DATAVALID;
+ input PIPERX2ELECIDLE;
+ input PIPERX2EQDONE;
+ input PIPERX2EQLPADAPTDONE;
+ input PIPERX2EQLPLFFSSEL;
+ input [17:0] PIPERX2EQLPNEWTXCOEFFORPRESET;
+ input PIPERX2PHYSTATUS;
+ input PIPERX2STARTBLOCK;
+ input [2:0] PIPERX2STATUS;
+ input [1:0] PIPERX2SYNCHEADER;
+ input PIPERX2VALID;
+ input [1:0] PIPERX3CHARISK;
+ input [31:0] PIPERX3DATA;
+ input PIPERX3DATAVALID;
+ input PIPERX3ELECIDLE;
+ input PIPERX3EQDONE;
+ input PIPERX3EQLPADAPTDONE;
+ input PIPERX3EQLPLFFSSEL;
+ input [17:0] PIPERX3EQLPNEWTXCOEFFORPRESET;
+ input PIPERX3PHYSTATUS;
+ input PIPERX3STARTBLOCK;
+ input [2:0] PIPERX3STATUS;
+ input [1:0] PIPERX3SYNCHEADER;
+ input PIPERX3VALID;
+ input [1:0] PIPERX4CHARISK;
+ input [31:0] PIPERX4DATA;
+ input PIPERX4DATAVALID;
+ input PIPERX4ELECIDLE;
+ input PIPERX4EQDONE;
+ input PIPERX4EQLPADAPTDONE;
+ input PIPERX4EQLPLFFSSEL;
+ input [17:0] PIPERX4EQLPNEWTXCOEFFORPRESET;
+ input PIPERX4PHYSTATUS;
+ input PIPERX4STARTBLOCK;
+ input [2:0] PIPERX4STATUS;
+ input [1:0] PIPERX4SYNCHEADER;
+ input PIPERX4VALID;
+ input [1:0] PIPERX5CHARISK;
+ input [31:0] PIPERX5DATA;
+ input PIPERX5DATAVALID;
+ input PIPERX5ELECIDLE;
+ input PIPERX5EQDONE;
+ input PIPERX5EQLPADAPTDONE;
+ input PIPERX5EQLPLFFSSEL;
+ input [17:0] PIPERX5EQLPNEWTXCOEFFORPRESET;
+ input PIPERX5PHYSTATUS;
+ input PIPERX5STARTBLOCK;
+ input [2:0] PIPERX5STATUS;
+ input [1:0] PIPERX5SYNCHEADER;
+ input PIPERX5VALID;
+ input [1:0] PIPERX6CHARISK;
+ input [31:0] PIPERX6DATA;
+ input PIPERX6DATAVALID;
+ input PIPERX6ELECIDLE;
+ input PIPERX6EQDONE;
+ input PIPERX6EQLPADAPTDONE;
+ input PIPERX6EQLPLFFSSEL;
+ input [17:0] PIPERX6EQLPNEWTXCOEFFORPRESET;
+ input PIPERX6PHYSTATUS;
+ input PIPERX6STARTBLOCK;
+ input [2:0] PIPERX6STATUS;
+ input [1:0] PIPERX6SYNCHEADER;
+ input PIPERX6VALID;
+ input [1:0] PIPERX7CHARISK;
+ input [31:0] PIPERX7DATA;
+ input PIPERX7DATAVALID;
+ input PIPERX7ELECIDLE;
+ input PIPERX7EQDONE;
+ input PIPERX7EQLPADAPTDONE;
+ input PIPERX7EQLPLFFSSEL;
+ input [17:0] PIPERX7EQLPNEWTXCOEFFORPRESET;
+ input PIPERX7PHYSTATUS;
+ input PIPERX7STARTBLOCK;
+ input [2:0] PIPERX7STATUS;
+ input [1:0] PIPERX7SYNCHEADER;
+ input PIPERX7VALID;
+ input [17:0] PIPETX0EQCOEFF;
+ input PIPETX0EQDONE;
+ input [17:0] PIPETX1EQCOEFF;
+ input PIPETX1EQDONE;
+ input [17:0] PIPETX2EQCOEFF;
+ input PIPETX2EQDONE;
+ input [17:0] PIPETX3EQCOEFF;
+ input PIPETX3EQDONE;
+ input [17:0] PIPETX4EQCOEFF;
+ input PIPETX4EQDONE;
+ input [17:0] PIPETX5EQCOEFF;
+ input PIPETX5EQDONE;
+ input [17:0] PIPETX6EQCOEFF;
+ input PIPETX6EQDONE;
+ input [17:0] PIPETX7EQCOEFF;
+ input PIPETX7EQDONE;
+ input PLEQRESETEIEOSCOUNT;
+ input PLGEN2UPSTREAMPREFERDEEMPH;
+ input RESETN;
+ input [255:0] SAXISCCTDATA;
+ input [7:0] SAXISCCTKEEP;
+ input SAXISCCTLAST;
+ input [32:0] SAXISCCTUSER;
+ input SAXISCCTVALID;
+ input [255:0] SAXISRQTDATA;
+ input [7:0] SAXISRQTKEEP;
+ input SAXISRQTLAST;
+ input [59:0] SAXISRQTUSER;
+ input SAXISRQTVALID;
+ input [31:0] SPAREIN;
+ input USERCLK;
+endmodule
+
+module SYSMONE1 (...);
+ parameter [15:0] INIT_40 = 16'h0;
+ parameter [15:0] INIT_41 = 16'h0;
+ parameter [15:0] INIT_42 = 16'h0;
+ parameter [15:0] INIT_43 = 16'h0;
+ parameter [15:0] INIT_44 = 16'h0;
+ parameter [15:0] INIT_45 = 16'h0;
+ parameter [15:0] INIT_46 = 16'h0;
+ parameter [15:0] INIT_47 = 16'h0;
+ parameter [15:0] INIT_48 = 16'h0;
+ parameter [15:0] INIT_49 = 16'h0;
+ parameter [15:0] INIT_4A = 16'h0;
+ parameter [15:0] INIT_4B = 16'h0;
+ parameter [15:0] INIT_4C = 16'h0;
+ parameter [15:0] INIT_4D = 16'h0;
+ parameter [15:0] INIT_4E = 16'h0;
+ parameter [15:0] INIT_4F = 16'h0;
+ parameter [15:0] INIT_50 = 16'h0;
+ parameter [15:0] INIT_51 = 16'h0;
+ parameter [15:0] INIT_52 = 16'h0;
+ parameter [15:0] INIT_53 = 16'h0;
+ parameter [15:0] INIT_54 = 16'h0;
+ parameter [15:0] INIT_55 = 16'h0;
+ parameter [15:0] INIT_56 = 16'h0;
+ parameter [15:0] INIT_57 = 16'h0;
+ parameter [15:0] INIT_58 = 16'h0;
+ parameter [15:0] INIT_59 = 16'h0;
+ parameter [15:0] INIT_5A = 16'h0;
+ parameter [15:0] INIT_5B = 16'h0;
+ parameter [15:0] INIT_5C = 16'h0;
+ parameter [15:0] INIT_5D = 16'h0;
+ parameter [15:0] INIT_5E = 16'h0;
+ parameter [15:0] INIT_5F = 16'h0;
+ parameter [15:0] INIT_60 = 16'h0;
+ parameter [15:0] INIT_61 = 16'h0;
+ parameter [15:0] INIT_62 = 16'h0;
+ parameter [15:0] INIT_63 = 16'h0;
+ parameter [15:0] INIT_64 = 16'h0;
+ parameter [15:0] INIT_65 = 16'h0;
+ parameter [15:0] INIT_66 = 16'h0;
+ parameter [15:0] INIT_67 = 16'h0;
+ parameter [15:0] INIT_68 = 16'h0;
+ parameter [15:0] INIT_69 = 16'h0;
+ parameter [15:0] INIT_6A = 16'h0;
+ parameter [15:0] INIT_6B = 16'h0;
+ parameter [15:0] INIT_6C = 16'h0;
+ parameter [15:0] INIT_6D = 16'h0;
+ parameter [15:0] INIT_6E = 16'h0;
+ parameter [15:0] INIT_6F = 16'h0;
+ parameter [15:0] INIT_70 = 16'h0;
+ parameter [15:0] INIT_71 = 16'h0;
+ parameter [15:0] INIT_72 = 16'h0;
+ parameter [15:0] INIT_73 = 16'h0;
+ parameter [15:0] INIT_74 = 16'h0;
+ parameter [15:0] INIT_75 = 16'h0;
+ parameter [15:0] INIT_76 = 16'h0;
+ parameter [15:0] INIT_77 = 16'h0;
+ parameter [15:0] INIT_78 = 16'h0;
+ parameter [15:0] INIT_79 = 16'h0;
+ parameter [15:0] INIT_7A = 16'h0;
+ parameter [15:0] INIT_7B = 16'h0;
+ parameter [15:0] INIT_7C = 16'h0;
+ parameter [15:0] INIT_7D = 16'h0;
+ parameter [15:0] INIT_7E = 16'h0;
+ parameter [15:0] INIT_7F = 16'h0;
+ parameter [0:0] IS_CONVSTCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_DCLK_INVERTED = 1'b0;
+ parameter SIM_MONITOR_FILE = "design.txt";
+ parameter integer SYSMON_VUSER0_BANK = 0;
+ parameter SYSMON_VUSER0_MONITOR = "NONE";
+ parameter integer SYSMON_VUSER1_BANK = 0;
+ parameter SYSMON_VUSER1_MONITOR = "NONE";
+ parameter integer SYSMON_VUSER2_BANK = 0;
+ parameter SYSMON_VUSER2_MONITOR = "NONE";
+ parameter integer SYSMON_VUSER3_BANK = 0;
+ parameter SYSMON_VUSER3_MONITOR = "NONE";
+ output [15:0] ALM;
+ output BUSY;
+ output [5:0] CHANNEL;
+ output [15:0] DO;
+ output DRDY;
+ output EOC;
+ output EOS;
+ output I2C_SCLK_TS;
+ output I2C_SDA_TS;
+ output JTAGBUSY;
+ output JTAGLOCKED;
+ output JTAGMODIFIED;
+ output [4:0] MUXADDR;
+ output OT;
+ input CONVST;
+ (* invertible_pin = "IS_CONVSTCLK_INVERTED" *)
+ input CONVSTCLK;
+ input [7:0] DADDR;
+ (* invertible_pin = "IS_DCLK_INVERTED" *)
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ input I2C_SCLK;
+ input I2C_SDA;
+ input RESET;
+ input [15:0] VAUXN;
+ input [15:0] VAUXP;
+ input VN;
+ input VP;
+endmodule
+
+module SYSMONE4 (...);
+ parameter [15:0] COMMON_N_SOURCE = 16'hFFFF;
+ parameter [15:0] INIT_40 = 16'h0000;
+ parameter [15:0] INIT_41 = 16'h0000;
+ parameter [15:0] INIT_42 = 16'h0000;
+ parameter [15:0] INIT_43 = 16'h0000;
+ parameter [15:0] INIT_44 = 16'h0000;
+ parameter [15:0] INIT_45 = 16'h0000;
+ parameter [15:0] INIT_46 = 16'h0000;
+ parameter [15:0] INIT_47 = 16'h0000;
+ parameter [15:0] INIT_48 = 16'h0000;
+ parameter [15:0] INIT_49 = 16'h0000;
+ parameter [15:0] INIT_4A = 16'h0000;
+ parameter [15:0] INIT_4B = 16'h0000;
+ parameter [15:0] INIT_4C = 16'h0000;
+ parameter [15:0] INIT_4D = 16'h0000;
+ parameter [15:0] INIT_4E = 16'h0000;
+ parameter [15:0] INIT_4F = 16'h0000;
+ parameter [15:0] INIT_50 = 16'h0000;
+ parameter [15:0] INIT_51 = 16'h0000;
+ parameter [15:0] INIT_52 = 16'h0000;
+ parameter [15:0] INIT_53 = 16'h0000;
+ parameter [15:0] INIT_54 = 16'h0000;
+ parameter [15:0] INIT_55 = 16'h0000;
+ parameter [15:0] INIT_56 = 16'h0000;
+ parameter [15:0] INIT_57 = 16'h0000;
+ parameter [15:0] INIT_58 = 16'h0000;
+ parameter [15:0] INIT_59 = 16'h0000;
+ parameter [15:0] INIT_5A = 16'h0000;
+ parameter [15:0] INIT_5B = 16'h0000;
+ parameter [15:0] INIT_5C = 16'h0000;
+ parameter [15:0] INIT_5D = 16'h0000;
+ parameter [15:0] INIT_5E = 16'h0000;
+ parameter [15:0] INIT_5F = 16'h0000;
+ parameter [15:0] INIT_60 = 16'h0000;
+ parameter [15:0] INIT_61 = 16'h0000;
+ parameter [15:0] INIT_62 = 16'h0000;
+ parameter [15:0] INIT_63 = 16'h0000;
+ parameter [15:0] INIT_64 = 16'h0000;
+ parameter [15:0] INIT_65 = 16'h0000;
+ parameter [15:0] INIT_66 = 16'h0000;
+ parameter [15:0] INIT_67 = 16'h0000;
+ parameter [15:0] INIT_68 = 16'h0000;
+ parameter [15:0] INIT_69 = 16'h0000;
+ parameter [15:0] INIT_6A = 16'h0000;
+ parameter [15:0] INIT_6B = 16'h0000;
+ parameter [15:0] INIT_6C = 16'h0000;
+ parameter [15:0] INIT_6D = 16'h0000;
+ parameter [15:0] INIT_6E = 16'h0000;
+ parameter [15:0] INIT_6F = 16'h0000;
+ parameter [15:0] INIT_70 = 16'h0000;
+ parameter [15:0] INIT_71 = 16'h0000;
+ parameter [15:0] INIT_72 = 16'h0000;
+ parameter [15:0] INIT_73 = 16'h0000;
+ parameter [15:0] INIT_74 = 16'h0000;
+ parameter [15:0] INIT_75 = 16'h0000;
+ parameter [15:0] INIT_76 = 16'h0000;
+ parameter [15:0] INIT_77 = 16'h0000;
+ parameter [15:0] INIT_78 = 16'h0000;
+ parameter [15:0] INIT_79 = 16'h0000;
+ parameter [15:0] INIT_7A = 16'h0000;
+ parameter [15:0] INIT_7B = 16'h0000;
+ parameter [15:0] INIT_7C = 16'h0000;
+ parameter [15:0] INIT_7D = 16'h0000;
+ parameter [15:0] INIT_7E = 16'h0000;
+ parameter [15:0] INIT_7F = 16'h0000;
+ parameter [0:0] IS_CONVSTCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_DCLK_INVERTED = 1'b0;
+ parameter SIM_DEVICE = "ULTRASCALE_PLUS";
+ parameter SIM_MONITOR_FILE = "design.txt";
+ parameter integer SYSMON_VUSER0_BANK = 0;
+ parameter SYSMON_VUSER0_MONITOR = "NONE";
+ parameter integer SYSMON_VUSER1_BANK = 0;
+ parameter SYSMON_VUSER1_MONITOR = "NONE";
+ parameter integer SYSMON_VUSER2_BANK = 0;
+ parameter SYSMON_VUSER2_MONITOR = "NONE";
+ parameter integer SYSMON_VUSER3_BANK = 0;
+ parameter SYSMON_VUSER3_MONITOR = "NONE";
+ output [15:0] ADC_DATA;
+ output [15:0] ALM;
+ output BUSY;
+ output [5:0] CHANNEL;
+ output [15:0] DO;
+ output DRDY;
+ output EOC;
+ output EOS;
+ output I2C_SCLK_TS;
+ output I2C_SDA_TS;
+ output JTAGBUSY;
+ output JTAGLOCKED;
+ output JTAGMODIFIED;
+ output [4:0] MUXADDR;
+ output OT;
+ output SMBALERT_TS;
+ input CONVST;
+ (* invertible_pin = "IS_CONVSTCLK_INVERTED" *)
+ input CONVSTCLK;
+ input [7:0] DADDR;
+ (* invertible_pin = "IS_DCLK_INVERTED" *)
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ input I2C_SCLK;
+ input I2C_SDA;
+ input RESET;
+ input [15:0] VAUXN;
+ input [15:0] VAUXP;
+ input VN;
+ input VP;
+endmodule
+
+module DSP48E2 (...);
+ parameter integer ACASCREG = 1;
+ parameter integer ADREG = 1;
+ parameter integer ALUMODEREG = 1;
+ parameter AMULTSEL = "A";
+ parameter integer AREG = 1;
+ parameter AUTORESET_PATDET = "NO_RESET";
+ parameter AUTORESET_PRIORITY = "RESET";
+ parameter A_INPUT = "DIRECT";
+ parameter integer BCASCREG = 1;
+ parameter BMULTSEL = "B";
+ parameter integer BREG = 1;
+ parameter B_INPUT = "DIRECT";
+ parameter integer CARRYINREG = 1;
+ parameter integer CARRYINSELREG = 1;
+ parameter integer CREG = 1;
+ parameter integer DREG = 1;
+ parameter integer INMODEREG = 1;
+ parameter [3:0] IS_ALUMODE_INVERTED = 4'b0000;
+ parameter [0:0] IS_CARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [4:0] IS_INMODE_INVERTED = 5'b00000;
+ parameter [8:0] IS_OPMODE_INVERTED = 9'b000000000;
+ parameter [0:0] IS_RSTALLCARRYIN_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTALUMODE_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTA_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTB_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTCTRL_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTC_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTD_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTINMODE_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTM_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTP_INVERTED = 1'b0;
+ parameter [47:0] MASK = 48'h3FFFFFFFFFFF;
+ parameter integer MREG = 1;
+ parameter integer OPMODEREG = 1;
+ parameter [47:0] PATTERN = 48'h000000000000;
+ parameter PREADDINSEL = "A";
+ parameter integer PREG = 1;
+ parameter [47:0] RND = 48'h000000000000;
+ parameter SEL_MASK = "MASK";
+ parameter SEL_PATTERN = "PATTERN";
+ parameter USE_MULT = "MULTIPLY";
+ parameter USE_PATTERN_DETECT = "NO_PATDET";
+ parameter USE_SIMD = "ONE48";
+ parameter USE_WIDEXOR = "FALSE";
+ parameter XORSIMD = "XOR24_48_96";
+ output [29:0] ACOUT;
+ output [17:0] BCOUT;
+ output CARRYCASCOUT;
+ output [3:0] CARRYOUT;
+ output MULTSIGNOUT;
+ output OVERFLOW;
+ output [47:0] P;
+ output PATTERNBDETECT;
+ output PATTERNDETECT;
+ output [47:0] PCOUT;
+ output UNDERFLOW;
+ output [7:0] XOROUT;
+ input [29:0] A;
+ input [29:0] ACIN;
+ (* invertible_pin = "IS_ALUMODE_INVERTED" *)
+ input [3:0] ALUMODE;
+ input [17:0] B;
+ input [17:0] BCIN;
+ input [47:0] C;
+ input CARRYCASCIN;
+ (* invertible_pin = "IS_CARRYIN_INVERTED" *)
+ input CARRYIN;
+ input [2:0] CARRYINSEL;
+ input CEA1;
+ input CEA2;
+ input CEAD;
+ input CEALUMODE;
+ input CEB1;
+ input CEB2;
+ input CEC;
+ input CECARRYIN;
+ input CECTRL;
+ input CED;
+ input CEINMODE;
+ input CEM;
+ input CEP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [26:0] D;
+ (* invertible_pin = "IS_INMODE_INVERTED" *)
+ input [4:0] INMODE;
+ input MULTSIGNIN;
+ (* invertible_pin = "IS_OPMODE_INVERTED" *)
+ input [8:0] OPMODE;
+ input [47:0] PCIN;
+ (* invertible_pin = "IS_RSTA_INVERTED" *)
+ input RSTA;
+ (* invertible_pin = "IS_RSTALLCARRYIN_INVERTED" *)
+ input RSTALLCARRYIN;
+ (* invertible_pin = "IS_RSTALUMODE_INVERTED" *)
+ input RSTALUMODE;
+ (* invertible_pin = "IS_RSTB_INVERTED" *)
+ input RSTB;
+ (* invertible_pin = "IS_RSTC_INVERTED" *)
+ input RSTC;
+ (* invertible_pin = "IS_RSTCTRL_INVERTED" *)
+ input RSTCTRL;
+ (* invertible_pin = "IS_RSTD_INVERTED" *)
+ input RSTD;
+ (* invertible_pin = "IS_RSTINMODE_INVERTED" *)
+ input RSTINMODE;
+ (* invertible_pin = "IS_RSTM_INVERTED" *)
+ input RSTM;
+ (* invertible_pin = "IS_RSTP_INVERTED" *)
+ input RSTP;
+endmodule
+
+module FIFO18E2 (...);
+ parameter CASCADE_ORDER = "NONE";
+ parameter CLOCK_DOMAINS = "INDEPENDENT";
+ parameter FIRST_WORD_FALL_THROUGH = "FALSE";
+ parameter [35:0] INIT = 36'h000000000;
+ parameter [0:0] IS_RDCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RDEN_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTREG_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter [0:0] IS_WRCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_WREN_INVERTED = 1'b0;
+ parameter integer PROG_EMPTY_THRESH = 256;
+ parameter integer PROG_FULL_THRESH = 256;
+ parameter RDCOUNT_TYPE = "RAW_PNTR";
+ parameter integer READ_WIDTH = 4;
+ parameter REGISTER_MODE = "UNREGISTERED";
+ parameter RSTREG_PRIORITY = "RSTREG";
+ parameter SLEEP_ASYNC = "FALSE";
+ parameter [35:0] SRVAL = 36'h000000000;
+ parameter WRCOUNT_TYPE = "RAW_PNTR";
+ parameter integer WRITE_WIDTH = 4;
+ output [31:0] CASDOUT;
+ output [3:0] CASDOUTP;
+ output CASNXTEMPTY;
+ output CASPRVRDEN;
+ output [31:0] DOUT;
+ output [3:0] DOUTP;
+ output EMPTY;
+ output FULL;
+ output PROGEMPTY;
+ output PROGFULL;
+ output [12:0] RDCOUNT;
+ output RDERR;
+ output RDRSTBUSY;
+ output [12:0] WRCOUNT;
+ output WRERR;
+ output WRRSTBUSY;
+ input [31:0] CASDIN;
+ input [3:0] CASDINP;
+ input CASDOMUX;
+ input CASDOMUXEN;
+ input CASNXTRDEN;
+ input CASOREGIMUX;
+ input CASOREGIMUXEN;
+ input CASPRVEMPTY;
+ input [31:0] DIN;
+ input [3:0] DINP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_RDCLK_INVERTED" *)
+ input RDCLK;
+ (* invertible_pin = "IS_RDEN_INVERTED" *)
+ input RDEN;
+ input REGCE;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RSTREG_INVERTED" *)
+ input RSTREG;
+ input SLEEP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WRCLK_INVERTED" *)
+ input WRCLK;
+ (* invertible_pin = "IS_WREN_INVERTED" *)
+ input WREN;
+endmodule
+
+module FIFO36E2 (...);
+ parameter CASCADE_ORDER = "NONE";
+ parameter CLOCK_DOMAINS = "INDEPENDENT";
+ parameter EN_ECC_PIPE = "FALSE";
+ parameter EN_ECC_READ = "FALSE";
+ parameter EN_ECC_WRITE = "FALSE";
+ parameter FIRST_WORD_FALL_THROUGH = "FALSE";
+ parameter [71:0] INIT = 72'h000000000000000000;
+ parameter [0:0] IS_RDCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RDEN_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTREG_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter [0:0] IS_WRCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_WREN_INVERTED = 1'b0;
+ parameter integer PROG_EMPTY_THRESH = 256;
+ parameter integer PROG_FULL_THRESH = 256;
+ parameter RDCOUNT_TYPE = "RAW_PNTR";
+ parameter integer READ_WIDTH = 4;
+ parameter REGISTER_MODE = "UNREGISTERED";
+ parameter RSTREG_PRIORITY = "RSTREG";
+ parameter SLEEP_ASYNC = "FALSE";
+ parameter [71:0] SRVAL = 72'h000000000000000000;
+ parameter WRCOUNT_TYPE = "RAW_PNTR";
+ parameter integer WRITE_WIDTH = 4;
+ output [63:0] CASDOUT;
+ output [7:0] CASDOUTP;
+ output CASNXTEMPTY;
+ output CASPRVRDEN;
+ output DBITERR;
+ output [63:0] DOUT;
+ output [7:0] DOUTP;
+ output [7:0] ECCPARITY;
+ output EMPTY;
+ output FULL;
+ output PROGEMPTY;
+ output PROGFULL;
+ output [13:0] RDCOUNT;
+ output RDERR;
+ output RDRSTBUSY;
+ output SBITERR;
+ output [13:0] WRCOUNT;
+ output WRERR;
+ output WRRSTBUSY;
+ input [63:0] CASDIN;
+ input [7:0] CASDINP;
+ input CASDOMUX;
+ input CASDOMUXEN;
+ input CASNXTRDEN;
+ input CASOREGIMUX;
+ input CASOREGIMUXEN;
+ input CASPRVEMPTY;
+ input [63:0] DIN;
+ input [7:0] DINP;
+ input INJECTDBITERR;
+ input INJECTSBITERR;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_RDCLK_INVERTED" *)
+ input RDCLK;
+ (* invertible_pin = "IS_RDEN_INVERTED" *)
+ input RDEN;
+ input REGCE;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RSTREG_INVERTED" *)
+ input RSTREG;
+ input SLEEP;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WRCLK_INVERTED" *)
+ input WRCLK;
+ (* invertible_pin = "IS_WREN_INVERTED" *)
+ input WREN;
+endmodule
+
+module RAMB18E2 (...);
+ parameter CASCADE_ORDER_A = "NONE";
+ parameter CASCADE_ORDER_B = "NONE";
+ parameter CLOCK_DOMAINS = "INDEPENDENT";
+ parameter integer DOA_REG = 1;
+ parameter integer DOB_REG = 1;
+ parameter ENADDRENA = "FALSE";
+ parameter ENADDRENB = "FALSE";
+ parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [17:0] INIT_A = 18'h00000;
+ parameter [17:0] INIT_B = 18'h00000;
+ parameter INIT_FILE = "NONE";
+ parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_ENARDEN_INVERTED = 1'b0;
+ parameter [0:0] IS_ENBWREN_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTREGB_INVERTED = 1'b0;
+ parameter RDADDRCHANGEA = "FALSE";
+ parameter RDADDRCHANGEB = "FALSE";
+ parameter integer READ_WIDTH_A = 0;
+ parameter integer READ_WIDTH_B = 0;
+ parameter RSTREG_PRIORITY_A = "RSTREG";
+ parameter RSTREG_PRIORITY_B = "RSTREG";
+ parameter SIM_COLLISION_CHECK = "ALL";
+ parameter SLEEP_ASYNC = "FALSE";
+ parameter [17:0] SRVAL_A = 18'h00000;
+ parameter [17:0] SRVAL_B = 18'h00000;
+ parameter WRITE_MODE_A = "NO_CHANGE";
+ parameter WRITE_MODE_B = "NO_CHANGE";
+ parameter integer WRITE_WIDTH_A = 0;
+ parameter integer WRITE_WIDTH_B = 0;
+ output [15:0] CASDOUTA;
+ output [15:0] CASDOUTB;
+ output [1:0] CASDOUTPA;
+ output [1:0] CASDOUTPB;
+ output [15:0] DOUTADOUT;
+ output [15:0] DOUTBDOUT;
+ output [1:0] DOUTPADOUTP;
+ output [1:0] DOUTPBDOUTP;
+ input [13:0] ADDRARDADDR;
+ input [13:0] ADDRBWRADDR;
+ input ADDRENA;
+ input ADDRENB;
+ input CASDIMUXA;
+ input CASDIMUXB;
+ input [15:0] CASDINA;
+ input [15:0] CASDINB;
+ input [1:0] CASDINPA;
+ input [1:0] CASDINPB;
+ input CASDOMUXA;
+ input CASDOMUXB;
+ input CASDOMUXEN_A;
+ input CASDOMUXEN_B;
+ input CASOREGIMUXA;
+ input CASOREGIMUXB;
+ input CASOREGIMUXEN_A;
+ input CASOREGIMUXEN_B;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
+ input CLKARDCLK;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
+ input CLKBWRCLK;
+ input [15:0] DINADIN;
+ input [15:0] DINBDIN;
+ input [1:0] DINPADINP;
+ input [1:0] DINPBDINP;
+ (* invertible_pin = "IS_ENARDEN_INVERTED" *)
+ input ENARDEN;
+ (* invertible_pin = "IS_ENBWREN_INVERTED" *)
+ input ENBWREN;
+ input REGCEAREGCE;
+ input REGCEB;
+ (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
+ input RSTRAMARSTRAM;
+ (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
+ input RSTRAMB;
+ (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
+ input RSTREGARSTREG;
+ (* invertible_pin = "IS_RSTREGB_INVERTED" *)
+ input RSTREGB;
+ input SLEEP;
+ input [1:0] WEA;
+ input [3:0] WEBWE;
+endmodule
+
+module RAMB36E2 (...);
+ parameter CASCADE_ORDER_A = "NONE";
+ parameter CASCADE_ORDER_B = "NONE";
+ parameter CLOCK_DOMAINS = "INDEPENDENT";
+ parameter integer DOA_REG = 1;
+ parameter integer DOB_REG = 1;
+ parameter ENADDRENA = "FALSE";
+ parameter ENADDRENB = "FALSE";
+ parameter EN_ECC_PIPE = "FALSE";
+ parameter EN_ECC_READ = "FALSE";
+ parameter EN_ECC_WRITE = "FALSE";
+ parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [255:0] INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [35:0] INIT_A = 36'h000000000;
+ parameter [35:0] INIT_B = 36'h000000000;
+ parameter INIT_FILE = "NONE";
+ parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0;
+ parameter [0:0] IS_ENARDEN_INVERTED = 1'b0;
+ parameter [0:0] IS_ENBWREN_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0;
+ parameter [0:0] IS_RSTREGB_INVERTED = 1'b0;
+ parameter RDADDRCHANGEA = "FALSE";
+ parameter RDADDRCHANGEB = "FALSE";
+ parameter integer READ_WIDTH_A = 0;
+ parameter integer READ_WIDTH_B = 0;
+ parameter RSTREG_PRIORITY_A = "RSTREG";
+ parameter RSTREG_PRIORITY_B = "RSTREG";
+ parameter SIM_COLLISION_CHECK = "ALL";
+ parameter SLEEP_ASYNC = "FALSE";
+ parameter [35:0] SRVAL_A = 36'h000000000;
+ parameter [35:0] SRVAL_B = 36'h000000000;
+ parameter WRITE_MODE_A = "NO_CHANGE";
+ parameter WRITE_MODE_B = "NO_CHANGE";
+ parameter integer WRITE_WIDTH_A = 0;
+ parameter integer WRITE_WIDTH_B = 0;
+ output [31:0] CASDOUTA;
+ output [31:0] CASDOUTB;
+ output [3:0] CASDOUTPA;
+ output [3:0] CASDOUTPB;
+ output CASOUTDBITERR;
+ output CASOUTSBITERR;
+ output DBITERR;
+ output [31:0] DOUTADOUT;
+ output [31:0] DOUTBDOUT;
+ output [3:0] DOUTPADOUTP;
+ output [3:0] DOUTPBDOUTP;
+ output [7:0] ECCPARITY;
+ output [8:0] RDADDRECC;
+ output SBITERR;
+ input [14:0] ADDRARDADDR;
+ input [14:0] ADDRBWRADDR;
+ input ADDRENA;
+ input ADDRENB;
+ input CASDIMUXA;
+ input CASDIMUXB;
+ input [31:0] CASDINA;
+ input [31:0] CASDINB;
+ input [3:0] CASDINPA;
+ input [3:0] CASDINPB;
+ input CASDOMUXA;
+ input CASDOMUXB;
+ input CASDOMUXEN_A;
+ input CASDOMUXEN_B;
+ input CASINDBITERR;
+ input CASINSBITERR;
+ input CASOREGIMUXA;
+ input CASOREGIMUXB;
+ input CASOREGIMUXEN_A;
+ input CASOREGIMUXEN_B;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
+ input CLKARDCLK;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
+ input CLKBWRCLK;
+ input [31:0] DINADIN;
+ input [31:0] DINBDIN;
+ input [3:0] DINPADINP;
+ input [3:0] DINPBDINP;
+ input ECCPIPECE;
+ (* invertible_pin = "IS_ENARDEN_INVERTED" *)
+ input ENARDEN;
+ (* invertible_pin = "IS_ENBWREN_INVERTED" *)
+ input ENBWREN;
+ input INJECTDBITERR;
+ input INJECTSBITERR;
+ input REGCEAREGCE;
+ input REGCEB;
+ (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
+ input RSTRAMARSTRAM;
+ (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
+ input RSTRAMB;
+ (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
+ input RSTREGARSTREG;
+ (* invertible_pin = "IS_RSTREGB_INVERTED" *)
+ input RSTREGB;
+ input SLEEP;
+ input [3:0] WEA;
+ input [7:0] WEBWE;
+endmodule
+
+module URAM288 (...);
+ parameter integer AUTO_SLEEP_LATENCY = 8;
+ parameter integer AVG_CONS_INACTIVE_CYCLES = 10;
+ parameter BWE_MODE_A = "PARITY_INTERLEAVED";
+ parameter BWE_MODE_B = "PARITY_INTERLEAVED";
+ parameter CASCADE_ORDER_A = "NONE";
+ parameter CASCADE_ORDER_B = "NONE";
+ parameter EN_AUTO_SLEEP_MODE = "FALSE";
+ parameter EN_ECC_RD_A = "FALSE";
+ parameter EN_ECC_RD_B = "FALSE";
+ parameter EN_ECC_WR_A = "FALSE";
+ parameter EN_ECC_WR_B = "FALSE";
+ parameter IREG_PRE_A = "FALSE";
+ parameter IREG_PRE_B = "FALSE";
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_EN_A_INVERTED = 1'b0;
+ parameter [0:0] IS_EN_B_INVERTED = 1'b0;
+ parameter [0:0] IS_RDB_WR_A_INVERTED = 1'b0;
+ parameter [0:0] IS_RDB_WR_B_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_A_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_B_INVERTED = 1'b0;
+ parameter MATRIX_ID = "NONE";
+ parameter integer NUM_UNIQUE_SELF_ADDR_A = 1;
+ parameter integer NUM_UNIQUE_SELF_ADDR_B = 1;
+ parameter integer NUM_URAM_IN_MATRIX = 1;
+ parameter OREG_A = "FALSE";
+ parameter OREG_B = "FALSE";
+ parameter OREG_ECC_A = "FALSE";
+ parameter OREG_ECC_B = "FALSE";
+ parameter REG_CAS_A = "FALSE";
+ parameter REG_CAS_B = "FALSE";
+ parameter RST_MODE_A = "SYNC";
+ parameter RST_MODE_B = "SYNC";
+ parameter [10:0] SELF_ADDR_A = 11'h000;
+ parameter [10:0] SELF_ADDR_B = 11'h000;
+ parameter [10:0] SELF_MASK_A = 11'h7FF;
+ parameter [10:0] SELF_MASK_B = 11'h7FF;
+ parameter USE_EXT_CE_A = "FALSE";
+ parameter USE_EXT_CE_B = "FALSE";
+ output [22:0] CAS_OUT_ADDR_A;
+ output [22:0] CAS_OUT_ADDR_B;
+ output [8:0] CAS_OUT_BWE_A;
+ output [8:0] CAS_OUT_BWE_B;
+ output CAS_OUT_DBITERR_A;
+ output CAS_OUT_DBITERR_B;
+ output [71:0] CAS_OUT_DIN_A;
+ output [71:0] CAS_OUT_DIN_B;
+ output [71:0] CAS_OUT_DOUT_A;
+ output [71:0] CAS_OUT_DOUT_B;
+ output CAS_OUT_EN_A;
+ output CAS_OUT_EN_B;
+ output CAS_OUT_RDACCESS_A;
+ output CAS_OUT_RDACCESS_B;
+ output CAS_OUT_RDB_WR_A;
+ output CAS_OUT_RDB_WR_B;
+ output CAS_OUT_SBITERR_A;
+ output CAS_OUT_SBITERR_B;
+ output DBITERR_A;
+ output DBITERR_B;
+ output [71:0] DOUT_A;
+ output [71:0] DOUT_B;
+ output RDACCESS_A;
+ output RDACCESS_B;
+ output SBITERR_A;
+ output SBITERR_B;
+ input [22:0] ADDR_A;
+ input [22:0] ADDR_B;
+ input [8:0] BWE_A;
+ input [8:0] BWE_B;
+ input [22:0] CAS_IN_ADDR_A;
+ input [22:0] CAS_IN_ADDR_B;
+ input [8:0] CAS_IN_BWE_A;
+ input [8:0] CAS_IN_BWE_B;
+ input CAS_IN_DBITERR_A;
+ input CAS_IN_DBITERR_B;
+ input [71:0] CAS_IN_DIN_A;
+ input [71:0] CAS_IN_DIN_B;
+ input [71:0] CAS_IN_DOUT_A;
+ input [71:0] CAS_IN_DOUT_B;
+ input CAS_IN_EN_A;
+ input CAS_IN_EN_B;
+ input CAS_IN_RDACCESS_A;
+ input CAS_IN_RDACCESS_B;
+ input CAS_IN_RDB_WR_A;
+ input CAS_IN_RDB_WR_B;
+ input CAS_IN_SBITERR_A;
+ input CAS_IN_SBITERR_B;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [71:0] DIN_A;
+ input [71:0] DIN_B;
+ (* invertible_pin = "IS_EN_A_INVERTED" *)
+ input EN_A;
+ (* invertible_pin = "IS_EN_B_INVERTED" *)
+ input EN_B;
+ input INJECT_DBITERR_A;
+ input INJECT_DBITERR_B;
+ input INJECT_SBITERR_A;
+ input INJECT_SBITERR_B;
+ input OREG_CE_A;
+ input OREG_CE_B;
+ input OREG_ECC_CE_A;
+ input OREG_ECC_CE_B;
+ (* invertible_pin = "IS_RDB_WR_A_INVERTED" *)
+ input RDB_WR_A;
+ (* invertible_pin = "IS_RDB_WR_B_INVERTED" *)
+ input RDB_WR_B;
+ (* invertible_pin = "IS_RST_A_INVERTED" *)
+ input RST_A;
+ (* invertible_pin = "IS_RST_B_INVERTED" *)
+ input RST_B;
+ input SLEEP;
+endmodule
+
+module URAM288_BASE (...);
+ parameter integer AUTO_SLEEP_LATENCY = 8;
+ parameter integer AVG_CONS_INACTIVE_CYCLES = 10;
+ parameter BWE_MODE_A = "PARITY_INTERLEAVED";
+ parameter BWE_MODE_B = "PARITY_INTERLEAVED";
+ parameter EN_AUTO_SLEEP_MODE = "FALSE";
+ parameter EN_ECC_RD_A = "FALSE";
+ parameter EN_ECC_RD_B = "FALSE";
+ parameter EN_ECC_WR_A = "FALSE";
+ parameter EN_ECC_WR_B = "FALSE";
+ parameter IREG_PRE_A = "FALSE";
+ parameter IREG_PRE_B = "FALSE";
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_EN_A_INVERTED = 1'b0;
+ parameter [0:0] IS_EN_B_INVERTED = 1'b0;
+ parameter [0:0] IS_RDB_WR_A_INVERTED = 1'b0;
+ parameter [0:0] IS_RDB_WR_B_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_A_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_B_INVERTED = 1'b0;
+ parameter OREG_A = "FALSE";
+ parameter OREG_B = "FALSE";
+ parameter OREG_ECC_A = "FALSE";
+ parameter OREG_ECC_B = "FALSE";
+ parameter RST_MODE_A = "SYNC";
+ parameter RST_MODE_B = "SYNC";
+ parameter USE_EXT_CE_A = "FALSE";
+ parameter USE_EXT_CE_B = "FALSE";
+ output DBITERR_A;
+ output DBITERR_B;
+ output [71:0] DOUT_A;
+ output [71:0] DOUT_B;
+ output SBITERR_A;
+ output SBITERR_B;
+ input [22:0] ADDR_A;
+ input [22:0] ADDR_B;
+ input [8:0] BWE_A;
+ input [8:0] BWE_B;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [71:0] DIN_A;
+ input [71:0] DIN_B;
+ (* invertible_pin = "IS_EN_A_INVERTED" *)
+ input EN_A;
+ (* invertible_pin = "IS_EN_B_INVERTED" *)
+ input EN_B;
+ input INJECT_DBITERR_A;
+ input INJECT_DBITERR_B;
+ input INJECT_SBITERR_A;
+ input INJECT_SBITERR_B;
+ input OREG_CE_A;
+ input OREG_CE_B;
+ input OREG_ECC_CE_A;
+ input OREG_ECC_CE_B;
+ (* invertible_pin = "IS_RDB_WR_A_INVERTED" *)
+ input RDB_WR_A;
+ (* invertible_pin = "IS_RDB_WR_B_INVERTED" *)
+ input RDB_WR_B;
+ (* invertible_pin = "IS_RST_A_INVERTED" *)
+ input RST_A;
+ (* invertible_pin = "IS_RST_B_INVERTED" *)
+ input RST_B;
+ input SLEEP;
+endmodule
+
+module RAM128X1S (...);
+ parameter [127:0] INIT = 128'h00000000000000000000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input A6;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM256X1D (...);
+ parameter [255:0] INIT = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output DPO;
+ output SPO;
+ input [7:0] A;
+ input D;
+ input [7:0] DPRA;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM256X1S (...);
+ parameter [255:0] INIT = 256'h0;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input [7:0] A;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output [1:0] DOA;
+ output [1:0] DOB;
+ output [1:0] DOC;
+ output [1:0] DOD;
+ input [4:0] ADDRA;
+ input [4:0] ADDRB;
+ input [4:0] ADDRC;
+ input [4:0] ADDRD;
+ input [1:0] DIA;
+ input [1:0] DIB;
+ input [1:0] DIC;
+ input [1:0] DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32M16 (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [63:0] INIT_E = 64'h0000000000000000;
+ parameter [63:0] INIT_F = 64'h0000000000000000;
+ parameter [63:0] INIT_G = 64'h0000000000000000;
+ parameter [63:0] INIT_H = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output [1:0] DOA;
+ output [1:0] DOB;
+ output [1:0] DOC;
+ output [1:0] DOD;
+ output [1:0] DOE;
+ output [1:0] DOF;
+ output [1:0] DOG;
+ output [1:0] DOH;
+ input [4:0] ADDRA;
+ input [4:0] ADDRB;
+ input [4:0] ADDRC;
+ input [4:0] ADDRD;
+ input [4:0] ADDRE;
+ input [4:0] ADDRF;
+ input [4:0] ADDRG;
+ input [4:0] ADDRH;
+ input [1:0] DIA;
+ input [1:0] DIB;
+ input [1:0] DIC;
+ input [1:0] DID;
+ input [1:0] DIE;
+ input [1:0] DIF;
+ input [1:0] DIG;
+ input [1:0] DIH;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM32X1S (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM512X1S (...);
+ parameter [511:0] INIT = 512'h0;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input [8:0] A;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64M (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output DOA;
+ output DOB;
+ output DOC;
+ output DOD;
+ input [5:0] ADDRA;
+ input [5:0] ADDRB;
+ input [5:0] ADDRC;
+ input [5:0] ADDRD;
+ input DIA;
+ input DIB;
+ input DIC;
+ input DID;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64M8 (...);
+ parameter [63:0] INIT_A = 64'h0000000000000000;
+ parameter [63:0] INIT_B = 64'h0000000000000000;
+ parameter [63:0] INIT_C = 64'h0000000000000000;
+ parameter [63:0] INIT_D = 64'h0000000000000000;
+ parameter [63:0] INIT_E = 64'h0000000000000000;
+ parameter [63:0] INIT_F = 64'h0000000000000000;
+ parameter [63:0] INIT_G = 64'h0000000000000000;
+ parameter [63:0] INIT_H = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output DOA;
+ output DOB;
+ output DOC;
+ output DOD;
+ output DOE;
+ output DOF;
+ output DOG;
+ output DOH;
+ input [5:0] ADDRA;
+ input [5:0] ADDRB;
+ input [5:0] ADDRC;
+ input [5:0] ADDRD;
+ input [5:0] ADDRE;
+ input [5:0] ADDRF;
+ input [5:0] ADDRG;
+ input [5:0] ADDRH;
+ input DIA;
+ input DIB;
+ input DIC;
+ input DID;
+ input DIE;
+ input DIF;
+ input DIG;
+ input DIH;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module RAM64X1S (...);
+ parameter [63:0] INIT = 64'h0000000000000000;
+ parameter [0:0] IS_WCLK_INVERTED = 1'b0;
+ output O;
+ input A0;
+ input A1;
+ input A2;
+ input A3;
+ input A4;
+ input A5;
+ input D;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_WCLK_INVERTED" *)
+ input WCLK;
+ input WE;
+endmodule
+
+module AND2B1L (...);
+ parameter [0:0] IS_SRI_INVERTED = 1'b0;
+ output O;
+ input DI;
+ (* invertible_pin = "IS_SRI_INVERTED" *)
+ input SRI;
+endmodule
+
+module CARRY8 (...);
+ parameter CARRY_TYPE = "SINGLE_CY8";
+ output [7:0] CO;
+ output [7:0] O;
+ input CI;
+ input CI_TOP;
+ input [7:0] DI;
+ input [7:0] S;
+endmodule
+
+module CFGLUT5 (...);
+ parameter [31:0] INIT = 32'h00000000;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ output CDO;
+ output O5;
+ output O6;
+ input I4;
+ input I3;
+ input I2;
+ input I1;
+ input I0;
+ input CDI;
+ input CE;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+endmodule
+
+module MUXF9 (...);
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module OR2L (...);
+ parameter [0:0] IS_SRI_INVERTED = 1'b0;
+ output O;
+ input DI;
+ (* invertible_pin = "IS_SRI_INVERTED" *)
+ input SRI;
+endmodule
+
+module BUFG_GT (...);
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input CEMASK;
+ input CLR;
+ input CLRMASK;
+ input [2:0] DIV;
+ input I;
+endmodule
+
+module BUFG_GT_SYNC (...);
+ output CESYNC;
+ output CLRSYNC;
+ input CE;
+ input CLK;
+ input CLR;
+endmodule
+
+module BUFG_PS (...);
+ (* clkbuf_driver *)
+ output O;
+ input I;
+endmodule
+
+module BUFGCE (...);
+ parameter CE_TYPE = "SYNC";
+ parameter [0:0] IS_CE_INVERTED = 1'b0;
+ parameter [0:0] IS_I_INVERTED = 1'b0;
+ (* clkbuf_driver *)
+ output O;
+ (* invertible_pin = "IS_CE_INVERTED" *)
+ input CE;
+ (* invertible_pin = "IS_I_INVERTED" *)
+ input I;
+endmodule
+
+module BUFGCE_1 (...);
+ (* clkbuf_driver *)
+ output O;
+ input CE;
+ input I;
+endmodule
+
+module BUFGCE_DIV (...);
+ parameter integer BUFGCE_DIVIDE = 1;
+ parameter [0:0] IS_CE_INVERTED = 1'b0;
+ parameter [0:0] IS_CLR_INVERTED = 1'b0;
+ parameter [0:0] IS_I_INVERTED = 1'b0;
+ (* clkbuf_driver *)
+ output O;
+ (* invertible_pin = "IS_CE_INVERTED" *)
+ input CE;
+ (* invertible_pin = "IS_CLR_INVERTED" *)
+ input CLR;
+ (* invertible_pin = "IS_I_INVERTED" *)
+ input I;
+endmodule
+
+module BUFGMUX (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_1 (...);
+ parameter CLK_SEL_TYPE = "SYNC";
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module BUFGMUX_CTRL (...);
+ (* clkbuf_driver *)
+ output O;
+ input I0;
+ input I1;
+ input S;
+endmodule
+
+module MMCME3_ADV (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter CLKFBOUT_USE_FINE_PS = "FALSE";
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKIN2_PERIOD = 0.000;
+ parameter real CLKIN_FREQ_MAX = 1066.000;
+ parameter real CLKIN_FREQ_MIN = 10.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter CLKOUT0_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUT1_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter CLKOUT2_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT3_USE_FINE_PS = "FALSE";
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter CLKOUT4_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter CLKOUT5_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter CLKOUT6_USE_FINE_PS = "FALSE";
+ parameter real CLKPFD_FREQ_MAX = 550.000;
+ parameter real CLKPFD_FREQ_MIN = 10.000;
+ parameter COMPENSATION = "AUTO";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN1_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN2_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
+ parameter [0:0] IS_PSEN_INVERTED = 1'b0;
+ parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER1 = 0.010;
+ parameter real REF_JITTER2 = 0.010;
+ parameter SS_EN = "FALSE";
+ parameter SS_MODE = "CENTER_HIGH";
+ parameter integer SS_MOD_PERIOD = 10000;
+ parameter STARTUP_WAIT = "FALSE";
+ parameter real VCOCLK_FREQ_MAX = 1600.000;
+ parameter real VCOCLK_FREQ_MIN = 600.000;
+ parameter STARTUP_WAIT = "FALSE";
+ output CDDCDONE;
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKFBSTOPPED;
+ output CLKINSTOPPED;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output [15:0] DO;
+ output DRDY;
+ output LOCKED;
+ output PSDONE;
+ input CDDCREQ;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN1_INVERTED" *)
+ input CLKIN1;
+ (* invertible_pin = "IS_CLKIN2_INVERTED" *)
+ input CLKIN2;
+ (* invertible_pin = "IS_CLKINSEL_INVERTED" *)
+ input CLKINSEL;
+ input [6:0] DADDR;
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ input PSCLK;
+ (* invertible_pin = "IS_PSEN_INVERTED" *)
+ input PSEN;
+ (* invertible_pin = "IS_PSINCDEC_INVERTED" *)
+ input PSINCDEC;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module MMCME3_BASE (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN1_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER1 = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output LOCKED;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN1_INVERTED" *)
+ input CLKIN1;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module MMCME4_ADV (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter CLKFBOUT_USE_FINE_PS = "FALSE";
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKIN2_PERIOD = 0.000;
+ parameter real CLKIN_FREQ_MAX = 1066.000;
+ parameter real CLKIN_FREQ_MIN = 10.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter CLKOUT0_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUT1_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter CLKOUT2_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT3_USE_FINE_PS = "FALSE";
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter CLKOUT4_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter CLKOUT5_USE_FINE_PS = "FALSE";
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter CLKOUT6_USE_FINE_PS = "FALSE";
+ parameter real CLKPFD_FREQ_MAX = 550.000;
+ parameter real CLKPFD_FREQ_MIN = 10.000;
+ parameter COMPENSATION = "AUTO";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN1_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN2_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
+ parameter [0:0] IS_PSEN_INVERTED = 1'b0;
+ parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER1 = 0.010;
+ parameter real REF_JITTER2 = 0.010;
+ parameter SS_EN = "FALSE";
+ parameter SS_MODE = "CENTER_HIGH";
+ parameter integer SS_MOD_PERIOD = 10000;
+ parameter STARTUP_WAIT = "FALSE";
+ parameter real VCOCLK_FREQ_MAX = 1600.000;
+ parameter real VCOCLK_FREQ_MIN = 800.000;
+ parameter STARTUP_WAIT = "FALSE";
+ output CDDCDONE;
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKFBSTOPPED;
+ output CLKINSTOPPED;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output [15:0] DO;
+ output DRDY;
+ output LOCKED;
+ output PSDONE;
+ input CDDCREQ;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN1_INVERTED" *)
+ input CLKIN1;
+ (* invertible_pin = "IS_CLKIN2_INVERTED" *)
+ input CLKIN2;
+ (* invertible_pin = "IS_CLKINSEL_INVERTED" *)
+ input CLKINSEL;
+ input [6:0] DADDR;
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ input PSCLK;
+ (* invertible_pin = "IS_PSEN_INVERTED" *)
+ input PSEN;
+ (* invertible_pin = "IS_PSINCDEC_INVERTED" *)
+ input PSINCDEC;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module MMCME4_BASE (...);
+ parameter BANDWIDTH = "OPTIMIZED";
+ parameter real CLKFBOUT_MULT_F = 5.000;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN1_PERIOD = 0.000;
+ parameter real CLKOUT0_DIVIDE_F = 1.000;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter integer CLKOUT2_DIVIDE = 1;
+ parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT2_PHASE = 0.000;
+ parameter integer CLKOUT3_DIVIDE = 1;
+ parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT3_PHASE = 0.000;
+ parameter CLKOUT4_CASCADE = "FALSE";
+ parameter integer CLKOUT4_DIVIDE = 1;
+ parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT4_PHASE = 0.000;
+ parameter integer CLKOUT5_DIVIDE = 1;
+ parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT5_PHASE = 0.000;
+ parameter integer CLKOUT6_DIVIDE = 1;
+ parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT6_PHASE = 0.000;
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN1_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER1 = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKFBOUTB;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUT2;
+ output CLKOUT2B;
+ output CLKOUT3;
+ output CLKOUT3B;
+ output CLKOUT4;
+ output CLKOUT5;
+ output CLKOUT6;
+ output LOCKED;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN1_INVERTED" *)
+ input CLKIN1;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module PLLE3_ADV (...);
+ parameter integer CLKFBOUT_MULT = 5;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN_FREQ_MAX = 1066.000;
+ parameter real CLKIN_FREQ_MIN = 70.000;
+ parameter real CLKIN_PERIOD = 0.000;
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUTPHY_MODE = "VCO_2X";
+ parameter real CLKPFD_FREQ_MAX = 667.500;
+ parameter real CLKPFD_FREQ_MIN = 70.000;
+ parameter COMPENSATION = "AUTO";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ parameter real VCOCLK_FREQ_MAX = 1335.000;
+ parameter real VCOCLK_FREQ_MIN = 600.000;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUTPHY;
+ output [15:0] DO;
+ output DRDY;
+ output LOCKED;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN_INVERTED" *)
+ input CLKIN;
+ input CLKOUTPHYEN;
+ input [6:0] DADDR;
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module PLLE3_BASE (...);
+ parameter integer CLKFBOUT_MULT = 5;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN_PERIOD = 0.000;
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUTPHY_MODE = "VCO_2X";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUTPHY;
+ output LOCKED;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN_INVERTED" *)
+ input CLKIN;
+ input CLKOUTPHYEN;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module PLLE4_ADV (...);
+ parameter integer CLKFBOUT_MULT = 5;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN_FREQ_MAX = 1066.000;
+ parameter real CLKIN_FREQ_MIN = 70.000;
+ parameter real CLKIN_PERIOD = 0.000;
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUTPHY_MODE = "VCO_2X";
+ parameter real CLKPFD_FREQ_MAX = 667.500;
+ parameter real CLKPFD_FREQ_MIN = 70.000;
+ parameter COMPENSATION = "AUTO";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ parameter real VCOCLK_FREQ_MAX = 1500.000;
+ parameter real VCOCLK_FREQ_MIN = 750.000;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUTPHY;
+ output [15:0] DO;
+ output DRDY;
+ output LOCKED;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN_INVERTED" *)
+ input CLKIN;
+ input CLKOUTPHYEN;
+ input [6:0] DADDR;
+ input DCLK;
+ input DEN;
+ input [15:0] DI;
+ input DWE;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module PLLE4_BASE (...);
+ parameter integer CLKFBOUT_MULT = 5;
+ parameter real CLKFBOUT_PHASE = 0.000;
+ parameter real CLKIN_PERIOD = 0.000;
+ parameter integer CLKOUT0_DIVIDE = 1;
+ parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT0_PHASE = 0.000;
+ parameter integer CLKOUT1_DIVIDE = 1;
+ parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+ parameter real CLKOUT1_PHASE = 0.000;
+ parameter CLKOUTPHY_MODE = "VCO_2X";
+ parameter integer DIVCLK_DIVIDE = 1;
+ parameter [0:0] IS_CLKFBIN_INVERTED = 1'b0;
+ parameter [0:0] IS_CLKIN_INVERTED = 1'b0;
+ parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REF_JITTER = 0.010;
+ parameter STARTUP_WAIT = "FALSE";
+ output CLKFBOUT;
+ output CLKOUT0;
+ output CLKOUT0B;
+ output CLKOUT1;
+ output CLKOUT1B;
+ output CLKOUTPHY;
+ output LOCKED;
+ (* invertible_pin = "IS_CLKFBIN_INVERTED" *)
+ input CLKFBIN;
+ (* invertible_pin = "IS_CLKIN_INVERTED" *)
+ input CLKIN;
+ input CLKOUTPHYEN;
+ (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+ input PWRDWN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+(* keep *)
+module BSCANE2 (...);
+ parameter DISABLE_JTAG = "FALSE";
+ parameter integer JTAG_CHAIN = 1;
+ output CAPTURE;
+ output DRCK;
+ output RESET;
+ output RUNTEST;
+ output SEL;
+ output SHIFT;
+ output TCK;
+ output TDI;
+ output TMS;
+ output UPDATE;
+ input TDO;
+endmodule
+
+module DNA_PORTE2 (...);
+ parameter [95:0] SIM_DNA_VALUE = 96'h000000000000000000000000;
+ output DOUT;
+ input CLK;
+ input DIN;
+ input READ;
+ input SHIFT;
+endmodule
+
+module EFUSE_USR (...);
+ parameter [31:0] SIM_EFUSE_VALUE = 32'h00000000;
+ output [31:0] EFUSEUSR;
+endmodule
+
+module FRAME_ECCE3 (...);
+ output CRCERROR;
+ output ECCERRORNOTSINGLE;
+ output ECCERRORSINGLE;
+ output ENDOFFRAME;
+ output ENDOFSCAN;
+ output [25:0] FAR;
+ input [1:0] FARSEL;
+ input ICAPBOTCLK;
+ input ICAPTOPCLK;
+endmodule
+
+(* keep *)
+module ICAPE3 (...);
+ parameter [31:0] DEVICE_ID = 32'h03628093;
+ parameter ICAP_AUTO_SWITCH = "DISABLE";
+ parameter SIM_CFG_FILE_NAME = "NONE";
+ output AVAIL;
+ output [31:0] O;
+ output PRDONE;
+ output PRERROR;
+ input CLK;
+ input CSIB;
+ input RDWRB;
+ input [31:0] I;
+endmodule
+
+(* keep *)
+module MASTER_JTAG (...);
+ output TDO;
+ input TCK;
+ input TDI;
+ input TMS;
+endmodule
+
+(* keep *)
+module STARTUPE3 (...);
+ parameter PROG_USR = "FALSE";
+ parameter real SIM_CCLK_FREQ = 0.0;
+ output CFGCLK;
+ output CFGMCLK;
+ output [3:0] DI;
+ output EOS;
+ output PREQ;
+ input [3:0] DO;
+ input [3:0] DTS;
+ input FCSBO;
+ input FCSBTS;
+ input GSR;
+ input GTS;
+ input KEYCLEARB;
+ input PACK;
+ input USRCCLKO;
+ input USRCCLKTS;
+ input USRDONEO;
+ input USRDONETS;
+endmodule
+
+module USR_ACCESSE2 (...);
+ output CFGCLK;
+ output DATAVALID;
+ output [31:0] DATA;
+endmodule
+
+(* keep *)
+module BITSLICE_CONTROL (...);
+ parameter CTRL_CLK = "EXTERNAL";
+ parameter DIV_MODE = "DIV2";
+ parameter EN_CLK_TO_EXT_NORTH = "DISABLE";
+ parameter EN_CLK_TO_EXT_SOUTH = "DISABLE";
+ parameter EN_DYN_ODLY_MODE = "FALSE";
+ parameter EN_OTHER_NCLK = "FALSE";
+ parameter EN_OTHER_PCLK = "FALSE";
+ parameter IDLY_VT_TRACK = "TRUE";
+ parameter INV_RXCLK = "FALSE";
+ parameter ODLY_VT_TRACK = "TRUE";
+ parameter QDLY_VT_TRACK = "TRUE";
+ parameter [5:0] READ_IDLE_COUNT = 6'h00;
+ parameter REFCLK_SRC = "PLLCLK";
+ parameter integer ROUNDING_FACTOR = 16;
+ parameter RXGATE_EXTEND = "FALSE";
+ parameter RX_CLK_PHASE_N = "SHIFT_0";
+ parameter RX_CLK_PHASE_P = "SHIFT_0";
+ parameter RX_GATING = "DISABLE";
+ parameter SELF_CALIBRATE = "ENABLE";
+ parameter SERIAL_MODE = "FALSE";
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter SIM_SPEEDUP = "FAST";
+ parameter real SIM_VERSION = 2.0;
+ parameter TX_GATING = "DISABLE";
+ output CLK_TO_EXT_NORTH;
+ output CLK_TO_EXT_SOUTH;
+ output DLY_RDY;
+ output [6:0] DYN_DCI;
+ output NCLK_NIBBLE_OUT;
+ output PCLK_NIBBLE_OUT;
+ output [15:0] RIU_RD_DATA;
+ output RIU_VALID;
+ output [39:0] RX_BIT_CTRL_OUT0;
+ output [39:0] RX_BIT_CTRL_OUT1;
+ output [39:0] RX_BIT_CTRL_OUT2;
+ output [39:0] RX_BIT_CTRL_OUT3;
+ output [39:0] RX_BIT_CTRL_OUT4;
+ output [39:0] RX_BIT_CTRL_OUT5;
+ output [39:0] RX_BIT_CTRL_OUT6;
+ output [39:0] TX_BIT_CTRL_OUT0;
+ output [39:0] TX_BIT_CTRL_OUT1;
+ output [39:0] TX_BIT_CTRL_OUT2;
+ output [39:0] TX_BIT_CTRL_OUT3;
+ output [39:0] TX_BIT_CTRL_OUT4;
+ output [39:0] TX_BIT_CTRL_OUT5;
+ output [39:0] TX_BIT_CTRL_OUT6;
+ output [39:0] TX_BIT_CTRL_OUT_TRI;
+ output VTC_RDY;
+ input CLK_FROM_EXT;
+ input EN_VTC;
+ input NCLK_NIBBLE_IN;
+ input PCLK_NIBBLE_IN;
+ input [3:0] PHY_RDCS0;
+ input [3:0] PHY_RDCS1;
+ input [3:0] PHY_RDEN;
+ input [3:0] PHY_WRCS0;
+ input [3:0] PHY_WRCS1;
+ input PLL_CLK;
+ input REFCLK;
+ input [5:0] RIU_ADDR;
+ input RIU_CLK;
+ input RIU_NIBBLE_SEL;
+ input [15:0] RIU_WR_DATA;
+ input RIU_WR_EN;
+ input RST;
+ input [39:0] RX_BIT_CTRL_IN0;
+ input [39:0] RX_BIT_CTRL_IN1;
+ input [39:0] RX_BIT_CTRL_IN2;
+ input [39:0] RX_BIT_CTRL_IN3;
+ input [39:0] RX_BIT_CTRL_IN4;
+ input [39:0] RX_BIT_CTRL_IN5;
+ input [39:0] RX_BIT_CTRL_IN6;
+ input [3:0] TBYTE_IN;
+ input [39:0] TX_BIT_CTRL_IN0;
+ input [39:0] TX_BIT_CTRL_IN1;
+ input [39:0] TX_BIT_CTRL_IN2;
+ input [39:0] TX_BIT_CTRL_IN3;
+ input [39:0] TX_BIT_CTRL_IN4;
+ input [39:0] TX_BIT_CTRL_IN5;
+ input [39:0] TX_BIT_CTRL_IN6;
+ input [39:0] TX_BIT_CTRL_IN_TRI;
+endmodule
+
+(* keep *)
+module DCIRESET (...);
+ output LOCKED;
+ input RST;
+endmodule
+
+module HPIO_VREF (...);
+ parameter VREF_CNTR = "OFF";
+ output VREF;
+ input [6:0] FABRIC_VREF_TUNE;
+endmodule
+
+module IBUF_ANALOG (...);
+ output O;
+ (* iopad_external_pin *)
+ input I;
+endmodule
+
+module IBUF_IBUFDISABLE (...);
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ input IBUFDISABLE;
+endmodule
+
+module IBUF_INTERMDISABLE (...);
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+endmodule
+
+module IBUFDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_DELAY_VALUE = "0";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IFD_DELAY_VALUE = "AUTO";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFDS_DIFF_OUT (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+endmodule
+
+module IBUFDS_DIFF_OUT_IBUFDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+ input IBUFDISABLE;
+endmodule
+
+module IBUFDS_DIFF_OUT_INTERMDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+endmodule
+
+module IBUFDS_DPHY (...);
+ parameter DIFF_TERM = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output HSRX_O;
+ output LPRX_O_N;
+ output LPRX_O_P;
+ input HSRX_DISABLE;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+ input LPRX_DISABLE;
+endmodule
+
+module IBUFDS_IBUFDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+ input IBUFDISABLE;
+endmodule
+
+module IBUFDS_INTERMDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+endmodule
+
+module IBUFDSE3 (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter USE_IBUFDISABLE = "FALSE";
+ parameter integer SIM_INPUT_BUFFER_OFFSET = 0;
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ (* iopad_external_pin *)
+ input IB;
+ input IBUFDISABLE;
+ input [3:0] OSC;
+ input [1:0] OSC_EN;
+endmodule
+
+module IBUFE3 (...);
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter USE_IBUFDISABLE = "FALSE";
+ parameter integer SIM_INPUT_BUFFER_OFFSET = 0;
+ output O;
+ (* iopad_external_pin *)
+ input I;
+ input IBUFDISABLE;
+ input [3:0] OSC;
+ input OSC_EN;
+ input VREF;
+endmodule
+
+(* keep *)
+module IDELAYCTRL (...);
+ parameter SIM_DEVICE = "7SERIES";
+ output RDY;
+ (* clkbuf_sink *)
+ input REFCLK;
+ input RST;
+endmodule
+
+module IDELAYE3 (...);
+ parameter CASCADE = "NONE";
+ parameter DELAY_FORMAT = "TIME";
+ parameter DELAY_SRC = "IDATAIN";
+ parameter DELAY_TYPE = "FIXED";
+ parameter integer DELAY_VALUE = 0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter LOOPBACK = "FALSE";
+ parameter real REFCLK_FREQUENCY = 300.0;
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ parameter UPDATE_MODE = "ASYNC";
+ output CASC_OUT;
+ output [8:0] CNTVALUEOUT;
+ output DATAOUT;
+ input CASC_IN;
+ input CASC_RETURN;
+ input CE;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [8:0] CNTVALUEIN;
+ input DATAIN;
+ input EN_VTC;
+ input IDATAIN;
+ input INC;
+ input LOAD;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module IOBUF (...);
+ parameter integer DRIVE = 12;
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ input I;
+ input T;
+endmodule
+
+module IOBUF_DCIEN (...);
+ parameter integer DRIVE = 12;
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter SLEW = "SLOW";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ input DCITERMDISABLE;
+ input I;
+ input IBUFDISABLE;
+ input T;
+endmodule
+
+module IOBUF_INTERMDISABLE (...);
+ parameter integer DRIVE = 12;
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter SLEW = "SLOW";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ input I;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+ input T;
+endmodule
+
+module IOBUFDS (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ inout IOB;
+ input I;
+ input T;
+endmodule
+
+module IOBUFDS_DCIEN (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter SLEW = "SLOW";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ (* iopad_external_pin *)
+ inout IOB;
+ input DCITERMDISABLE;
+ input I;
+ input IBUFDISABLE;
+ input T;
+endmodule
+
+module IOBUFDS_DIFF_OUT (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ inout IO;
+ (* iopad_external_pin *)
+ inout IOB;
+ input I;
+ input TM;
+ input TS;
+endmodule
+
+module IOBUFDS_DIFF_OUT_DCIEN (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ inout IO;
+ (* iopad_external_pin *)
+ inout IOB;
+ input DCITERMDISABLE;
+ input I;
+ input IBUFDISABLE;
+ input TM;
+ input TS;
+endmodule
+
+module IOBUFDS_DIFF_OUT_INTERMDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ output OB;
+ (* iopad_external_pin *)
+ inout IO;
+ (* iopad_external_pin *)
+ inout IOB;
+ input I;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+ input TM;
+ input TS;
+endmodule
+
+module IOBUFDS_INTERMDISABLE (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SIM_DEVICE = "7SERIES";
+ parameter SLEW = "SLOW";
+ parameter USE_IBUFDISABLE = "TRUE";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ (* iopad_external_pin *)
+ inout IOB;
+ input I;
+ input IBUFDISABLE;
+ input INTERMDISABLE;
+ input T;
+endmodule
+
+module IOBUFDSE3 (...);
+ parameter DIFF_TERM = "FALSE";
+ parameter DQS_BIAS = "FALSE";
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter integer SIM_INPUT_BUFFER_OFFSET = 0;
+ parameter USE_IBUFDISABLE = "FALSE";
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ inout IOB;
+ input DCITERMDISABLE;
+ input I;
+ input IBUFDISABLE;
+ input [3:0] OSC;
+ input [1:0] OSC_EN;
+ input T;
+endmodule
+
+module IOBUFE3 (...);
+ parameter integer DRIVE = 12;
+ parameter IBUF_LOW_PWR = "TRUE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter USE_IBUFDISABLE = "FALSE";
+ parameter integer SIM_INPUT_BUFFER_OFFSET = 0;
+ output O;
+ (* iopad_external_pin *)
+ inout IO;
+ input DCITERMDISABLE;
+ input I;
+ input IBUFDISABLE;
+ input [3:0] OSC;
+ input OSC_EN;
+ input T;
+ input VREF;
+endmodule
+
+module ISERDESE3 (...);
+ parameter integer DATA_WIDTH = 8;
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter FIFO_ENABLE = "FALSE";
+ parameter FIFO_SYNC_MODE = "FALSE";
+ parameter IDDR_MODE = "FALSE";
+ parameter [0:0] IS_CLK_B_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ output FIFO_EMPTY;
+ output INTERNAL_DIVCLK;
+ output [7:0] Q;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ (* clkbuf_sink *)
+ input CLKDIV;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_B_INVERTED" *)
+ input CLK_B;
+ input D;
+ (* clkbuf_sink *)
+ input FIFO_RD_CLK;
+ input FIFO_RD_EN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module KEEPER (...);
+ inout O;
+endmodule
+
+module OBUFDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input I;
+endmodule
+
+module OBUFDS_DPHY (...);
+ parameter IOSTANDARD = "DEFAULT";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input HSTX_I;
+ input HSTX_T;
+ input LPTX_I_N;
+ input LPTX_I_P;
+ input LPTX_T;
+endmodule
+
+module OBUFT (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter integer DRIVE = 12;
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ input I;
+ input T;
+endmodule
+
+module OBUFTDS (...);
+ parameter CAPACITANCE = "DONT_CARE";
+ parameter IOSTANDARD = "DEFAULT";
+ parameter SLEW = "SLOW";
+ (* iopad_external_pin *)
+ output O;
+ (* iopad_external_pin *)
+ output OB;
+ input I;
+ input T;
+endmodule
+
+module ODELAYE3 (...);
+ parameter CASCADE = "NONE";
+ parameter DELAY_FORMAT = "TIME";
+ parameter DELAY_TYPE = "FIXED";
+ parameter integer DELAY_VALUE = 0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REFCLK_FREQUENCY = 300.0;
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ parameter UPDATE_MODE = "ASYNC";
+ output CASC_OUT;
+ output [8:0] CNTVALUEOUT;
+ output DATAOUT;
+ input CASC_IN;
+ input CASC_RETURN;
+ input CE;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [8:0] CNTVALUEIN;
+ input EN_VTC;
+ input INC;
+ input LOAD;
+ input ODATAIN;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+endmodule
+
+module OSERDESE3 (...);
+ parameter integer DATA_WIDTH = 8;
+ parameter [0:0] INIT = 1'b0;
+ parameter [0:0] IS_CLKDIV_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter ODDR_MODE = "FALSE";
+ parameter OSERDES_D_BYPASS = "FALSE";
+ parameter OSERDES_T_BYPASS = "FALSE";
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ output OQ;
+ output T_OUT;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLKDIV_INVERTED" *)
+ input CLKDIV;
+ input [7:0] D;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ input T;
+endmodule
+
+module PULLDOWN (...);
+ output O;
+endmodule
+
+module PULLUP (...);
+ output O;
+endmodule
+
+module RIU_OR (...);
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ output [15:0] RIU_RD_DATA;
+ output RIU_RD_VALID;
+ input [15:0] RIU_RD_DATA_LOW;
+ input [15:0] RIU_RD_DATA_UPP;
+ input RIU_RD_VALID_LOW;
+ input RIU_RD_VALID_UPP;
+endmodule
+
+module RX_BITSLICE (...);
+ parameter CASCADE = "TRUE";
+ parameter DATA_TYPE = "NONE";
+ parameter integer DATA_WIDTH = 8;
+ parameter DELAY_FORMAT = "TIME";
+ parameter DELAY_TYPE = "FIXED";
+ parameter integer DELAY_VALUE = 0;
+ parameter integer DELAY_VALUE_EXT = 0;
+ parameter FIFO_SYNC_MODE = "FALSE";
+ parameter [0:0] IS_CLK_EXT_INVERTED = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_DLY_EXT_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_DLY_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter real REFCLK_FREQUENCY = 300.0;
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ parameter UPDATE_MODE = "ASYNC";
+ parameter UPDATE_MODE_EXT = "ASYNC";
+ output [8:0] CNTVALUEOUT;
+ output [8:0] CNTVALUEOUT_EXT;
+ output FIFO_EMPTY;
+ output FIFO_WRCLK_OUT;
+ output [7:0] Q;
+ output [39:0] RX_BIT_CTRL_OUT;
+ output [39:0] TX_BIT_CTRL_OUT;
+ input CE;
+ input CE_EXT;
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ (* invertible_pin = "IS_CLK_EXT_INVERTED" *)
+ input CLK_EXT;
+ input [8:0] CNTVALUEIN;
+ input [8:0] CNTVALUEIN_EXT;
+ input DATAIN;
+ input EN_VTC;
+ input EN_VTC_EXT;
+ input FIFO_RD_CLK;
+ input FIFO_RD_EN;
+ input INC;
+ input INC_EXT;
+ input LOAD;
+ input LOAD_EXT;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RST_DLY_INVERTED" *)
+ input RST_DLY;
+ (* invertible_pin = "IS_RST_DLY_EXT_INVERTED" *)
+ input RST_DLY_EXT;
+ input [39:0] RX_BIT_CTRL_IN;
+ input [39:0] TX_BIT_CTRL_IN;
+endmodule
+
+module RXTX_BITSLICE (...);
+ parameter FIFO_SYNC_MODE = "FALSE";
+ parameter [0:0] INIT = 1'b1;
+ parameter [0:0] IS_RX_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RX_RST_DLY_INVERTED = 1'b0;
+ parameter [0:0] IS_RX_RST_INVERTED = 1'b0;
+ parameter [0:0] IS_TX_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_TX_RST_DLY_INVERTED = 1'b0;
+ parameter [0:0] IS_TX_RST_INVERTED = 1'b0;
+ parameter LOOPBACK = "FALSE";
+ parameter NATIVE_ODELAY_BYPASS = "FALSE";
+ parameter ENABLE_PRE_EMPHASIS = "FALSE";
+ parameter RX_DATA_TYPE = "NONE";
+ parameter integer RX_DATA_WIDTH = 8;
+ parameter RX_DELAY_FORMAT = "TIME";
+ parameter RX_DELAY_TYPE = "FIXED";
+ parameter integer RX_DELAY_VALUE = 0;
+ parameter real RX_REFCLK_FREQUENCY = 300.0;
+ parameter RX_UPDATE_MODE = "ASYNC";
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ parameter TBYTE_CTL = "TBYTE_IN";
+ parameter integer TX_DATA_WIDTH = 8;
+ parameter TX_DELAY_FORMAT = "TIME";
+ parameter TX_DELAY_TYPE = "FIXED";
+ parameter integer TX_DELAY_VALUE = 0;
+ parameter TX_OUTPUT_PHASE_90 = "FALSE";
+ parameter real TX_REFCLK_FREQUENCY = 300.0;
+ parameter TX_UPDATE_MODE = "ASYNC";
+ output FIFO_EMPTY;
+ output FIFO_WRCLK_OUT;
+ output O;
+ output [7:0] Q;
+ output [39:0] RX_BIT_CTRL_OUT;
+ output [8:0] RX_CNTVALUEOUT;
+ output [39:0] TX_BIT_CTRL_OUT;
+ output [8:0] TX_CNTVALUEOUT;
+ output T_OUT;
+ input [7:0] D;
+ input DATAIN;
+ input FIFO_RD_CLK;
+ input FIFO_RD_EN;
+ input [39:0] RX_BIT_CTRL_IN;
+ input RX_CE;
+ (* invertible_pin = "IS_RX_CLK_INVERTED" *)
+ input RX_CLK;
+ input [8:0] RX_CNTVALUEIN;
+ input RX_EN_VTC;
+ input RX_INC;
+ input RX_LOAD;
+ (* invertible_pin = "IS_RX_RST_INVERTED" *)
+ input RX_RST;
+ (* invertible_pin = "IS_RX_RST_DLY_INVERTED" *)
+ input RX_RST_DLY;
+ input T;
+ input TBYTE_IN;
+ input [39:0] TX_BIT_CTRL_IN;
+ input TX_CE;
+ (* invertible_pin = "IS_TX_CLK_INVERTED" *)
+ input TX_CLK;
+ input [8:0] TX_CNTVALUEIN;
+ input TX_EN_VTC;
+ input TX_INC;
+ input TX_LOAD;
+ (* invertible_pin = "IS_TX_RST_INVERTED" *)
+ input TX_RST;
+ (* invertible_pin = "IS_TX_RST_DLY_INVERTED" *)
+ input TX_RST_DLY;
+endmodule
+
+module TX_BITSLICE (...);
+ parameter integer DATA_WIDTH = 8;
+ parameter DELAY_FORMAT = "TIME";
+ parameter DELAY_TYPE = "FIXED";
+ parameter integer DELAY_VALUE = 0;
+ parameter ENABLE_PRE_EMPHASIS = "FALSE";
+ parameter [0:0] INIT = 1'b1;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_DLY_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter NATIVE_ODELAY_BYPASS = "FALSE";
+ parameter OUTPUT_PHASE_90 = "FALSE";
+ parameter real REFCLK_FREQUENCY = 300.0;
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ parameter TBYTE_CTL = "TBYTE_IN";
+ parameter UPDATE_MODE = "ASYNC";
+ output [8:0] CNTVALUEOUT;
+ output O;
+ output [39:0] RX_BIT_CTRL_OUT;
+ output [39:0] TX_BIT_CTRL_OUT;
+ output T_OUT;
+ input CE;
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [8:0] CNTVALUEIN;
+ input [7:0] D;
+ input EN_VTC;
+ input INC;
+ input LOAD;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RST_DLY_INVERTED" *)
+ input RST_DLY;
+ input [39:0] RX_BIT_CTRL_IN;
+ input T;
+ input TBYTE_IN;
+ input [39:0] TX_BIT_CTRL_IN;
+endmodule
+
+module TX_BITSLICE_TRI (...);
+ parameter integer DATA_WIDTH = 8;
+ parameter DELAY_FORMAT = "TIME";
+ parameter DELAY_TYPE = "FIXED";
+ parameter integer DELAY_VALUE = 0;
+ parameter [0:0] INIT = 1'b1;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_DLY_INVERTED = 1'b0;
+ parameter [0:0] IS_RST_INVERTED = 1'b0;
+ parameter NATIVE_ODELAY_BYPASS = "FALSE";
+ parameter OUTPUT_PHASE_90 = "FALSE";
+ parameter real REFCLK_FREQUENCY = 300.0;
+ parameter SIM_DEVICE = "ULTRASCALE";
+ parameter real SIM_VERSION = 2.0;
+ parameter UPDATE_MODE = "ASYNC";
+ output [39:0] BIT_CTRL_OUT;
+ output [8:0] CNTVALUEOUT;
+ output TRI_OUT;
+ input [39:0] BIT_CTRL_IN;
+ input CE;
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input [8:0] CNTVALUEIN;
+ input EN_VTC;
+ input INC;
+ input LOAD;
+ (* invertible_pin = "IS_RST_INVERTED" *)
+ input RST;
+ (* invertible_pin = "IS_RST_DLY_INVERTED" *)
+ input RST_DLY;
+endmodule
+
+module HARD_SYNC (...);
+ parameter [0:0] INIT = 1'b0;
+ parameter [0:0] IS_CLK_INVERTED = 1'b0;
+ parameter integer LATENCY = 2;
+ output DOUT;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CLK_INVERTED" *)
+ input CLK;
+ input DIN;
+endmodule
+
+module IDDRE1 (...);
+ parameter DDR_CLK_EDGE = "OPPOSITE_EDGE";
+ parameter [0:0] IS_CB_INVERTED = 1'b0;
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ output Q1;
+ output Q2;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_CB_INVERTED" *)
+ input CB;
+ input D;
+ input R;
+endmodule
+
+module ODDRE1 (...);
+ parameter [0:0] IS_C_INVERTED = 1'b0;
+ parameter [0:0] IS_D1_INVERTED = 1'b0;
+ parameter [0:0] IS_D2_INVERTED = 1'b0;
+ parameter [0:0] SRVAL = 1'b0;
+ output Q;
+ (* clkbuf_sink *)
+ (* invertible_pin = "IS_C_INVERTED" *)
+ input C;
+ (* invertible_pin = "IS_D1_INVERTED" *)
+ input D1;
+ (* invertible_pin = "IS_D2_INVERTED" *)
+ input D2;
+ input SR;
+endmodule
+
+(* keep *)
+module PS8 (...);
+ output [7:0] ADMA2PLCACK;
+ output [7:0] ADMA2PLTVLD;
+ output DPAUDIOREFCLK;
+ output DPAUXDATAOEN;
+ output DPAUXDATAOUT;
+ output DPLIVEVIDEODEOUT;
+ output [31:0] DPMAXISMIXEDAUDIOTDATA;
+ output DPMAXISMIXEDAUDIOTID;
+ output DPMAXISMIXEDAUDIOTVALID;
+ output DPSAXISAUDIOTREADY;
+ output DPVIDEOOUTHSYNC;
+ output [35:0] DPVIDEOOUTPIXEL1;
+ output DPVIDEOOUTVSYNC;
+ output DPVIDEOREFCLK;
+ output EMIOCAN0PHYTX;
+ output EMIOCAN1PHYTX;
+ output [1:0] EMIOENET0DMABUSWIDTH;
+ output EMIOENET0DMATXENDTOG;
+ output [93:0] EMIOENET0GEMTSUTIMERCNT;
+ output [7:0] EMIOENET0GMIITXD;
+ output EMIOENET0GMIITXEN;
+ output EMIOENET0GMIITXER;
+ output EMIOENET0MDIOMDC;
+ output EMIOENET0MDIOO;
+ output EMIOENET0MDIOTN;
+ output [7:0] EMIOENET0RXWDATA;
+ output EMIOENET0RXWEOP;
+ output EMIOENET0RXWERR;
+ output EMIOENET0RXWFLUSH;
+ output EMIOENET0RXWSOP;
+ output [44:0] EMIOENET0RXWSTATUS;
+ output EMIOENET0RXWWR;
+ output [2:0] EMIOENET0SPEEDMODE;
+ output EMIOENET0TXRRD;
+ output [3:0] EMIOENET0TXRSTATUS;
+ output [1:0] EMIOENET1DMABUSWIDTH;
+ output EMIOENET1DMATXENDTOG;
+ output [7:0] EMIOENET1GMIITXD;
+ output EMIOENET1GMIITXEN;
+ output EMIOENET1GMIITXER;
+ output EMIOENET1MDIOMDC;
+ output EMIOENET1MDIOO;
+ output EMIOENET1MDIOTN;
+ output [7:0] EMIOENET1RXWDATA;
+ output EMIOENET1RXWEOP;
+ output EMIOENET1RXWERR;
+ output EMIOENET1RXWFLUSH;
+ output EMIOENET1RXWSOP;
+ output [44:0] EMIOENET1RXWSTATUS;
+ output EMIOENET1RXWWR;
+ output [2:0] EMIOENET1SPEEDMODE;
+ output EMIOENET1TXRRD;
+ output [3:0] EMIOENET1TXRSTATUS;
+ output [1:0] EMIOENET2DMABUSWIDTH;
+ output EMIOENET2DMATXENDTOG;
+ output [7:0] EMIOENET2GMIITXD;
+ output EMIOENET2GMIITXEN;
+ output EMIOENET2GMIITXER;
+ output EMIOENET2MDIOMDC;
+ output EMIOENET2MDIOO;
+ output EMIOENET2MDIOTN;
+ output [7:0] EMIOENET2RXWDATA;
+ output EMIOENET2RXWEOP;
+ output EMIOENET2RXWERR;
+ output EMIOENET2RXWFLUSH;
+ output EMIOENET2RXWSOP;
+ output [44:0] EMIOENET2RXWSTATUS;
+ output EMIOENET2RXWWR;
+ output [2:0] EMIOENET2SPEEDMODE;
+ output EMIOENET2TXRRD;
+ output [3:0] EMIOENET2TXRSTATUS;
+ output [1:0] EMIOENET3DMABUSWIDTH;
+ output EMIOENET3DMATXENDTOG;
+ output [7:0] EMIOENET3GMIITXD;
+ output EMIOENET3GMIITXEN;
+ output EMIOENET3GMIITXER;
+ output EMIOENET3MDIOMDC;
+ output EMIOENET3MDIOO;
+ output EMIOENET3MDIOTN;
+ output [7:0] EMIOENET3RXWDATA;
+ output EMIOENET3RXWEOP;
+ output EMIOENET3RXWERR;
+ output EMIOENET3RXWFLUSH;
+ output EMIOENET3RXWSOP;
+ output [44:0] EMIOENET3RXWSTATUS;
+ output EMIOENET3RXWWR;
+ output [2:0] EMIOENET3SPEEDMODE;
+ output EMIOENET3TXRRD;
+ output [3:0] EMIOENET3TXRSTATUS;
+ output EMIOGEM0DELAYREQRX;
+ output EMIOGEM0DELAYREQTX;
+ output EMIOGEM0PDELAYREQRX;
+ output EMIOGEM0PDELAYREQTX;
+ output EMIOGEM0PDELAYRESPRX;
+ output EMIOGEM0PDELAYRESPTX;
+ output EMIOGEM0RXSOF;
+ output EMIOGEM0SYNCFRAMERX;
+ output EMIOGEM0SYNCFRAMETX;
+ output EMIOGEM0TSUTIMERCMPVAL;
+ output EMIOGEM0TXRFIXEDLAT;
+ output EMIOGEM0TXSOF;
+ output EMIOGEM1DELAYREQRX;
+ output EMIOGEM1DELAYREQTX;
+ output EMIOGEM1PDELAYREQRX;
+ output EMIOGEM1PDELAYREQTX;
+ output EMIOGEM1PDELAYRESPRX;
+ output EMIOGEM1PDELAYRESPTX;
+ output EMIOGEM1RXSOF;
+ output EMIOGEM1SYNCFRAMERX;
+ output EMIOGEM1SYNCFRAMETX;
+ output EMIOGEM1TSUTIMERCMPVAL;
+ output EMIOGEM1TXRFIXEDLAT;
+ output EMIOGEM1TXSOF;
+ output EMIOGEM2DELAYREQRX;
+ output EMIOGEM2DELAYREQTX;
+ output EMIOGEM2PDELAYREQRX;
+ output EMIOGEM2PDELAYREQTX;
+ output EMIOGEM2PDELAYRESPRX;
+ output EMIOGEM2PDELAYRESPTX;
+ output EMIOGEM2RXSOF;
+ output EMIOGEM2SYNCFRAMERX;
+ output EMIOGEM2SYNCFRAMETX;
+ output EMIOGEM2TSUTIMERCMPVAL;
+ output EMIOGEM2TXRFIXEDLAT;
+ output EMIOGEM2TXSOF;
+ output EMIOGEM3DELAYREQRX;
+ output EMIOGEM3DELAYREQTX;
+ output EMIOGEM3PDELAYREQRX;
+ output EMIOGEM3PDELAYREQTX;
+ output EMIOGEM3PDELAYRESPRX;
+ output EMIOGEM3PDELAYRESPTX;
+ output EMIOGEM3RXSOF;
+ output EMIOGEM3SYNCFRAMERX;
+ output EMIOGEM3SYNCFRAMETX;
+ output EMIOGEM3TSUTIMERCMPVAL;
+ output EMIOGEM3TXRFIXEDLAT;
+ output EMIOGEM3TXSOF;
+ output [95:0] EMIOGPIOO;
+ output [95:0] EMIOGPIOTN;
+ output EMIOI2C0SCLO;
+ output EMIOI2C0SCLTN;
+ output EMIOI2C0SDAO;
+ output EMIOI2C0SDATN;
+ output EMIOI2C1SCLO;
+ output EMIOI2C1SCLTN;
+ output EMIOI2C1SDAO;
+ output EMIOI2C1SDATN;
+ output EMIOSDIO0BUSPOWER;
+ output [2:0] EMIOSDIO0BUSVOLT;
+ output EMIOSDIO0CLKOUT;
+ output EMIOSDIO0CMDENA;
+ output EMIOSDIO0CMDOUT;
+ output [7:0] EMIOSDIO0DATAENA;
+ output [7:0] EMIOSDIO0DATAOUT;
+ output EMIOSDIO0LEDCONTROL;
+ output EMIOSDIO1BUSPOWER;
+ output [2:0] EMIOSDIO1BUSVOLT;
+ output EMIOSDIO1CLKOUT;
+ output EMIOSDIO1CMDENA;
+ output EMIOSDIO1CMDOUT;
+ output [7:0] EMIOSDIO1DATAENA;
+ output [7:0] EMIOSDIO1DATAOUT;
+ output EMIOSDIO1LEDCONTROL;
+ output EMIOSPI0MO;
+ output EMIOSPI0MOTN;
+ output EMIOSPI0SCLKO;
+ output EMIOSPI0SCLKTN;
+ output EMIOSPI0SO;
+ output EMIOSPI0SSNTN;
+ output [2:0] EMIOSPI0SSON;
+ output EMIOSPI0STN;
+ output EMIOSPI1MO;
+ output EMIOSPI1MOTN;
+ output EMIOSPI1SCLKO;
+ output EMIOSPI1SCLKTN;
+ output EMIOSPI1SO;
+ output EMIOSPI1SSNTN;
+ output [2:0] EMIOSPI1SSON;
+ output EMIOSPI1STN;
+ output [2:0] EMIOTTC0WAVEO;
+ output [2:0] EMIOTTC1WAVEO;
+ output [2:0] EMIOTTC2WAVEO;
+ output [2:0] EMIOTTC3WAVEO;
+ output EMIOU2DSPORTVBUSCTRLUSB30;
+ output EMIOU2DSPORTVBUSCTRLUSB31;
+ output EMIOU3DSPORTVBUSCTRLUSB30;
+ output EMIOU3DSPORTVBUSCTRLUSB31;
+ output EMIOUART0DTRN;
+ output EMIOUART0RTSN;
+ output EMIOUART0TX;
+ output EMIOUART1DTRN;
+ output EMIOUART1RTSN;
+ output EMIOUART1TX;
+ output EMIOWDT0RSTO;
+ output EMIOWDT1RSTO;
+ output FMIOGEM0FIFORXCLKTOPLBUFG;
+ output FMIOGEM0FIFOTXCLKTOPLBUFG;
+ output FMIOGEM1FIFORXCLKTOPLBUFG;
+ output FMIOGEM1FIFOTXCLKTOPLBUFG;
+ output FMIOGEM2FIFORXCLKTOPLBUFG;
+ output FMIOGEM2FIFOTXCLKTOPLBUFG;
+ output FMIOGEM3FIFORXCLKTOPLBUFG;
+ output FMIOGEM3FIFOTXCLKTOPLBUFG;
+ output FMIOGEMTSUCLKTOPLBUFG;
+ output [31:0] FTMGPO;
+ output [7:0] GDMA2PLCACK;
+ output [7:0] GDMA2PLTVLD;
+ output [39:0] MAXIGP0ARADDR;
+ output [1:0] MAXIGP0ARBURST;
+ output [3:0] MAXIGP0ARCACHE;
+ output [15:0] MAXIGP0ARID;
+ output [7:0] MAXIGP0ARLEN;
+ output MAXIGP0ARLOCK;
+ output [2:0] MAXIGP0ARPROT;
+ output [3:0] MAXIGP0ARQOS;
+ output [2:0] MAXIGP0ARSIZE;
+ output [15:0] MAXIGP0ARUSER;
+ output MAXIGP0ARVALID;
+ output [39:0] MAXIGP0AWADDR;
+ output [1:0] MAXIGP0AWBURST;
+ output [3:0] MAXIGP0AWCACHE;
+ output [15:0] MAXIGP0AWID;
+ output [7:0] MAXIGP0AWLEN;
+ output MAXIGP0AWLOCK;
+ output [2:0] MAXIGP0AWPROT;
+ output [3:0] MAXIGP0AWQOS;
+ output [2:0] MAXIGP0AWSIZE;
+ output [15:0] MAXIGP0AWUSER;
+ output MAXIGP0AWVALID;
+ output MAXIGP0BREADY;
+ output MAXIGP0RREADY;
+ output [127:0] MAXIGP0WDATA;
+ output MAXIGP0WLAST;
+ output [15:0] MAXIGP0WSTRB;
+ output MAXIGP0WVALID;
+ output [39:0] MAXIGP1ARADDR;
+ output [1:0] MAXIGP1ARBURST;
+ output [3:0] MAXIGP1ARCACHE;
+ output [15:0] MAXIGP1ARID;
+ output [7:0] MAXIGP1ARLEN;
+ output MAXIGP1ARLOCK;
+ output [2:0] MAXIGP1ARPROT;
+ output [3:0] MAXIGP1ARQOS;
+ output [2:0] MAXIGP1ARSIZE;
+ output [15:0] MAXIGP1ARUSER;
+ output MAXIGP1ARVALID;
+ output [39:0] MAXIGP1AWADDR;
+ output [1:0] MAXIGP1AWBURST;
+ output [3:0] MAXIGP1AWCACHE;
+ output [15:0] MAXIGP1AWID;
+ output [7:0] MAXIGP1AWLEN;
+ output MAXIGP1AWLOCK;
+ output [2:0] MAXIGP1AWPROT;
+ output [3:0] MAXIGP1AWQOS;
+ output [2:0] MAXIGP1AWSIZE;
+ output [15:0] MAXIGP1AWUSER;
+ output MAXIGP1AWVALID;
+ output MAXIGP1BREADY;
+ output MAXIGP1RREADY;
+ output [127:0] MAXIGP1WDATA;
+ output MAXIGP1WLAST;
+ output [15:0] MAXIGP1WSTRB;
+ output MAXIGP1WVALID;
+ output [39:0] MAXIGP2ARADDR;
+ output [1:0] MAXIGP2ARBURST;
+ output [3:0] MAXIGP2ARCACHE;
+ output [15:0] MAXIGP2ARID;
+ output [7:0] MAXIGP2ARLEN;
+ output MAXIGP2ARLOCK;
+ output [2:0] MAXIGP2ARPROT;
+ output [3:0] MAXIGP2ARQOS;
+ output [2:0] MAXIGP2ARSIZE;
+ output [15:0] MAXIGP2ARUSER;
+ output MAXIGP2ARVALID;
+ output [39:0] MAXIGP2AWADDR;
+ output [1:0] MAXIGP2AWBURST;
+ output [3:0] MAXIGP2AWCACHE;
+ output [15:0] MAXIGP2AWID;
+ output [7:0] MAXIGP2AWLEN;
+ output MAXIGP2AWLOCK;
+ output [2:0] MAXIGP2AWPROT;
+ output [3:0] MAXIGP2AWQOS;
+ output [2:0] MAXIGP2AWSIZE;
+ output [15:0] MAXIGP2AWUSER;
+ output MAXIGP2AWVALID;
+ output MAXIGP2BREADY;
+ output MAXIGP2RREADY;
+ output [127:0] MAXIGP2WDATA;
+ output MAXIGP2WLAST;
+ output [15:0] MAXIGP2WSTRB;
+ output MAXIGP2WVALID;
+ output OSCRTCCLK;
+ output [3:0] PLCLK;
+ output PMUAIBAFIFMFPDREQ;
+ output PMUAIBAFIFMLPDREQ;
+ output [46:0] PMUERRORTOPL;
+ output [31:0] PMUPLGPO;
+ output PSPLEVENTO;
+ output [63:0] PSPLIRQFPD;
+ output [99:0] PSPLIRQLPD;
+ output [3:0] PSPLSTANDBYWFE;
+ output [3:0] PSPLSTANDBYWFI;
+ output PSPLTRACECTL;
+ output [31:0] PSPLTRACEDATA;
+ output [3:0] PSPLTRIGACK;
+ output [3:0] PSPLTRIGGER;
+ output PSS_ALTO_CORE_PAD_MGTTXN0OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXN1OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXN2OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXN3OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXP0OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXP1OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXP2OUT;
+ output PSS_ALTO_CORE_PAD_MGTTXP3OUT;
+ output PSS_ALTO_CORE_PAD_PADO;
+ output RPUEVENTO0;
+ output RPUEVENTO1;
+ output [43:0] SACEFPDACADDR;
+ output [2:0] SACEFPDACPROT;
+ output [3:0] SACEFPDACSNOOP;
+ output SACEFPDACVALID;
+ output SACEFPDARREADY;
+ output SACEFPDAWREADY;
+ output [5:0] SACEFPDBID;
+ output [1:0] SACEFPDBRESP;
+ output SACEFPDBUSER;
+ output SACEFPDBVALID;
+ output SACEFPDCDREADY;
+ output SACEFPDCRREADY;
+ output [127:0] SACEFPDRDATA;
+ output [5:0] SACEFPDRID;
+ output SACEFPDRLAST;
+ output [3:0] SACEFPDRRESP;
+ output SACEFPDRUSER;
+ output SACEFPDRVALID;
+ output SACEFPDWREADY;
+ output SAXIACPARREADY;
+ output SAXIACPAWREADY;
+ output [4:0] SAXIACPBID;
+ output [1:0] SAXIACPBRESP;
+ output SAXIACPBVALID;
+ output [127:0] SAXIACPRDATA;
+ output [4:0] SAXIACPRID;
+ output SAXIACPRLAST;
+ output [1:0] SAXIACPRRESP;
+ output SAXIACPRVALID;
+ output SAXIACPWREADY;
+ output SAXIGP0ARREADY;
+ output SAXIGP0AWREADY;
+ output [5:0] SAXIGP0BID;
+ output [1:0] SAXIGP0BRESP;
+ output SAXIGP0BVALID;
+ output [3:0] SAXIGP0RACOUNT;
+ output [7:0] SAXIGP0RCOUNT;
+ output [127:0] SAXIGP0RDATA;
+ output [5:0] SAXIGP0RID;
+ output SAXIGP0RLAST;
+ output [1:0] SAXIGP0RRESP;
+ output SAXIGP0RVALID;
+ output [3:0] SAXIGP0WACOUNT;
+ output [7:0] SAXIGP0WCOUNT;
+ output SAXIGP0WREADY;
+ output SAXIGP1ARREADY;
+ output SAXIGP1AWREADY;
+ output [5:0] SAXIGP1BID;
+ output [1:0] SAXIGP1BRESP;
+ output SAXIGP1BVALID;
+ output [3:0] SAXIGP1RACOUNT;
+ output [7:0] SAXIGP1RCOUNT;
+ output [127:0] SAXIGP1RDATA;
+ output [5:0] SAXIGP1RID;
+ output SAXIGP1RLAST;
+ output [1:0] SAXIGP1RRESP;
+ output SAXIGP1RVALID;
+ output [3:0] SAXIGP1WACOUNT;
+ output [7:0] SAXIGP1WCOUNT;
+ output SAXIGP1WREADY;
+ output SAXIGP2ARREADY;
+ output SAXIGP2AWREADY;
+ output [5:0] SAXIGP2BID;
+ output [1:0] SAXIGP2BRESP;
+ output SAXIGP2BVALID;
+ output [3:0] SAXIGP2RACOUNT;
+ output [7:0] SAXIGP2RCOUNT;
+ output [127:0] SAXIGP2RDATA;
+ output [5:0] SAXIGP2RID;
+ output SAXIGP2RLAST;
+ output [1:0] SAXIGP2RRESP;
+ output SAXIGP2RVALID;
+ output [3:0] SAXIGP2WACOUNT;
+ output [7:0] SAXIGP2WCOUNT;
+ output SAXIGP2WREADY;
+ output SAXIGP3ARREADY;
+ output SAXIGP3AWREADY;
+ output [5:0] SAXIGP3BID;
+ output [1:0] SAXIGP3BRESP;
+ output SAXIGP3BVALID;
+ output [3:0] SAXIGP3RACOUNT;
+ output [7:0] SAXIGP3RCOUNT;
+ output [127:0] SAXIGP3RDATA;
+ output [5:0] SAXIGP3RID;
+ output SAXIGP3RLAST;
+ output [1:0] SAXIGP3RRESP;
+ output SAXIGP3RVALID;
+ output [3:0] SAXIGP3WACOUNT;
+ output [7:0] SAXIGP3WCOUNT;
+ output SAXIGP3WREADY;
+ output SAXIGP4ARREADY;
+ output SAXIGP4AWREADY;
+ output [5:0] SAXIGP4BID;
+ output [1:0] SAXIGP4BRESP;
+ output SAXIGP4BVALID;
+ output [3:0] SAXIGP4RACOUNT;
+ output [7:0] SAXIGP4RCOUNT;
+ output [127:0] SAXIGP4RDATA;
+ output [5:0] SAXIGP4RID;
+ output SAXIGP4RLAST;
+ output [1:0] SAXIGP4RRESP;
+ output SAXIGP4RVALID;
+ output [3:0] SAXIGP4WACOUNT;
+ output [7:0] SAXIGP4WCOUNT;
+ output SAXIGP4WREADY;
+ output SAXIGP5ARREADY;
+ output SAXIGP5AWREADY;
+ output [5:0] SAXIGP5BID;
+ output [1:0] SAXIGP5BRESP;
+ output SAXIGP5BVALID;
+ output [3:0] SAXIGP5RACOUNT;
+ output [7:0] SAXIGP5RCOUNT;
+ output [127:0] SAXIGP5RDATA;
+ output [5:0] SAXIGP5RID;
+ output SAXIGP5RLAST;
+ output [1:0] SAXIGP5RRESP;
+ output SAXIGP5RVALID;
+ output [3:0] SAXIGP5WACOUNT;
+ output [7:0] SAXIGP5WCOUNT;
+ output SAXIGP5WREADY;
+ output SAXIGP6ARREADY;
+ output SAXIGP6AWREADY;
+ output [5:0] SAXIGP6BID;
+ output [1:0] SAXIGP6BRESP;
+ output SAXIGP6BVALID;
+ output [3:0] SAXIGP6RACOUNT;
+ output [7:0] SAXIGP6RCOUNT;
+ output [127:0] SAXIGP6RDATA;
+ output [5:0] SAXIGP6RID;
+ output SAXIGP6RLAST;
+ output [1:0] SAXIGP6RRESP;
+ output SAXIGP6RVALID;
+ output [3:0] SAXIGP6WACOUNT;
+ output [7:0] SAXIGP6WCOUNT;
+ output SAXIGP6WREADY;
+ inout [3:0] PSS_ALTO_CORE_PAD_BOOTMODE;
+ inout PSS_ALTO_CORE_PAD_CLK;
+ inout PSS_ALTO_CORE_PAD_DONEB;
+ inout [17:0] PSS_ALTO_CORE_PAD_DRAMA;
+ inout PSS_ALTO_CORE_PAD_DRAMACTN;
+ inout PSS_ALTO_CORE_PAD_DRAMALERTN;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMBA;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMBG;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMCK;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMCKE;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMCKN;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMCSN;
+ inout [8:0] PSS_ALTO_CORE_PAD_DRAMDM;
+ inout [71:0] PSS_ALTO_CORE_PAD_DRAMDQ;
+ inout [8:0] PSS_ALTO_CORE_PAD_DRAMDQS;
+ inout [8:0] PSS_ALTO_CORE_PAD_DRAMDQSN;
+ inout [1:0] PSS_ALTO_CORE_PAD_DRAMODT;
+ inout PSS_ALTO_CORE_PAD_DRAMPARITY;
+ inout PSS_ALTO_CORE_PAD_DRAMRAMRSTN;
+ inout PSS_ALTO_CORE_PAD_ERROROUT;
+ inout PSS_ALTO_CORE_PAD_ERRORSTATUS;
+ inout PSS_ALTO_CORE_PAD_INITB;
+ inout PSS_ALTO_CORE_PAD_JTAGTCK;
+ inout PSS_ALTO_CORE_PAD_JTAGTDI;
+ inout PSS_ALTO_CORE_PAD_JTAGTDO;
+ inout PSS_ALTO_CORE_PAD_JTAGTMS;
+ inout [77:0] PSS_ALTO_CORE_PAD_MIO;
+ inout PSS_ALTO_CORE_PAD_PORB;
+ inout PSS_ALTO_CORE_PAD_PROGB;
+ inout PSS_ALTO_CORE_PAD_RCALIBINOUT;
+ inout PSS_ALTO_CORE_PAD_SRSTB;
+ inout PSS_ALTO_CORE_PAD_ZQ;
+ input [7:0] ADMAFCICLK;
+ input AIBPMUAFIFMFPDACK;
+ input AIBPMUAFIFMLPDACK;
+ input DDRCEXTREFRESHRANK0REQ;
+ input DDRCEXTREFRESHRANK1REQ;
+ input DDRCREFRESHPLCLK;
+ input DPAUXDATAIN;
+ input DPEXTERNALCUSTOMEVENT1;
+ input DPEXTERNALCUSTOMEVENT2;
+ input DPEXTERNALVSYNCEVENT;
+ input DPHOTPLUGDETECT;
+ input [7:0] DPLIVEGFXALPHAIN;
+ input [35:0] DPLIVEGFXPIXEL1IN;
+ input DPLIVEVIDEOINDE;
+ input DPLIVEVIDEOINHSYNC;
+ input [35:0] DPLIVEVIDEOINPIXEL1;
+ input DPLIVEVIDEOINVSYNC;
+ input DPMAXISMIXEDAUDIOTREADY;
+ input DPSAXISAUDIOCLK;
+ input [31:0] DPSAXISAUDIOTDATA;
+ input DPSAXISAUDIOTID;
+ input DPSAXISAUDIOTVALID;
+ input DPVIDEOINCLK;
+ input EMIOCAN0PHYRX;
+ input EMIOCAN1PHYRX;
+ input EMIOENET0DMATXSTATUSTOG;
+ input EMIOENET0EXTINTIN;
+ input EMIOENET0GMIICOL;
+ input EMIOENET0GMIICRS;
+ input EMIOENET0GMIIRXCLK;
+ input [7:0] EMIOENET0GMIIRXD;
+ input EMIOENET0GMIIRXDV;
+ input EMIOENET0GMIIRXER;
+ input EMIOENET0GMIITXCLK;
+ input EMIOENET0MDIOI;
+ input EMIOENET0RXWOVERFLOW;
+ input EMIOENET0TXRCONTROL;
+ input [7:0] EMIOENET0TXRDATA;
+ input EMIOENET0TXRDATARDY;
+ input EMIOENET0TXREOP;
+ input EMIOENET0TXRERR;
+ input EMIOENET0TXRFLUSHED;
+ input EMIOENET0TXRSOP;
+ input EMIOENET0TXRUNDERFLOW;
+ input EMIOENET0TXRVALID;
+ input EMIOENET1DMATXSTATUSTOG;
+ input EMIOENET1EXTINTIN;
+ input EMIOENET1GMIICOL;
+ input EMIOENET1GMIICRS;
+ input EMIOENET1GMIIRXCLK;
+ input [7:0] EMIOENET1GMIIRXD;
+ input EMIOENET1GMIIRXDV;
+ input EMIOENET1GMIIRXER;
+ input EMIOENET1GMIITXCLK;
+ input EMIOENET1MDIOI;
+ input EMIOENET1RXWOVERFLOW;
+ input EMIOENET1TXRCONTROL;
+ input [7:0] EMIOENET1TXRDATA;
+ input EMIOENET1TXRDATARDY;
+ input EMIOENET1TXREOP;
+ input EMIOENET1TXRERR;
+ input EMIOENET1TXRFLUSHED;
+ input EMIOENET1TXRSOP;
+ input EMIOENET1TXRUNDERFLOW;
+ input EMIOENET1TXRVALID;
+ input EMIOENET2DMATXSTATUSTOG;
+ input EMIOENET2EXTINTIN;
+ input EMIOENET2GMIICOL;
+ input EMIOENET2GMIICRS;
+ input EMIOENET2GMIIRXCLK;
+ input [7:0] EMIOENET2GMIIRXD;
+ input EMIOENET2GMIIRXDV;
+ input EMIOENET2GMIIRXER;
+ input EMIOENET2GMIITXCLK;
+ input EMIOENET2MDIOI;
+ input EMIOENET2RXWOVERFLOW;
+ input EMIOENET2TXRCONTROL;
+ input [7:0] EMIOENET2TXRDATA;
+ input EMIOENET2TXRDATARDY;
+ input EMIOENET2TXREOP;
+ input EMIOENET2TXRERR;
+ input EMIOENET2TXRFLUSHED;
+ input EMIOENET2TXRSOP;
+ input EMIOENET2TXRUNDERFLOW;
+ input EMIOENET2TXRVALID;
+ input EMIOENET3DMATXSTATUSTOG;
+ input EMIOENET3EXTINTIN;
+ input EMIOENET3GMIICOL;
+ input EMIOENET3GMIICRS;
+ input EMIOENET3GMIIRXCLK;
+ input [7:0] EMIOENET3GMIIRXD;
+ input EMIOENET3GMIIRXDV;
+ input EMIOENET3GMIIRXER;
+ input EMIOENET3GMIITXCLK;
+ input EMIOENET3MDIOI;
+ input EMIOENET3RXWOVERFLOW;
+ input EMIOENET3TXRCONTROL;
+ input [7:0] EMIOENET3TXRDATA;
+ input EMIOENET3TXRDATARDY;
+ input EMIOENET3TXREOP;
+ input EMIOENET3TXRERR;
+ input EMIOENET3TXRFLUSHED;
+ input EMIOENET3TXRSOP;
+ input EMIOENET3TXRUNDERFLOW;
+ input EMIOENET3TXRVALID;
+ input EMIOENETTSUCLK;
+ input [1:0] EMIOGEM0TSUINCCTRL;
+ input [1:0] EMIOGEM1TSUINCCTRL;
+ input [1:0] EMIOGEM2TSUINCCTRL;
+ input [1:0] EMIOGEM3TSUINCCTRL;
+ input [95:0] EMIOGPIOI;
+ input EMIOHUBPORTOVERCRNTUSB20;
+ input EMIOHUBPORTOVERCRNTUSB21;
+ input EMIOHUBPORTOVERCRNTUSB30;
+ input EMIOHUBPORTOVERCRNTUSB31;
+ input EMIOI2C0SCLI;
+ input EMIOI2C0SDAI;
+ input EMIOI2C1SCLI;
+ input EMIOI2C1SDAI;
+ input EMIOSDIO0CDN;
+ input EMIOSDIO0CMDIN;
+ input [7:0] EMIOSDIO0DATAIN;
+ input EMIOSDIO0FBCLKIN;
+ input EMIOSDIO0WP;
+ input EMIOSDIO1CDN;
+ input EMIOSDIO1CMDIN;
+ input [7:0] EMIOSDIO1DATAIN;
+ input EMIOSDIO1FBCLKIN;
+ input EMIOSDIO1WP;
+ input EMIOSPI0MI;
+ input EMIOSPI0SCLKI;
+ input EMIOSPI0SI;
+ input EMIOSPI0SSIN;
+ input EMIOSPI1MI;
+ input EMIOSPI1SCLKI;
+ input EMIOSPI1SI;
+ input EMIOSPI1SSIN;
+ input [2:0] EMIOTTC0CLKI;
+ input [2:0] EMIOTTC1CLKI;
+ input [2:0] EMIOTTC2CLKI;
+ input [2:0] EMIOTTC3CLKI;
+ input EMIOUART0CTSN;
+ input EMIOUART0DCDN;
+ input EMIOUART0DSRN;
+ input EMIOUART0RIN;
+ input EMIOUART0RX;
+ input EMIOUART1CTSN;
+ input EMIOUART1DCDN;
+ input EMIOUART1DSRN;
+ input EMIOUART1RIN;
+ input EMIOUART1RX;
+ input EMIOWDT0CLKI;
+ input EMIOWDT1CLKI;
+ input FMIOGEM0FIFORXCLKFROMPL;
+ input FMIOGEM0FIFOTXCLKFROMPL;
+ input FMIOGEM0SIGNALDETECT;
+ input FMIOGEM1FIFORXCLKFROMPL;
+ input FMIOGEM1FIFOTXCLKFROMPL;
+ input FMIOGEM1SIGNALDETECT;
+ input FMIOGEM2FIFORXCLKFROMPL;
+ input FMIOGEM2FIFOTXCLKFROMPL;
+ input FMIOGEM2SIGNALDETECT;
+ input FMIOGEM3FIFORXCLKFROMPL;
+ input FMIOGEM3FIFOTXCLKFROMPL;
+ input FMIOGEM3SIGNALDETECT;
+ input FMIOGEMTSUCLKFROMPL;
+ input [31:0] FTMGPI;
+ input [7:0] GDMAFCICLK;
+ input MAXIGP0ACLK;
+ input MAXIGP0ARREADY;
+ input MAXIGP0AWREADY;
+ input [15:0] MAXIGP0BID;
+ input [1:0] MAXIGP0BRESP;
+ input MAXIGP0BVALID;
+ input [127:0] MAXIGP0RDATA;
+ input [15:0] MAXIGP0RID;
+ input MAXIGP0RLAST;
+ input [1:0] MAXIGP0RRESP;
+ input MAXIGP0RVALID;
+ input MAXIGP0WREADY;
+ input MAXIGP1ACLK;
+ input MAXIGP1ARREADY;
+ input MAXIGP1AWREADY;
+ input [15:0] MAXIGP1BID;
+ input [1:0] MAXIGP1BRESP;
+ input MAXIGP1BVALID;
+ input [127:0] MAXIGP1RDATA;
+ input [15:0] MAXIGP1RID;
+ input MAXIGP1RLAST;
+ input [1:0] MAXIGP1RRESP;
+ input MAXIGP1RVALID;
+ input MAXIGP1WREADY;
+ input MAXIGP2ACLK;
+ input MAXIGP2ARREADY;
+ input MAXIGP2AWREADY;
+ input [15:0] MAXIGP2BID;
+ input [1:0] MAXIGP2BRESP;
+ input MAXIGP2BVALID;
+ input [127:0] MAXIGP2RDATA;
+ input [15:0] MAXIGP2RID;
+ input MAXIGP2RLAST;
+ input [1:0] MAXIGP2RRESP;
+ input MAXIGP2RVALID;
+ input MAXIGP2WREADY;
+ input NFIQ0LPDRPU;
+ input NFIQ1LPDRPU;
+ input NIRQ0LPDRPU;
+ input NIRQ1LPDRPU;
+ input [7:0] PL2ADMACVLD;
+ input [7:0] PL2ADMATACK;
+ input [7:0] PL2GDMACVLD;
+ input [7:0] PL2GDMATACK;
+ input PLACECLK;
+ input PLACPINACT;
+ input [3:0] PLFPGASTOP;
+ input [2:0] PLLAUXREFCLKFPD;
+ input [1:0] PLLAUXREFCLKLPD;
+ input [31:0] PLPMUGPI;
+ input [3:0] PLPSAPUGICFIQ;
+ input [3:0] PLPSAPUGICIRQ;
+ input PLPSEVENTI;
+ input [7:0] PLPSIRQ0;
+ input [7:0] PLPSIRQ1;
+ input PLPSTRACECLK;
+ input [3:0] PLPSTRIGACK;
+ input [3:0] PLPSTRIGGER;
+ input [3:0] PMUERRORFROMPL;
+ input PSS_ALTO_CORE_PAD_MGTRXN0IN;
+ input PSS_ALTO_CORE_PAD_MGTRXN1IN;
+ input PSS_ALTO_CORE_PAD_MGTRXN2IN;
+ input PSS_ALTO_CORE_PAD_MGTRXN3IN;
+ input PSS_ALTO_CORE_PAD_MGTRXP0IN;
+ input PSS_ALTO_CORE_PAD_MGTRXP1IN;
+ input PSS_ALTO_CORE_PAD_MGTRXP2IN;
+ input PSS_ALTO_CORE_PAD_MGTRXP3IN;
+ input PSS_ALTO_CORE_PAD_PADI;
+ input PSS_ALTO_CORE_PAD_REFN0IN;
+ input PSS_ALTO_CORE_PAD_REFN1IN;
+ input PSS_ALTO_CORE_PAD_REFN2IN;
+ input PSS_ALTO_CORE_PAD_REFN3IN;
+ input PSS_ALTO_CORE_PAD_REFP0IN;
+ input PSS_ALTO_CORE_PAD_REFP1IN;
+ input PSS_ALTO_CORE_PAD_REFP2IN;
+ input PSS_ALTO_CORE_PAD_REFP3IN;
+ input RPUEVENTI0;
+ input RPUEVENTI1;
+ input SACEFPDACREADY;
+ input [43:0] SACEFPDARADDR;
+ input [1:0] SACEFPDARBAR;
+ input [1:0] SACEFPDARBURST;
+ input [3:0] SACEFPDARCACHE;
+ input [1:0] SACEFPDARDOMAIN;
+ input [5:0] SACEFPDARID;
+ input [7:0] SACEFPDARLEN;
+ input SACEFPDARLOCK;
+ input [2:0] SACEFPDARPROT;
+ input [3:0] SACEFPDARQOS;
+ input [3:0] SACEFPDARREGION;
+ input [2:0] SACEFPDARSIZE;
+ input [3:0] SACEFPDARSNOOP;
+ input [15:0] SACEFPDARUSER;
+ input SACEFPDARVALID;
+ input [43:0] SACEFPDAWADDR;
+ input [1:0] SACEFPDAWBAR;
+ input [1:0] SACEFPDAWBURST;
+ input [3:0] SACEFPDAWCACHE;
+ input [1:0] SACEFPDAWDOMAIN;
+ input [5:0] SACEFPDAWID;
+ input [7:0] SACEFPDAWLEN;
+ input SACEFPDAWLOCK;
+ input [2:0] SACEFPDAWPROT;
+ input [3:0] SACEFPDAWQOS;
+ input [3:0] SACEFPDAWREGION;
+ input [2:0] SACEFPDAWSIZE;
+ input [2:0] SACEFPDAWSNOOP;
+ input [15:0] SACEFPDAWUSER;
+ input SACEFPDAWVALID;
+ input SACEFPDBREADY;
+ input [127:0] SACEFPDCDDATA;
+ input SACEFPDCDLAST;
+ input SACEFPDCDVALID;
+ input [4:0] SACEFPDCRRESP;
+ input SACEFPDCRVALID;
+ input SACEFPDRACK;
+ input SACEFPDRREADY;
+ input SACEFPDWACK;
+ input [127:0] SACEFPDWDATA;
+ input SACEFPDWLAST;
+ input [15:0] SACEFPDWSTRB;
+ input SACEFPDWUSER;
+ input SACEFPDWVALID;
+ input SAXIACPACLK;
+ input [39:0] SAXIACPARADDR;
+ input [1:0] SAXIACPARBURST;
+ input [3:0] SAXIACPARCACHE;
+ input [4:0] SAXIACPARID;
+ input [7:0] SAXIACPARLEN;
+ input SAXIACPARLOCK;
+ input [2:0] SAXIACPARPROT;
+ input [3:0] SAXIACPARQOS;
+ input [2:0] SAXIACPARSIZE;
+ input [1:0] SAXIACPARUSER;
+ input SAXIACPARVALID;
+ input [39:0] SAXIACPAWADDR;
+ input [1:0] SAXIACPAWBURST;
+ input [3:0] SAXIACPAWCACHE;
+ input [4:0] SAXIACPAWID;
+ input [7:0] SAXIACPAWLEN;
+ input SAXIACPAWLOCK;
+ input [2:0] SAXIACPAWPROT;
+ input [3:0] SAXIACPAWQOS;
+ input [2:0] SAXIACPAWSIZE;
+ input [1:0] SAXIACPAWUSER;
+ input SAXIACPAWVALID;
+ input SAXIACPBREADY;
+ input SAXIACPRREADY;
+ input [127:0] SAXIACPWDATA;
+ input SAXIACPWLAST;
+ input [15:0] SAXIACPWSTRB;
+ input SAXIACPWVALID;
+ input [48:0] SAXIGP0ARADDR;
+ input [1:0] SAXIGP0ARBURST;
+ input [3:0] SAXIGP0ARCACHE;
+ input [5:0] SAXIGP0ARID;
+ input [7:0] SAXIGP0ARLEN;
+ input SAXIGP0ARLOCK;
+ input [2:0] SAXIGP0ARPROT;
+ input [3:0] SAXIGP0ARQOS;
+ input [2:0] SAXIGP0ARSIZE;
+ input SAXIGP0ARUSER;
+ input SAXIGP0ARVALID;
+ input [48:0] SAXIGP0AWADDR;
+ input [1:0] SAXIGP0AWBURST;
+ input [3:0] SAXIGP0AWCACHE;
+ input [5:0] SAXIGP0AWID;
+ input [7:0] SAXIGP0AWLEN;
+ input SAXIGP0AWLOCK;
+ input [2:0] SAXIGP0AWPROT;
+ input [3:0] SAXIGP0AWQOS;
+ input [2:0] SAXIGP0AWSIZE;
+ input SAXIGP0AWUSER;
+ input SAXIGP0AWVALID;
+ input SAXIGP0BREADY;
+ input SAXIGP0RCLK;
+ input SAXIGP0RREADY;
+ input SAXIGP0WCLK;
+ input [127:0] SAXIGP0WDATA;
+ input SAXIGP0WLAST;
+ input [15:0] SAXIGP0WSTRB;
+ input SAXIGP0WVALID;
+ input [48:0] SAXIGP1ARADDR;
+ input [1:0] SAXIGP1ARBURST;
+ input [3:0] SAXIGP1ARCACHE;
+ input [5:0] SAXIGP1ARID;
+ input [7:0] SAXIGP1ARLEN;
+ input SAXIGP1ARLOCK;
+ input [2:0] SAXIGP1ARPROT;
+ input [3:0] SAXIGP1ARQOS;
+ input [2:0] SAXIGP1ARSIZE;
+ input SAXIGP1ARUSER;
+ input SAXIGP1ARVALID;
+ input [48:0] SAXIGP1AWADDR;
+ input [1:0] SAXIGP1AWBURST;
+ input [3:0] SAXIGP1AWCACHE;
+ input [5:0] SAXIGP1AWID;
+ input [7:0] SAXIGP1AWLEN;
+ input SAXIGP1AWLOCK;
+ input [2:0] SAXIGP1AWPROT;
+ input [3:0] SAXIGP1AWQOS;
+ input [2:0] SAXIGP1AWSIZE;
+ input SAXIGP1AWUSER;
+ input SAXIGP1AWVALID;
+ input SAXIGP1BREADY;
+ input SAXIGP1RCLK;
+ input SAXIGP1RREADY;
+ input SAXIGP1WCLK;
+ input [127:0] SAXIGP1WDATA;
+ input SAXIGP1WLAST;
+ input [15:0] SAXIGP1WSTRB;
+ input SAXIGP1WVALID;
+ input [48:0] SAXIGP2ARADDR;
+ input [1:0] SAXIGP2ARBURST;
+ input [3:0] SAXIGP2ARCACHE;
+ input [5:0] SAXIGP2ARID;
+ input [7:0] SAXIGP2ARLEN;
+ input SAXIGP2ARLOCK;
+ input [2:0] SAXIGP2ARPROT;
+ input [3:0] SAXIGP2ARQOS;
+ input [2:0] SAXIGP2ARSIZE;
+ input SAXIGP2ARUSER;
+ input SAXIGP2ARVALID;
+ input [48:0] SAXIGP2AWADDR;
+ input [1:0] SAXIGP2AWBURST;
+ input [3:0] SAXIGP2AWCACHE;
+ input [5:0] SAXIGP2AWID;
+ input [7:0] SAXIGP2AWLEN;
+ input SAXIGP2AWLOCK;
+ input [2:0] SAXIGP2AWPROT;
+ input [3:0] SAXIGP2AWQOS;
+ input [2:0] SAXIGP2AWSIZE;
+ input SAXIGP2AWUSER;
+ input SAXIGP2AWVALID;
+ input SAXIGP2BREADY;
+ input SAXIGP2RCLK;
+ input SAXIGP2RREADY;
+ input SAXIGP2WCLK;
+ input [127:0] SAXIGP2WDATA;
+ input SAXIGP2WLAST;
+ input [15:0] SAXIGP2WSTRB;
+ input SAXIGP2WVALID;
+ input [48:0] SAXIGP3ARADDR;
+ input [1:0] SAXIGP3ARBURST;
+ input [3:0] SAXIGP3ARCACHE;
+ input [5:0] SAXIGP3ARID;
+ input [7:0] SAXIGP3ARLEN;
+ input SAXIGP3ARLOCK;
+ input [2:0] SAXIGP3ARPROT;
+ input [3:0] SAXIGP3ARQOS;
+ input [2:0] SAXIGP3ARSIZE;
+ input SAXIGP3ARUSER;
+ input SAXIGP3ARVALID;
+ input [48:0] SAXIGP3AWADDR;
+ input [1:0] SAXIGP3AWBURST;
+ input [3:0] SAXIGP3AWCACHE;
+ input [5:0] SAXIGP3AWID;
+ input [7:0] SAXIGP3AWLEN;
+ input SAXIGP3AWLOCK;
+ input [2:0] SAXIGP3AWPROT;
+ input [3:0] SAXIGP3AWQOS;
+ input [2:0] SAXIGP3AWSIZE;
+ input SAXIGP3AWUSER;
+ input SAXIGP3AWVALID;
+ input SAXIGP3BREADY;
+ input SAXIGP3RCLK;
+ input SAXIGP3RREADY;
+ input SAXIGP3WCLK;
+ input [127:0] SAXIGP3WDATA;
+ input SAXIGP3WLAST;
+ input [15:0] SAXIGP3WSTRB;
+ input SAXIGP3WVALID;
+ input [48:0] SAXIGP4ARADDR;
+ input [1:0] SAXIGP4ARBURST;
+ input [3:0] SAXIGP4ARCACHE;
+ input [5:0] SAXIGP4ARID;
+ input [7:0] SAXIGP4ARLEN;
+ input SAXIGP4ARLOCK;
+ input [2:0] SAXIGP4ARPROT;
+ input [3:0] SAXIGP4ARQOS;
+ input [2:0] SAXIGP4ARSIZE;
+ input SAXIGP4ARUSER;
+ input SAXIGP4ARVALID;
+ input [48:0] SAXIGP4AWADDR;
+ input [1:0] SAXIGP4AWBURST;
+ input [3:0] SAXIGP4AWCACHE;
+ input [5:0] SAXIGP4AWID;
+ input [7:0] SAXIGP4AWLEN;
+ input SAXIGP4AWLOCK;
+ input [2:0] SAXIGP4AWPROT;
+ input [3:0] SAXIGP4AWQOS;
+ input [2:0] SAXIGP4AWSIZE;
+ input SAXIGP4AWUSER;
+ input SAXIGP4AWVALID;
+ input SAXIGP4BREADY;
+ input SAXIGP4RCLK;
+ input SAXIGP4RREADY;
+ input SAXIGP4WCLK;
+ input [127:0] SAXIGP4WDATA;
+ input SAXIGP4WLAST;
+ input [15:0] SAXIGP4WSTRB;
+ input SAXIGP4WVALID;
+ input [48:0] SAXIGP5ARADDR;
+ input [1:0] SAXIGP5ARBURST;
+ input [3:0] SAXIGP5ARCACHE;
+ input [5:0] SAXIGP5ARID;
+ input [7:0] SAXIGP5ARLEN;
+ input SAXIGP5ARLOCK;
+ input [2:0] SAXIGP5ARPROT;
+ input [3:0] SAXIGP5ARQOS;
+ input [2:0] SAXIGP5ARSIZE;
+ input SAXIGP5ARUSER;
+ input SAXIGP5ARVALID;
+ input [48:0] SAXIGP5AWADDR;
+ input [1:0] SAXIGP5AWBURST;
+ input [3:0] SAXIGP5AWCACHE;
+ input [5:0] SAXIGP5AWID;
+ input [7:0] SAXIGP5AWLEN;
+ input SAXIGP5AWLOCK;
+ input [2:0] SAXIGP5AWPROT;
+ input [3:0] SAXIGP5AWQOS;
+ input [2:0] SAXIGP5AWSIZE;
+ input SAXIGP5AWUSER;
+ input SAXIGP5AWVALID;
+ input SAXIGP5BREADY;
+ input SAXIGP5RCLK;
+ input SAXIGP5RREADY;
+ input SAXIGP5WCLK;
+ input [127:0] SAXIGP5WDATA;
+ input SAXIGP5WLAST;
+ input [15:0] SAXIGP5WSTRB;
+ input SAXIGP5WVALID;
+ input [48:0] SAXIGP6ARADDR;
+ input [1:0] SAXIGP6ARBURST;
+ input [3:0] SAXIGP6ARCACHE;
+ input [5:0] SAXIGP6ARID;
+ input [7:0] SAXIGP6ARLEN;
+ input SAXIGP6ARLOCK;
+ input [2:0] SAXIGP6ARPROT;
+ input [3:0] SAXIGP6ARQOS;
+ input [2:0] SAXIGP6ARSIZE;
+ input SAXIGP6ARUSER;
+ input SAXIGP6ARVALID;
+ input [48:0] SAXIGP6AWADDR;
+ input [1:0] SAXIGP6AWBURST;
+ input [3:0] SAXIGP6AWCACHE;
+ input [5:0] SAXIGP6AWID;
+ input [7:0] SAXIGP6AWLEN;
+ input SAXIGP6AWLOCK;
+ input [2:0] SAXIGP6AWPROT;
+ input [3:0] SAXIGP6AWQOS;
+ input [2:0] SAXIGP6AWSIZE;
+ input SAXIGP6AWUSER;
+ input SAXIGP6AWVALID;
+ input SAXIGP6BREADY;
+ input SAXIGP6RCLK;
+ input SAXIGP6RREADY;
+ input SAXIGP6WCLK;
+ input [127:0] SAXIGP6WDATA;
+ input SAXIGP6WLAST;
+ input [15:0] SAXIGP6WSTRB;
+ input SAXIGP6WVALID;
+ input [59:0] STMEVENT;
+endmodule
+
diff --git a/tests/ice40/adffs.v b/tests/ice40/adffs.v
index 93c8bf52c..09dc36001 100644
--- a/tests/ice40/adffs.v
+++ b/tests/ice40/adffs.v
@@ -22,29 +22,25 @@ module adffn
q <= d;
endmodule
-module dffsr
+module dffs
( input d, clk, pre, clr, output reg q );
initial begin
q = 0;
end
- always @( posedge clk, posedge pre, posedge clr )
- if ( clr )
- q <= 1'b0;
- else if ( pre )
+ always @( posedge clk, posedge pre )
+ if ( pre )
q <= 1'b1;
else
q <= d;
endmodule
-module ndffnsnr
+module ndffnr
( input d, clk, pre, clr, output reg q );
initial begin
q = 0;
end
- always @( negedge clk, negedge pre, negedge clr )
- if ( !clr )
- q <= 1'b0;
- else if ( !pre )
+ always @( negedge clk, negedge pre )
+ if ( !pre )
q <= 1'b1;
else
q <= d;
@@ -58,7 +54,7 @@ input a,
output b,b1,b2,b3
);
-dffsr u_dffsr (
+dffs u_dffs (
.clk (clk ),
.clr (clr),
.pre (pre),
@@ -66,7 +62,7 @@ dffsr u_dffsr (
.q (b )
);
-ndffnsnr u_ndffnsnr (
+ndffnr u_ndffnr (
.clk (clk ),
.clr (clr),
.pre (pre),
diff --git a/tests/ice40/adffs.ys b/tests/ice40/adffs.ys
index 14b251c5c..548060b66 100644
--- a/tests/ice40/adffs.ys
+++ b/tests/ice40/adffs.ys
@@ -1,12 +1,11 @@
read_verilog adffs.v
proc
-async2sync # converts async flops to a 'sync' variant clocked by a 'super'-clock
flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+equiv_opt -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:SB_DFF
-select -assert-count 1 t:SB_DFFN
-select -assert-count 2 t:SB_DFFSR
-select -assert-count 7 t:SB_LUT4
-select -assert-none t:SB_DFF t:SB_DFFN t:SB_DFFSR t:SB_LUT4 %% t:* %D
+select -assert-count 1 t:SB_DFFNS
+select -assert-count 2 t:SB_DFFR
+select -assert-count 1 t:SB_DFFS
+select -assert-count 2 t:SB_LUT4
+select -assert-none t:SB_DFFNS t:SB_DFFR t:SB_DFFS t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/div_mod.ys b/tests/ice40/div_mod.ys
index 21cac7144..821d6c301 100644
--- a/tests/ice40/div_mod.ys
+++ b/tests/ice40/div_mod.ys
@@ -4,6 +4,6 @@ flatten
equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
cd top # Constrain all select calls below inside the top module
-select -assert-count 62 t:SB_LUT4
+select -assert-count 59 t:SB_LUT4
select -assert-count 41 t:SB_CARRY
select -assert-none t:SB_LUT4 t:SB_CARRY %% t:* %D
diff --git a/tests/ice40/macc.v b/tests/ice40/macc.v
index 6c3676c83..6f68e7500 100644
--- a/tests/ice40/macc.v
+++ b/tests/ice40/macc.v
@@ -13,13 +13,35 @@ reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
assign c = reg_tmp_c;
always @(posedge clk)
begin
-if(set)
-begin
-reg_tmp_c <= 0;
+ if(set)
+ begin
+ reg_tmp_c <= 0;
+ end
+ else
+ begin
+ reg_tmp_c <= a * b + c;
+ end
end
-else
+endmodule
+
+module top2(clk,a,b,c,hold);
+parameter A_WIDTH = 6 /*4*/;
+parameter B_WIDTH = 6 /*3*/;
+input hold;
+input clk;
+input signed [(A_WIDTH - 1):0] a;
+input signed [(B_WIDTH - 1):0] b;
+output signed [(A_WIDTH + B_WIDTH - 1):0] c;
+reg signed [A_WIDTH-1:0] reg_a;
+reg signed [B_WIDTH-1:0] reg_b;
+reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
+assign c = reg_tmp_c;
+always @(posedge clk)
begin
-reg_tmp_c <= a * b + c;
-end
+ if (!hold) begin
+ reg_a <= a;
+ reg_b <= b;
+ reg_tmp_c <= reg_a * reg_b + c;
+ end
end
endmodule
diff --git a/tests/ice40/macc.ys b/tests/ice40/macc.ys
index 0f4c19be5..fd30e79c5 100644
--- a/tests/ice40/macc.ys
+++ b/tests/ice40/macc.ys
@@ -1,13 +1,25 @@
read_verilog macc.v
proc
+design -save read
+
hierarchy -top top
-#equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+equiv_opt -assert -multiclock -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:SB_MAC16
+select -assert-none t:SB_MAC16 %% t:* %D
+
+design -load read
+hierarchy -top top2
-equiv_opt -run :prove -map +/ice40/cells_sim.v synth_ice40 -dsp
-async2sync
-equiv_opt -run prove: -assert null
+#equiv_opt -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+
+equiv_opt -run :prove -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+clk2fflogic
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -set-init-zero -seq 4 -verify -prove-asserts -show-ports miter
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
+cd top2 # Constrain all select calls below inside the top module
select -assert-count 1 t:SB_MAC16
select -assert-none t:SB_MAC16 %% t:* %D
diff --git a/tests/ice40/run-test.sh b/tests/ice40/run-test.sh
index 2c72ca3a9..46716f9a0 100755
--- a/tests/ice40/run-test.sh
+++ b/tests/ice40/run-test.sh
@@ -6,7 +6,7 @@ for x in *.ys; do
echo "all:: run-$x"
echo "run-$x:"
echo " @echo 'Running $x..'"
- echo " @../../yosys -ql ${x%.ys}.log $x -w 'Yosys has only limited support for tri-state logic at the moment.'"
+ echo " @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
done
for s in *.sh; do
if [ "$s" != "run-test.sh" ]; then
diff --git a/tests/opt/opt_expr.ys b/tests/opt/opt_expr.ys
index ecc2c8da8..e0acead82 100644
--- a/tests/opt/opt_expr.ys
+++ b/tests/opt/opt_expr.ys
@@ -204,7 +204,7 @@ endmodule
EOT
check
-equiv_opt opt_expr -fine
+equiv_opt -assert opt_expr -fine
design -load postopt
select -assert-count 1 t:$alu r:A_WIDTH=4 r:B_WIDTH=4 r:Y_WIDTH=5 %i %i %i
@@ -218,7 +218,7 @@ endmodule
EOT
check
-equiv_opt opt_expr -fine
+equiv_opt -assert opt_expr -fine
design -load postopt
select -assert-count 1 t:$alu r:A_WIDTH=8 r:B_WIDTH=8 r:Y_WIDTH=9 %i %i %i
@@ -232,7 +232,7 @@ endmodule
EOT
check
-equiv_opt opt_expr
+equiv_opt -assert opt_expr
design -load postopt
select -assert-count 1 t:$shiftx r:A_WIDTH=3 %i
@@ -246,7 +246,7 @@ endmodule
EOT
check
-equiv_opt opt_expr
+equiv_opt -assert opt_expr
design -load postopt
select -assert-count 1 t:$shiftx r:A_WIDTH=12 %i
@@ -260,7 +260,7 @@ endmodule
EOT
check
-equiv_opt opt_expr
+equiv_opt -assert opt_expr
design -load postopt
select -assert-count 1 t:$shift r:A_WIDTH=3 %i
@@ -274,7 +274,7 @@ endmodule
EOT
check
-equiv_opt opt_expr
+equiv_opt -assert opt_expr
design -load postopt
select -assert-count 1 t:$shift r:A_WIDTH=10 %i
@@ -288,6 +288,6 @@ endmodule
EOT
check
-equiv_opt opt_expr -keepdc
+equiv_opt -assert opt_expr -keepdc
design -load postopt
select -assert-count 1 t:$shift r:A_WIDTH=13 %i
diff --git a/tests/rpc/.gitignore b/tests/rpc/.gitignore
new file mode 100644
index 000000000..397b4a762
--- /dev/null
+++ b/tests/rpc/.gitignore
@@ -0,0 +1 @@
+*.log
diff --git a/tests/rpc/design.v b/tests/rpc/design.v
new file mode 100644
index 000000000..80f1dac1a
--- /dev/null
+++ b/tests/rpc/design.v
@@ -0,0 +1,8 @@
+module top(input [3:0] i, output [3:0] o);
+ python_inv #(
+ .width(4)
+ ) inv (
+ .i(i),
+ .o(o),
+ );
+endmodule
diff --git a/tests/rpc/exec.ys b/tests/rpc/exec.ys
new file mode 100644
index 000000000..b46009fb9
--- /dev/null
+++ b/tests/rpc/exec.ys
@@ -0,0 +1,5 @@
+connect_rpc -exec python3 frontend.py stdio
+read_verilog design.v
+hierarchy -top top
+flatten
+select -assert-count 1 t:$neg
diff --git a/tests/rpc/frontend.py b/tests/rpc/frontend.py
new file mode 100644
index 000000000..eff41738a
--- /dev/null
+++ b/tests/rpc/frontend.py
@@ -0,0 +1,126 @@
+def modules():
+ return ["python_inv"]
+
+def derive(module, parameters):
+ assert module == r"python_inv"
+ if parameters.keys() != {r"\width"}:
+ raise ValueError("Invalid parameters")
+ return "ilang", r"""
+module \impl
+ wire width {width:d} input 1 \i
+ wire width {width:d} output 2 \o
+ cell $neg $0
+ parameter \A_SIGNED 1'0
+ parameter \A_WIDTH 32'{width:b}
+ parameter \Y_WIDTH 32'{width:b}
+ connect \A \i
+ connect \Y \o
+ end
+end
+module \python_inv
+ wire width {width:d} input 1 \i
+ wire width {width:d} output 2 \o
+ cell \impl $0
+ connect \i \i
+ connect \o \o
+ end
+end
+""".format(width=parameters[r"\width"])
+
+# ----------------------------------------------------------------------------
+
+import json
+import argparse
+import sys, socket, os
+try:
+ import msvcrt, win32pipe, win32file
+except ImportError:
+ msvcrt = win32pipe = win32file = None
+
+def map_parameter(parameter):
+ if parameter["type"] == "unsigned":
+ return int(parameter["value"], 2)
+ if parameter["type"] == "signed":
+ width = len(parameter["value"])
+ value = int(parameter["value"], 2)
+ if value & (1 << (width - 1)):
+ value = -((1 << width) - value)
+ return value
+ if parameter["type"] == "string":
+ return parameter["value"]
+ if parameter["type"] == "real":
+ return float(parameter["value"])
+
+def call(input_json):
+ input = json.loads(input_json)
+ if input["method"] == "modules":
+ return json.dumps({"modules": modules()})
+ if input["method"] == "derive":
+ try:
+ frontend, source = derive(input["module"],
+ {name: map_parameter(value) for name, value in input["parameters"].items()})
+ return json.dumps({"frontend": frontend, "source": source})
+ except ValueError as e:
+ return json.dumps({"error": str(e)})
+
+def main():
+ parser = argparse.ArgumentParser()
+ modes = parser.add_subparsers(dest="mode")
+ mode_stdio = modes.add_parser("stdio")
+ if os.name == "posix":
+ mode_path = modes.add_parser("unix-socket")
+ if os.name == "nt":
+ mode_path = modes.add_parser("named-pipe")
+ mode_path.add_argument("path")
+ args = parser.parse_args()
+
+ if args.mode == "stdio":
+ while True:
+ input = sys.stdin.readline()
+ if not input: break
+ sys.stdout.write(call(input) + "\n")
+ sys.stdout.flush()
+
+ if args.mode == "unix-socket":
+ sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ sock.bind(args.path)
+ try:
+ sock.listen(1)
+ conn, addr = sock.accept()
+ file = conn.makefile("rw")
+ while True:
+ input = file.readline()
+ if not input: break
+ file.write(call(input) + "\n")
+ file.flush()
+ finally:
+ sock.close()
+ os.unlink(args.path)
+
+ if args.mode == "named-pipe":
+ pipe = win32pipe.CreateNamedPipe(args.path, win32pipe.PIPE_ACCESS_DUPLEX,
+ win32pipe.PIPE_TYPE_BYTE|win32pipe.PIPE_READMODE_BYTE|win32pipe.PIPE_WAIT,
+ 1, 4096, 4096, 0, None)
+ win32pipe.ConnectNamedPipe(pipe, None)
+ try:
+ while True:
+ input = b""
+ while not input.endswith(b"\n"):
+ result, data = win32file.ReadFile(pipe, 4096)
+ assert result == 0
+ input += data
+ assert not b"\n" in input or input.endswith(b"\n")
+ output = (call(input.decode("utf-8")) + "\n").encode("utf-8")
+ length = len(output)
+ while length > 0:
+ result, done = win32file.WriteFile(pipe, output)
+ assert result == 0
+ length -= done
+ except win32file.error as e:
+ if e.args[0] == 109: # ERROR_BROKEN_PIPE
+ pass
+ else:
+ raise
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/rpc/run-test.sh b/tests/rpc/run-test.sh
new file mode 100755
index 000000000..44ce7e674
--- /dev/null
+++ b/tests/rpc/run-test.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -e
+for x in *.ys; do
+ echo "Running $x.."
+ ../../yosys -ql ${x%.ys}.log $x
+done
diff --git a/tests/rpc/unix.ys b/tests/rpc/unix.ys
new file mode 100644
index 000000000..cc7ec14ab
--- /dev/null
+++ b/tests/rpc/unix.ys
@@ -0,0 +1,6 @@
+!python3 frontend.py unix-socket frontend.sock & sleep 0.1
+connect_rpc -path frontend.sock
+read_verilog design.v
+hierarchy -top top
+flatten
+select -assert-count 1 t:$neg
diff --git a/tests/simple/peepopt.v b/tests/simple/peepopt.v
deleted file mode 100644
index 1bf427897..000000000
--- a/tests/simple/peepopt.v
+++ /dev/null
@@ -1,13 +0,0 @@
-module peepopt_shiftmul_0 #(parameter N=3, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output [W-1:0] o);
-assign o = i[s*W+:W];
-endmodule
-
-module peepopt_shiftmul_1 (output y, input [2:0] w);
-assign y = 1'b1 >> (w * (3'b110));
-endmodule
-
-module peepopt_muldiv_0(input [1:0] i, output [1:0] o);
-wire [3:0] t;
-assign t = i * 3;
-assign o = t / 3;
-endmodule
diff --git a/tests/simple/run-test.sh b/tests/simple/run-test.sh
index 967ac49f2..f20fd0d30 100755
--- a/tests/simple/run-test.sh
+++ b/tests/simple/run-test.sh
@@ -12,7 +12,7 @@ done
shift "$((OPTIND-1))"
# check for Icarus Verilog
-if ! which iverilog > /dev/null ; then
+if ! command -v iverilog > /dev/null ; then
echo "$0: Error: Icarus Verilog 'iverilog' not found."
exit 1
fi
diff --git a/tests/simple_abc9/run-test.sh b/tests/simple_abc9/run-test.sh
index 8df6994e3..0d4262005 100755
--- a/tests/simple_abc9/run-test.sh
+++ b/tests/simple_abc9/run-test.sh
@@ -12,7 +12,7 @@ done
shift "$((OPTIND-1))"
# check for Icarus Verilog
-if ! which iverilog > /dev/null ; then
+if ! command -v iverilog > /dev/null ; then
echo "$0: Error: Icarus Verilog 'iverilog' not found."
exit 1
fi
diff --git a/tests/techmap/autopurge.ys b/tests/techmap/autopurge.ys
new file mode 100644
index 000000000..1eb99ec37
--- /dev/null
+++ b/tests/techmap/autopurge.ys
@@ -0,0 +1,62 @@
+# https://github.com/YosysHQ/yosys/issues/1381
+read_verilog <<EOT
+module sub(input i, output o, (* techmap_autopurge *) input j);
+foobar f(i, o, j);
+endmodule
+EOT
+design -stash techmap
+
+read_verilog <<EOT
+(* blackbox *)
+module sub(input i, output o, input j);
+endmodule
+
+(* blackbox *)
+module foobar(input i, output o, input j);
+endmodule
+
+module top(input i, output o);
+sub s0(i, o);
+endmodule
+EOT
+
+techmap -map %techmap
+hierarchy
+check -assert
+
+# https://github.com/YosysHQ/yosys/issues/1391
+design -reset
+read_verilog <<EOT
+module sub(input i, output o, (* techmap_autopurge *) input [1:0] j);
+foobar f(i, o, j);
+endmodule
+EOT
+design -stash techmap
+
+read_verilog <<EOT
+(* blackbox *)
+module sub(input i, output o, input j);
+endmodule
+
+(* blackbox *)
+module foobar(input i, output o, input j);
+endmodule
+
+module top(input i, output o);
+sub s0(i, o);
+endmodule
+EOT
+
+techmap -map %techmap
+hierarchy
+check -assert
+
+read_verilog -overwrite <<EOT
+module top(input i, output o);
+wire j;
+sub s0(i, o, j);
+endmodule
+EOT
+
+techmap -map %techmap
+hierarchy
diff --git a/tests/techmap/dff2dffs.ys b/tests/techmap/dff2dffs.ys
new file mode 100644
index 000000000..13f1a3cf3
--- /dev/null
+++ b/tests/techmap/dff2dffs.ys
@@ -0,0 +1,50 @@
+read_verilog << EOT
+module top(...);
+input clk;
+input d;
+input sr;
+output reg q0, q1, q2, q3, q4, q5;
+
+initial q0 = 1'b0;
+initial q1 = 1'b0;
+initial q2 = 1'b1;
+initial q3 = 1'b1;
+initial q4 = 1'bx;
+initial q5 = 1'bx;
+
+always @(posedge clk) begin
+ q0 <= sr ? 1'b0 : d;
+ q1 <= sr ? 1'b1 : d;
+ q2 <= sr ? 1'b0 : d;
+ q3 <= sr ? 1'b1 : d;
+ q4 <= sr ? 1'b0 : d;
+ q5 <= sr ? 1'b1 : d;
+end
+
+endmodule
+EOT
+
+proc
+simplemap
+design -save ref
+
+dff2dffs
+clean
+
+select -assert-count 1 w:q0 %x t:$__DFFS_PP0_ %i
+select -assert-count 1 w:q1 %x t:$__DFFS_PP1_ %i
+select -assert-count 1 w:q2 %x t:$__DFFS_PP0_ %i
+select -assert-count 1 w:q3 %x t:$__DFFS_PP1_ %i
+select -assert-count 1 w:q4 %x t:$__DFFS_PP0_ %i
+select -assert-count 1 w:q5 %x t:$__DFFS_PP1_ %i
+
+design -load ref
+dff2dffs -match-init
+clean
+
+select -assert-count 1 w:q0 %x t:$__DFFS_PP0_ %i
+select -assert-count 0 w:q1 %x t:$__DFFS_PP1_ %i
+select -assert-count 0 w:q2 %x t:$__DFFS_PP0_ %i
+select -assert-count 1 w:q3 %x t:$__DFFS_PP1_ %i
+select -assert-count 1 w:q4 %x t:$__DFFS_PP0_ %i
+select -assert-count 1 w:q5 %x t:$__DFFS_PP1_ %i
diff --git a/tests/techmap/extractinv.ys b/tests/techmap/extractinv.ys
new file mode 100644
index 000000000..6146f829a
--- /dev/null
+++ b/tests/techmap/extractinv.ys
@@ -0,0 +1,41 @@
+read_verilog << EOT
+
+module ff4(...);
+parameter [0:0] CLK_INV = 1'b0;
+parameter [3:0] DATA_INV = 4'b0000;
+(* invertible_pin = "CLK_INV" *)
+input clk;
+(* invertible_pin = "DATA_INV" *)
+input [3:0] d;
+output [3:0] q;
+endmodule
+
+module inv(...);
+output o;
+input i;
+endmodule
+
+module top(...);
+input d0, d1, d2, d3;
+input clk;
+output q;
+ff4 #(.DATA_INV(4'h5)) ff_inst (.clk(clk), .d({d3, d2, d1, d0}), .q(q));
+endmodule
+
+EOT
+
+extractinv -inv inv o:i
+clean
+
+select -assert-count 2 top/t:inv
+select -assert-count 2 top/t:inv top/t:ff4 %ci:+[d] %ci:+[o] %i
+
+select -assert-count 1 top/t:inv top/w:d0 %co:+[i] %i
+select -assert-count 0 top/t:inv top/w:d1 %co:+[i] %i
+select -assert-count 1 top/t:inv top/w:d2 %co:+[i] %i
+select -assert-count 0 top/t:inv top/w:d3 %co:+[i] %i
+
+select -assert-count 0 top/t:ff4 top/w:d0 %co:+[d] %i
+select -assert-count 1 top/t:ff4 top/w:d1 %co:+[d] %i
+select -assert-count 0 top/t:ff4 top/w:d2 %co:+[d] %i
+select -assert-count 1 top/t:ff4 top/w:d3 %co:+[d] %i
diff --git a/tests/techmap/wireinit.ys b/tests/techmap/wireinit.ys
new file mode 100644
index 000000000..89afaafb5
--- /dev/null
+++ b/tests/techmap/wireinit.ys
@@ -0,0 +1,108 @@
+read_verilog <<EOT
+(* techmap_celltype = "$_DFF_P_" *)
+module ffmap(...);
+input D;
+input C;
+output Q;
+parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+
+ffbb #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_(.D(D), .Q(Q), .C(C));
+
+wire _TECHMAP_FAIL_ = _TECHMAP_WIREINIT_Q_ === 1'b1;
+
+wire _TECHMAP_REMOVEINIT_Q_ = 1'b1;
+
+endmodule
+EOT
+design -stash map
+
+read_verilog <<EOT
+(* techmap_celltype = "$_DFF_P_" *)
+module ffmap(...);
+input D;
+input C;
+output Q;
+parameter [0:0] _TECHMAP_WIREINIT_Q_ = 1'bx;
+
+ffbb #(.INIT(_TECHMAP_WIREINIT_Q_)) _TECHMAP_REPLACE_(.D(D), .Q(Q), .C(C));
+
+wire _TECHMAP_FAIL_ = _TECHMAP_WIREINIT_Q_ === 1'b1;
+
+wire _TECHMAP_REMOVEINIT_Q_ = 1'b0;
+
+endmodule
+EOT
+design -stash map_noremove
+
+read_verilog <<EOT
+module ffbb (...);
+parameter [0:0] INIT = 1'bx;
+input D, C;
+output Q;
+endmodule
+
+module top(...);
+input clk;
+input d;
+output reg q0 = 0;
+output reg q1 = 1;
+output reg qq0 = 0;
+output reg qx;
+
+always @(posedge clk) begin
+ q0 <= d;
+ q1 <= d;
+ qq0 <= q0;
+ qx <= d;
+end
+endmodule
+EOT
+
+design -save ref
+
+hierarchy -auto-top
+proc
+simplemap
+techmap -map %map
+clean
+# Make sure the parameter was used properly.
+select -assert-count 3 top/t:ffbb
+select -set ff0 top/w:q0 %ci t:ffbb %i
+select -set ffq0 top/w:qq0 %ci t:ffbb %i
+select -set ffx top/w:qx %ci t:ffbb %i
+select -assert-count 1 @ff0
+select -assert-count 1 @ffq0
+select -assert-count 1 @ffx
+select -assert-count 1 @ff0 r:INIT=1'b0 %i
+select -assert-count 1 @ffq0 r:INIT=1'b0 %i
+select -assert-count 1 @ffx r:INIT=1'bx %i
+select -assert-count 0 top/w:q1 %ci t:ffbb %i
+# Make sure the init values are dropped from the wires iff mapping was performed.
+select -assert-count 0 top/w:q0 a:init %i
+select -assert-count 0 top/w:qq0 a:init %i
+select -assert-count 1 top/w:q1 a:init=1'b1 %i
+select -assert-count 0 top/w:qx a:init %i
+
+design -load ref
+hierarchy -auto-top
+proc
+simplemap
+techmap -map %map_noremove
+clean
+# Make sure the parameter was used properly.
+select -assert-count 3 top/t:ffbb
+select -set ff0 top/w:q0 %ci t:ffbb %i
+select -set ffq0 top/w:qq0 %ci t:ffbb %i
+select -set ffx top/w:qx %ci t:ffbb %i
+select -assert-count 1 @ff0
+select -assert-count 1 @ffq0
+select -assert-count 1 @ffx
+select -assert-count 1 @ff0 r:INIT=1'b0 %i
+select -assert-count 1 @ffq0 r:INIT=1'b0 %i
+select -assert-count 1 @ffx r:INIT=1'bx %i
+select -assert-count 0 top/w:q1 %ci t:ffbb %i
+# Make sure the init values are not dropped from the wires.
+select -assert-count 1 top/w:q0 a:init=1'b0 %i
+select -assert-count 1 top/w:qq0 a:init=1'b0 %i
+select -assert-count 1 top/w:q1 a:init=1'b1 %i
+select -assert-count 0 top/w:qx a:init %i
diff --git a/tests/various/abc9.v b/tests/various/abc9.v
index a08b613a8..30ebd4e26 100644
--- a/tests/various/abc9.v
+++ b/tests/various/abc9.v
@@ -5,5 +5,7 @@ always @*
endmodule
module abc9_test028(input i, output o);
-unknown u(~i, o);
+wire w;
+unknown u(~i, w);
+unknown2 u2(w, o);
endmodule
diff --git a/tests/various/equiv_opt_multiclock.ys b/tests/various/equiv_opt_multiclock.ys
new file mode 100644
index 000000000..81e36d018
--- /dev/null
+++ b/tests/various/equiv_opt_multiclock.ys
@@ -0,0 +1,12 @@
+read_verilog <<EOT
+module top(input clk, pre, d, output reg q);
+ always @(posedge clk, posedge pre)
+ if (pre)
+ q <= 1'b1;
+ else
+ q <= d;
+endmodule
+EOT
+
+prep
+equiv_opt -assert -multiclock -map +/simcells.v synth
diff --git a/tests/various/hierarchy_defer.ys b/tests/various/hierarchy_defer.ys
new file mode 100644
index 000000000..70f5b70a3
--- /dev/null
+++ b/tests/various/hierarchy_defer.ys
@@ -0,0 +1,27 @@
+read -noverific
+read -vlog2k <<EOT
+module first;
+endmodule
+
+(* top *)
+module top(input i, output o);
+sub s0(i, o);
+endmodule
+
+(* constant_expression=1+1?2*2:3/3 *)
+module sub(input i, output o);
+assign o = ~i;
+endmodule
+EOT
+design -save read
+
+hierarchy -auto-top
+select -assert-any top
+select -assert-any sub
+select -assert-none foo
+
+design -load read
+hierarchy
+select -assert-any top
+select -assert-any sub
+select -assert-none foo
diff --git a/tests/various/peepopt.ys b/tests/various/peepopt.ys
new file mode 100644
index 000000000..6bca62e2b
--- /dev/null
+++ b/tests/various/peepopt.ys
@@ -0,0 +1,175 @@
+read_verilog <<EOT
+module peepopt_shiftmul_0 #(parameter N=3, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output [W-1:0] o);
+assign o = i[s*W+:W];
+endmodule
+EOT
+
+prep -nokeepdc
+equiv_opt -assert peepopt
+design -load postopt
+clean
+select -assert-count 1 t:$shiftx
+select -assert-count 0 t:$shiftx t:* %D
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_shiftmul_1 (output [7:0] y, input [2:0] w);
+assign y = 1'b1 >> (w * (3'b110));
+endmodule
+EOT
+
+prep -nokeepdc
+equiv_opt -assert peepopt
+design -load postopt
+clean
+select -assert-count 1 t:$shr
+select -assert-count 1 t:$mul
+select -assert-count 0 t:$shr t:$mul %% t:* %D
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_shiftmul_2 (input [11:0] D, input [1:0] S, output [11:0] Y);
+ assign Y = D >> (S*3);
+endmodule
+EOT
+
+prep
+design -save gold
+peepopt
+design -stash gate
+
+design -import gold -as gold peepopt_shiftmul_2
+design -import gate -as gate peepopt_shiftmul_2
+
+miter -equiv -make_assert -make_outputs -ignore_gold_x -flatten gold gate miter
+sat -show-public -enable_undef -prove-asserts miter
+cd gate
+select -assert-count 1 t:$shr
+select -assert-count 1 t:$mul
+select -assert-count 0 t:$shr t:$mul %% t:* %D
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_muldiv_0(input [1:0] i, output [1:0] o);
+wire [3:0] t;
+assign t = i * 3;
+assign o = t / 3;
+endmodule
+EOT
+
+prep -nokeepdc
+equiv_opt -assert peepopt
+design -load postopt
+clean
+select -assert-count 0 t:*
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_dffmuxext_unsigned(input clk, ce, input [1:0] i, output reg [3:0] o);
+ always @(posedge clk) if (ce) o <= i;
+endmodule
+EOT
+
+proc
+equiv_opt -assert peepopt
+design -load postopt
+clean
+select -assert-count 1 t:$dff r:WIDTH=2 %i
+select -assert-count 1 t:$mux r:WIDTH=2 %i
+select -assert-count 0 t:$dff t:$mux %% t:* %D
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_dffmuxext_signed(input clk, ce, input signed [1:0] i, output reg signed [3:0] o);
+ always @(posedge clk) if (ce) o <= i;
+endmodule
+EOT
+
+proc
+equiv_opt -assert peepopt
+design -load postopt
+clean
+select -assert-count 1 t:$dff r:WIDTH=2 %i
+select -assert-count 1 t:$mux r:WIDTH=2 %i
+select -assert-count 0 t:$dff t:$mux %% t:* %D
+
+###################
+
+design -reset
+read_verilog <<EOT
+module peepopt_dffmuxext_const(input clk, ce, input [1:0] i, output reg [5:0] o);
+ always @(posedge clk) if (ce) o <= {1'b0, i[1], 2'b1x, i[0], 1'bz};
+endmodule
+EOT
+
+proc
+equiv_opt -assert peepopt
+design -load postopt
+select -assert-count 1 t:$dff r:WIDTH=2 %i
+select -assert-count 1 t:$mux r:WIDTH=2 %i
+select -assert-count 0 t:$dff t:$mux %% t:* %D
+
+###################
+
+design -reset
+read_verilog <<EOT
+module peepopt_dffmuxext_const_init(input clk, ce, input [1:0] i, (* init=6'b0x00x1 *) output reg [5:0] o);
+ always @(posedge clk) if (ce) o <= {1'b0, i[1], 2'b1x, i[0], 1'bz};
+endmodule
+EOT
+
+proc
+equiv_opt -assert peepopt
+design -load postopt
+select -assert-count 1 t:$dff r:WIDTH=5 %i
+select -assert-count 1 t:$mux r:WIDTH=5 %i
+select -assert-count 0 t:$dff t:$mux %% t:* %D
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_dffmuxext_unsigned_rst(input clk, ce, rst, input [1:0] i, output reg [3:0] o);
+ always @(posedge clk) if (rst) o <= 0; else if (ce) o <= i;
+endmodule
+EOT
+
+proc
+equiv_opt -assert peepopt
+design -load postopt
+wreduce
+select -assert-count 1 t:$dff r:WIDTH=2 %i
+select -assert-count 2 t:$mux
+select -assert-count 2 t:$mux r:WIDTH=2 %i
+select -assert-count 0 t:$dff t:$mux %% t:* %D
+
+####################
+
+design -reset
+read_verilog <<EOT
+module peepopt_dffmuxext_signed_rst(input clk, ce, rstn, input signed [1:0] i, output reg signed [3:0] o);
+ always @(posedge clk) begin
+ if (ce) o <= i;
+ if (!rstn) o <= 4'b1111;
+ end
+endmodule
+EOT
+
+proc
+equiv_opt -assert peepopt
+design -load postopt
+wreduce
+select -assert-count 1 t:$dff r:WIDTH=2 %i
+select -assert-count 2 t:$mux
+select -assert-count 2 t:$mux r:WIDTH=2 %i
+select -assert-count 0 t:$logic_not t:$dff t:$mux %% t:* %D
diff --git a/tests/xilinx/.gitignore b/tests/xilinx/.gitignore
index b48f808a1..54733fb71 100644
--- a/tests/xilinx/.gitignore
+++ b/tests/xilinx/.gitignore
@@ -1,3 +1,4 @@
/*.log
/*.out
/run-test.mk
+/*_uut.v
diff --git a/tests/xilinx/dsp_simd.ys b/tests/xilinx/dsp_simd.ys
new file mode 100644
index 000000000..956952327
--- /dev/null
+++ b/tests/xilinx/dsp_simd.ys
@@ -0,0 +1,25 @@
+read_verilog <<EOT
+module simd(input [12*4-1:0] a, input [12*4-1:0] b, (* use_dsp="simd" *) output [7*12-1:0] o12, (* use_dsp="simd" *) output [2*24-1:0] o24);
+generate
+ genvar i;
+ // 4 x 12-bit adder
+ for (i = 0; i < 4; i++)
+ assign o12[i*12+:12] = a[i*12+:12] + b[i*12+:12];
+ // 2 x 24-bit subtract
+ for (i = 0; i < 2; i++)
+ assign o24[i*24+:24] = a[i*24+:24] - b[i*24+:24];
+endgenerate
+reg [3*12-1:0] ro;
+always @* begin
+ ro[0*12+:12] = a[0*10+:10] + b[0*10+:10];
+ ro[1*12+:12] = a[1*10+:10] + b[1*10+:10];
+ ro[2*12+:12] = a[2*8+:8] + b[2*8+:8];
+end
+assign o12[4*12+:3*12] = ro;
+endmodule
+EOT
+
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx
+design -load postopt
+select -assert-count 3 t:DSP48E1
diff --git a/tests/xilinx/latches.v b/tests/xilinx/latches.v
new file mode 100644
index 000000000..83bad7f35
--- /dev/null
+++ b/tests/xilinx/latches.v
@@ -0,0 +1,58 @@
+module latchp
+ ( input d, en, output reg q );
+ always @*
+ if ( en )
+ q <= d;
+endmodule
+
+module latchn
+ ( input d, en, output reg q );
+ always @*
+ if ( !en )
+ q <= d;
+endmodule
+
+module latchsr
+ ( input d, en, clr, pre, output reg q );
+ always @*
+ if ( clr )
+ q <= 1'b0;
+ else if ( pre )
+ q <= 1'b1;
+ else if ( en )
+ q <= d;
+endmodule
+
+
+module top (
+input clk,
+input clr,
+input pre,
+input a,
+output b,b1,b2
+);
+
+
+latchp u_latchp (
+ .en (clk ),
+ .d (a ),
+ .q (b )
+ );
+
+
+latchn u_latchn (
+ .en (clk ),
+ .d (a ),
+ .q (b1 )
+ );
+
+
+latchsr u_latchsr (
+ .en (clk ),
+ .clr (clr),
+ .pre (pre),
+ .d (a ),
+ .q (b2 )
+ );
+
+endmodule
diff --git a/tests/xilinx/latches.ys b/tests/xilinx/latches.ys
new file mode 100644
index 000000000..ac1102896
--- /dev/null
+++ b/tests/xilinx/latches.ys
@@ -0,0 +1,15 @@
+read_verilog latches.v
+
+proc
+flatten
+equiv_opt -assert -run :prove -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+async2sync
+equiv_opt -assert -run prove: -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+
+design -load preopt
+synth_xilinx
+cd top
+select -assert-count 1 t:LUT1
+select -assert-count 2 t:LUT3
+select -assert-count 3 t:LDCE
+select -assert-none t:LUT1 t:LUT3 t:LDCE %% t:* %D
diff --git a/tests/xilinx/macc.sh b/tests/xilinx/macc.sh
new file mode 100644
index 000000000..86e4c2bb6
--- /dev/null
+++ b/tests/xilinx/macc.sh
@@ -0,0 +1,3 @@
+../../yosys -qp "synth_xilinx -top macc2; rename -top macc2_uut" macc.v -o macc_uut.v
+iverilog -o test_macc macc_tb.v macc_uut.v macc.v ../../techlibs/xilinx/cells_sim.v
+vvp -N ./test_macc
diff --git a/tests/xilinx/macc.v b/tests/xilinx/macc.v
new file mode 100644
index 000000000..e36b2bab1
--- /dev/null
+++ b/tests/xilinx/macc.v
@@ -0,0 +1,84 @@
+// Signed 40-bit streaming accumulator with 16-bit inputs
+// File: HDL_Coding_Techniques/multipliers/multipliers4.v
+//
+// Source:
+// https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug901-vivado-synthesis.pdf p.90
+//
+module macc # (parameter SIZEIN = 16, SIZEOUT = 40) (
+ input clk, ce, sload,
+ input signed [SIZEIN-1:0] a, b,
+ output signed [SIZEOUT-1:0] accum_out
+);
+// Declare registers for intermediate values
+reg signed [SIZEIN-1:0] a_reg, b_reg;
+reg sload_reg;
+reg signed [2*SIZEIN-1:0] mult_reg;
+reg signed [SIZEOUT-1:0] adder_out, old_result;
+always @* /*(adder_out or sload_reg)*/ begin // Modification necessary to fix sim/synth mismatch
+ if (sload_reg)
+ old_result <= 0;
+ else
+ // 'sload' is now active (=low) and opens the accumulation loop.
+ // The accumulator takes the next multiplier output in
+ // the same cycle.
+ old_result <= adder_out;
+end
+
+always @(posedge clk)
+ if (ce)
+ begin
+ a_reg <= a;
+ b_reg <= b;
+ mult_reg <= a_reg * b_reg;
+ sload_reg <= sload;
+ // Store accumulation result into a register
+ adder_out <= old_result + mult_reg;
+ end
+
+// Output accumulation result
+assign accum_out = adder_out;
+
+endmodule
+
+// Adapted variant of above
+module macc2 # (parameter SIZEIN = 16, SIZEOUT = 40) (
+ input clk,
+ input ce,
+ input rst,
+ input signed [SIZEIN-1:0] a, b,
+ output signed [SIZEOUT-1:0] accum_out,
+ output overflow
+);
+// Declare registers for intermediate values
+reg signed [SIZEIN-1:0] a_reg, b_reg, a_reg2, b_reg2;
+reg signed [2*SIZEIN-1:0] mult_reg = 0;
+reg signed [SIZEOUT:0] adder_out = 0;
+reg overflow_reg;
+always @(posedge clk) begin
+ //if (ce)
+ begin
+ a_reg <= a;
+ b_reg <= b;
+ a_reg2 <= a_reg;
+ b_reg2 <= b_reg;
+ mult_reg <= a_reg2 * b_reg2;
+ // Store accumulation result into a register
+ adder_out <= adder_out + mult_reg;
+ overflow_reg <= overflow;
+ end
+ if (rst) begin
+ a_reg <= 0;
+ a_reg2 <= 0;
+ b_reg <= 0;
+ b_reg2 <= 0;
+ mult_reg <= 0;
+ adder_out <= 0;
+ overflow_reg <= 1'b0;
+ end
+end
+assign overflow = (adder_out >= 2**(SIZEOUT-1)) | overflow_reg;
+
+// Output accumulation result
+assign accum_out = overflow ? 2**(SIZEOUT-1)-1 : adder_out;
+
+endmodule
diff --git a/tests/xilinx/macc.ys b/tests/xilinx/macc.ys
new file mode 100644
index 000000000..417a3b21b
--- /dev/null
+++ b/tests/xilinx/macc.ys
@@ -0,0 +1,31 @@
+read_verilog macc.v
+design -save read
+
+proc
+hierarchy -top macc
+#equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx ### TODO
+equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 10 -show-inputs -show-outputs miter
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd macc # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDRE
+select -assert-count 1 t:DSP48E1
+select -assert-none t:BUFG t:FDRE t:DSP48E1 %% t:* %D
+
+design -load read
+proc
+hierarchy -top macc2
+#equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx ### TODO
+equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 10 -show-inputs -show-outputs miter
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd macc2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:DSP48E1
+select -assert-count 1 t:FDRE
+select -assert-count 1 t:LUT2
+select -assert-count 41 t:LUT3
+select -assert-none t:BUFG t:DSP48E1 t:FDRE t:LUT2 t:LUT3 %% t:* %D
diff --git a/tests/xilinx/macc_tb.v b/tests/xilinx/macc_tb.v
new file mode 100644
index 000000000..64aed05c4
--- /dev/null
+++ b/tests/xilinx/macc_tb.v
@@ -0,0 +1,96 @@
+`timescale 1ns / 1ps
+
+module testbench;
+
+ parameter SIZEIN = 16, SIZEOUT = 40;
+ reg clk, ce, rst;
+ reg signed [SIZEIN-1:0] a, b;
+ output signed [SIZEOUT-1:0] REF_accum_out, accum_out;
+ output REF_overflow, overflow;
+
+ integer errcount = 0;
+
+ reg ERROR_FLAG = 0;
+
+ task clkcycle;
+ begin
+ #5;
+ clk = ~clk;
+ #10;
+ clk = ~clk;
+ #2;
+ ERROR_FLAG = 0;
+ if (REF_accum_out !== accum_out) begin
+ $display("ERROR at %1t: REF_accum_out=%b UUT_accum_out=%b DIFF=%b", $time, REF_accum_out, accum_out, REF_accum_out ^ accum_out);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ if (REF_overflow !== overflow) begin
+ $display("ERROR at %1t: REF_overflow=%b UUT_overflow=%b DIFF=%b", $time, REF_overflow, overflow, REF_overflow ^ overflow);
+ errcount = errcount + 1;
+ ERROR_FLAG = 1;
+ end
+ #3;
+ end
+ endtask
+
+ initial begin
+ //$dumpfile("test_macc.vcd");
+ //$dumpvars(0, testbench);
+
+ #2;
+ clk = 1'b0;
+ ce = 1'b0;
+ a = 0;
+ b = 0;
+
+ rst = 1'b1;
+ repeat (10) begin
+ #10;
+ clk = 1'b1;
+ #10;
+ clk = 1'b0;
+ #10;
+ clk = 1'b1;
+ #10;
+ clk = 1'b0;
+ end
+ rst = 1'b0;
+
+ repeat (10000) begin
+ clkcycle;
+ ce = 1; //$urandom & $urandom;
+ //rst = $urandom & $urandom & $urandom & $urandom & $urandom & $urandom;
+ a = $urandom & ~(1 << (SIZEIN-1));
+ b = $urandom & ~(1 << (SIZEIN-1));
+ end
+
+ if (errcount == 0) begin
+ $display("All tests passed.");
+ $finish;
+ end else begin
+ $display("Caught %1d errors.", errcount);
+ $stop;
+ end
+ end
+
+ macc2 ref (
+ .clk(clk),
+ .ce(ce),
+ .rst(rst),
+ .a(a),
+ .b(b),
+ .accum_out(REF_accum_out),
+ .overflow(REF_overflow)
+ );
+
+ macc2_uut uut (
+ .clk(clk),
+ .ce(ce),
+ .rst(rst),
+ .a(a),
+ .b(b),
+ .accum_out(accum_out),
+ .overflow(overflow)
+ );
+endmodule
diff --git a/tests/xilinx/mul_unsigned.v b/tests/xilinx/mul_unsigned.v
new file mode 100644
index 000000000..e3713a642
--- /dev/null
+++ b/tests/xilinx/mul_unsigned.v
@@ -0,0 +1,30 @@
+/*
+Example from: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug901-vivado-synthesis.pdf [p. 89].
+*/
+
+// Unsigned 16x24-bit Multiplier
+// 1 latency stage on operands
+// 3 latency stage after the multiplication
+// File: multipliers2.v
+//
+module mul_unsigned (clk, A, B, RES);
+parameter WIDTHA = /*16*/ 6;
+parameter WIDTHB = /*24*/ 9;
+input clk;
+input [WIDTHA-1:0] A;
+input [WIDTHB-1:0] B;
+output [WIDTHA+WIDTHB-1:0] RES;
+reg [WIDTHA-1:0] rA;
+reg [WIDTHB-1:0] rB;
+reg [WIDTHA+WIDTHB-1:0] M [3:0];
+integer i;
+always @(posedge clk)
+ begin
+ rA <= A;
+ rB <= B;
+ M[0] <= rA * rB;
+ for (i = 0; i < 3; i = i+1)
+ M[i+1] <= M[i];
+ end
+assign RES = M[3];
+endmodule
diff --git a/tests/xilinx/mul_unsigned.ys b/tests/xilinx/mul_unsigned.ys
new file mode 100644
index 000000000..77990bd68
--- /dev/null
+++ b/tests/xilinx/mul_unsigned.ys
@@ -0,0 +1,10 @@
+read_verilog mul_unsigned.v
+proc
+hierarchy -top mul_unsigned
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mul_unsigned # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:DSP48E1
+select -assert-count 30 t:FDRE
+select -assert-none t:DSP48E1 t:FDRE t:BUFG %% t:* %D