clangformat
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
20aa0a0eed
commit
9c52afcf5f
@ -579,10 +579,7 @@ struct BaseCtx
|
|||||||
|
|
||||||
const Context *getCtx() const { return reinterpret_cast<const Context *>(this); }
|
const Context *getCtx() const { return reinterpret_cast<const Context *>(this); }
|
||||||
|
|
||||||
const char *nameOf(IdString name) const
|
const char *nameOf(IdString name) const { return name.c_str(this); }
|
||||||
{
|
|
||||||
return name.c_str(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T> const char *nameOf(const T *obj) const
|
template <typename T> const char *nameOf(const T *obj) const
|
||||||
{
|
{
|
||||||
|
@ -37,7 +37,8 @@ wirelen_t get_net_metric(const Context *ctx, const NetInfo *net, MetricType type
|
|||||||
if (driver_gb)
|
if (driver_gb)
|
||||||
return 0;
|
return 0;
|
||||||
int clock_count;
|
int clock_count;
|
||||||
bool timing_driven = ctx->timing_driven && type == MetricType::COST && ctx->getPortTimingClass(driver_cell, net->driver.port, clock_count) != TMG_IGNORE;
|
bool timing_driven = ctx->timing_driven && type == MetricType::COST &&
|
||||||
|
ctx->getPortTimingClass(driver_cell, net->driver.port, clock_count) != TMG_IGNORE;
|
||||||
delay_t negative_slack = 0;
|
delay_t negative_slack = 0;
|
||||||
delay_t worst_slack = std::numeric_limits<delay_t>::max();
|
delay_t worst_slack = std::numeric_limits<delay_t>::max();
|
||||||
Loc driver_loc = ctx->getBelLocation(driver_cell->bel);
|
Loc driver_loc = ctx->getBelLocation(driver_cell->bel);
|
||||||
|
@ -34,7 +34,10 @@ struct arc_key
|
|||||||
int user_idx;
|
int user_idx;
|
||||||
|
|
||||||
bool operator==(const arc_key &other) const { return (net_info == other.net_info) && (user_idx == other.user_idx); }
|
bool operator==(const arc_key &other) const { return (net_info == other.net_info) && (user_idx == other.user_idx); }
|
||||||
bool operator<(const arc_key &other) const { return net_info == other.net_info ? user_idx < other.user_idx : net_info->name < other.net_info->name; }
|
bool operator<(const arc_key &other) const
|
||||||
|
{
|
||||||
|
return net_info == other.net_info ? user_idx < other.user_idx : net_info->name < other.net_info->name;
|
||||||
|
}
|
||||||
|
|
||||||
struct Hash
|
struct Hash
|
||||||
{
|
{
|
||||||
@ -375,21 +378,20 @@ struct Router1
|
|||||||
|
|
||||||
if (dst_wire == WireId())
|
if (dst_wire == WireId())
|
||||||
log_error("No wire found for port %s on destination cell %s.\n",
|
log_error("No wire found for port %s on destination cell %s.\n",
|
||||||
ctx->nameOf(net_info->users[user_idx].port),
|
ctx->nameOf(net_info->users[user_idx].port), ctx->nameOf(net_info->users[user_idx].cell));
|
||||||
ctx->nameOf(net_info->users[user_idx].cell));
|
|
||||||
|
|
||||||
if (dst_to_arc.count(dst_wire)) {
|
if (dst_to_arc.count(dst_wire)) {
|
||||||
if (dst_to_arc.at(dst_wire).net_info == net_info)
|
if (dst_to_arc.at(dst_wire).net_info == net_info)
|
||||||
continue;
|
continue;
|
||||||
log_error("Found two arcs with same sink wire %s: %s (%d) vs %s (%d)\n",
|
log_error("Found two arcs with same sink wire %s: %s (%d) vs %s (%d)\n", ctx->nameOfWire(dst_wire),
|
||||||
ctx->nameOfWire(dst_wire), ctx->nameOf(net_info), user_idx,
|
ctx->nameOf(net_info), user_idx, ctx->nameOf(dst_to_arc.at(dst_wire).net_info),
|
||||||
ctx->nameOf(dst_to_arc.at(dst_wire).net_info), dst_to_arc.at(dst_wire).user_idx);
|
dst_to_arc.at(dst_wire).user_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src_to_net.count(dst_wire))
|
if (src_to_net.count(dst_wire))
|
||||||
log_error("Wire %s is used as source and sink in different nets: %s vs %s (%d)\n",
|
log_error("Wire %s is used as source and sink in different nets: %s vs %s (%d)\n",
|
||||||
ctx->nameOfWire(dst_wire), ctx->nameOf(src_to_net.at(dst_wire)),
|
ctx->nameOfWire(dst_wire), ctx->nameOf(src_to_net.at(dst_wire)), ctx->nameOf(net_info),
|
||||||
ctx->nameOf(net_info), user_idx);
|
user_idx);
|
||||||
|
|
||||||
arc_key arc;
|
arc_key arc;
|
||||||
arc.net_info = net_info;
|
arc.net_info = net_info;
|
||||||
@ -950,8 +952,7 @@ bool Context::checkRoutedDesign() const
|
|||||||
|
|
||||||
for (WireId w : dangling_wires) {
|
for (WireId w : dangling_wires) {
|
||||||
if (logged_wires.count(w) == 0)
|
if (logged_wires.count(w) == 0)
|
||||||
log(" loop: %s -> %s\n",
|
log(" loop: %s -> %s\n", ctx->nameOfWire(ctx->getPipSrcWire(net_info->wires.at(w).pip)),
|
||||||
ctx->nameOfWire(ctx->getPipSrcWire(net_info->wires.at(w).pip)),
|
|
||||||
ctx->nameOfWire(w));
|
ctx->nameOfWire(w));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,9 +237,11 @@ struct Timing
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ctx->force)
|
if (ctx->force)
|
||||||
log_warning("timing analysis failed due to presence of combinatorial loops, incomplete specification of timing ports, etc.\n");
|
log_warning("timing analysis failed due to presence of combinatorial loops, incomplete specification "
|
||||||
|
"of timing ports, etc.\n");
|
||||||
else
|
else
|
||||||
log_error("timing analysis failed due to presence of combinatorial loops, incomplete specification of timing ports, etc.\n");
|
log_error("timing analysis failed due to presence of combinatorial loops, incomplete specification of "
|
||||||
|
"timing ports, etc.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Go forwards topographically to find the maximum arrival time and max path length for each net
|
// Go forwards topographically to find the maximum arrival time and max path length for each net
|
||||||
@ -639,7 +641,8 @@ void timing_analysis(Context *ctx, bool print_histogram, bool print_fmax, bool p
|
|||||||
auto driver_wire = ctx->getNetinfoSourceWire(net);
|
auto driver_wire = ctx->getNetinfoSourceWire(net);
|
||||||
auto sink_wire = ctx->getNetinfoSinkWire(net, *sink);
|
auto sink_wire = ctx->getNetinfoSinkWire(net, *sink);
|
||||||
log_info(" prediction: %f ns estimate: %f ns\n",
|
log_info(" prediction: %f ns estimate: %f ns\n",
|
||||||
ctx->getDelayNS(ctx->predictDelay(net, *sink)), ctx->getDelayNS(ctx->estimateDelay(driver_wire, sink_wire)));
|
ctx->getDelayNS(ctx->predictDelay(net, *sink)),
|
||||||
|
ctx->getDelayNS(ctx->estimateDelay(driver_wire, sink_wire)));
|
||||||
auto cursor = sink_wire;
|
auto cursor = sink_wire;
|
||||||
delay_t delay;
|
delay_t delay;
|
||||||
while (driver_wire != cursor) {
|
while (driver_wire != cursor) {
|
||||||
@ -648,7 +651,8 @@ void timing_analysis(Context *ctx, bool print_histogram, bool print_fmax, bool p
|
|||||||
auto pip = it->second.pip;
|
auto pip = it->second.pip;
|
||||||
NPNR_ASSERT(pip != PipId());
|
NPNR_ASSERT(pip != PipId());
|
||||||
delay = ctx->getPipDelay(pip).maxDelay();
|
delay = ctx->getPipDelay(pip).maxDelay();
|
||||||
log_info(" %1.3f %s\n", ctx->getDelayNS(delay), ctx->getPipName(pip).c_str(ctx));
|
log_info(" %1.3f %s\n", ctx->getDelayNS(delay),
|
||||||
|
ctx->getPipName(pip).c_str(ctx));
|
||||||
cursor = ctx->getPipSrcWire(pip);
|
cursor = ctx->getPipSrcWire(pip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -658,9 +662,12 @@ void timing_analysis(Context *ctx, bool print_histogram, bool print_fmax, bool p
|
|||||||
|
|
||||||
for (auto &clock : clock_reports) {
|
for (auto &clock : clock_reports) {
|
||||||
log_break();
|
log_break();
|
||||||
std::string start = clock.second.first.start.edge == FALLING_EDGE ? std::string("negedge") : std::string("posedge");
|
std::string start =
|
||||||
std::string end = clock.second.first.end.edge == FALLING_EDGE ? std::string("negedge") : std::string("posedge");
|
clock.second.first.start.edge == FALLING_EDGE ? std::string("negedge") : std::string("posedge");
|
||||||
log_info("Critical path report for clock '%s' (%s -> %s):\n", clock.first.c_str(ctx), start.c_str(), end.c_str());
|
std::string end =
|
||||||
|
clock.second.first.end.edge == FALLING_EDGE ? std::string("negedge") : std::string("posedge");
|
||||||
|
log_info("Critical path report for clock '%s' (%s -> %s):\n", clock.first.c_str(ctx), start.c_str(),
|
||||||
|
end.c_str());
|
||||||
auto &crit_path = clock.second.second.ports;
|
auto &crit_path = clock.second.second.ports;
|
||||||
print_path_report(clock.second.first, crit_path);
|
print_path_report(clock.second.first, crit_path);
|
||||||
}
|
}
|
||||||
@ -684,10 +691,12 @@ void timing_analysis(Context *ctx, bool print_histogram, bool print_fmax, bool p
|
|||||||
const int width = max_width - clock_name.size();
|
const int width = max_width - clock_name.size();
|
||||||
if (ctx->nets.at(clock.first)->clkconstr) {
|
if (ctx->nets.at(clock.first)->clkconstr) {
|
||||||
float target = 1000 / ctx->getDelayNS(ctx->nets.at(clock.first)->clkconstr->period.minDelay());
|
float target = 1000 / ctx->getDelayNS(ctx->nets.at(clock.first)->clkconstr->period.minDelay());
|
||||||
log_info("Max frequency for clock %*s'%s': %.02f MHz (%s at %.02f MHz)\n", width, "", clock_name.c_str(),
|
log_info("Max frequency for clock %*s'%s': %.02f MHz (%s at %.02f MHz)\n", width, "",
|
||||||
clock_fmax[clock.first], (target < clock_fmax[clock.first]) ? "PASS" : "FAIL", target);
|
clock_name.c_str(), clock_fmax[clock.first],
|
||||||
|
(target < clock_fmax[clock.first]) ? "PASS" : "FAIL", target);
|
||||||
} else {
|
} else {
|
||||||
log_info("Max frequency for clock %*s'%s': %.02f MHz\n", width, "", clock_name.c_str(), clock_fmax[clock.first]);
|
log_info("Max frequency for clock %*s'%s': %.02f MHz\n", width, "", clock_name.c_str(),
|
||||||
|
clock_fmax[clock.first]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto &eclock : empty_clocks) {
|
for (auto &eclock : empty_clocks) {
|
||||||
|
@ -19,15 +19,15 @@
|
|||||||
|
|
||||||
#include "bitstream.h"
|
#include "bitstream.h"
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <streambuf>
|
#include <streambuf>
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "pio.h"
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "pio.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#define fmt_str(x) (static_cast<const std::ostringstream &>(std::ostringstream() << x).str())
|
#define fmt_str(x) (static_cast<const std::ostringstream &>(std::ostringstream() << x).str())
|
||||||
|
@ -1,64 +1,110 @@
|
|||||||
tg.config.add_word("DCU.CH0_AUTO_CALIB_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_AUTO_CALIB_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_AUTO_CALIB_EN",
|
||||||
tg.config.add_word("DCU.CH0_AUTO_FACQ_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_AUTO_FACQ_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_AUTO_CALIB_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_BAND_THRESHOLD", parse_config_str(str_or_default(ci->params, ctx->id("CH0_BAND_THRESHOLD"), "0"), 6));
|
tg.config.add_word("DCU.CH0_AUTO_FACQ_EN",
|
||||||
tg.config.add_word("DCU.CH0_CALIB_CK_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CALIB_CK_MODE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_AUTO_FACQ_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_CC_MATCH_1", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_1"), "0"), 10));
|
tg.config.add_word("DCU.CH0_BAND_THRESHOLD",
|
||||||
tg.config.add_word("DCU.CH0_CC_MATCH_2", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_2"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_BAND_THRESHOLD"), "0"), 6));
|
||||||
tg.config.add_word("DCU.CH0_CC_MATCH_3", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_3"), "0"), 10));
|
tg.config.add_word("DCU.CH0_CALIB_CK_MODE",
|
||||||
tg.config.add_word("DCU.CH0_CC_MATCH_4", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_4"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CALIB_CK_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_CDR_CNT4SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CDR_CNT4SEL"), "0"), 2));
|
tg.config.add_word("DCU.CH0_CC_MATCH_1",
|
||||||
tg.config.add_word("DCU.CH0_CDR_CNT8SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CDR_CNT8SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_1"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH0_CTC_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_CTC_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH0_CC_MATCH_2",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_2"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH0_CC_MATCH_3",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_3"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH0_CC_MATCH_4",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CC_MATCH_4"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH0_CDR_CNT4SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CDR_CNT4SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_CDR_CNT8SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CDR_CNT8SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_CTC_BYPASS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_CTC_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_DCOATDCFG", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOATDCFG"), "0"), 2));
|
tg.config.add_word("DCU.CH0_DCOATDCFG", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOATDCFG"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_DCOATDDLY", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOATDDLY"), "0"), 2));
|
tg.config.add_word("DCU.CH0_DCOATDDLY", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOATDDLY"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_DCOBYPSATD", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOBYPSATD"), "0"), 1));
|
tg.config.add_word("DCU.CH0_DCOBYPSATD",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOBYPSATD"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_DCOCALDIV", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOCALDIV"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOCALDIV", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOCALDIV"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCOCTLGI", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOCTLGI"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOCTLGI", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOCTLGI"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCODISBDAVOID", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCODISBDAVOID"), "0"), 1));
|
tg.config.add_word("DCU.CH0_DCODISBDAVOID",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCODISBDAVOID"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_DCOFLTDAC", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOFLTDAC"), "0"), 2));
|
tg.config.add_word("DCU.CH0_DCOFLTDAC", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOFLTDAC"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_DCOFTNRG", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOFTNRG"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOFTNRG", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOFTNRG"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCOIOSTUNE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOIOSTUNE"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOIOSTUNE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOIOSTUNE"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCOITUNE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOITUNE"), "0"), 2));
|
tg.config.add_word("DCU.CH0_DCOITUNE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOITUNE"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_DCOITUNE4LSB", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOITUNE4LSB"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOITUNE4LSB",
|
||||||
tg.config.add_word("DCU.CH0_DCOIUPDNX2", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOIUPDNX2"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOITUNE4LSB"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCONUOFLSB", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCONUOFLSB"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOIUPDNX2",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOIUPDNX2"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_DCONUOFLSB",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCONUOFLSB"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCOSCALEI", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOSCALEI"), "0"), 2));
|
tg.config.add_word("DCU.CH0_DCOSCALEI", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOSCALEI"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_DCOSTARTVAL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOSTARTVAL"), "0"), 3));
|
tg.config.add_word("DCU.CH0_DCOSTARTVAL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOSTARTVAL"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_DCOSTEP", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOSTEP"), "0"), 2));
|
tg.config.add_word("DCU.CH0_DCOSTEP", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DCOSTEP"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_DEC_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_DEC_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH0_DEC_BYPASS",
|
||||||
tg.config.add_word("DCU.CH0_ENABLE_CG_ALIGN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_ENABLE_CG_ALIGN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_DEC_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_ENC_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_ENC_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH0_ENABLE_CG_ALIGN",
|
||||||
tg.config.add_word("DCU.CH0_FF_RX_F_CLK_DIS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_RX_F_CLK_DIS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_ENABLE_CG_ALIGN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_FF_RX_H_CLK_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_RX_H_CLK_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_ENC_BYPASS",
|
||||||
tg.config.add_word("DCU.CH0_FF_TX_F_CLK_DIS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_TX_F_CLK_DIS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_ENC_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_FF_TX_H_CLK_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_TX_H_CLK_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_FF_RX_F_CLK_DIS",
|
||||||
tg.config.add_word("DCU.CH0_GE_AN_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_GE_AN_ENABLE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_RX_F_CLK_DIS"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_FF_RX_H_CLK_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_RX_H_CLK_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_FF_TX_F_CLK_DIS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_TX_F_CLK_DIS"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_FF_TX_H_CLK_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_FF_TX_H_CLK_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_GE_AN_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_GE_AN_ENABLE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_INVERT_RX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_INVERT_RX"), "0"), 1));
|
tg.config.add_word("DCU.CH0_INVERT_RX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_INVERT_RX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_INVERT_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_INVERT_TX"), "0"), 1));
|
tg.config.add_word("DCU.CH0_INVERT_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_INVERT_TX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_LDR_CORE2TX_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_LDR_CORE2TX_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH0_LDR_CORE2TX_SEL",
|
||||||
tg.config.add_word("DCU.CH0_LDR_RX2CORE_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_LDR_RX2CORE_SEL"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_LDR_CORE2TX_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_LEQ_OFFSET_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_LEQ_OFFSET_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH0_LDR_RX2CORE_SEL",
|
||||||
tg.config.add_word("DCU.CH0_LEQ_OFFSET_TRIM", parse_config_str(str_or_default(ci->params, ctx->id("CH0_LEQ_OFFSET_TRIM"), "0"), 3));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_LDR_RX2CORE_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_LSM_DISABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_LSM_DISABLE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_LEQ_OFFSET_SEL",
|
||||||
tg.config.add_word("DCU.CH0_MATCH_2_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_MATCH_2_ENABLE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_LEQ_OFFSET_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_MATCH_4_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_MATCH_4_ENABLE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_LEQ_OFFSET_TRIM",
|
||||||
tg.config.add_word("DCU.CH0_MIN_IPG_CNT", parse_config_str(str_or_default(ci->params, ctx->id("CH0_MIN_IPG_CNT"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_LEQ_OFFSET_TRIM"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_PCIE_EI_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PCIE_EI_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_LSM_DISABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_LSM_DISABLE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_MATCH_2_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_MATCH_2_ENABLE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_MATCH_4_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_MATCH_4_ENABLE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_MIN_IPG_CNT",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_MIN_IPG_CNT"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_PCIE_EI_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_PCIE_EI_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_PCIE_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PCIE_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_PCIE_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PCIE_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_PCS_DET_TIME_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PCS_DET_TIME_SEL"), "0"), 2));
|
tg.config.add_word("DCU.CH0_PCS_DET_TIME_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_PCS_DET_TIME_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_PDEN_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PDEN_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH0_PDEN_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PDEN_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_PRBS_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PRBS_ENABLE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_PRBS_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_PRBS_ENABLE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_PRBS_LOCK", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PRBS_LOCK"), "0"), 1));
|
tg.config.add_word("DCU.CH0_PRBS_LOCK", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PRBS_LOCK"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_PRBS_SELECTION", parse_config_str(str_or_default(ci->params, ctx->id("CH0_PRBS_SELECTION"), "0"), 1));
|
tg.config.add_word("DCU.CH0_PRBS_SELECTION",
|
||||||
tg.config.add_word("DCU.CH0_RATE_MODE_RX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RATE_MODE_RX"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_PRBS_SELECTION"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_RATE_MODE_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RATE_MODE_TX"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RATE_MODE_RX",
|
||||||
tg.config.add_word("DCU.CH0_RCV_DCC_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RCV_DCC_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RATE_MODE_RX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_REG_BAND_OFFSET", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_BAND_OFFSET"), "0"), 4));
|
tg.config.add_word("DCU.CH0_RATE_MODE_TX",
|
||||||
tg.config.add_word("DCU.CH0_REG_BAND_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_BAND_SEL"), "0"), 6));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RATE_MODE_TX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_REG_IDAC_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_IDAC_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RCV_DCC_EN",
|
||||||
tg.config.add_word("DCU.CH0_REG_IDAC_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_IDAC_SEL"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RCV_DCC_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_REG_BAND_OFFSET",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_BAND_OFFSET"), "0"), 4));
|
||||||
|
tg.config.add_word("DCU.CH0_REG_BAND_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_BAND_SEL"), "0"), 6));
|
||||||
|
tg.config.add_word("DCU.CH0_REG_IDAC_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_IDAC_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_REG_IDAC_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_REG_IDAC_SEL"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH0_REQ_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REQ_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_REQ_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REQ_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_REQ_LVL_SET", parse_config_str(str_or_default(ci->params, ctx->id("CH0_REQ_LVL_SET"), "0"), 2));
|
tg.config.add_word("DCU.CH0_REQ_LVL_SET",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_REQ_LVL_SET"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_RIO_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RIO_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RIO_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RIO_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_RLOS_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RLOS_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RLOS_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RLOS_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_RPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RPWDNB"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RPWDNB"), "0"), 1));
|
||||||
@ -66,107 +112,186 @@ tg.config.add_word("DCU.CH0_RTERM_RX", parse_config_str(str_or_default(ci->param
|
|||||||
tg.config.add_word("DCU.CH0_RTERM_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RTERM_TX"), "0"), 5));
|
tg.config.add_word("DCU.CH0_RTERM_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RTERM_TX"), "0"), 5));
|
||||||
tg.config.add_word("DCU.CH0_RXIN_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RXIN_CM"), "0"), 2));
|
tg.config.add_word("DCU.CH0_RXIN_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RXIN_CM"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_RXTERM_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RXTERM_CM"), "0"), 2));
|
tg.config.add_word("DCU.CH0_RXTERM_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RXTERM_CM"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_RX_DCO_CK_DIV", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_DCO_CK_DIV"), "0"), 3));
|
tg.config.add_word("DCU.CH0_RX_DCO_CK_DIV",
|
||||||
tg.config.add_word("DCU.CH0_RX_DIV11_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_DIV11_SEL"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_DCO_CK_DIV"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_RX_GEAR_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_GEAR_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RX_DIV11_SEL",
|
||||||
tg.config.add_word("DCU.CH0_RX_GEAR_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_GEAR_MODE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_DIV11_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_RX_LOS_CEQ", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_CEQ"), "0"), 2));
|
tg.config.add_word("DCU.CH0_RX_GEAR_BYPASS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_GEAR_BYPASS"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_RX_GEAR_MODE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_GEAR_MODE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_RX_LOS_CEQ",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_CEQ"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_RX_LOS_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RX_LOS_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_RX_LOS_HYST_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_HYST_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_RX_LOS_HYST_EN",
|
||||||
tg.config.add_word("DCU.CH0_RX_LOS_LVL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_LVL"), "0"), 3));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_HYST_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_RX_RATE_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_RATE_SEL"), "0"), 4));
|
tg.config.add_word("DCU.CH0_RX_LOS_LVL",
|
||||||
tg.config.add_word("DCU.CH0_RX_SB_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_SB_BYPASS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_LOS_LVL"), "0"), 3));
|
||||||
|
tg.config.add_word("DCU.CH0_RX_RATE_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_RATE_SEL"), "0"), 4));
|
||||||
|
tg.config.add_word("DCU.CH0_RX_SB_BYPASS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_RX_SB_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_SB_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_SB_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH0_SB_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_SB_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_SEL_SD_RX_CLK", parse_config_str(str_or_default(ci->params, ctx->id("CH0_SEL_SD_RX_CLK"), "0"), 1));
|
tg.config.add_word("DCU.CH0_SEL_SD_RX_CLK",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_DAT_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_DAT_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_SEL_SD_RX_CLK"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_POST_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_POST_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_TDRV_DAT_SEL",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_PRE_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_PRE_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_DAT_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE0_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE0_CUR"), "0"), 3));
|
tg.config.add_word("DCU.CH0_TDRV_POST_EN",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE0_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE0_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_POST_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE1_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE1_CUR"), "0"), 3));
|
tg.config.add_word("DCU.CH0_TDRV_PRE_EN",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE1_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE1_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_PRE_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE2_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE2_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH0_TDRV_SLICE0_CUR",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE2_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE2_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE0_CUR"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE3_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE3_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH0_TDRV_SLICE0_SEL",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE3_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE3_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE0_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE4_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE4_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH0_TDRV_SLICE1_CUR",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE4_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE4_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE1_CUR"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE5_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE5_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH0_TDRV_SLICE1_SEL",
|
||||||
tg.config.add_word("DCU.CH0_TDRV_SLICE5_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE5_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE1_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE2_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE2_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE2_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE2_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE3_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE3_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE3_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE3_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE4_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE4_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE4_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE4_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE5_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE5_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH0_TDRV_SLICE5_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TDRV_SLICE5_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_TPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TPWDNB"), "0"), 1));
|
tg.config.add_word("DCU.CH0_TPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TPWDNB"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_TX_CM_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_CM_SEL"), "0"), 2));
|
tg.config.add_word("DCU.CH0_TX_CM_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_CM_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH0_TX_DIV11_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_DIV11_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH0_TX_DIV11_SEL",
|
||||||
tg.config.add_word("DCU.CH0_TX_GEAR_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_GEAR_BYPASS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_DIV11_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_TX_GEAR_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_GEAR_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_TX_GEAR_BYPASS",
|
||||||
tg.config.add_word("DCU.CH0_TX_POST_SIGN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_POST_SIGN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_GEAR_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_TX_PRE_SIGN", parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_PRE_SIGN"), "0"), 1));
|
tg.config.add_word("DCU.CH0_TX_GEAR_MODE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_GEAR_MODE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_TX_POST_SIGN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_POST_SIGN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH0_TX_PRE_SIGN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_TX_PRE_SIGN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_UC_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_UC_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_UC_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_UC_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_UDF_COMMA_A", parse_config_str(str_or_default(ci->params, ctx->id("CH0_UDF_COMMA_A"), "0"), 10));
|
tg.config.add_word("DCU.CH0_UDF_COMMA_A",
|
||||||
tg.config.add_word("DCU.CH0_UDF_COMMA_B", parse_config_str(str_or_default(ci->params, ctx->id("CH0_UDF_COMMA_B"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_UDF_COMMA_A"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH0_UDF_COMMA_MASK", parse_config_str(str_or_default(ci->params, ctx->id("CH0_UDF_COMMA_MASK"), "0"), 10));
|
tg.config.add_word("DCU.CH0_UDF_COMMA_B",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_UDF_COMMA_B"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH0_UDF_COMMA_MASK",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH0_UDF_COMMA_MASK"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH0_WA_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_WA_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH0_WA_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH0_WA_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH0_WA_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_WA_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH0_WA_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH0_WA_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_AUTO_CALIB_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_AUTO_CALIB_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_AUTO_CALIB_EN",
|
||||||
tg.config.add_word("DCU.CH1_AUTO_FACQ_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_AUTO_FACQ_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_AUTO_CALIB_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_BAND_THRESHOLD", parse_config_str(str_or_default(ci->params, ctx->id("CH1_BAND_THRESHOLD"), "0"), 6));
|
tg.config.add_word("DCU.CH1_AUTO_FACQ_EN",
|
||||||
tg.config.add_word("DCU.CH1_CALIB_CK_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CALIB_CK_MODE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_AUTO_FACQ_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_CC_MATCH_1", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_1"), "0"), 10));
|
tg.config.add_word("DCU.CH1_BAND_THRESHOLD",
|
||||||
tg.config.add_word("DCU.CH1_CC_MATCH_2", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_2"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_BAND_THRESHOLD"), "0"), 6));
|
||||||
tg.config.add_word("DCU.CH1_CC_MATCH_3", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_3"), "0"), 10));
|
tg.config.add_word("DCU.CH1_CALIB_CK_MODE",
|
||||||
tg.config.add_word("DCU.CH1_CC_MATCH_4", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_4"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CALIB_CK_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_CDR_CNT4SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CDR_CNT4SEL"), "0"), 2));
|
tg.config.add_word("DCU.CH1_CC_MATCH_1",
|
||||||
tg.config.add_word("DCU.CH1_CDR_CNT8SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CDR_CNT8SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_1"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH1_CTC_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_CTC_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH1_CC_MATCH_2",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_2"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH1_CC_MATCH_3",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_3"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH1_CC_MATCH_4",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CC_MATCH_4"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH1_CDR_CNT4SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CDR_CNT4SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_CDR_CNT8SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CDR_CNT8SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_CTC_BYPASS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_CTC_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_DCOATDCFG", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOATDCFG"), "0"), 2));
|
tg.config.add_word("DCU.CH1_DCOATDCFG", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOATDCFG"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_DCOATDDLY", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOATDDLY"), "0"), 2));
|
tg.config.add_word("DCU.CH1_DCOATDDLY", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOATDDLY"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_DCOBYPSATD", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOBYPSATD"), "0"), 1));
|
tg.config.add_word("DCU.CH1_DCOBYPSATD",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOBYPSATD"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_DCOCALDIV", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOCALDIV"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOCALDIV", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOCALDIV"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCOCTLGI", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOCTLGI"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOCTLGI", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOCTLGI"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCODISBDAVOID", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCODISBDAVOID"), "0"), 1));
|
tg.config.add_word("DCU.CH1_DCODISBDAVOID",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCODISBDAVOID"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_DCOFLTDAC", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOFLTDAC"), "0"), 2));
|
tg.config.add_word("DCU.CH1_DCOFLTDAC", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOFLTDAC"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_DCOFTNRG", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOFTNRG"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOFTNRG", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOFTNRG"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCOIOSTUNE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOIOSTUNE"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOIOSTUNE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOIOSTUNE"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCOITUNE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOITUNE"), "0"), 2));
|
tg.config.add_word("DCU.CH1_DCOITUNE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOITUNE"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_DCOITUNE4LSB", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOITUNE4LSB"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOITUNE4LSB",
|
||||||
tg.config.add_word("DCU.CH1_DCOIUPDNX2", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOIUPDNX2"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOITUNE4LSB"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCONUOFLSB", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCONUOFLSB"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOIUPDNX2",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOIUPDNX2"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_DCONUOFLSB",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCONUOFLSB"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCOSCALEI", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOSCALEI"), "0"), 2));
|
tg.config.add_word("DCU.CH1_DCOSCALEI", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOSCALEI"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_DCOSTARTVAL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOSTARTVAL"), "0"), 3));
|
tg.config.add_word("DCU.CH1_DCOSTARTVAL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOSTARTVAL"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_DCOSTEP", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOSTEP"), "0"), 2));
|
tg.config.add_word("DCU.CH1_DCOSTEP", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DCOSTEP"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_DEC_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_DEC_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH1_DEC_BYPASS",
|
||||||
tg.config.add_word("DCU.CH1_ENABLE_CG_ALIGN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_ENABLE_CG_ALIGN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_DEC_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_ENC_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_ENC_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH1_ENABLE_CG_ALIGN",
|
||||||
tg.config.add_word("DCU.CH1_FF_RX_F_CLK_DIS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_RX_F_CLK_DIS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_ENABLE_CG_ALIGN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_FF_RX_H_CLK_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_RX_H_CLK_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_ENC_BYPASS",
|
||||||
tg.config.add_word("DCU.CH1_FF_TX_F_CLK_DIS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_TX_F_CLK_DIS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_ENC_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_FF_TX_H_CLK_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_TX_H_CLK_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_FF_RX_F_CLK_DIS",
|
||||||
tg.config.add_word("DCU.CH1_GE_AN_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_GE_AN_ENABLE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_RX_F_CLK_DIS"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_FF_RX_H_CLK_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_RX_H_CLK_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_FF_TX_F_CLK_DIS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_TX_F_CLK_DIS"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_FF_TX_H_CLK_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_FF_TX_H_CLK_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_GE_AN_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_GE_AN_ENABLE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_INVERT_RX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_INVERT_RX"), "0"), 1));
|
tg.config.add_word("DCU.CH1_INVERT_RX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_INVERT_RX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_INVERT_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_INVERT_TX"), "0"), 1));
|
tg.config.add_word("DCU.CH1_INVERT_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_INVERT_TX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_LDR_CORE2TX_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_LDR_CORE2TX_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH1_LDR_CORE2TX_SEL",
|
||||||
tg.config.add_word("DCU.CH1_LDR_RX2CORE_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_LDR_RX2CORE_SEL"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_LDR_CORE2TX_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_LEQ_OFFSET_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_LEQ_OFFSET_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH1_LDR_RX2CORE_SEL",
|
||||||
tg.config.add_word("DCU.CH1_LEQ_OFFSET_TRIM", parse_config_str(str_or_default(ci->params, ctx->id("CH1_LEQ_OFFSET_TRIM"), "0"), 3));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_LDR_RX2CORE_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_LSM_DISABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_LSM_DISABLE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_LEQ_OFFSET_SEL",
|
||||||
tg.config.add_word("DCU.CH1_MATCH_2_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_MATCH_2_ENABLE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_LEQ_OFFSET_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_MATCH_4_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_MATCH_4_ENABLE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_LEQ_OFFSET_TRIM",
|
||||||
tg.config.add_word("DCU.CH1_MIN_IPG_CNT", parse_config_str(str_or_default(ci->params, ctx->id("CH1_MIN_IPG_CNT"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_LEQ_OFFSET_TRIM"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_PCIE_EI_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PCIE_EI_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_LSM_DISABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_LSM_DISABLE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_MATCH_2_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_MATCH_2_ENABLE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_MATCH_4_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_MATCH_4_ENABLE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_MIN_IPG_CNT",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_MIN_IPG_CNT"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_PCIE_EI_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_PCIE_EI_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_PCIE_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PCIE_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_PCIE_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PCIE_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_PCS_DET_TIME_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PCS_DET_TIME_SEL"), "0"), 2));
|
tg.config.add_word("DCU.CH1_PCS_DET_TIME_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_PCS_DET_TIME_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_PDEN_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PDEN_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH1_PDEN_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PDEN_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_PRBS_ENABLE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PRBS_ENABLE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_PRBS_ENABLE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_PRBS_ENABLE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_PRBS_LOCK", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PRBS_LOCK"), "0"), 1));
|
tg.config.add_word("DCU.CH1_PRBS_LOCK", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PRBS_LOCK"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_PRBS_SELECTION", parse_config_str(str_or_default(ci->params, ctx->id("CH1_PRBS_SELECTION"), "0"), 1));
|
tg.config.add_word("DCU.CH1_PRBS_SELECTION",
|
||||||
tg.config.add_word("DCU.CH1_RATE_MODE_RX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RATE_MODE_RX"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_PRBS_SELECTION"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_RATE_MODE_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RATE_MODE_TX"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RATE_MODE_RX",
|
||||||
tg.config.add_word("DCU.CH1_RCV_DCC_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RCV_DCC_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RATE_MODE_RX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_REG_BAND_OFFSET", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_BAND_OFFSET"), "0"), 4));
|
tg.config.add_word("DCU.CH1_RATE_MODE_TX",
|
||||||
tg.config.add_word("DCU.CH1_REG_BAND_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_BAND_SEL"), "0"), 6));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RATE_MODE_TX"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_REG_IDAC_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_IDAC_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RCV_DCC_EN",
|
||||||
tg.config.add_word("DCU.CH1_REG_IDAC_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_IDAC_SEL"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RCV_DCC_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_REG_BAND_OFFSET",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_BAND_OFFSET"), "0"), 4));
|
||||||
|
tg.config.add_word("DCU.CH1_REG_BAND_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_BAND_SEL"), "0"), 6));
|
||||||
|
tg.config.add_word("DCU.CH1_REG_IDAC_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_IDAC_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_REG_IDAC_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_REG_IDAC_SEL"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH1_REQ_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REQ_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_REQ_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REQ_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_REQ_LVL_SET", parse_config_str(str_or_default(ci->params, ctx->id("CH1_REQ_LVL_SET"), "0"), 2));
|
tg.config.add_word("DCU.CH1_REQ_LVL_SET",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_REQ_LVL_SET"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_RIO_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RIO_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RIO_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RIO_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_RLOS_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RLOS_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RLOS_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RLOS_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_RPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RPWDNB"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RPWDNB"), "0"), 1));
|
||||||
@ -174,49 +299,85 @@ tg.config.add_word("DCU.CH1_RTERM_RX", parse_config_str(str_or_default(ci->param
|
|||||||
tg.config.add_word("DCU.CH1_RTERM_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RTERM_TX"), "0"), 5));
|
tg.config.add_word("DCU.CH1_RTERM_TX", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RTERM_TX"), "0"), 5));
|
||||||
tg.config.add_word("DCU.CH1_RXIN_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RXIN_CM"), "0"), 2));
|
tg.config.add_word("DCU.CH1_RXIN_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RXIN_CM"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_RXTERM_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RXTERM_CM"), "0"), 2));
|
tg.config.add_word("DCU.CH1_RXTERM_CM", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RXTERM_CM"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_RX_DCO_CK_DIV", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_DCO_CK_DIV"), "0"), 3));
|
tg.config.add_word("DCU.CH1_RX_DCO_CK_DIV",
|
||||||
tg.config.add_word("DCU.CH1_RX_DIV11_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_DIV11_SEL"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_DCO_CK_DIV"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_RX_GEAR_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_GEAR_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RX_DIV11_SEL",
|
||||||
tg.config.add_word("DCU.CH1_RX_GEAR_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_GEAR_MODE"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_DIV11_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_RX_LOS_CEQ", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_CEQ"), "0"), 2));
|
tg.config.add_word("DCU.CH1_RX_GEAR_BYPASS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_GEAR_BYPASS"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_RX_GEAR_MODE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_GEAR_MODE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_RX_LOS_CEQ",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_CEQ"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_RX_LOS_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RX_LOS_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_RX_LOS_HYST_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_HYST_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_RX_LOS_HYST_EN",
|
||||||
tg.config.add_word("DCU.CH1_RX_LOS_LVL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_LVL"), "0"), 3));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_HYST_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_RX_RATE_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_RATE_SEL"), "0"), 4));
|
tg.config.add_word("DCU.CH1_RX_LOS_LVL",
|
||||||
tg.config.add_word("DCU.CH1_RX_SB_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_SB_BYPASS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_LOS_LVL"), "0"), 3));
|
||||||
|
tg.config.add_word("DCU.CH1_RX_RATE_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_RATE_SEL"), "0"), 4));
|
||||||
|
tg.config.add_word("DCU.CH1_RX_SB_BYPASS",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_RX_SB_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_SB_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_SB_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH1_SB_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_SB_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_SEL_SD_RX_CLK", parse_config_str(str_or_default(ci->params, ctx->id("CH1_SEL_SD_RX_CLK"), "0"), 1));
|
tg.config.add_word("DCU.CH1_SEL_SD_RX_CLK",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_DAT_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_DAT_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_SEL_SD_RX_CLK"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_POST_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_POST_EN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_TDRV_DAT_SEL",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_PRE_EN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_PRE_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_DAT_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE0_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE0_CUR"), "0"), 3));
|
tg.config.add_word("DCU.CH1_TDRV_POST_EN",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE0_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE0_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_POST_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE1_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE1_CUR"), "0"), 3));
|
tg.config.add_word("DCU.CH1_TDRV_PRE_EN",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE1_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE1_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_PRE_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE2_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE2_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH1_TDRV_SLICE0_CUR",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE2_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE2_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE0_CUR"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE3_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE3_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH1_TDRV_SLICE0_SEL",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE3_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE3_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE0_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE4_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE4_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH1_TDRV_SLICE1_CUR",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE4_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE4_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE1_CUR"), "0"), 3));
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE5_CUR", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE5_CUR"), "0"), 2));
|
tg.config.add_word("DCU.CH1_TDRV_SLICE1_SEL",
|
||||||
tg.config.add_word("DCU.CH1_TDRV_SLICE5_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE5_SEL"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE1_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE2_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE2_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE2_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE2_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE3_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE3_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE3_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE3_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE4_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE4_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE4_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE4_SEL"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE5_CUR",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE5_CUR"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.CH1_TDRV_SLICE5_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TDRV_SLICE5_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_TPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TPWDNB"), "0"), 1));
|
tg.config.add_word("DCU.CH1_TPWDNB", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TPWDNB"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_TX_CM_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_CM_SEL"), "0"), 2));
|
tg.config.add_word("DCU.CH1_TX_CM_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_CM_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.CH1_TX_DIV11_SEL", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_DIV11_SEL"), "0"), 1));
|
tg.config.add_word("DCU.CH1_TX_DIV11_SEL",
|
||||||
tg.config.add_word("DCU.CH1_TX_GEAR_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_GEAR_BYPASS"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_DIV11_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_TX_GEAR_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_GEAR_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_TX_GEAR_BYPASS",
|
||||||
tg.config.add_word("DCU.CH1_TX_POST_SIGN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_POST_SIGN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_GEAR_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_TX_PRE_SIGN", parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_PRE_SIGN"), "0"), 1));
|
tg.config.add_word("DCU.CH1_TX_GEAR_MODE",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_GEAR_MODE"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_TX_POST_SIGN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_POST_SIGN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.CH1_TX_PRE_SIGN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_TX_PRE_SIGN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_UC_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_UC_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_UC_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_UC_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_UDF_COMMA_A", parse_config_str(str_or_default(ci->params, ctx->id("CH1_UDF_COMMA_A"), "0"), 10));
|
tg.config.add_word("DCU.CH1_UDF_COMMA_A",
|
||||||
tg.config.add_word("DCU.CH1_UDF_COMMA_B", parse_config_str(str_or_default(ci->params, ctx->id("CH1_UDF_COMMA_B"), "0"), 10));
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_UDF_COMMA_A"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH1_UDF_COMMA_MASK", parse_config_str(str_or_default(ci->params, ctx->id("CH1_UDF_COMMA_MASK"), "0"), 10));
|
tg.config.add_word("DCU.CH1_UDF_COMMA_B",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_UDF_COMMA_B"), "0"), 10));
|
||||||
|
tg.config.add_word("DCU.CH1_UDF_COMMA_MASK",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("CH1_UDF_COMMA_MASK"), "0"), 10));
|
||||||
tg.config.add_word("DCU.CH1_WA_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_WA_BYPASS"), "0"), 1));
|
tg.config.add_word("DCU.CH1_WA_BYPASS", parse_config_str(str_or_default(ci->params, ctx->id("CH1_WA_BYPASS"), "0"), 1));
|
||||||
tg.config.add_word("DCU.CH1_WA_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_WA_MODE"), "0"), 1));
|
tg.config.add_word("DCU.CH1_WA_MODE", parse_config_str(str_or_default(ci->params, ctx->id("CH1_WA_MODE"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_BITCLK_FROM_ND_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_BITCLK_FROM_ND_EN"), "0"), 1));
|
tg.config.add_word("DCU.D_BITCLK_FROM_ND_EN",
|
||||||
tg.config.add_word("DCU.D_BITCLK_LOCAL_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_BITCLK_LOCAL_EN"), "0"), 1));
|
parse_config_str(str_or_default(ci->params, ctx->id("D_BITCLK_FROM_ND_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_BITCLK_ND_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_BITCLK_ND_EN"), "0"), 1));
|
tg.config.add_word("DCU.D_BITCLK_LOCAL_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_BITCLK_LOCAL_EN"), "0"), 1));
|
||||||
|
tg.config.add_word("DCU.D_BITCLK_ND_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_BITCLK_ND_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_BUS8BIT_SEL", parse_config_str(str_or_default(ci->params, ctx->id("D_BUS8BIT_SEL"), "0"), 1));
|
tg.config.add_word("DCU.D_BUS8BIT_SEL", parse_config_str(str_or_default(ci->params, ctx->id("D_BUS8BIT_SEL"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_CDR_LOL_SET", parse_config_str(str_or_default(ci->params, ctx->id("D_CDR_LOL_SET"), "0"), 2));
|
tg.config.add_word("DCU.D_CDR_LOL_SET", parse_config_str(str_or_default(ci->params, ctx->id("D_CDR_LOL_SET"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_CMUSETBIASI", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETBIASI"), "0"), 2));
|
tg.config.add_word("DCU.D_CMUSETBIASI", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETBIASI"), "0"), 2));
|
||||||
@ -225,12 +386,15 @@ tg.config.add_word("DCU.D_CMUSETI4CPZ", parse_config_str(str_or_default(ci->para
|
|||||||
tg.config.add_word("DCU.D_CMUSETI4VCO", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETI4VCO"), "0"), 2));
|
tg.config.add_word("DCU.D_CMUSETI4VCO", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETI4VCO"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_CMUSETICP4P", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETICP4P"), "0"), 2));
|
tg.config.add_word("DCU.D_CMUSETICP4P", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETICP4P"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_CMUSETICP4Z", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETICP4Z"), "0"), 3));
|
tg.config.add_word("DCU.D_CMUSETICP4Z", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETICP4Z"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_CMUSETINITVCT", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETINITVCT"), "0"), 2));
|
tg.config.add_word("DCU.D_CMUSETINITVCT",
|
||||||
tg.config.add_word("DCU.D_CMUSETISCL4VCO", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETISCL4VCO"), "0"), 3));
|
parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETINITVCT"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.D_CMUSETISCL4VCO",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETISCL4VCO"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_CMUSETP1GM", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETP1GM"), "0"), 3));
|
tg.config.add_word("DCU.D_CMUSETP1GM", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETP1GM"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_CMUSETP2AGM", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETP2AGM"), "0"), 3));
|
tg.config.add_word("DCU.D_CMUSETP2AGM", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETP2AGM"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_CMUSETZGM", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETZGM"), "0"), 3));
|
tg.config.add_word("DCU.D_CMUSETZGM", parse_config_str(str_or_default(ci->params, ctx->id("D_CMUSETZGM"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_DCO_CALIB_TIME_SEL", parse_config_str(str_or_default(ci->params, ctx->id("D_DCO_CALIB_TIME_SEL"), "0"), 2));
|
tg.config.add_word("DCU.D_DCO_CALIB_TIME_SEL",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_DCO_CALIB_TIME_SEL"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_HIGH_MARK", parse_config_str(str_or_default(ci->params, ctx->id("D_HIGH_MARK"), "0"), 4));
|
tg.config.add_word("DCU.D_HIGH_MARK", parse_config_str(str_or_default(ci->params, ctx->id("D_HIGH_MARK"), "0"), 4));
|
||||||
tg.config.add_word("DCU.D_IB_PWDNB", parse_config_str(str_or_default(ci->params, ctx->id("D_IB_PWDNB"), "0"), 1));
|
tg.config.add_word("DCU.D_IB_PWDNB", parse_config_str(str_or_default(ci->params, ctx->id("D_IB_PWDNB"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_ISETLOS", parse_config_str(str_or_default(ci->params, ctx->id("D_ISETLOS"), "0"), 8));
|
tg.config.add_word("DCU.D_ISETLOS", parse_config_str(str_or_default(ci->params, ctx->id("D_ISETLOS"), "0"), 8));
|
||||||
@ -242,13 +406,19 @@ tg.config.add_word("DCU.D_REFCK_MODE", parse_config_str(str_or_default(ci->param
|
|||||||
tg.config.add_word("DCU.D_REQ_ISET", parse_config_str(str_or_default(ci->params, ctx->id("D_REQ_ISET"), "0"), 3));
|
tg.config.add_word("DCU.D_REQ_ISET", parse_config_str(str_or_default(ci->params, ctx->id("D_REQ_ISET"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_RG_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_RG_EN"), "0"), 1));
|
tg.config.add_word("DCU.D_RG_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_RG_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_RG_SET", parse_config_str(str_or_default(ci->params, ctx->id("D_RG_SET"), "0"), 2));
|
tg.config.add_word("DCU.D_RG_SET", parse_config_str(str_or_default(ci->params, ctx->id("D_RG_SET"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_SETICONST_AUX", parse_config_str(str_or_default(ci->params, ctx->id("D_SETICONST_AUX"), "0"), 2));
|
tg.config.add_word("DCU.D_SETICONST_AUX",
|
||||||
tg.config.add_word("DCU.D_SETICONST_CH", parse_config_str(str_or_default(ci->params, ctx->id("D_SETICONST_CH"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("D_SETICONST_AUX"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_SETIRPOLY_AUX", parse_config_str(str_or_default(ci->params, ctx->id("D_SETIRPOLY_AUX"), "0"), 2));
|
tg.config.add_word("DCU.D_SETICONST_CH",
|
||||||
tg.config.add_word("DCU.D_SETIRPOLY_CH", parse_config_str(str_or_default(ci->params, ctx->id("D_SETIRPOLY_CH"), "0"), 2));
|
parse_config_str(str_or_default(ci->params, ctx->id("D_SETICONST_CH"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.D_SETIRPOLY_AUX",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_SETIRPOLY_AUX"), "0"), 2));
|
||||||
|
tg.config.add_word("DCU.D_SETIRPOLY_CH",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_SETIRPOLY_CH"), "0"), 2));
|
||||||
tg.config.add_word("DCU.D_SETPLLRC", parse_config_str(str_or_default(ci->params, ctx->id("D_SETPLLRC"), "0"), 6));
|
tg.config.add_word("DCU.D_SETPLLRC", parse_config_str(str_or_default(ci->params, ctx->id("D_SETPLLRC"), "0"), 6));
|
||||||
tg.config.add_word("DCU.D_SYNC_LOCAL_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_SYNC_LOCAL_EN"), "0"), 1));
|
tg.config.add_word("DCU.D_SYNC_LOCAL_EN",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_SYNC_LOCAL_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_SYNC_ND_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_SYNC_ND_EN"), "0"), 1));
|
tg.config.add_word("DCU.D_SYNC_ND_EN", parse_config_str(str_or_default(ci->params, ctx->id("D_SYNC_ND_EN"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_TXPLL_PWDNB", parse_config_str(str_or_default(ci->params, ctx->id("D_TXPLL_PWDNB"), "0"), 1));
|
tg.config.add_word("DCU.D_TXPLL_PWDNB", parse_config_str(str_or_default(ci->params, ctx->id("D_TXPLL_PWDNB"), "0"), 1));
|
||||||
tg.config.add_word("DCU.D_TX_VCO_CK_DIV", parse_config_str(str_or_default(ci->params, ctx->id("D_TX_VCO_CK_DIV"), "0"), 3));
|
tg.config.add_word("DCU.D_TX_VCO_CK_DIV",
|
||||||
|
parse_config_str(str_or_default(ci->params, ctx->id("D_TX_VCO_CK_DIV"), "0"), 3));
|
||||||
tg.config.add_word("DCU.D_XGE_MODE", parse_config_str(str_or_default(ci->params, ctx->id("D_XGE_MODE"), "0"), 1));
|
tg.config.add_word("DCU.D_XGE_MODE", parse_config_str(str_or_default(ci->params, ctx->id("D_XGE_MODE"), "0"), 1));
|
||||||
|
@ -291,15 +291,16 @@ void DesignWidget::newContext(Context *ctx)
|
|||||||
|
|
||||||
{
|
{
|
||||||
TreeModel::ElementXYRoot<BelId>::ElementMap belMap;
|
TreeModel::ElementXYRoot<BelId>::ElementMap belMap;
|
||||||
for (const auto& bel : ctx->getBels()) {
|
for (const auto &bel : ctx->getBels()) {
|
||||||
auto loc = ctx->getBelLocation(bel);
|
auto loc = ctx->getBelLocation(bel);
|
||||||
belMap[std::pair<int, int>(loc.x, loc.y)].push_back(bel);
|
belMap[std::pair<int, int>(loc.x, loc.y)].push_back(bel);
|
||||||
}
|
}
|
||||||
auto belGetter = [](Context *ctx, BelId id) { return ctx->getBelName(id); };
|
auto belGetter = [](Context *ctx, BelId id) { return ctx->getBelName(id); };
|
||||||
|
|
||||||
getTreeByElementType(ElementType::BEL)
|
getTreeByElementType(ElementType::BEL)
|
||||||
->loadData(ctx, std::unique_ptr<TreeModel::ElementXYRoot<BelId>>(
|
->loadData(ctx,
|
||||||
new TreeModel::ElementXYRoot<BelId>(ctx, belMap, belGetter, ElementType::BEL)));
|
std::unique_ptr<TreeModel::ElementXYRoot<BelId>>(
|
||||||
|
new TreeModel::ElementXYRoot<BelId>(ctx, belMap, belGetter, ElementType::BEL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -313,33 +314,37 @@ void DesignWidget::newContext(Context *ctx)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARCH_ECP5
|
#ifdef ARCH_ECP5
|
||||||
for (const auto& wire : ctx->getWires()) {
|
for (const auto &wire : ctx->getWires()) {
|
||||||
wireMap[std::pair<int, int>(wire.location.x, wire.location.y)].push_back(wire);
|
wireMap[std::pair<int, int>(wire.location.x, wire.location.y)].push_back(wire);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
auto wireGetter = [](Context *ctx, WireId id) { return ctx->getWireName(id); };
|
auto wireGetter = [](Context *ctx, WireId id) { return ctx->getWireName(id); };
|
||||||
getTreeByElementType(ElementType::WIRE)
|
getTreeByElementType(ElementType::WIRE)
|
||||||
->loadData(ctx, std::unique_ptr<TreeModel::ElementXYRoot<WireId>>(
|
->loadData(ctx,
|
||||||
new TreeModel::ElementXYRoot<WireId>(ctx, wireMap, wireGetter, ElementType::WIRE)));
|
std::unique_ptr<TreeModel::ElementXYRoot<WireId>>(new TreeModel::ElementXYRoot<WireId>(
|
||||||
|
ctx, wireMap, wireGetter, ElementType::WIRE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
TreeModel::ElementXYRoot<PipId>::ElementMap pipMap;
|
TreeModel::ElementXYRoot<PipId>::ElementMap pipMap;
|
||||||
for (const auto& pip : ctx->getPips()) {
|
for (const auto &pip : ctx->getPips()) {
|
||||||
auto loc = ctx->getPipLocation(pip);
|
auto loc = ctx->getPipLocation(pip);
|
||||||
pipMap[std::pair<int, int>(loc.x, loc.y)].push_back(pip);
|
pipMap[std::pair<int, int>(loc.x, loc.y)].push_back(pip);
|
||||||
}
|
}
|
||||||
auto pipGetter = [](Context *ctx, PipId id) { return ctx->getPipName(id); };
|
auto pipGetter = [](Context *ctx, PipId id) { return ctx->getPipName(id); };
|
||||||
|
|
||||||
getTreeByElementType(ElementType::PIP)
|
getTreeByElementType(ElementType::PIP)
|
||||||
->loadData(ctx, std::unique_ptr<TreeModel::ElementXYRoot<PipId>>(
|
->loadData(ctx,
|
||||||
new TreeModel::ElementXYRoot<PipId>(ctx, pipMap, pipGetter, ElementType::PIP)));
|
std::unique_ptr<TreeModel::ElementXYRoot<PipId>>(
|
||||||
|
new TreeModel::ElementXYRoot<PipId>(ctx, pipMap, pipGetter, ElementType::PIP)));
|
||||||
}
|
}
|
||||||
|
|
||||||
getTreeByElementType(ElementType::CELL)
|
getTreeByElementType(ElementType::CELL)
|
||||||
->loadData(ctx, std::unique_ptr<TreeModel::IdStringList>(new TreeModel::IdStringList(ElementType::CELL)));
|
->loadData(ctx,
|
||||||
|
std::unique_ptr<TreeModel::IdStringList>(new TreeModel::IdStringList(ElementType::CELL)));
|
||||||
getTreeByElementType(ElementType::NET)
|
getTreeByElementType(ElementType::NET)
|
||||||
->loadData(ctx, std::unique_ptr<TreeModel::IdStringList>(new TreeModel::IdStringList(ElementType::NET)));
|
->loadData(ctx,
|
||||||
|
std::unique_ptr<TreeModel::IdStringList>(new TreeModel::IdStringList(ElementType::NET)));
|
||||||
}
|
}
|
||||||
updateTree();
|
updateTree();
|
||||||
}
|
}
|
||||||
@ -567,18 +572,18 @@ void DesignWidget::onSelectionChanged(int num, const QItemSelection &, const QIt
|
|||||||
std::move(d.begin(), d.end(), std::back_inserter(decals));
|
std::move(d.begin(), d.end(), std::back_inserter(decals));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keep other tree seleciton only if Control is pressed
|
// Keep other tree seleciton only if Control is pressed
|
||||||
if (num_selected > 1 && QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {
|
if (num_selected > 1 && QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) {
|
||||||
Q_EMIT selected(decals, false);
|
Q_EMIT selected(decals, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For deselect and multiple select just send all
|
// For deselect and multiple select just send all
|
||||||
if (selectionModel[num]->selectedIndexes().size() != 1) {
|
if (selectionModel[num]->selectedIndexes().size() != 1) {
|
||||||
Q_EMIT selected(decals, false);
|
Q_EMIT selected(decals, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex index = selectionModel[num]->selectedIndexes().at(0);
|
QModelIndex index = selectionModel[num]->selectedIndexes().at(0);
|
||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
@ -591,7 +596,8 @@ void DesignWidget::onSelectionChanged(int num, const QItemSelection &, const QIt
|
|||||||
|
|
||||||
// Clear other tab selections
|
// Clear other tab selections
|
||||||
for (int i = 0; i <= getIndexByElementType(ElementType::GROUP); i++)
|
for (int i = 0; i <= getIndexByElementType(ElementType::GROUP); i++)
|
||||||
if (i!=num) selectionModel[i]->clearSelection();
|
if (i != num)
|
||||||
|
selectionModel[i]->clearSelection();
|
||||||
|
|
||||||
addToHistory(num, index);
|
addToHistory(num, index);
|
||||||
|
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include <fstream>
|
||||||
#include "bitstream.h"
|
#include "bitstream.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
@ -150,7 +150,7 @@ void MainWindow::open_lpf()
|
|||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(this, QString("Open LPF"), QString(), QString("*.lpf"));
|
QString fileName = QFileDialog::getOpenFileName(this, QString("Open LPF"), QString(), QString("*.lpf"));
|
||||||
if (!fileName.isEmpty()) {
|
if (!fileName.isEmpty()) {
|
||||||
std::ifstream in(fileName.toStdString());
|
std::ifstream in(fileName.toStdString());
|
||||||
if (ctx->applyLPF(fileName.toStdString(), in)) {
|
if (ctx->applyLPF(fileName.toStdString(), in)) {
|
||||||
log("Loading LPF successful.\n");
|
log("Loading LPF successful.\n");
|
||||||
actionPack->setEnabled(true);
|
actionPack->setEnabled(true);
|
||||||
@ -158,7 +158,7 @@ void MainWindow::open_lpf()
|
|||||||
} else {
|
} else {
|
||||||
actionLoadLPF->setEnabled(true);
|
actionLoadLPF->setEnabled(true);
|
||||||
log("Loading LPF failed.\n");
|
log("Loading LPF failed.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,8 +113,8 @@ void FPGAViewWidget::initializeGL()
|
|||||||
}
|
}
|
||||||
initializeOpenGLFunctions();
|
initializeOpenGLFunctions();
|
||||||
QtImGui::initialize(this);
|
QtImGui::initialize(this);
|
||||||
glClearColor(colors_.background.red() / 255, colors_.background.green() / 255,
|
glClearColor(colors_.background.red() / 255, colors_.background.green() / 255, colors_.background.blue() / 255,
|
||||||
colors_.background.blue() / 255, 0.0);
|
0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
float FPGAViewWidget::PickedElement::distance(Context *ctx, float wx, float wy) const
|
float FPGAViewWidget::PickedElement::distance(Context *ctx, float wx, float wy) const
|
||||||
@ -314,36 +314,27 @@ void FPGAViewWidget::paintGL()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Render the grid.
|
// Render the grid.
|
||||||
lineShader_.draw(GraphicElement::STYLE_GRID, colors_.grid, thick1Px,
|
lineShader_.draw(GraphicElement::STYLE_GRID, colors_.grid, thick1Px, matrix);
|
||||||
matrix);
|
|
||||||
|
|
||||||
// Render Arch graphics.
|
// Render Arch graphics.
|
||||||
lineShader_.draw(GraphicElement::STYLE_FRAME, colors_.frame, thick11Px,
|
lineShader_.draw(GraphicElement::STYLE_FRAME, colors_.frame, thick11Px, matrix);
|
||||||
matrix);
|
lineShader_.draw(GraphicElement::STYLE_HIDDEN, colors_.hidden, thick11Px, matrix);
|
||||||
lineShader_.draw(GraphicElement::STYLE_HIDDEN, colors_.hidden, thick11Px,
|
lineShader_.draw(GraphicElement::STYLE_INACTIVE, colors_.inactive, thick11Px, matrix);
|
||||||
matrix);
|
lineShader_.draw(GraphicElement::STYLE_ACTIVE, colors_.active, thick11Px, matrix);
|
||||||
lineShader_.draw(GraphicElement::STYLE_INACTIVE, colors_.inactive,
|
|
||||||
thick11Px, matrix);
|
|
||||||
lineShader_.draw(GraphicElement::STYLE_ACTIVE, colors_.active, thick11Px,
|
|
||||||
matrix);
|
|
||||||
|
|
||||||
// Draw highlighted items.
|
// Draw highlighted items.
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
GraphicElement::style_t style = (GraphicElement::style_t)(
|
GraphicElement::style_t style = (GraphicElement::style_t)(GraphicElement::STYLE_HIGHLIGHTED0 + i);
|
||||||
GraphicElement::STYLE_HIGHLIGHTED0 + i);
|
|
||||||
lineShader_.draw(style, colors_.highlight[i], thick11Px, matrix);
|
lineShader_.draw(style, colors_.highlight[i], thick11Px, matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
lineShader_.draw(GraphicElement::STYLE_SELECTED, colors_.selected,
|
lineShader_.draw(GraphicElement::STYLE_SELECTED, colors_.selected, thick11Px, matrix);
|
||||||
thick11Px, matrix);
|
lineShader_.draw(GraphicElement::STYLE_HOVER, colors_.hovered, thick2Px, matrix);
|
||||||
lineShader_.draw(GraphicElement::STYLE_HOVER, colors_.hovered,
|
|
||||||
thick2Px, matrix);
|
|
||||||
|
|
||||||
// Render ImGui
|
// Render ImGui
|
||||||
QtImGui::newFrame();
|
QtImGui::newFrame();
|
||||||
QMutexLocker lock(&rendererArgsLock_);
|
QMutexLocker lock(&rendererArgsLock_);
|
||||||
if (!(rendererArgs_->hoveredDecal == DecalXY()) && rendererArgs_->hintText.size() > 0)
|
if (!(rendererArgs_->hoveredDecal == DecalXY()) && rendererArgs_->hintText.size() > 0) {
|
||||||
{
|
|
||||||
ImGui::SetNextWindowPos(ImVec2(rendererArgs_->x, rendererArgs_->y));
|
ImGui::SetNextWindowPos(ImVec2(rendererArgs_->x, rendererArgs_->y));
|
||||||
ImGui::BeginTooltip();
|
ImGui::BeginTooltip();
|
||||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
|
||||||
@ -351,7 +342,7 @@ void FPGAViewWidget::paintGL()
|
|||||||
ImGui::PopTextWrapPos();
|
ImGui::PopTextWrapPos();
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
}
|
}
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FPGAViewWidget::pokeRenderer(void) { renderRunner_->poke(); }
|
void FPGAViewWidget::pokeRenderer(void) { renderRunner_->poke(); }
|
||||||
@ -444,10 +435,10 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
int last_render[GraphicElement::STYLE_HIGHLIGHTED0];
|
int last_render[GraphicElement::STYLE_HIGHLIGHTED0];
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&rendererDataLock_);
|
QMutexLocker locker(&rendererDataLock_);
|
||||||
for(int i =0; i<GraphicElement::STYLE_HIGHLIGHTED0; i++)
|
for (int i = 0; i < GraphicElement::STYLE_HIGHLIGHTED0; i++)
|
||||||
last_render[i] = rendererData_->gfxByStyle[(enum GraphicElement::style_t)i].last_render;
|
last_render[i] = rendererData_->gfxByStyle[(enum GraphicElement::style_t)i].last_render;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = std::unique_ptr<FPGAViewWidget::RendererData>(new FPGAViewWidget::RendererData);
|
auto data = std::unique_ptr<FPGAViewWidget::RendererData>(new FPGAViewWidget::RendererData);
|
||||||
// Reset bounding box.
|
// Reset bounding box.
|
||||||
data->bbGlobal.clear();
|
data->bbGlobal.clear();
|
||||||
@ -514,13 +505,12 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
data->gfxHighlighted[i] = rendererData_->gfxHighlighted[i];
|
data->gfxHighlighted[i] = rendererData_->gfxHighlighted[i];
|
||||||
}
|
}
|
||||||
for(int i =0; i<GraphicElement::STYLE_HIGHLIGHTED0; i++)
|
for (int i = 0; i < GraphicElement::STYLE_HIGHLIGHTED0; i++)
|
||||||
data->gfxByStyle[(enum GraphicElement::style_t)i].last_render = ++last_render[i];
|
data->gfxByStyle[(enum GraphicElement::style_t)i].last_render = ++last_render[i];
|
||||||
rendererData_ = std::move(data);
|
rendererData_ = std::move(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gridChanged)
|
if (gridChanged) {
|
||||||
{
|
|
||||||
QMutexLocker locker(&rendererDataLock_);
|
QMutexLocker locker(&rendererDataLock_);
|
||||||
rendererData_->gfxGrid.clear();
|
rendererData_->gfxGrid.clear();
|
||||||
// Render grid.
|
// Render grid.
|
||||||
@ -529,7 +519,7 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
}
|
}
|
||||||
for (float i = 0.0f; i < 1.0f * ctx_->getGridDimY() + 1; i += 1.0f) {
|
for (float i = 0.0f; i < 1.0f * ctx_->getGridDimY() + 1; i += 1.0f) {
|
||||||
PolyLine(0.0f, i, 1.0f * ctx_->getGridDimX(), i).build(rendererData_->gfxGrid);
|
PolyLine(0.0f, i, 1.0f * ctx_->getGridDimX(), i).build(rendererData_->gfxGrid);
|
||||||
}
|
}
|
||||||
rendererData_->gfxGrid.last_render++;
|
rendererData_->gfxGrid.last_render++;
|
||||||
}
|
}
|
||||||
if (highlightedOrSelectedChanged) {
|
if (highlightedOrSelectedChanged) {
|
||||||
@ -537,7 +527,7 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
|
|
||||||
// Whether the currently being hovered decal is also selected.
|
// Whether the currently being hovered decal is also selected.
|
||||||
bool hoveringSelected = false;
|
bool hoveringSelected = false;
|
||||||
// Render selected.
|
// Render selected.
|
||||||
rendererData_->bbSelected.clear();
|
rendererData_->bbSelected.clear();
|
||||||
rendererData_->gfxSelected.clear();
|
rendererData_->gfxSelected.clear();
|
||||||
for (auto &decal : selectedDecals) {
|
for (auto &decal : selectedDecals) {
|
||||||
@ -565,11 +555,11 @@ void FPGAViewWidget::renderLines(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
QMutexLocker lock(&rendererArgsLock_);
|
QMutexLocker lock(&rendererArgsLock_);
|
||||||
|
|
||||||
if (rendererArgs_->zoomOutbound) {
|
if (rendererArgs_->zoomOutbound) {
|
||||||
zoomOutbound();
|
zoomOutbound();
|
||||||
rendererArgs_->zoomOutbound = false;
|
rendererArgs_->zoomOutbound = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -651,7 +641,8 @@ boost::optional<FPGAViewWidget::PickedElement> FPGAViewWidget::pickElement(float
|
|||||||
void FPGAViewWidget::mousePressEvent(QMouseEvent *event)
|
void FPGAViewWidget::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
if (io.WantCaptureMouse) return;
|
if (io.WantCaptureMouse)
|
||||||
|
return;
|
||||||
|
|
||||||
if (event->buttons() & Qt::RightButton || event->buttons() & Qt::MidButton) {
|
if (event->buttons() & Qt::RightButton || event->buttons() & Qt::MidButton) {
|
||||||
lastDragPos_ = event->pos();
|
lastDragPos_ = event->pos();
|
||||||
@ -687,7 +678,8 @@ void FPGAViewWidget::mousePressEvent(QMouseEvent *event)
|
|||||||
void FPGAViewWidget::mouseMoveEvent(QMouseEvent *event)
|
void FPGAViewWidget::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
if (io.WantCaptureMouse) return;
|
if (io.WantCaptureMouse)
|
||||||
|
return;
|
||||||
|
|
||||||
if (event->buttons() & Qt::RightButton || event->buttons() & Qt::MidButton) {
|
if (event->buttons() & Qt::RightButton || event->buttons() & Qt::MidButton) {
|
||||||
const int dx = event->x() - lastDragPos_.x();
|
const int dx = event->x() - lastDragPos_.x();
|
||||||
@ -724,22 +716,23 @@ void FPGAViewWidget::mouseMoveEvent(QMouseEvent *event)
|
|||||||
if (closest.type == ElementType::BEL) {
|
if (closest.type == ElementType::BEL) {
|
||||||
rendererArgs_->hintText = std::string("BEL\n") + ctx_->getBelName(closest.bel).c_str(ctx_);
|
rendererArgs_->hintText = std::string("BEL\n") + ctx_->getBelName(closest.bel).c_str(ctx_);
|
||||||
CellInfo *cell = ctx_->getBoundBelCell(closest.bel);
|
CellInfo *cell = ctx_->getBoundBelCell(closest.bel);
|
||||||
if (cell!=nullptr)
|
if (cell != nullptr)
|
||||||
rendererArgs_->hintText += std::string("\nCELL\n") +ctx_->nameOf(cell);
|
rendererArgs_->hintText += std::string("\nCELL\n") + ctx_->nameOf(cell);
|
||||||
} else if (closest.type == ElementType::WIRE) {
|
} else if (closest.type == ElementType::WIRE) {
|
||||||
rendererArgs_->hintText = std::string("WIRE\n") + ctx_->getWireName(closest.wire).c_str(ctx_);
|
rendererArgs_->hintText = std::string("WIRE\n") + ctx_->getWireName(closest.wire).c_str(ctx_);
|
||||||
NetInfo *net = ctx_->getBoundWireNet(closest.wire);
|
NetInfo *net = ctx_->getBoundWireNet(closest.wire);
|
||||||
if (net!=nullptr)
|
if (net != nullptr)
|
||||||
rendererArgs_->hintText += std::string("\nNET\n") +ctx_->nameOf(net);
|
rendererArgs_->hintText += std::string("\nNET\n") + ctx_->nameOf(net);
|
||||||
} else if (closest.type == ElementType::PIP) {
|
} else if (closest.type == ElementType::PIP) {
|
||||||
rendererArgs_->hintText = std::string("PIP\n") + ctx_->getPipName(closest.pip).c_str(ctx_);
|
rendererArgs_->hintText = std::string("PIP\n") + ctx_->getPipName(closest.pip).c_str(ctx_);
|
||||||
NetInfo *net = ctx_->getBoundPipNet(closest.pip);
|
NetInfo *net = ctx_->getBoundPipNet(closest.pip);
|
||||||
if (net!=nullptr)
|
if (net != nullptr)
|
||||||
rendererArgs_->hintText += std::string("\nNET\n") +ctx_->nameOf(net);
|
rendererArgs_->hintText += std::string("\nNET\n") + ctx_->nameOf(net);
|
||||||
} else if (closest.type == ElementType::GROUP) {
|
} else if (closest.type == ElementType::GROUP) {
|
||||||
rendererArgs_->hintText = std::string("GROUP\n") + ctx_->getGroupName(closest.group).c_str(ctx_);
|
rendererArgs_->hintText = std::string("GROUP\n") + ctx_->getGroupName(closest.group).c_str(ctx_);
|
||||||
} else rendererArgs_->hintText = "";
|
} else
|
||||||
|
rendererArgs_->hintText = "";
|
||||||
|
|
||||||
pokeRenderer();
|
pokeRenderer();
|
||||||
}
|
}
|
||||||
update();
|
update();
|
||||||
@ -789,8 +782,9 @@ QVector4D FPGAViewWidget::mouseToWorldDimensions(float x, float y)
|
|||||||
void FPGAViewWidget::wheelEvent(QWheelEvent *event)
|
void FPGAViewWidget::wheelEvent(QWheelEvent *event)
|
||||||
{
|
{
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
if (io.WantCaptureMouse) return;
|
if (io.WantCaptureMouse)
|
||||||
|
return;
|
||||||
|
|
||||||
QPoint degree = event->angleDelta() / 8;
|
QPoint degree = event->angleDelta() / 8;
|
||||||
|
|
||||||
if (!degree.isNull())
|
if (!degree.isNull())
|
||||||
@ -875,23 +869,17 @@ void FPGAViewWidget::update_vbos()
|
|||||||
{
|
{
|
||||||
lineShader_.update_vbos(GraphicElement::STYLE_GRID, rendererData_->gfxGrid);
|
lineShader_.update_vbos(GraphicElement::STYLE_GRID, rendererData_->gfxGrid);
|
||||||
|
|
||||||
for (int style = GraphicElement::STYLE_FRAME; style
|
for (int style = GraphicElement::STYLE_FRAME; style < GraphicElement::STYLE_HIGHLIGHTED0; style++) {
|
||||||
< GraphicElement::STYLE_HIGHLIGHTED0;
|
lineShader_.update_vbos((enum GraphicElement::style_t)(style), rendererData_->gfxByStyle[style]);
|
||||||
style++) {
|
|
||||||
lineShader_.update_vbos((enum GraphicElement::style_t)(style),
|
|
||||||
rendererData_->gfxByStyle[style]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
GraphicElement::style_t style = (GraphicElement::style_t)(
|
GraphicElement::style_t style = (GraphicElement::style_t)(GraphicElement::STYLE_HIGHLIGHTED0 + i);
|
||||||
GraphicElement::STYLE_HIGHLIGHTED0 + i);
|
|
||||||
lineShader_.update_vbos(style, rendererData_->gfxHighlighted[i]);
|
lineShader_.update_vbos(style, rendererData_->gfxHighlighted[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
lineShader_.update_vbos(GraphicElement::STYLE_SELECTED,
|
lineShader_.update_vbos(GraphicElement::STYLE_SELECTED, rendererData_->gfxSelected);
|
||||||
rendererData_->gfxSelected);
|
lineShader_.update_vbos(GraphicElement::STYLE_HOVER, rendererData_->gfxHovered);
|
||||||
lineShader_.update_vbos(GraphicElement::STYLE_HOVER,
|
|
||||||
rendererData_->gfxHovered);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
@ -206,8 +206,7 @@ bool LineShader::compile(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LineShader::update_vbos(enum GraphicElement::style_t style,
|
void LineShader::update_vbos(enum GraphicElement::style_t style, const LineShaderData &line)
|
||||||
const LineShaderData &line)
|
|
||||||
{
|
{
|
||||||
if (buffers_[style].last_vbo_update == line.last_render)
|
if (buffers_[style].last_vbo_update == line.last_render)
|
||||||
return;
|
return;
|
||||||
@ -230,8 +229,8 @@ void LineShader::update_vbos(enum GraphicElement::style_t style,
|
|||||||
buffers_[style].index.allocate(&line.indices[0], sizeof(GLuint) * line.indices.size());
|
buffers_[style].index.allocate(&line.indices[0], sizeof(GLuint) * line.indices.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LineShader::draw(enum GraphicElement::style_t style, const QColor &color,
|
void LineShader::draw(enum GraphicElement::style_t style, const QColor &color, float thickness,
|
||||||
float thickness, const QMatrix4x4 &projection)
|
const QMatrix4x4 &projection)
|
||||||
{
|
{
|
||||||
auto gl = QOpenGLContext::currentContext()->functions();
|
auto gl = QOpenGLContext::currentContext()->functions();
|
||||||
if (buffers_[style].indices == 0)
|
if (buffers_[style].indices == 0)
|
||||||
|
@ -20,12 +20,12 @@
|
|||||||
#ifndef LINESHADER_H
|
#ifndef LINESHADER_H
|
||||||
#define LINESHADER_H
|
#define LINESHADER_H
|
||||||
|
|
||||||
#include <array>
|
|
||||||
#include <QOpenGLBuffer>
|
#include <QOpenGLBuffer>
|
||||||
#include <QOpenGLFunctions>
|
#include <QOpenGLFunctions>
|
||||||
#include <QOpenGLShaderProgram>
|
#include <QOpenGLShaderProgram>
|
||||||
#include <QOpenGLVertexArrayObject>
|
#include <QOpenGLVertexArrayObject>
|
||||||
#include <QOpenGLWidget>
|
#include <QOpenGLWidget>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "nextpnr.h"
|
#include "nextpnr.h"
|
||||||
@ -169,9 +169,7 @@ class LineShader
|
|||||||
} uniforms_;
|
} uniforms_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LineShader(QObject *parent) : parent_(parent), program_(nullptr)
|
LineShader(QObject *parent) : parent_(parent), program_(nullptr) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static constexpr const char *vertexShaderSource_ =
|
static constexpr const char *vertexShaderSource_ =
|
||||||
"#version 110\n"
|
"#version 110\n"
|
||||||
@ -194,12 +192,10 @@ class LineShader
|
|||||||
// Must be called on initialization.
|
// Must be called on initialization.
|
||||||
bool compile(void);
|
bool compile(void);
|
||||||
|
|
||||||
void update_vbos(enum GraphicElement::style_t style,
|
void update_vbos(enum GraphicElement::style_t style, const LineShaderData &line);
|
||||||
const LineShaderData &line);
|
|
||||||
|
|
||||||
// Render a LineShaderData with a given M/V/P transformation.
|
// Render a LineShaderData with a given M/V/P transformation.
|
||||||
void draw(enum GraphicElement::style_t style, const QColor &color,
|
void draw(enum GraphicElement::style_t style, const QColor &color, float thickness, const QMatrix4x4 &projection);
|
||||||
float thickness, const QMatrix4x4 &projection);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NEXTPNR_NAMESPACE_END
|
NEXTPNR_NAMESPACE_END
|
||||||
|
@ -266,20 +266,20 @@ template <typename CoordinateT, typename ElementT> class QuadTreeNode
|
|||||||
splitx_ = (bound_.x1_ - bound_.x0_) / 2 + bound_.x0_;
|
splitx_ = (bound_.x1_ - bound_.x0_) / 2 + bound_.x0_;
|
||||||
splity_ = (bound_.y1_ - bound_.y0_) / 2 + bound_.y0_;
|
splity_ = (bound_.y1_ - bound_.y0_) / 2 + bound_.y0_;
|
||||||
// Create the new children.
|
// Create the new children.
|
||||||
children_ = decltype(children_)(new QuadTreeNode<CoordinateT, ElementT>[4]{
|
children_ = decltype(children_)(new QuadTreeNode<CoordinateT, ElementT>[4] {
|
||||||
// Note: not using [NW] = QuadTreeNode because that seems to
|
// Note: not using [NW] = QuadTreeNode because that seems to
|
||||||
// crash g++ 7.3.0.
|
// crash g++ 7.3.0.
|
||||||
/* NW */ QuadTreeNode<CoordinateT, ElementT>(BoundingBox(bound_.x0_, bound_.y0_, splitx_, splity_),
|
/* NW */ QuadTreeNode<CoordinateT, ElementT>(BoundingBox(bound_.x0_, bound_.y0_, splitx_, splity_),
|
||||||
depth_ + 1, max_elems_),
|
depth_ + 1, max_elems_),
|
||||||
/* NE */
|
/* NE */
|
||||||
QuadTreeNode<CoordinateT, ElementT>(BoundingBox(splitx_, bound_.y0_, bound_.x1_, splity_),
|
QuadTreeNode<CoordinateT, ElementT>(BoundingBox(splitx_, bound_.y0_, bound_.x1_, splity_),
|
||||||
depth_ + 1, max_elems_),
|
depth_ + 1, max_elems_),
|
||||||
/* SW */
|
/* SW */
|
||||||
QuadTreeNode<CoordinateT, ElementT>(BoundingBox(bound_.x0_, splity_, splitx_, bound_.y1_),
|
QuadTreeNode<CoordinateT, ElementT>(BoundingBox(bound_.x0_, splity_, splitx_, bound_.y1_),
|
||||||
depth_ + 1, max_elems_),
|
depth_ + 1, max_elems_),
|
||||||
/* SE */
|
/* SE */
|
||||||
QuadTreeNode<CoordinateT, ElementT>(BoundingBox(splitx_, splity_, bound_.x1_, bound_.y1_),
|
QuadTreeNode<CoordinateT, ElementT>(BoundingBox(splitx_, splity_, bound_.x1_, bound_.y1_),
|
||||||
depth_ + 1, max_elems_),
|
depth_ + 1, max_elems_),
|
||||||
});
|
});
|
||||||
// Move all elements to where they belong.
|
// Move all elements to where they belong.
|
||||||
auto it = elems_.begin();
|
auto it = elems_.begin();
|
||||||
|
@ -972,11 +972,11 @@ void gfxTilePip(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId src,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getWireXY_local(src, x1, y1) && getWireXY_local(dst, x2, y2)) {
|
if (getWireXY_local(src, x1, y1) && getWireXY_local(dst, x2, y2)) {
|
||||||
pipGfx(g, x, y, x1, y1, x2, y2, local_swbox_x1, local_swbox_y1, local_swbox_x2, local_swbox_y2, style);
|
pipGfx(g, x, y, x1, y1, x2, y2, local_swbox_x1, local_swbox_y1, local_swbox_x2, local_swbox_y2, style);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TILE_WIRE_LUTFF_0_IN_0_LUT <= src && src <= TILE_WIRE_LUTFF_7_IN_3_LUT && TILE_WIRE_LUTFF_0_OUT <= dst &&
|
if (TILE_WIRE_LUTFF_0_IN_0_LUT <= src && src <= TILE_WIRE_LUTFF_7_IN_3_LUT && TILE_WIRE_LUTFF_0_OUT <= dst &&
|
||||||
dst <= TILE_WIRE_LUTFF_7_OUT) {
|
dst <= TILE_WIRE_LUTFF_7_OUT) {
|
||||||
int lut_idx = (src - TILE_WIRE_LUTFF_0_IN_0_LUT) / 4;
|
int lut_idx = (src - TILE_WIRE_LUTFF_0_IN_0_LUT) / 4;
|
||||||
|
Loading…
Reference in New Issue
Block a user