#!/usr/bin/perl -w # See copyright, etc in below POD section. ###################################################################### use lib 'blib/lib'; use Verilog::EditFiles; use FindBin qw($RealBin $RealScript $Script); use strict; #====================================================================== # When editing, delete this section up to the next #==== die <new (# Verilog::EditFiles will use the below program name in its comments program => $Script, # Name of the directory to write the output modules to. # I like to put all generated files under a dir named "gen" # so it is obvious the files are generated. # (But for the Verilog-Perl internal tests, this needs to be test_dir) outdir => "test_dir", #"gen", # If true, add "`celldefine" before every module statement. #celldefine => 1, # For the write_lint method, the name of the linter to use. #lint_command => 'vlint --brief', # If defined, add the provided text before every module statement. # Generally used to insert lint off pragmas. #lint_header => "// lint_checking MY_RULES OFF\n", # If defined, add the provided text before every module statement. # Generally used to insert lint off pragmas. #include_header => "`include \"my_defines.v\"\n", # If defined, add the provided text before every module statement. # Generally used to insert lint off pragmas. #timescale_header => "`include \"my_timescale.v\"\n", # If set, remove any `timescales. #timescale_removal => 1, # If 1, replace any synopsys translate on/offs with "`ifdef SYNTHESIS" and # "`endif"s. If set to a string, use that string instead of "SYNTHESIS". translate_synthesis => 'SYNTHESIS', # The suffix to add to convert a module name into a filename. Defaults to #v_suffix => '.v', # If set, show what files are being read and written verbose => 1, ); # Remove all existing files under the output. You might not want to do # this if there are files you want to keep from there unlink(glob("$split->{outdir}/*.v")); # Read specified libraries and split them $split->read_and_split(glob("t/*.v")); # And write them out $split->write_files(); # And create a lint file $split->write_lint(); # If a file needs 'manual' search and replaces, we can do that too. $split->edit_file (# The filename to be edited filename=>"$split->{outdir}/a.v", # Callback subroutine that takes file contents as a string # and returns the new file contents cb=>sub { my $wholefile = shift; # Globally search and comment out any lines with "pulldown PULLDOWN" # See "man perlre" for examples. # The %mg here means to match multiple lines (you can put # \n in the regexp), and to do it globally $wholefile =~ s%(pulldown PULLDOWN;)%//vsplitmodule: $1%mg; return $wholefile; });