Fix overly aggressive --protect-lib check

This commit is contained in:
Todd Strader 2019-11-30 09:18:49 -05:00
parent 13569ed98b
commit 00979ede14
2 changed files with 42 additions and 25 deletions

View File

@ -65,6 +65,7 @@ class ProtectVisitor : public AstNVisitor {
AstTextBlock* m_cIgnoreParamsp; // Combo ignore parameter list AstTextBlock* m_cIgnoreParamsp; // Combo ignore parameter list
string m_libName; string m_libName;
string m_topName; string m_topName;
bool m_foundTop; // Have seen the top module
// VISITORS // VISITORS
virtual void visit(AstNetlist* nodep) { virtual void visit(AstNetlist* nodep) {
@ -78,7 +79,11 @@ class ProtectVisitor : public AstNVisitor {
} }
virtual void visit(AstNodeModule* nodep) { virtual void visit(AstNodeModule* nodep) {
UASSERT_OBJ(!nodep->nextp(), nodep, "Multiple root modules"); if (!nodep->isTop()) {
return;
} else {
UASSERT_OBJ(!m_foundTop, nodep, "Multiple root modules");
}
FileLine* fl = nodep->fileline(); FileLine* fl = nodep->fileline();
createSvFile(fl); createSvFile(fl);
createCppFile(fl); createCppFile(fl);
@ -88,6 +93,7 @@ class ProtectVisitor : public AstNVisitor {
V3Hash hash = V3Hashed::uncachedHash(m_cfilep); V3Hash hash = V3Hashed::uncachedHash(m_cfilep);
m_hashValuep->addText(fl, cvtToStr(hash.fullValue())+";\n"); m_hashValuep->addText(fl, cvtToStr(hash.fullValue())+";\n");
m_cHashValuep->addText(fl, cvtToStr(hash.fullValue())+";\n"); m_cHashValuep->addText(fl, cvtToStr(hash.fullValue())+";\n");
m_foundTop = true;
} }
void addComment(AstTextBlock* txtp, FileLine* fl, const string& comment) { void addComment(AstTextBlock* txtp, FileLine* fl, const string& comment) {
@ -439,7 +445,7 @@ class ProtectVisitor : public AstNVisitor {
m_comboAssignsp(NULL), m_cHashValuep(NULL), m_cComboParamsp(NULL), m_cComboInsp(NULL), m_comboAssignsp(NULL), m_cHashValuep(NULL), m_cComboParamsp(NULL), m_cComboInsp(NULL),
m_cComboOutsp(NULL), m_cSeqParamsp(NULL), m_cSeqClksp(NULL), m_cSeqOutsp(NULL), m_cComboOutsp(NULL), m_cSeqParamsp(NULL), m_cSeqClksp(NULL), m_cSeqOutsp(NULL),
m_cIgnoreParamsp(NULL), m_libName(v3Global.opt.protectLib()), m_cIgnoreParamsp(NULL), m_libName(v3Global.opt.protectLib()),
m_topName(v3Global.opt.prefix()) m_topName(v3Global.opt.prefix()), m_foundTop(false)
{ {
iterate(nodep); iterate(nodep);
} }

View File

@ -3,30 +3,30 @@
// without warranty, 2019 by Todd Strader. // without warranty, 2019 by Todd Strader.
module secret ( module secret (
input [31:0] accum_in, input [31:0] accum_in,
output wire [31:0] accum_out, output wire [31:0] accum_out,
input accum_bypass, input accum_bypass,
output [31:0] accum_bypass_out, output [31:0] accum_bypass_out,
input s1_in, input s1_in,
output logic s1_out, output logic s1_out,
input [1:0] s2_in, input [1:0] s2_in,
output logic [1:0] s2_out, output logic [1:0] s2_out,
input [7:0] s8_in, input [7:0] s8_in,
output logic [7:0] s8_out, output logic [7:0] s8_out,
input [32:0] s33_in, input [32:0] s33_in,
output logic [32:0] s33_out, output logic [32:0] s33_out,
input [63:0] s64_in, input [63:0] s64_in,
output logic [63:0] s64_out, output logic [63:0] s64_out,
input [64:0] s65_in, input [64:0] s65_in,
output logic [64:0] s65_out, output logic [64:0] s65_out,
input [128:0] s129_in, input [128:0] s129_in,
output logic [128:0] s129_out, output logic [128:0] s129_out,
input [3:0] [31:0] s4x32_in, input [3:0] [31:0] s4x32_in,
output logic [3:0] [31:0] s4x32_out, output logic [3:0] [31:0] s4x32_out,
input clk); input clk);
logic [31:0] secret_accum_q = 0; logic [31:0] secret_accum_q = 0;
logic [31:0] secret_value = 7; logic [31:0] secret_value = 7;
initial $display("created %m"); initial $display("created %m");
@ -39,13 +39,14 @@ module secret (
s1_out = s1_in; s1_out = s1_in;
s2_out = s2_in; s2_out = s2_in;
s8_out = s8_in; s8_out = s8_in;
s33_out = s33_in;
s64_out = s64_in; s64_out = s64_in;
s65_out = s65_in; s65_out = s65_in;
s129_out = s129_in; s129_out = s129_in;
s4x32_out = s4x32_in; s4x32_out = s4x32_in;
end end
sub sub (.sub_in(s33_in), .sub_out(s33_out));
// Test sequential path // Test sequential path
assign accum_out = secret_accum_q; assign accum_out = secret_accum_q;
@ -55,3 +56,13 @@ module secret (
final $display("destroying %m"); final $display("destroying %m");
endmodule endmodule
module sub (
input [32:0] sub_in,
output [32:0] sub_out);
/*verilator no_inline_module*/
assign sub_out = sub_in;
endmodule