Skip to content

Commit c253d31

Browse files
authored
Merge pull request #681 from os-fpga/pin_c_debug_print_for_EDA2777
pin_c: debug print for EDA-2777
2 parents be4bc6d + 550d1b8 commit c253d31

File tree

11 files changed

+179
-21
lines changed

11 files changed

+179
-21
lines changed

pin_c/src/file_readers/pinc_Fio_csv.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,12 +516,19 @@ int CSV_Reader::dprint1() const noexcept {
516516

517517
logVec(header_, " header_:");
518518

519-
lputs();
520-
logVec(lowHeader_, " lowHeader_:");
521-
lputs();
519+
flush_out(true);
520+
521+
if (trace() >= 6) {
522+
logVec(lowHeader_, " lowHeader_:");
523+
flush_out(true);
524+
}
522525

523526
lprintf(" lines_.size()= %zu\n", lines_.size());
524-
if (lines_.size() > 3 && lines_[2] && nc_ < 400) lprintf(" lines_[2] %s\n", lines_[2]);
527+
528+
if (trace() >= 6) {
529+
if (lines_.size() > 3 && lines_[2] && nc_ < 400)
530+
lprintf(" lines_[2] %s\n", lines_[2]);
531+
}
525532

526533
return sz_;
527534
}

pin_c/src/pin_loc/pcf_place.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ void PinPlacer::print_stats(const RapidCsvReader& csv) const {
139139
flush_out(true);
140140
err_puts();
141141
lprintf2(" [CRITICAL_WARNING] pin_c: detected XYZ overlap in placed pins\n");
142+
incrCriticalWarnings();
142143
err_puts();
143144
flush_out(true);
144145
}
@@ -249,6 +250,7 @@ void PinPlacer::print_stats(const RapidCsvReader& csv) const {
249250
flush_out(true);
250251
err_puts();
251252
lprintf2(" [CRITICAL_WARNING] pin_c: detected XYZ overlap in placed pins\n");
253+
incrCriticalWarnings();
252254
err_puts();
253255
flush_out(true);
254256
if (inp_ov.size()) {
@@ -351,6 +353,13 @@ void PinPlacer::print_summary(const string& csv_name) const {
351353
lprintf(" user-PCF : %s\n", user_pcf_.c_str());
352354
lprintf(" pinc_trace verbosity= %u\n", tr);
353355

356+
if (num_critical_warnings_) {
357+
flush_out(true);
358+
err_puts();
359+
lprintf2(" [Error] NOTE CRITICAL_WARNINGs (%u)\n", num_critical_warnings_);
360+
flush_out(true);
361+
}
362+
354363
ls << "======== end pin_c summary." << endl;
355364
flush_out(true);
356365
}
@@ -1352,6 +1361,7 @@ bool PinPlacer::create_temp_pcf(RapidCsvReader& csv) {
13521361
flush_out(true);
13531362
err_puts();
13541363
lprintf2(" [CRITICAL_WARNING] pin_c: failed getting device pin for input pin: %s\n", pinName.c_str());
1364+
incrCriticalWarnings();
13551365
err_puts();
13561366
set_err_code("TOO_MANY_INPUTS");
13571367
num_warnings_++;
@@ -1422,6 +1432,7 @@ bool PinPlacer::create_temp_pcf(RapidCsvReader& csv) {
14221432
flush_out(true);
14231433
err_puts();
14241434
lprintf2(" [CRITICAL_WARNING] pin_c: failed getting device pin for output pin: %s\n", pinName.c_str());
1435+
incrCriticalWarnings();
14251436
err_puts();
14261437
set_err_code("TOO_MANY_OUTPUTS");
14271438
num_warnings_++;

pin_c/src/pin_loc/pin_placer.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,43 @@ bool PinPlacer::read_and_write() {
386386
}
387387
}
388388
}
389-
}
389+
390+
if (tr >= 3) {
391+
flush_out(true);
392+
uint sz = user_design_inputs_.size();
393+
lprintf(" ---- dumping user_design_inputs_ after translation (%u) --\n", sz);
394+
for (uint i = 0; i < sz; i++)
395+
lprintf(" inp-%u %s\n", i, user_design_input(i).c_str());
396+
lprintf(" ----\n");
397+
sz = user_design_outputs_.size();
398+
lprintf(" ---- dumping user_design_outputs_ after translation (%u) --\n", sz);
399+
for (uint i = 0; i < sz; i++)
400+
lprintf(" out-%u %s\n", i, user_design_output(i).c_str());
401+
lprintf(" ----\n");
402+
}
403+
404+
// check overlap of inputs with outputs:
405+
uint numInp = user_design_inputs_.size();
406+
uint numOut = user_design_outputs_.size();
407+
for (uint i = 0; i < numInp; i++) {
408+
const string& inp = user_design_input(i);
409+
assert(!inp.empty());
410+
for (uint j = 0; j < numOut; j++) {
411+
const string& out = user_design_output(j);
412+
assert(!out.empty());
413+
if (inp == out) {
414+
flush_out(true);
415+
err_puts();
416+
lprintf2(" [CRITICAL_WARNING] pin '%s' is both input and output (after NL-edits).\n",
417+
inp.c_str());
418+
incrCriticalWarnings();
419+
flush_out(true);
420+
}
421+
}
422+
}
423+
424+
} // has_edits
425+
390426
if (!create_temp_pcf(csv_rd)) {
391427
flush_out(true);
392428
string ec = s_err_code.empty() ? "FAIL_TO_CREATE_TEMP_PCF" : s_err_code;

pin_c/src/pin_loc/pin_placer.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
2-
#ifndef __rs_PinPlacer_fa337e863b11ab_H_
3-
#define __rs_PinPlacer_fa337e863b11ab_H_
2+
#ifndef _pln_PinPlacer_fa337e863b11ab_H_
3+
#define _pln_PinPlacer_fa337e863b11ab_H_
44

55
#include <set>
66
#include <unordered_set>
@@ -205,7 +205,9 @@ struct PinPlacer {
205205
//
206206
bool no_more_inp_bumps_ = false; // state for get_available_device_pin()
207207
bool no_more_out_bumps_ = false; //
208-
uint num_warnings_ = 0;
208+
209+
mutable uint num_warnings_ = 0, num_critical_warnings_ = 0;
210+
void incrCriticalWarnings() const noexcept { num_critical_warnings_++; }
209211

210212
static bool read_port_info(std::ifstream& json_ifs, vector<string>& inputs,
211213
vector<string>& outputs);

pin_c/src/pin_loc/read_ports.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,34 @@ bool PinPlacer::read_design_ports() {
109109
for (size_t i = 0; i < sz; i++)
110110
user_design_outputs_[i].udes_pin_name_ = raw_design_outputs_[i];
111111

112-
if (tr >= 4) {
112+
if (tr >= 3) {
113+
flush_out(tr >= 5);
113114
lprintf(
114115
"DONE read_design_ports() #udes_inputs= %zu #udes_outputs= %zu\n",
115116
raw_design_inputs_.size(), raw_design_outputs_.size());
116117
}
117118

119+
if (tr >= 5) {
120+
flush_out(true);
121+
122+
sz = user_design_inputs_.size();
123+
lprintf(" ---- dumping user_design_inputs_ (%zu) ----\n", sz);
124+
for (uint i = 0; i < sz; i++)
125+
lprintf(" inp-%u %s\n", i, user_design_input(i).c_str());
126+
lprintf(" ----\n");
127+
128+
sz = user_design_outputs_.size();
129+
lprintf(" ---- dumping user_design_outputs_ (%zu) ----\n", sz);
130+
for (uint i = 0; i < sz; i++)
131+
lprintf(" out-%u %s\n", i, user_design_output(i).c_str());
132+
lprintf(" ----\n");
133+
134+
lprintf(
135+
"DONE read_design_ports() #udes_inputs= %zu #udes_outputs= %zu\n",
136+
raw_design_inputs_.size(), raw_design_outputs_.size());
137+
}
138+
139+
flush_out(true);
118140
return true;
119141
}
120142

@@ -184,7 +206,8 @@ bool PinPlacer::read_edits() {
184206
if (!check_ok) {
185207
flush_out(true);
186208
err_puts();
187-
lprintf2(" [CRITICAL_WARNING] NOTE: netlist modifications (config.json) have overlapping pins\n");
209+
lprintf2(" [WARNING] NOTE: netlist modifications (config.json) have overlapping pins\n");
210+
// incrCriticalWarnings();
188211
err_puts();
189212
flush_out(true);
190213
}

stars/src/file_readers/pinc_Fio_csv.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,12 +516,19 @@ int CSV_Reader::dprint1() const noexcept {
516516

517517
logVec(header_, " header_:");
518518

519-
lputs();
520-
logVec(lowHeader_, " lowHeader_:");
521-
lputs();
519+
flush_out(true);
520+
521+
if (trace() >= 6) {
522+
logVec(lowHeader_, " lowHeader_:");
523+
flush_out(true);
524+
}
522525

523526
lprintf(" lines_.size()= %zu\n", lines_.size());
524-
if (lines_.size() > 3 && lines_[2] && nc_ < 400) lprintf(" lines_[2] %s\n", lines_[2]);
527+
528+
if (trace() >= 6) {
529+
if (lines_.size() > 3 && lines_[2] && nc_ < 400)
530+
lprintf(" lines_[2] %s\n", lines_[2]);
531+
}
525532

526533
return sz_;
527534
}

stars/src/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
static const char* _pln_VERSION_STR = "pln0187";
1+
static const char* _pln_VERSION_STR = "pln0189";
22

33
#include "RS/rsEnv.h"
44
#include "util/pln_log.h"

stars/src/pin_loc/pcf_place.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ void PinPlacer::print_stats(const RapidCsvReader& csv) const {
139139
flush_out(true);
140140
err_puts();
141141
lprintf2(" [CRITICAL_WARNING] pin_c: detected XYZ overlap in placed pins\n");
142+
incrCriticalWarnings();
142143
err_puts();
143144
flush_out(true);
144145
}
@@ -249,6 +250,7 @@ void PinPlacer::print_stats(const RapidCsvReader& csv) const {
249250
flush_out(true);
250251
err_puts();
251252
lprintf2(" [CRITICAL_WARNING] pin_c: detected XYZ overlap in placed pins\n");
253+
incrCriticalWarnings();
252254
err_puts();
253255
flush_out(true);
254256
if (inp_ov.size()) {
@@ -351,6 +353,13 @@ void PinPlacer::print_summary(const string& csv_name) const {
351353
lprintf(" user-PCF : %s\n", user_pcf_.c_str());
352354
lprintf(" pinc_trace verbosity= %u\n", tr);
353355

356+
if (num_critical_warnings_) {
357+
flush_out(true);
358+
err_puts();
359+
lprintf2(" [Error] NOTE CRITICAL_WARNINGs (%u)\n", num_critical_warnings_);
360+
flush_out(true);
361+
}
362+
354363
ls << "======== end pin_c summary." << endl;
355364
flush_out(true);
356365
}
@@ -1352,6 +1361,7 @@ bool PinPlacer::create_temp_pcf(RapidCsvReader& csv) {
13521361
flush_out(true);
13531362
err_puts();
13541363
lprintf2(" [CRITICAL_WARNING] pin_c: failed getting device pin for input pin: %s\n", pinName.c_str());
1364+
incrCriticalWarnings();
13551365
err_puts();
13561366
set_err_code("TOO_MANY_INPUTS");
13571367
num_warnings_++;
@@ -1422,6 +1432,7 @@ bool PinPlacer::create_temp_pcf(RapidCsvReader& csv) {
14221432
flush_out(true);
14231433
err_puts();
14241434
lprintf2(" [CRITICAL_WARNING] pin_c: failed getting device pin for output pin: %s\n", pinName.c_str());
1435+
incrCriticalWarnings();
14251436
err_puts();
14261437
set_err_code("TOO_MANY_OUTPUTS");
14271438
num_warnings_++;

stars/src/pin_loc/pin_placer.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,43 @@ bool PinPlacer::read_and_write() {
386386
}
387387
}
388388
}
389-
}
389+
390+
if (tr >= 3) {
391+
flush_out(true);
392+
uint sz = user_design_inputs_.size();
393+
lprintf(" ---- dumping user_design_inputs_ after translation (%u) --\n", sz);
394+
for (uint i = 0; i < sz; i++)
395+
lprintf(" inp-%u %s\n", i, user_design_input(i).c_str());
396+
lprintf(" ----\n");
397+
sz = user_design_outputs_.size();
398+
lprintf(" ---- dumping user_design_outputs_ after translation (%u) --\n", sz);
399+
for (uint i = 0; i < sz; i++)
400+
lprintf(" out-%u %s\n", i, user_design_output(i).c_str());
401+
lprintf(" ----\n");
402+
}
403+
404+
// check overlap of inputs with outputs:
405+
uint numInp = user_design_inputs_.size();
406+
uint numOut = user_design_outputs_.size();
407+
for (uint i = 0; i < numInp; i++) {
408+
const string& inp = user_design_input(i);
409+
assert(!inp.empty());
410+
for (uint j = 0; j < numOut; j++) {
411+
const string& out = user_design_output(j);
412+
assert(!out.empty());
413+
if (inp == out) {
414+
flush_out(true);
415+
err_puts();
416+
lprintf2(" [CRITICAL_WARNING] pin '%s' is both input and output (after NL-edits).\n",
417+
inp.c_str());
418+
incrCriticalWarnings();
419+
flush_out(true);
420+
}
421+
}
422+
}
423+
424+
} // has_edits
425+
390426
if (!create_temp_pcf(csv_rd)) {
391427
flush_out(true);
392428
string ec = s_err_code.empty() ? "FAIL_TO_CREATE_TEMP_PCF" : s_err_code;

stars/src/pin_loc/pin_placer.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
2-
#ifndef __rs_PinPlacer_fa337e863b11ab_H_
3-
#define __rs_PinPlacer_fa337e863b11ab_H_
2+
#ifndef _pln_PinPlacer_fa337e863b11ab_H_
3+
#define _pln_PinPlacer_fa337e863b11ab_H_
44

55
#include <set>
66
#include <unordered_set>
@@ -205,7 +205,9 @@ struct PinPlacer {
205205
//
206206
bool no_more_inp_bumps_ = false; // state for get_available_device_pin()
207207
bool no_more_out_bumps_ = false; //
208-
uint num_warnings_ = 0;
208+
209+
mutable uint num_warnings_ = 0, num_critical_warnings_ = 0;
210+
void incrCriticalWarnings() const noexcept { num_critical_warnings_++; }
209211

210212
static bool read_port_info(std::ifstream& json_ifs, vector<string>& inputs,
211213
vector<string>& outputs);

0 commit comments

Comments
 (0)