From 00979ede14cc39229bceb8f65a16249cea595cc7 Mon Sep 17 00:00:00 2001 From: Todd Strader Date: Sat, 30 Nov 2019 09:18:49 -0500 Subject: [PATCH] Fix overly aggressive --protect-lib check --- src/V3ProtectLib.cpp | 10 ++++-- test_regress/t/t_prot_lib_secret.v | 57 ++++++++++++++++++------------ 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/V3ProtectLib.cpp b/src/V3ProtectLib.cpp index eb722738d..7e4afee3b 100644 --- a/src/V3ProtectLib.cpp +++ b/src/V3ProtectLib.cpp @@ -65,6 +65,7 @@ class ProtectVisitor : public AstNVisitor { AstTextBlock* m_cIgnoreParamsp; // Combo ignore parameter list string m_libName; string m_topName; + bool m_foundTop; // Have seen the top module // VISITORS virtual void visit(AstNetlist* nodep) { @@ -78,7 +79,11 @@ class ProtectVisitor : public AstNVisitor { } 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(); createSvFile(fl); createCppFile(fl); @@ -88,6 +93,7 @@ class ProtectVisitor : public AstNVisitor { V3Hash hash = V3Hashed::uncachedHash(m_cfilep); m_hashValuep->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) { @@ -439,7 +445,7 @@ class ProtectVisitor : public AstNVisitor { 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_cIgnoreParamsp(NULL), m_libName(v3Global.opt.protectLib()), - m_topName(v3Global.opt.prefix()) + m_topName(v3Global.opt.prefix()), m_foundTop(false) { iterate(nodep); } diff --git a/test_regress/t/t_prot_lib_secret.v b/test_regress/t/t_prot_lib_secret.v index 29a8e5384..b55164988 100644 --- a/test_regress/t/t_prot_lib_secret.v +++ b/test_regress/t/t_prot_lib_secret.v @@ -3,30 +3,30 @@ // without warranty, 2019 by Todd Strader. module secret ( - input [31:0] accum_in, - output wire [31:0] accum_out, - input accum_bypass, - output [31:0] accum_bypass_out, - input s1_in, - output logic s1_out, - input [1:0] s2_in, - output logic [1:0] s2_out, - input [7:0] s8_in, - output logic [7:0] s8_out, - input [32:0] s33_in, - output logic [32:0] s33_out, - input [63:0] s64_in, - output logic [63:0] s64_out, - input [64:0] s65_in, - output logic [64:0] s65_out, - input [128:0] s129_in, - output logic [128:0] s129_out, - input [3:0] [31:0] s4x32_in, + input [31:0] accum_in, + output wire [31:0] accum_out, + input accum_bypass, + output [31:0] accum_bypass_out, + input s1_in, + output logic s1_out, + input [1:0] s2_in, + output logic [1:0] s2_out, + input [7:0] s8_in, + output logic [7:0] s8_out, + input [32:0] s33_in, + output logic [32:0] s33_out, + input [63:0] s64_in, + output logic [63:0] s64_out, + input [64:0] s65_in, + output logic [64:0] s65_out, + input [128:0] s129_in, + output logic [128:0] s129_out, + input [3:0] [31:0] s4x32_in, output logic [3:0] [31:0] s4x32_out, - input clk); + input clk); - logic [31:0] secret_accum_q = 0; - logic [31:0] secret_value = 7; + logic [31:0] secret_accum_q = 0; + logic [31:0] secret_value = 7; initial $display("created %m"); @@ -39,13 +39,14 @@ module secret ( s1_out = s1_in; s2_out = s2_in; s8_out = s8_in; - s33_out = s33_in; s64_out = s64_in; s65_out = s65_in; s129_out = s129_in; s4x32_out = s4x32_in; end + sub sub (.sub_in(s33_in), .sub_out(s33_out)); + // Test sequential path assign accum_out = secret_accum_q; @@ -55,3 +56,13 @@ module secret ( final $display("destroying %m"); endmodule + +module sub ( + input [32:0] sub_in, + output [32:0] sub_out); + + /*verilator no_inline_module*/ + + assign sub_out = sub_in; + +endmodule