13#define TRG_SHORT_NAMES 
   14#define TRGCDC_SHORT_NAMES 
   17#include "trg/cdc/JSignal.h" 
   18#include "trg/cdc/FpgaUtility.h" 
   19#include "trg/cdc/JSignalData.h" 
   22#include "FpgaUtility.h" 
   23#include "JSignalData.h" 
   40using std::stringstream;
 
   84      m_toReal = 1 / ((pow(2, bitwidth - 1) - 0.5) / max(maxValue, fabs(minValue)));
 
   86      m_toReal = 1 / ((pow(2, bitwidth) - 0.5) / maxValue);
 
  100    checkInt(
"TRGCDCJSignal(int, int, double, double)");
 
  106    (*this) = 
TRGCDCJSignal(bitwidth, value, minValue, maxValue, 0, commonData);
 
  110                               signed long long const& maxInt, 
double const& actual, 
double const& minActual, 
double const& maxActual, 
int const& finishClock,
 
  129    checkInt(
"TRGCDCJSignal(int, double, signed long long, signed long long, double, double, double)");
 
  149    checkInt(
"TRGCDCJSignal(double, double)");
 
  179    if (!(t_calFinishClock == -2 || t_calFinishClock == -1)) {
 
  181      if (targetClock == -3) t_rhs.
m_finishClock = t_calFinishClock + 1;
 
  183        if (targetClock < t_calFinishClock) cout << 
"[Error] TRGCDCJSignal::assign() => targetClock is too small." << endl;
 
  190    if ((*this).m_bitsize != -1 || (*this).m_name != 
"")
 
  194      if ((*this).m_bitsize == 1) {
 
  196        if ((*this).m_bitsize != t_rhs.
m_bitsize) {
 
  197          cout << 
"[Warning] TRGCDCJSignal::operator<=() => rhs and lhs do not have same bitsize." << endl;
 
  200        if ((*this).m_type != t_rhs.
m_type) {
 
  201          cout << 
"[Warning] TRGCDCJSignal::operator<=() => rhs and lhs do not have same type." << endl;
 
  205          cout << 
"[Warning] TRGCDCJSignal::operator<=() => rhs and lhs do not have same clock." << endl;
 
  240      string t_finalCode(finalCode);
 
  244        if (t_finalCode == 
"printAssignVhdlCode") {
 
  268    string finalCode = 
"printAssignVhdlCode";
 
  269    return assignTo(rhs, targetClock, finalCode);
 
  274    string finalCode = 
"printAssignVhdlCode";
 
  275    return assignTo(rhs, -3, finalCode);
 
  290    t_signal.
m_int *= -1;
 
  291    t_signal.
m_minInt = -(*this).m_maxInt;
 
  292    t_signal.
m_maxInt = -(*this).m_minInt;
 
  323      cout << 
"TRGCDCJSignal::operator+=()" << endl;
 
  324      cout << 
"<<<Input lhs>>>" << endl;
 
  326      cout << 
"<<<Input lhs>>>" << endl;
 
  327      cout << 
"<<<Input rhs>>>" << endl;
 
  329      cout << 
"<<<Input rhs>>>" << endl;
 
  357    t_result.
checkInt(
"TRGCDCJSignal::operator+");
 
  359      cout << 
"<<<Output>>>" << endl;
 
  361      cout << 
"<<<Output>>>" << endl;
 
  362      cout << 
"TRGCDCJSignal::operator+=()" << endl;
 
  385      cout << 
"TRGCDCJSignal::operator-=()" << endl;
 
  386      cout << 
"<<<Input lhs>>>" << endl;
 
  388      cout << 
"<<<Input lhs>>>" << endl;
 
  389      cout << 
"<<<Input rhs>>>" << endl;
 
  391      cout << 
"<<<Input rhs>>>" << endl;
 
  419    t_result.
checkInt(
"TRGCDCJSignal::operator-");
 
  421      cout << 
"<<<Output>>>" << endl;
 
  423      cout << 
"<<<Output>>>" << endl;
 
  424      cout << 
"TRGCDCJSignal::operator-=()" << endl;
 
  448      cout << 
"TRGCDCJSignal::operator*=()" << endl;
 
  449      cout << 
"<<<Input lhs>>>" << endl;
 
  451      cout << 
"<<<Input lhs>>>" << endl;
 
  452      cout << 
"<<<Input rhs>>>" << endl;
 
  454      cout << 
"<<<Input rhs>>>" << endl;
 
  457    int nBitsLargeShift = 0;
 
  458    int nBitsSmallShift = 0;
 
  460    if (t_large.
m_type == 1) {
 
  462        nBitsLargeShift = t_large.
m_bitsize - 24;
 
  463        t_large = t_large.
shift(nBitsLargeShift, 0);
 
  467        nBitsLargeShift = t_large.
m_bitsize - 25;
 
  468        t_large = t_large.
shift(nBitsLargeShift, 0);
 
  471    if (t_small.
m_type == 1) {
 
  473        nBitsSmallShift = t_small.
m_bitsize - 17;
 
  474        t_small = t_small.
shift(nBitsSmallShift, 0);
 
  478        nBitsSmallShift = t_small.
m_bitsize - 18;
 
  479        t_small = t_small.
shift(nBitsSmallShift, 0);
 
  484      if (orderSwap) cout << nBitsSmallShift << 
" bit right shifted input lhs>>>" << endl;
 
  485      else cout << nBitsLargeShift << 
" bit right shifted input lhs>>>" << endl;
 
  486      if (orderSwap) t_small.
dump();
 
  488      cout << 
"<<<Shifted input lhs>>>" << endl;
 
  490      if (orderSwap) cout << nBitsLargeShift << 
" bit right shifted input rhs>>>" << endl;
 
  491      else cout << nBitsSmallShift << 
" bit right shifted input rhs>>>" << endl;
 
  492      if (orderSwap) t_large.
dump();
 
  494      cout << 
"<<<Shifted input rhs>>>" << endl;
 
  526    t_result.
checkInt(
"TRGCDCJSignal::operator*");
 
  528      cout << 
"<<<Output>>>" << endl;
 
  530      cout << 
"<<<Output>>>" << endl;
 
  531      cout << 
"TRGCDCJSignal::operator*=()" << endl;
 
  541    cout << 
"-----------------------------------" << endl;
 
  542    cout << 
"name:            " << 
m_name << endl;
 
  543    cout << 
"type:            " << 
m_type << endl;
 
  544    cout << 
"bitsize:         " << 
m_bitsize << endl;
 
  545    int t_org = cout.precision();
 
  547    cout << 
"actual:          " << 
m_actual << endl;
 
  548    cout.precision(t_org);
 
  549    cout << 
"int:             " << 
m_int << endl;
 
  550    cout << 
"minInt:          " << 
m_minInt << endl;
 
  551    cout << 
"maxInt:          " << 
m_maxInt << endl;
 
  555    cout << 
"toReal:          " << 
m_toReal << endl;
 
  558    cout << 
"-----------------------------------" << endl;
 
  568    t_signal.
m_int = floor(this->
m_int / pow(2, nBits));
 
  579    t_signal.
checkInt(
"TRGCDCJSignal::shift()");
 
  584      } 
else if (nBits != 0) {
 
  597    if (t_offset.
calType() != 1) cout << 
"[Error] TRGCDCJSignal::offset() => t_offset min value below 0. " << endl;
 
  600    t_offset.
checkInt(
"TRGCDCJSignal::offset()");
 
  614    t_result.
checkInt(
"TRGCDCJSignal::invOffset()");
 
  622                             TRGCDCJSignal const& reference, std::vector<std::vector<TRGCDCJSignal> > data, 
int targetClock)
 
  629    if (data.size() == 0 || data.size() == 1) {
 
  630      cout << 
"[Error] TRGCDCJSignal::choose() => There is not enough data." << endl;
 
  633    if ((*(data.end() - 1)).size() != 1) {
 
  634      cout << 
"[Error] TRGCDCJSignal::choose() => Last data doesn't contain 1 TRGCDCJSignal." << endl;
 
  640    for (
unsigned iCondition = 0; iCondition < data.size(); iCondition++) {
 
  645    if (targetClock == -3) target.m_finishClock = t_maxClock + 1;
 
  647      if (targetClock < t_maxClock) cout << 
"[Error] TRGCDCJSignal::choose() => targetClock is too small." << endl;
 
  648      else target.m_finishClock = targetClock;
 
  653    signed long long t_minInt = targetMin.
m_minInt;
 
  654    signed long long t_maxInt = targetMax.
m_maxInt;
 
  657    for (
unsigned iCondition = 0; iCondition < data.size(); iCondition++) {
 
  684      if (data[iCondition].size() != 1) {
 
  686        from = &(data[iCondition][1]);
 
  687        to = &(data[iCondition][2]);
 
  706    for (
unsigned iCondition = 0; iCondition < data.size(); iCondition++) {
 
  709      if (data[iCondition].size() == 1) {
 
  710        string t_string = 
"";
 
  711        target.assignTo(*assign, target.m_finishClock, t_string);
 
  717          string t_string = 
"";
 
  718          target.assignTo(*assign, target.m_finishClock, t_string);
 
  724    for (
unsigned iCondition = 0; iCondition < data.size(); iCondition++) {
 
  727      if (data[iCondition].size() == 1) {
 
  728        target.m_actual = (*assign).m_actual;
 
  733        assign = &(data[iCondition][0]);
 
  735          target.m_actual = (*assign).m_actual;
 
  741    target.checkInt(
"TRGCDCJSignal::choose()");
 
  746      target.m_commonData->m_vhdlInProcess += t_finalCode + 
"\n";
 
  753                             TRGCDCJSignal const& reference, 
const std::vector<std::vector<TRGCDCJSignal> >& data)
 
  755    choose(target, targetMin, targetMax, reference, data, -3);
 
  759                             const std::vector<std::vector<TRGCDCJSignal> >& data,
 
  763    signed long long t_minInt;
 
  764    signed long long t_maxInt;
 
  769    for (
unsigned iCondition = 0; iCondition < data.size(); iCondition++) {
 
  771      if (iCondition == 0) {
 
  782        if (t_toReal != assign->
getToReal()) cout << 
"[Error] TRGCDCJSignal::choose() => toReal are not same between assignments in data." 
  787    TRGCDCJSignal t_targetMax(t_maxInt, t_toReal, t_maxInt, t_maxInt, t_maxActual, t_maxActual, t_maxActual, -1, target.m_commonData);
 
  788    TRGCDCJSignal t_targetMin(t_minInt, t_toReal, t_minInt, t_minInt, t_minActual, t_minActual, t_minActual, -1, target.m_commonData);
 
  790    choose(target, t_targetMin, t_targetMax, reference, data, targetClock);
 
  794                             const std::vector<std::vector<TRGCDCJSignal> >& data)
 
  796    choose(target, reference, data, -3);
 
  804    if (data.size() == 0) {
 
  805      cout << 
"[Error] TRGCDCJSignal::ifElse() => There is not enough data." << endl;
 
  812    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  814      if (iCase != (data.size() - 1)) {
 
  815        if (
comp.
m_argumentSignals.size() == 0) cout << 
"[Error] TRGCDCJSignal::ifElse() => comp signal has no m_vhdl." << endl;
 
  817            || 
comp.
m_maxInt != 1) cout << 
"[Error] TRGCDCJSignal::ifElse() => comp signal m_minInt or m_maxInt is not correct." << endl;
 
  820      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  829    int t_maxClock = data[0].first.calFinishClock();
 
  830    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  831      int t_clock = data[iCase].first.calFinishClock();
 
  832      if (t_maxClock < t_clock) t_maxClock = t_clock;
 
  834      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  835        TRGCDCJSignal const& rhs = data[iCase].second[iAssignment].second;
 
  837        if (t_maxClock < t_clock) t_maxClock = t_clock;
 
  840    int t_finishClock = 0;
 
  841    if (targetClock == -3) {
 
  842      if (t_maxClock < 0) cout << 
"[Error] TRGCDCJSignal::ifElse() => t_maxClock is negative. Did not consider this case." << endl;
 
  843      t_finishClock = t_maxClock + 1;
 
  845      if (targetClock < t_maxClock) cout << 
"[Error] TRGCDCJSignal::ifElse() => targetClock is too small." << endl;
 
  846      else t_finishClock = targetClock;
 
  850    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  853      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  861    map<TRGCDCJSignal*, pair<vector<long long int>, vector<double> > > t_signalsRange;
 
  862    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  863      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  865        TRGCDCJSignal& lhs = *(data[iCase].second[iAssignment].first);
 
  866        if (t_signalsRange.find(&lhs) == t_signalsRange.end()) {
 
  869          t_signalsRange[&lhs] = make_pair(t_intRange, t_actualRange);
 
  871          long long int& t_minInt = t_signalsRange[&lhs].first[0];
 
  872          long long int& t_maxInt = t_signalsRange[&lhs].first[1];
 
  873          double& t_minActual = t_signalsRange[&lhs].second[0];
 
  874          double& t_maxActual = t_signalsRange[&lhs].second[1];
 
  883    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  884      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  886        TRGCDCJSignal& lhs = *(data[iCase].second[iAssignment].first);
 
  888        long long int& t_minInt = t_signalsRange[&lhs].first[0];
 
  889        long long int& t_maxInt = t_signalsRange[&lhs].first[1];
 
  890        double& t_minActual = t_signalsRange[&lhs].second[0];
 
  891        double& t_maxActual = t_signalsRange[&lhs].second[1];
 
  903    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  907        for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  908          TRGCDCJSignal& lhs = *(data[iCase].second[iAssignment].first);
 
  910          string t_string = 
"";
 
  911          lhs.
assignTo(rhs, t_finishClock, t_string);
 
  913          lhs.
checkInt(
"TRGCDCJSignal::ifElse()");
 
  920    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  924        for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  925          TRGCDCJSignal& lhs = *(data[iCase].second[iAssignment].first);
 
  934    if (data[0].first.getPrintVhdl() == 1) {
 
  936      for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
  937        for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
  938          TRGCDCJSignal& lhs = *(data[iCase].second[iAssignment].first);
 
  945      data[0].first.m_commonData->m_vhdlInProcess += t_finalCode + 
"\n";
 
  958                                           double maxActual)
 const 
  986    return limit(min.m_int, max.m_int, min.m_actual, max.m_actual);
 
  991    if (this->
m_bitsize == bitwidth) 
return (*
this);
 
  998    t_result.
checkInt(
"TRGCDCJSignal::resize()");
 
 1041                                                 signed long long const& maxInt, 
double const& actual, 
double const& minActual, 
double const& maxActual, 
int const& finishClock)
 
 1044    vector<bool> 
const& slv = in.
m_slv;
 
 1047    if (in.
m_type != 2) cout << 
"[Error] TRGCDCJSignal::slvToSigned() => type is not slv." << endl;
 
 1048    if (slv.size() > 63) cout << 
"[Error] TRGCDCJSignal::slvToSigned() => bitwidth is too large." << endl;
 
 1054    for (
unsigned iBit = 0; iBit < slv.size() - 1; iBit++) {
 
 1055      result.m_int += slv[iBit] * pow(2, iBit);
 
 1057    result.m_int -= slv[slv.size() - 1] * pow(2, slv.size() - 1);
 
 1059    result.m_minInt = minInt;
 
 1060    result.m_maxInt = maxInt;
 
 1061    result.m_actual = actual;
 
 1062    result.m_minActual = minActual;
 
 1063    result.m_maxActual = maxActual;
 
 1064    result.m_toReal = toReal;
 
 1066    result.m_type = result.calType();
 
 1067    result.m_bitsize = result.calBitwidth();
 
 1068    result.m_finishClock = finishClock;
 
 1070    result.checkInt(
"slvToSigned");
 
 1082                                                   signed long long const& maxInt, 
double const& actual, 
double const& minActual, 
double const& maxActual, 
int const& finishClock)
 
 1085    vector<bool> 
const& slv = in.
m_slv;
 
 1088    if (in.
m_type != 2) cout << 
"[Error] TRGCDCJSignal::slvToUnsigned() => type is not slv." << endl;
 
 1089    if (slv.size() > 63) cout << 
"[Error] TRGCDCJSignal::slvToUnsigned() => bitwidth is too large." << endl;
 
 1095    for (
unsigned iBit = 0; iBit < slv.size(); iBit++) {
 
 1096      result.m_int += slv[iBit] * pow(2, iBit);
 
 1099    result.m_minInt = minInt;
 
 1100    result.m_maxInt = maxInt;
 
 1101    result.m_actual = actual;
 
 1102    result.m_minActual = minActual;
 
 1103    result.m_maxActual = maxActual;
 
 1104    result.m_toReal = toReal;
 
 1106    result.m_type = result.calType();
 
 1107    result.m_bitsize = result.calBitwidth();
 
 1108    result.m_finishClock = finishClock;
 
 1110    result.checkInt(
"slvToSigned");
 
 1128    signed long long t_int = in.
m_int;
 
 1133      result.m_slv.clear();
 
 1135      for (
int iBit = 0; iBit < in.
m_bitsize; iBit++) {
 
 1136        result.m_slv[iBit] = (bool)(t_int >> iBit) & 1;
 
 1138    } 
else if (in.
m_type == 1) {
 
 1140      result.m_slv.clear();
 
 1142      for (
int iBit = 0; iBit < in.
m_bitsize; iBit++) {
 
 1143        result.m_slv[iBit] = (bool)(t_int >> iBit) & 1;
 
 1146      cout << 
"[Error] TRGCDCJSignal::toSlv() => m_type is not 1 or -1." << endl;
 
 1154    if (in.
m_type == 2) 
return (in);
 
 1157      cout << 
"[Error] TRGCDCJSignal::toSlv() => Slv is not same as unsigned anymore." << endl;
 
 1180    bool t_bool = 
false;
 
 1181    if (operate == 
"=") {
 
 1182      t_bool = (t_lhs.
m_int == t_rhs.
m_int ? 1 : 0);
 
 1183    } 
else if (operate == 
"/=") {
 
 1184      t_bool = (t_lhs.
m_int != t_rhs.
m_int ? 1 : 0);
 
 1185    } 
else if (operate == 
"<") {
 
 1186      t_bool = (t_lhs.
m_int < t_rhs.
m_int ? 1 : 0);
 
 1187    } 
else if (operate == 
"<=") {
 
 1188      t_bool = (t_lhs.
m_int <= t_rhs.
m_int ? 1 : 0);
 
 1189    } 
else if (operate == 
">") {
 
 1190      t_bool = (t_lhs.
m_int > t_rhs.
m_int ? 1 : 0);
 
 1191    } 
else if (operate == 
">=") {
 
 1192      t_bool = (t_lhs.
m_int >= t_rhs.
m_int ? 1 : 0);
 
 1193    } 
else if (operate == 
"and") {
 
 1194      t_bool = (t_lhs.
m_int && t_rhs.
m_int ? 1 : 0);
 
 1195    } 
else if (operate == 
"or") {
 
 1196      t_bool = (t_lhs.
m_int || t_rhs.
m_int ? 1 : 0);
 
 1198      cout << 
"[Error] TRGCDCJSignal::comp() => No operator named " << operate << 
"." << endl;
 
 1201    if (operate == 
"=") {
 
 1203    } 
else if (operate == 
"/=") {
 
 1205    } 
else if (operate == 
"<") {
 
 1207    } 
else if (operate == 
"<=") {
 
 1209    } 
else if (operate == 
">") {
 
 1211    } 
else if (operate == 
">=") {
 
 1213    } 
else if (operate == 
"and") {
 
 1215    } 
else if (operate == 
"or") {
 
 1218      cout << 
"[Error] TRGCDCJSignal::comp() => No operator named " << operate << 
"." << endl;
 
 1243    std::swap(first.m_name, second.m_name);
 
 1244    std::swap(first.m_type, second.m_type);
 
 1245    std::swap(first.m_bitsize, second.m_bitsize);
 
 1246    std::swap(first.m_int, second.m_int);
 
 1247    std::swap(first.m_minInt, second.m_minInt);
 
 1248    std::swap(first.m_maxInt, second.m_maxInt);
 
 1249    std::swap(first.m_actual, second.m_actual);
 
 1250    std::swap(first.m_minActual, second.m_minActual);
 
 1251    std::swap(first.m_maxActual, second.m_maxActual);
 
 1252    std::swap(first.m_toReal, second.m_toReal);
 
 1253    std::swap(first.m_debug, second.m_debug);
 
 1254    std::swap(first.m_vhdlCode, second.m_vhdlCode);
 
 1255    std::swap(first.m_argumentSignals, second.m_argumentSignals);
 
 1256    std::swap(first.m_finishClock, second.m_finishClock);
 
 1257    std::swap(first.m_commonData, second.m_commonData);
 
 1262    if (first.m_toReal != second.m_toReal) {
 
 1264      double t_nBits = log(first.m_toReal / second.m_toReal) / log(2);
 
 1267        t_nBits = int(t_nBits + 0.5);
 
 1269        t_nBits = int(t_nBits - 0.5);
 
 1273        first = first.shift(-t_nBits, 0);
 
 1276      } 
else if (t_nBits < 0) {
 
 1277        second = second.shift(t_nBits, 0);
 
 1282      if (fabs(first.m_toReal - second.m_toReal) > 0.00001 * first.m_toReal) {
 
 1283        cout << 
"[Warning] TRGCDCJSignal::matchUnit() => in1 and in2 units are still different." << endl;
 
 1284        cout << first.m_toReal << 
" " << second.m_toReal << endl;
 
 1288        cout << 
"TRGCDCJSignal::matchUnit()" << endl;
 
 1289        if (t_nBits > 0) cout << 
"lhs was shifted to left by " << t_nBits << endl;
 
 1290        else if (t_nBits < 0) cout << 
"rhs was shifted to left by " << -t_nBits << endl;
 
 1291        cout << 
"TRGCDCJSignal::matchUnit()" << endl;
 
 1294    first.checkInt(
"TRGCDCJSignal::matchUnit()::first");
 
 1295    second.checkInt(
"TRGCDCJSignal::matchUnit()::second");
 
 1328    checkInt(
"TRGCDCJSignal::setBitsize()");
 
 1345      cout << 
"[Error] TRGCDCJSignal::setPrintVhdl() => m_commonData does not exist." << endl;
 
 1353      cout << 
"[Error] TRGCDCJSignal::setVhdlOutputFile() => m_commonData does not exist." << endl;
 
 1441      cout << 
"[Error] TRGCDCJSignal::getCommonData() => m_commonData does not exist." << endl;
 
 1457    if (minValue < 0) 
return -1;
 
 1465    if (
calType() != 1) t_bitwidth++;
 
 1472    int t_bitwidth = ceil(log1p(max(maxInt, llabs(minInt))) / log(2));
 
 1473    if (type != 1) t_bitwidth++;
 
 1501      cout << 
"[Error] TRGCDCJSignal::getPrintVhdl() => m_commonData does not exist." << endl;
 
 1510      cout << 
"[Error] TRGCDCJSignal::getVhdlOutputFile() => m_commonData does not exist." << endl;
 
 1522      if (large.
m_type == 1) {;}
 
 1537    signed long long t_maxValue;
 
 1551    signed long long t_minValue;
 
 1554    } 
else if (
m_type == -1) {
 
 1555      t_minValue = -pow(2, 
m_bitsize - 1) + 1;
 
 1557      t_minValue = -pow(2, 
m_bitsize - 1) + 1;
 
 1569    if (result.m_argumentSignals.size() == 0) result.initArgumentSignals();
 
 1571    if (result.m_type != 1) {
 
 1573      result.m_int = llabs(first.m_int);
 
 1574      if (first.m_minInt < 0 && first.m_maxInt > 0) result.m_minInt = 0;
 
 1575      else result.m_minInt = min(llabs(first.m_maxInt), llabs(first.m_minInt));
 
 1576      result.m_maxInt = max(llabs(first.m_maxInt), llabs(first.m_minInt));
 
 1577      result.m_actual = fabs(first.m_actual);
 
 1578      if (first.m_minActual < 0 && first.m_maxActual > 0) result.m_minActual = 0;
 
 1579      else result.m_minActual = min(fabs(first.m_maxActual), fabs(first.m_minActual));
 
 1580      result.m_maxActual = max(fabs(first.m_maxActual), fabs(first.m_minActual));
 
 1581      result.m_bitsize = first.m_bitsize - 1;
 
 1584    result.checkInt(
"TRGCDCJSignal::absolute()");
 
 1587    if (first.getPrintVhdl() == 1) 
vhdlCode(
"abs", first, result, result.m_vhdlCode);
 
 1671    if (first.m_type != second.m_type) {
 
 1672      cout << 
"[Error] TRGCDCJSignal::calVhdlTypeBitwidth() => first and second type are different." << endl;
 
 1673      cout << first.m_name << 
" " << second.m_name << endl;
 
 1674      cout << first.m_type << 
" " << second.m_type << endl;
 
 1677    int firstBitwidth = first.m_bitsize;
 
 1678    int secondBitwidth = second.m_bitsize;
 
 1680    if (operation == 
"+" || operation == 
"-") {
 
 1682      if (first.m_type != 1 || second.m_type != 1) {
 
 1684        bitwidth = max(firstBitwidth, secondBitwidth);
 
 1687        bitwidth = max(first.m_bitsize, second.m_bitsize);
 
 1689    } 
else if (operation == 
"*") {
 
 1691      if (first.m_type != 1 || second.m_type != 1) {
 
 1693        bitwidth = firstBitwidth + secondBitwidth;
 
 1696        bitwidth = first.m_bitsize + second.m_bitsize;
 
 1698    } 
else if (operation == 
"=" || operation == 
"/=" || operation == 
"<" || operation == 
"<=" ||
 
 1699               operation == 
">" || operation == 
">=" || operation == 
"and" || operation == 
"or") {
 
 1703      cout << 
"[Error] TRGCDCJSignal::calVhdlTypeBitwidth() => No operation named " << operation << 
"." << endl;
 
 1714          t_name = 
"decimal_string_to_unsigned(\"" + to_string(
m_int) + 
"\"," + to_string(
m_bitsize) + 
")";
 
 1717          t_name = 
"decimal_string_to_signed(\"" + to_string(
m_int) + 
"\"," + to_string(
m_bitsize) + 
")";
 
 1720      } 
else if (
m_name == 
"") {
 
 1721        t_name = 
"INPUT(" + to_string(
m_int) + 
")";
 
 1730      cout << 
"[Error] TRGCDCJSignal::initArgumentSignals() => m_argumentSignals.size() is not 0." << endl;
 
 1736    result.m_argumentSignals.clear();
 
 1737    result.m_argumentSignals.insert(result.m_argumentSignals.end(), first.m_argumentSignals.begin(), first.m_argumentSignals.end());
 
 1738    result.m_argumentSignals.insert(result.m_argumentSignals.end(), second.m_argumentSignals.begin(), second.m_argumentSignals.end());
 
 1744      cout << 
"[Error] TRGCDCJSignal::initVhdlCode() => m_vhdlCode is not \"\"." << endl;
 
 1752    if (
m_type == -1) 
return;
 
 1755    if (
calType() == 1) t_bitwidth++;
 
 1759    } 
else if (t_bitwidth - 1 == 
m_bitsize) {
 
 1763      cout << 
"[Error] TRGCDCJSignal::toSignedVhdlCode() => m_bitsize is too small." << endl;
 
 1773      cout << 
"[Warning] TRGCDCJSignal::toUnsignedVhdlCode() => signal can be minus." << endl;
 
 1797    if (t_first.
m_type * t_second.
m_type < 0 || (t_first.
m_type != -1 && result.m_type == -1)) {
 
 1798      if (t_first.
m_type != -1) {
 
 1801      if (t_second.
m_type != -1) {
 
 1810    int logicType, logicBitwidth, vhdlType, vhdlBitwidth;
 
 1811    logicType = result.m_type;
 
 1812    logicBitwidth = result.m_bitsize;
 
 1818    if (operation == 
"=" || operation == 
"/=" || operation == 
"<" || operation == 
"<=" ||
 
 1819        operation == 
">" || operation == 
">=" || operation == 
"and" || operation == 
"or") {
 
 1824      if (logicType > 0 && vhdlType == -1) {
 
 1825        if (logicBitwidth + 1 > vhdlBitwidth) t_first.
m_vhdlCode = 
"resize(" + t_first.
m_vhdlCode + 
"," + to_string(
 
 1826              logicBitwidth + 1) + 
")";
 
 1828        resultCode = 
"resize(unsigned(" + resultCode + 
")," + to_string(logicBitwidth) + 
")";
 
 1831        if (logicBitwidth > vhdlBitwidth) {
 
 1836        if (logicBitwidth < vhdlBitwidth) {
 
 1837          resultCode = 
"resize(" + resultCode + 
"," + to_string(logicBitwidth) + 
")";
 
 1841    resultVhdlCode = resultCode;
 
 1845                               string& resultVhdlCode)
 
 1855    if (t_first.
m_type != -1 && result.m_type == -1) {
 
 1862    int logicType, logicBitwidth, vhdlType, vhdlBitwidth;
 
 1863    logicType = result.m_type;
 
 1864    logicBitwidth = result.m_bitsize;
 
 1866    vhdlType = t_first.
m_type;
 
 1872    if (logicType == 1 && vhdlType == -1) {
 
 1873      if (logicBitwidth + 1 > vhdlBitwidth) t_first.
m_vhdlCode = 
"resize(" + t_first.
m_vhdlCode + 
"," + to_string(
 
 1874            logicBitwidth + 1) + 
")";
 
 1875      if (operation == 
"shift_left" 
 1876          || operation == 
"shift_right") resultCode = operation + 
"(" + t_first.
m_vhdlCode + 
"," + to_string(abs(
 
 1877                                                          first.m_bitsize - result.m_bitsize)) + 
")";
 
 1878      else if (operation == 
"unsigned" || operation == 
"none") resultCode = t_first.
m_vhdlCode;
 
 1879      else resultCode = operation + 
"(" + t_first.
m_vhdlCode + 
")";
 
 1880      resultCode = 
"resize(unsigned(" + resultCode + 
")," + to_string(logicBitwidth) + 
")";
 
 1883      if (logicBitwidth > vhdlBitwidth) {
 
 1886      if (operation == 
"shift_left" 
 1887          || operation == 
"shift_right") resultCode = operation + 
"(" + t_first.
m_vhdlCode + 
"," + to_string(abs(
 
 1888                                                          first.m_bitsize - result.m_bitsize)) + 
")";
 
 1889      else if (operation == 
"resize" || operation == 
"signed" || operation == 
"none") resultCode = t_first.
m_vhdlCode;
 
 1890      else resultCode = operation + 
"(" + t_first.
m_vhdlCode + 
")";
 
 1892      if (logicBitwidth < vhdlBitwidth) {
 
 1893        resultCode = 
"resize(" + resultCode + 
"," + to_string(logicBitwidth) + 
")";
 
 1896    resultVhdlCode = resultCode;
 
 1900                                                    std::vector<pair<std::string, vector<int> > > 
const& fromArgumentSignals, 
int const& finishClock,
 
 1901                                                    std::map<std::string, vector<int> >& buffers)
 
 1904    string t_vhdlCode = 
"";
 
 1906    size_t end = fromVhdlCode.find(
" ");
 
 1907    int nIndex = (int)fromArgumentSignals.size();
 
 1909    while (end != string::npos) {
 
 1911      if (nIndex - 1 < index) {
 
 1912        cout << 
"[Error] TRGCDCJSignal::replaceWithSignalNames() => Not enough signal names in m_argumentSignals." << endl;
 
 1917      int t_buffer = (finishClock - 1) - fromArgumentSignals[index].second[2] - 1;
 
 1919      if (t_buffer == -1 || t_buffer == -2
 
 1920          || fromArgumentSignals[index].second[2] == -1) t_vhdlCode += fromVhdlCode.substr(start,
 
 1921                end - start) + fromArgumentSignals[index].first;
 
 1922      else if (t_buffer > -1) {
 
 1923        t_vhdlCode += fromVhdlCode.substr(start, end - start) + fromArgumentSignals[index].first + 
"_b(" + to_string(t_buffer) + 
")";
 
 1925        if (buffers.find(fromArgumentSignals[index].first) == buffers.end()) {
 
 1926          buffers[fromArgumentSignals[index].first] = {fromArgumentSignals[index].second[0], fromArgumentSignals[index].second[1], t_buffer};
 
 1928          if (buffers[fromArgumentSignals[index].first][2] < t_buffer) buffers[fromArgumentSignals[index].first][2] = t_buffer;
 
 1931        cout << 
"[Error] TRGCDCJSignal::replaceWithSignalNames() => finishClock is too small." << endl;
 
 1932        t_vhdlCode += fromVhdlCode.substr(start, end - start) + fromArgumentSignals[index].first;
 
 1937      end = fromVhdlCode.find(
" ", start);
 
 1939    t_vhdlCode += fromVhdlCode.substr(start, end - start);
 
 1941    if (nIndex != index) {
 
 1942      cout << 
"[Error] TRGCDCJSignal::replaceWithSignalNames() => Number of signal names and number of " " do not match." << endl;
 
 1952    if (target.m_commonData == 0) {
 
 1953      cout << 
"[Error] TRGCDCJSignal::assignVhdlCode() => target.m_commonData is not set." << endl;
 
 1966      if (target.m_name == 
"") cout << 
"[Error] TRGCDCJSignal::assignVhdlCode() => target.m_name is \"\" " << endl;
 
 1967      map<string, vector<int> >& t_signals = target.m_commonData->m_signals;
 
 1968      if (t_signals.find(target.m_name) == t_signals.end()) {
 
 1980    return target.m_name + 
"<=" + t_vhdlCode + 
";";
 
 2005                                            std::vector<std::vector<TRGCDCJSignal> > 
const& data)
 
 2008    if (target.m_name == 
"") {
 
 2009      cout << 
"[Error] TRGCDCJSignal::chooseVhdlCode() => target has no name." << endl;
 
 2014      cout << 
"[Error] TRGCDCJSignal::cooseVhdlCode() => reference has no name or vhdlCode." << endl;
 
 2029    stringstream t_vhdlCode;
 
 2056                                                   target.m_commonData->m_buffers);
 
 2058                                                 target.m_commonData->m_buffers);
 
 2059    string t_fromPrefixSigned;
 
 2060    string t_fromPostfixSigned;
 
 2061    string t_toPrefixSigned;
 
 2062    string t_toPostfixSigned;
 
 2064      t_fromPrefixSigned = 
"signed('0'&";
 
 2065      t_fromPostfixSigned = 
")";
 
 2067      t_fromPrefixSigned = 
"";
 
 2068      t_fromPostfixSigned = 
"";
 
 2071      t_toPrefixSigned = 
"signed('0'&";
 
 2072      t_toPostfixSigned = 
")";
 
 2074      t_toPrefixSigned = 
"";
 
 2075      t_toPostfixSigned = 
"";
 
 2077    t_vhdlCode << 
"if (" << t_referenceVhdlCode << 
" >= " << t_fromPrefixSigned << t_fromVhdlCode << t_fromPostfixSigned << 
") and (" <<
 
 2078               t_referenceVhdlCode << 
" <= " << t_toPrefixSigned << t_toVhdlCode << t_toPostfixSigned << 
") then" << endl;
 
 2082    for (
unsigned iCondition = 1; iCondition < data.size() - 1; iCondition++) {
 
 2089        t_fromPrefixSigned = 
"signed('0'&";
 
 2090        t_fromPostfixSigned = 
")";
 
 2092        t_fromPrefixSigned = 
"";
 
 2093        t_fromPostfixSigned = 
"";
 
 2096        t_toPrefixSigned = 
"signed('0'&";
 
 2097        t_toPostfixSigned = 
")";
 
 2099        t_toPrefixSigned = 
"";
 
 2100        t_toPostfixSigned = 
"";
 
 2103                                              target.m_commonData->m_buffers);
 
 2105      t_vhdlCode << 
"elsif (" << t_referenceVhdlCode << 
" >= " << t_fromPrefixSigned << t_fromVhdlCode << t_fromPostfixSigned << 
") and (" 
 2106                 << t_referenceVhdlCode << 
" <= " << t_toPrefixSigned << t_toVhdlCode << t_toPostfixSigned << 
") then" << endl;
 
 2109    t_vhdlCode << 
"else" << endl;
 
 2110    t_vhdlCode << 
"  " << 
assignVhdlCode(target, (*(data.end() - 1))[0]) << endl;
 
 2111    t_vhdlCode << 
"end if;";
 
 2112    return t_vhdlCode.str();
 
 2116    std::vector<std::pair<
TRGCDCJSignal, std::vector<std::pair<TRGCDCJSignal*, TRGCDCJSignal> > > > 
const& data)
 
 2119    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
 2121      if (iCase != data.size() - 1) {
 
 2123          cout << 
"[Error] TRGCDCJSignal::ifElseVhdlCode() => comp has no name." << endl;
 
 2127      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
 2128        TRGCDCJSignal const& lhs = *(data[iCase].second[iAssignment].first);
 
 2130          cout << 
"[Error] TRGCDCJSignal::ifElseVhdlCode() => lhs has no name." << endl;
 
 2138    stringstream t_vhdlCode;
 
 2139    for (
unsigned iCase = 0; iCase < data.size(); iCase++) {
 
 2144      if (iCase == 0) t_vhdlCode << 
"if " << t_compVhdlCode << 
" then" << endl;
 
 2145      else if (
comp.
m_bitsize == -1) t_vhdlCode << 
"else" << endl;
 
 2146      else t_vhdlCode << 
"elsif " << t_compVhdlCode << 
" then" << endl;
 
 2147      for (
unsigned iAssignment = 0; iAssignment < data[iCase].second.size(); iAssignment++) {
 
 2148        TRGCDCJSignal const& lhs = *(data[iCase].second[iAssignment].first);
 
 2149        TRGCDCJSignal const& rhs = data[iCase].second[iAssignment].second;
 
 2153    t_vhdlCode << 
"end if;";
 
 2155    return t_vhdlCode.str();
 
 2164      if (outFile.is_open()) {
 
 2169      cout << 
"[Error] TRGCDCJSignal::printVhdl() => m_commonData doesn't exist." << endl;
 
 2176      cout << 
"[Error] " << name << 
" => m_int overflow" << endl;
 
 2177      cout << 
" Start dumping" << endl;
 
 2179      cout << 
" End dumping" << endl;
 
 2182      cout << 
"[Error] " << name << 
" => m_int underflow" << endl;
 
 2183      cout << 
" Start dumping" << endl;
 
 2185      cout << 
" End dumping" << endl;
 
 2188      cout << 
"[Error] " << name << 
" => m_maxInt overflow" << endl;
 
 2189      cout << 
" Start dumping" << endl;
 
 2191      cout << 
" End dumping" << endl;
 
 2194      cout << 
"[Error] " << name << 
" => m_minInt underflow" << endl;
 
 2195      cout << 
" Start dumping" << endl;
 
 2197      cout << 
" End dumping" << endl;
 
 2211    for (
unsigned iSignals = 0; iSignals < inValues.size(); iSignals++) {
 
 2212      string const& t_name = get<0>(inValues[iSignals]);
 
 2213      double const& t_value = get<1>(inValues[iSignals]);
 
 2214      int const& t_bitWidth = get<2>(inValues[iSignals]);
 
 2215      double const& t_min = get<3>(inValues[iSignals]);
 
 2216      double const& t_max = get<4>(inValues[iSignals]);
 
 2217      int const& t_clock = get<5>(inValues[iSignals]);
 
 2226                                         std::vector<std::pair<std::string, int> > 
const& inChoose,
 
 2227                                         std::vector<std::tuple<string, double, int, double, double, int> >& outValues)
 
 2229    for (
unsigned iSignals = 0; iSignals < inChoose.size(); iSignals++) {
 
 2230      int const& b_integerEffect = inChoose[iSignals].second;
 
 2231      string const& t_name = inChoose[iSignals].first;
 
 2233      double t_value = 0, t_min = 0, t_max = 0;
 
 2235      if (b_integerEffect == 1) {
 
 2245      tuple<string, double, int, double, double, int> outValue(t_name, t_value, t_bitwidth, t_min, t_max, t_clock);
 
 2246      outValues.push_back(outValue);
 
A class to hold common data for JSignals.
bool m_printVhdl
Status if code should be printed.
std::string m_vhdlInProcess
Holds VHDL process code.
std::string m_vhdlOutputFile
Memebers.
std::map< std::string, std::vector< int > > m_buffers
vector<int> is {type, bitwidth, buffer} Holds all the requried VHDL buffers.
A class to use Signals for TRGCDC 3D tracker.
std::vector< std::pair< std::string, std::vector< int > > > m_argumentSignals
vector<int> is {type, bitwidth, clock} Holds the arguments that made the signal.
int m_finishClock
Holds the clock tick when the signal is valid.
double m_toReal
The toReal value.
double m_minActual
The minimum float value.
bool m_debug
The debug flag.
signed long long m_minInt
The minimum integer value.
double m_maxActual
The maximum float value.
int m_bitsize
+1: unsigned.
int m_type
Type of signal.
signed long long m_int
integer value of signal.
TRGCDCJSignalData * m_commonData
The common JSignalData.
signed long long m_maxInt
The maximum integer value.
std::string m_name
Memebers.
std::string m_vhdlCode
Holds the vhdl code.
double m_actual
The float value.
std::vector< bool > m_slv
storage for std_logic_vector. (Will be deprecated.)
static double roundInt(double value)
Round double value.
signed long long calMaxInteger() const
Calculate max value for a binary number.
int calType() const
Calculated what type the signal is.
double getActual() const
Get float value of signal.
TRGCDCJSignal const invOffset(TRGCDCJSignal const &valueMin) const
Outputs a signal that is not offset.
void printVhdl(const std::string &vhdlCode) const
Prints vhdl code.
std::string getName() const
Get name of signal.
std::string getVhdlOutputFile() const
Gets the vhdl output file name.
void setCommonData(TRGCDCJSignalData *)
Sets JSignalData to signal.
void setBitsize(int bitsize)
Sets bitwidth of signal.
TRGCDCJSignal const operator-() const
Unary operator.
static void vhdlCode(TRGCDCJSignal const &first, const std::string &operation, TRGCDCJSignal const &second, TRGCDCJSignal const &result, std::string &targtVhdlCode)
Writes vhdl code using two signals.
static void valuesToMapSignals(std::vector< std::tuple< std::string, double, int, double, double, int > > const &inValues, Belle2::TRGCDCJSignalData *inCommonData, std::map< std::string, Belle2::TRGCDCJSignal > &outMap)
Values => [name, value, bitwidth, min, max, clock] Changes values to signals.
TRGCDCJSignal const operator+(TRGCDCJSignal const &rhs) const
Arithmetic add operator.
TRGCDCJSignal & assignTo(TRGCDCJSignal const &rhs, int targetClock, std::string &finalCode)
Assign operator with setting target clock with outputing final code.
TRGCDCJSignal const offset(TRGCDCJSignal const &valueMin) const
Outputs an offset signal which is an unsigned signal.
bool orderLargestBitsize(TRGCDCJSignal &large, TRGCDCJSignal &small) const
Orders the TRGCDCJSignals by bitsize. Next priority is unsigned, signed, minus unsigned....
static bool isSameSignal(TRGCDCJSignal const &lhs, TRGCDCJSignal const &rhs)
Checks if signal is same signal.
void setActual(double value)
Sets float value of signal.
static std::string replaceWithSignalNames(std::string const &fromVhdlCode, std::vector< std::pair< std::string, std::vector< int > > > const &fromVhdlSignals, int const &finishClock, std::map< std::string, std::vector< int > > &buffers)
Writes final vhdl code.
TRGCDCJSignal const shift(int nBits, int operate=1) const
Shift signal. Shift direction is right. operate=0 to change m_toReal(unit).
TRGCDCJSignalData * getCommonData() const
Get the sharged JSignalData.
double getMaxActual() const
Get maximum float value of signal.
static void choose(TRGCDCJSignal &target, TRGCDCJSignal const &targetMin, TRGCDCJSignal const &targetMax, TRGCDCJSignal const &reference, std::vector< std::vector< TRGCDCJSignal > > data, int targetClock)
Case method.
static TRGCDCJSignal const toSlv(TRGCDCJSignal const &in, int test)
Change signal to std_logic_vector using vector<bool>. (Will be deprecated.)
void initArgumentSignals()
Initializes the argument signals for the signal.
void setVhdlOutputFile(const std::string &filename)
Sets ouptut VHDL filename.
std::string getVhdlCode() const
Gets the vhdl code for the signal.
void setInt(signed long long value)
Sets integer value of signal.
int calBitwidth() const
Calculates the bit width.
bool getPrintVhdl() const
Gets the print vhdl flag from common JSignalData class.
static void ifElse(std::vector< std::pair< TRGCDCJSignal, std::vector< std::pair< TRGCDCJSignal *, TRGCDCJSignal > > > > &data, int targetClock)
If else implementation with target clock.
std::vector< std::pair< std::string, std::vector< int > > > const getArgumentSignals() const
Gets the signal names and values that made this signal.
static std::string assignVhdlCode(TRGCDCJSignal const &target, TRGCDCJSignal const &from)
Writes the assign vhdl code.
TRGCDCJSignal const resize(int bitwidth) const
Resizes signal.
double getRealMinInt() const
Get converted float value of minimum integer.
static void combineArguments(TRGCDCJSignal const &first, TRGCDCJSignal const &second, TRGCDCJSignal &result)
Combines arguments of signals.
static std::string chooseVhdlCode(TRGCDCJSignal const &target, TRGCDCJSignal const &reference, std::vector< std::vector< TRGCDCJSignal > > const &data)
Writes the choose vhdl code.
static TRGCDCJSignal const absolute(TRGCDCJSignal const &first)
Absolute TRGCDCJSignal. Removes 1 bit if signed or minus unsigned.
int getFinishClock() const
Gets clock tick where signal is make.
static signed long long calInt(double value, TRGCDCJSignal const &mother)
Calculates integer value with unit of a TRGCDCJSignal.
void setFinishClock(int finishClock)
Sets finish clock of signal.
signed long long getInt() const
Get integer value of signal.
double getToReal() const
Get toReal value of signal.
void matchUnit(TRGCDCJSignal &first, TRGCDCJSignal &second) const
Utilities.
void setDebug(bool debug)
Sets debug flag for signal.
TRGCDCJSignal const limit(signed long long minInt, signed long long maxInt, double minActual, double maxActual) const
Limits min and max values using specific integers. Use only for ifElse. Doesn't check overflow,...
static void calVhdlTypeBitwidth(TRGCDCJSignal const &first, const std::string &operation, TRGCDCJSignal const &second, int &type, int &bitwidth)
Calculates vhdl bitwidth and type for operation.
void setName(const std::string &name)
Setters, Getters Sets name of signal.
double getRealMaxInt() const
Get converted float value of maximum integer.
void checkInt(const std::string &name) const
Checks underflow or overflow for TRGCDCJSignal.
void swap(TRGCDCJSignal &first, TRGCDCJSignal &second) const
Swaps the TRGCDCJSignals.
TRGCDCJSignal const operator*(TRGCDCJSignal const &rhs) const
Arithmetic multiply operator.
double getBitsize() const
Get bitwidth of signal.
TRGCDCJSignal & operator<=(TRGCDCJSignal const &rhs)
Assign operator.
signed long long calMinInteger() const
Calculate min value for a binary number.
void initVhdlCode()
Initializes the vhdl code.
void setPrintVhdl(bool printVhdl)
Sets print flag for signal.
int getType() const
Get type of signal.
static std::string ifElseVhdlCode(std::vector< std::pair< TRGCDCJSignal, std::vector< std::pair< TRGCDCJSignal *, TRGCDCJSignal > > > > const &data)
Writes the ifElse vhdl code.
void toUnsignedVhdlCode()
Changes signal type to unsigned type in VHDL.
double getMinActual() const
Get minimum float value of signal.
signed long long getMaxInt() const
Get maximum integer value of signal.
int calFinishClock() const
Claculates the clock tick where the signal is valid.
static TRGCDCJSignal const slvToUnsigned(TRGCDCJSignal const &in, double const &toReal, signed long long const &minInt, signed long long const &maxInt, double const &actual, double const &minActual, double const &maxActual, int const &finishClock)
Change slv to unsigned with target clock.
void dump() const
Methods.
double getRealInt() const
Get converted float value of integer.
TRGCDCJSignal()
Constructor.
signed long long getMinInt() const
Get minimum integer value of signal.
void setToReal(double value)
Sets toReal factor of signal.
static void mapSignalsToValues(std::map< std::string, Belle2::TRGCDCJSignal >const &inMap, std::vector< std::pair< std::string, int > > const &inChoose, std::vector< std::tuple< std::string, double, int, double, double, int > > &outValues)
Choose => [signalName, FpgaEffects(=1)/NoFpgaEffects(=0)] Values => [name, value, bitwidth,...
void setType(int type)
Sets type of signal.
void toSignedVhdlCode()
Changes signal type to signed type in VHDL.
static TRGCDCJSignal comp(TRGCDCJSignal const &lhs, const std::string &operate, TRGCDCJSignal const &rhs)
Compare two signals.
static TRGCDCJSignal const slvToSigned(TRGCDCJSignal const &in, double const &toReal, signed long long const &minInt, signed long long const &maxInt, double const &actual, double const &minActual, double const &maxActual, int const &finishClock)
Change slv to signed with target clock.
Abstract base class for different kinds of events.