From 5524b28051c0c10d25d72b68f5d8284079745ff6 Mon Sep 17 00:00:00 2001 From: prajapati93 Date: Mon, 4 Dec 2023 10:24:25 +0000 Subject: [PATCH] Added rule check for issue #75 --- exec_dir/Makefile | 2 ++ exec_dir/pyslint.log | 36 +++++++++++++++++++++++++++++ py_src/pyslint.py | 15 ++++++++++++ sv_tests/test_sv_name_chk_30_f.sv | 10 ++++++++ sv_tests/test_sv_name_chk_30_p_c.sv | 10 ++++++++ 5 files changed, 73 insertions(+) create mode 100644 sv_tests/test_sv_name_chk_30_f.sv create mode 100644 sv_tests/test_sv_name_chk_30_p_c.sv diff --git a/exec_dir/Makefile b/exec_dir/Makefile index fa32af8..8162fae 100644 --- a/exec_dir/Makefile +++ b/exec_dir/Makefile @@ -95,6 +95,8 @@ naming: python3 ../py_src/pyslint.py -t ../sv_tests/test_issue_150_f.sv >> pyslint.log python3 ../py_src/pyslint.py -t ../sv_tests/test_issue_151_f.sv >> pyslint.log python3 ../py_src/pyslint.py -t ../sv_tests/test_issue_152_f.sv >> pyslint.log + python3 ../py_src/pyslint.py -t ../sv_tests/test_sv_name_chk_30_f.sv >> pyslint.log + python3 ../py_src/pyslint.py -t ../sv_tests/test_sv_name_chk_30_p_c.sv >> pyslint.log cat pyslint.log diff --git a/exec_dir/pyslint.log b/exec_dir/pyslint.log index 72fa803..b470895 100644 --- a/exec_dir/pyslint.log +++ b/exec_dir/pyslint.log @@ -5,14 +5,17 @@ PySlint: Violation: [PERF_CG_NO_ABIN_W_DEF_CL]: Found Array-bins: bins others[] = default; While IEEE 1800 LRM allows this syntax, this is bad for Performance aspect as it ends up creating large number of bins. Recommended to remove this bin. +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [REUSE_CG_NO_ILBINS_CL]: Found 'illegal_bins' under user-defined bins: covergroup: cg_o_sig for coverpoint: cpt_osig : o_sig_8b invalid_vals While IEEE 1800 LRM allows this syntax, this is bad for REUSE aspect as it does not flag as UVM_ERROR or $error. Also if coverage is turned OFF, this error is likely to go unflagged. Recommended to use 'ignore_bins' instead from coverage perspective and add SVA or scoreboard for illegal values. +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [COMPAT_CG_OPT_PI_CL]: Found 'type_option.per_instance' inside a covergroup: cg_o_sig IEEE 1800 LRM does not allow such usage though some tools do compile. To avoid compatibility issues, please move the per_instance to 'option.per_instance ' +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [FUNC_CNST_MISSING_CAST]: Potentially incorrect constraint expression! An expression involving the array-reduction methods sum()/product()/and()/or()/xor() was found, but is missing an explicit cast. This can lead to strange results as array reduction methods return an expression of the size of its elements, check if you need a with (int'( cast around the following expression: num_list.sum() PySlint: Violation: [FUNC_CNST_MISSING_CAST]: Potentially incorrect constraint expression! An expression involving the array-reduction methods sum()/product()/and()/or()/xor() was found, but is missing an explicit cast. This can lead to strange results as array reduction methods return an expression of the size of its elements, check if you need a with (int'( cast around the following expression: @@ -21,6 +24,7 @@ PySlint: Violation: [FUNC_CNST_MISSING_CAST]: Potentially incorrect constraint e num_list.xor() PySlint: Violation: [FUNC_CNST_MISSING_CAST]: Potentially incorrect constraint expression! An expression involving the array-reduction methods sum()/product()/and()/or()/xor() was found, but is missing an explicit cast. This can lead to strange results as array reduction methods return an expression of the size of its elements, check if you need a with (int'( cast around the following expression: num_list.product() +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [FUNC_DPI_NO_4STATE_IN_RETURN]: DPI functions shall use 2-state types in return value. Using 4-state type can lead to unnecessary complication as C-side does not naturally support 4-state value system Found code as: import "DPI-C" function integer c_sum(input bit [31:0] input_array[]); @@ -40,7 +44,11 @@ PySlint: Violation: [REUSE_NO_TDEF_IN_MOD]: A typedef was found inside a module typedef enum logic [1:0] {S0, S1, S2} state_t; PySlint: Violation: [NAME_INTF_SUFFIX]: Improper naming of identifier: af_sv_intf_bad: expected suffix: _if PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: af_bad_class_name: expected suffix: _c +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CG_PREFIX]: Improper naming of identifier: bad_group_name: expected prefix: cg_ +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CG_PREFIX]: Improper naming of identifier: bad_group_name: expected prefix: cg_ PySlint: Violation: [SVA_MISSING_LABEL]: Unnamed assumption - use a meaningful label: // BAD - unnamed SVA @@ -67,14 +75,18 @@ PySlint: Violation: [SVA_MISSING_ENDLABEL]: Missing End Label for property: p_go PySlint: Violation: [NAME_PROP_PREFIX]: Improper naming of property: bad_name: expected prefix: p_ PySlint: Violation: [NAME_ASM_PREFIX]: Improper naming of assume directive: wrong_label: expected prefix: m_ PySlint: Violation: [NAME_COV_PREFIX]: Improper naming of cover directive: wrong_label: expected prefix: c_ +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: should_have_been_extern +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: ex_c +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [SVA_MISSING_FAIL_AB]: Missing FAIL Action block - use $error/`uvm_error: a_new : assert property ((@posedge clk) p_req_cycle PySlint: Violation: [SVA_NO_PASS_AB]: Avoid using PASS Action block - likely to cause too many vacuous prints: a_new : assert property ((@posedge clk) p_req_cycle PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: randvar: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: randvar +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [COMPAT_SVA_NO_CONC_IN_FE]: A procedural concurrent assertion was found inside a forever loop; IEEE 1800 LRM does not allow such usage though some tools do compile To avoid compatibility issues, please remodel the code: forever_asrt: assert property(forever_pp); PySlint: Violation: [NAME_PROP_PREFIX]: Improper naming of property: always_pp: expected prefix: p_ @@ -97,13 +109,16 @@ PySlint: Violation: [REUSE_NO_WILDC_AA_CL]: Found an associative array declarati string fruits[*]; This is bad for reuse as it does not allow 'foreach' iterator and other handy built-in functions. Consider using a typed key such as int/string etc. +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: alu_driver: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: build_phase PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: connect_phase PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: run_phase PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: drive +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: extension: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: extension +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_PROP_PREFIX]: Improper naming of property: ab: expected prefix: p_ PySlint: Violation: [COMPAT_SVA_NO_DEGEN_CONSEQ]: Empty match ([*0] or variants) found in a property expression. Though some compilers allow this, IEEE 1800 LRM prevents such usage, so for maximum compatibility across EDA @@ -588,7 +603,10 @@ PySlint: Violation: [NAME_AST_PREFIX]: Improper naming of assert directive: axi_ PySlint: Violation: [NAME_PROP_PREFIX]: Improper naming of property: AXI_AUXM_EXCL_OVERFLOW: expected prefix: p_ PySlint: Violation: [SVA_MISSING_ENDLABEL]: Missing End Label for property: AXI_AUXM_EXCL_OVERFLOW PySlint: Violation: [NAME_AST_PREFIX]: Improper naming of assert directive: axi_auxm_excl_overflow: expected prefix: a_ +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [REUSE_ONE_MOD_PER_FILE]: Always use one-module definition per file PySlint: Violation: [REUSE_NO_TDEF_IN_MOD]: A typedef was found inside a module This prevents reuse as the enum/typedef scope is module only An assertion model that binds to this module and check the states using the typedef will be harder to implement in such cases. Please move the typedef to a package and import that package inside the module typedef logic [WIDTH-1 : 0] word_t; @@ -611,6 +629,7 @@ PySlint: Violation: [NAME_AST_PREFIX]: Improper naming of assert directive: ap_w PySlint: Violation: [SVA_MISSING_FAIL_AB]: Missing FAIL Action block - use $error/`uvm_error: ap_write_on_max_buff : assert property (p_never_write_on_max_buff); PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: c_xactn: expected suffix: _c +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [REUSE_ONE_MOD_PER_FILE]: Always use one-module definition per file PySlint: Violation: [NAME_AST_PREFIX]: Improper naming of assert directive: ap_read_after_write: expected prefix: a_ PySlint: Violation: [SVA_NO_PASS_AB]: Avoid using PASS Action block - likely to cause too many vacuous prints: @@ -776,17 +795,21 @@ PySlint: Violation: [NAME_PROP_PREFIX]: Improper naming of property: pCounterMax PySlint: Violation: [NAME_AST_PREFIX]: Improper naming of assert directive: apCounterMaxed: expected prefix: a_ PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: generator: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: generator +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: gen: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: pre_randomize PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: post_randomize PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: gen +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: transaction: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: display PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: copy PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: transaction +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: generator: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: run PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: generator +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: driver: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: reset PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: run @@ -796,6 +819,7 @@ PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: monitor: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: run PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: monitor @@ -804,6 +828,7 @@ PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: scoreboard: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: run PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: scoreboard @@ -812,6 +837,7 @@ PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: environment: expected suffix: _c PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: pre_test PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: test @@ -823,22 +849,29 @@ PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file PySlint: Violation: [REUSE_ONE_CL_PER_FILE]: Always use one-class definition per file +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: distribution: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: distribution +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: distribution: expected suffix: _c PySlint: Violation: [FUNC_CNST_DIST_COL_EQ]: Potentially incorrect constraint expression! An expression involving dist ColonEquals if found And the range used with ColonEquals is large This is likely to skew the random generation and prevent other values in the dist expression to be generated less-frequently than the large range values Review to check if you intended to use ColonSlash instead of ColonEquals data1_bad dist {0:=10, [1:30]:=60} PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: distribution +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: data: expected suffix: _c PySlint: Violation: [FUNC_CNST_DIST_COL_EQ]: Potentially incorrect constraint expression! An expression involving dist ColonEquals if found And the range used with ColonEquals is large This is likely to skew the random generation and prevent other values in the dist expression to be generated less-frequently than the large range values Review to check if you intended to use ColonSlash instead of ColonEquals field1 dist {[0:31] := 1, [32:65535] := 1} PySlint: Violation: [FUNC_CNST_DIST_COL_EQ]: Potentially incorrect constraint expression! An expression involving dist ColonEquals if found And the range used with ColonEquals is large This is likely to skew the random generation and prevent other values in the dist expression to be generated less-frequently than the large range values Review to check if you intended to use ColonSlash instead of ColonEquals field1 dist {[0:31] := 1, [32:65535] := 1} PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: data +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: clk: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: clk +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: A: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: A +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [NAME_CLASS_SUFFIX]: Improper naming of identifier: c: expected suffix: _c PySlint: Violation: [CL_MISSING_ENDLABEL]: Missing End Label for class: c +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [FUNC_NO_2STATE_IN_INTF]: Potential DUT bug hiding construct in use: Inside SystemVerilog interface, it is recommended to use only 4-state signals/nets. Found a 2-state declaration as: bit bad_2st; PySlint: Violation: [FUNC_NO_2STATE_IN_INTF]: Potential DUT bug hiding construct in use: Inside SystemVerilog interface, it is recommended to use only 4-state signals/nets. Found a 2-state declaration as: @@ -870,8 +903,10 @@ PySlint: Violation: [COMPAT_POST_RAND_NON_VOID]: method post_randomize not decla To avoid compatibility issues, please declare post_randomize as void function function post_randomize() +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: pre_randomize PySlint: Violation: [CL_METHOD_NOT_EXTERN]: method is not declared extern: post_randomize +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name PySlint: Violation: [FUNC_DPI_FN_MISSING_RTYPE]: DPI import functions should specify return type as per LRM. Using Implicit return type (of logic) can lead to functional issues leading to unexpected results. Please specify return type as void/bit etc. @@ -939,3 +974,4 @@ PySlint: Violation: [COMPAT_DPI_NO_MDA]: DPI method with Multi-Dimensional Array While LRM allows this, some tools do not fully support. To avoid compatibility issues, please remodel the code: import "DPI-C" task bad_dpi_t_mda(input int dyn_a[][]); +PySlint: Violation: [REUSE_FL_CL_NAME_MATCH]: Always keep the file name as class name diff --git a/py_src/pyslint.py b/py_src/pyslint.py index e3f5732..5f38e52 100644 --- a/py_src/pyslint.py +++ b/py_src/pyslint.py @@ -11,6 +11,7 @@ import functools from operator import countOf import operator as op +import os print_verbose = False @@ -57,6 +58,7 @@ def pyslint_update_rule_ids(): lv_sv_ruleid_l.append('COMPAT_SVA_NO_S_UNTIL_WITH') lv_sv_ruleid_l.append('REUSE_ONE_CL_PER_FILE') lv_sv_ruleid_l.append('REUSE_ONE_MOD_PER_FILE') + lv_sv_ruleid_l.append('REUSE_FL_CL_NAME_MATCH') lv_sv_ruleid_l.append ('DBG_SVA_AST_MISSING_LABEL') lv_sv_ruleid_l.append ('DBG_SVA_ASM_MISSING_LABEL') lv_sv_ruleid_l.append ('DBG_SVA_COV_MISSING_LABEL') @@ -925,6 +927,18 @@ def REUSE_ONE_MOD_PER_FILE (lv_m): pyslint_msg (lv_rule_id, msg) break +def REUSE_FL_CL_NAME_MATCH (lv_cu_scope): + if (lv_cu_scope.kind.name == 'ClassDeclaration'): + lv_name = str(lv_cu_scope.name).lstrip() + file_name = (os.path.basename(inp_test_name)) + file_name_without_extension = os.path.splitext(file_name)[0] + if (lv_name == file_name_without_extension) : + print_verbose + else: + msg = 'Always keep the file name as class name' + lv_rule_id = 'REUSE_FL_CL_NAME_MATCH' + pyslint_msg (lv_rule_id,msg) + def chk_dpi_rules_common(lv_dpi_scope): COMPAT_DPI_OLD_SPECSTR (lv_dpi_scope) COMPAT_DPI_NO_PURE_TASK(lv_dpi_scope) @@ -1009,6 +1023,7 @@ def chk_naming(lv_cu_scope): REUSE_NO_WILDC_AA_CL(scope_i) REUSE_ONE_CL_PER_FILE(scope_i) REUSE_ONE_MOD_PER_FILE(scope_i) + REUSE_FL_CL_NAME_MATCH(scope_i) cu_scope = tree.root.members[0] if (cu_scope.kind.name != 'ClassDeclaration'): diff --git a/sv_tests/test_sv_name_chk_30_f.sv b/sv_tests/test_sv_name_chk_30_f.sv new file mode 100644 index 0000000..b4f7669 --- /dev/null +++ b/sv_tests/test_sv_name_chk_30_f.sv @@ -0,0 +1,10 @@ +//---------------------------------------------------- +//---------------------------------------------------- +// SPDX-FileCopyrightText: Srinivasan Venkataramanan, +// AsFigo Technologies, UK +// SPDX-License-Identifier: MIT +//---------------------------------------------------- + +class trans_c; + +endclass : trans_c \ No newline at end of file diff --git a/sv_tests/test_sv_name_chk_30_p_c.sv b/sv_tests/test_sv_name_chk_30_p_c.sv new file mode 100644 index 0000000..c60c2f9 --- /dev/null +++ b/sv_tests/test_sv_name_chk_30_p_c.sv @@ -0,0 +1,10 @@ +//---------------------------------------------------- +//---------------------------------------------------- +// SPDX-FileCopyrightText: Srinivasan Venkataramanan, +// AsFigo Technologies, UK +// SPDX-License-Identifier: MIT +//---------------------------------------------------- + +class test_sv_name_chk_30_p_c; + +endclass : test_sv_name_chk_30_p_c \ No newline at end of file