-
Notifications
You must be signed in to change notification settings - Fork 24
/
HDLGen.pl
150 lines (129 loc) · 6.6 KB
/
HDLGen.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/usr/bin/env perl
#============================================================================================================#
#============================================================================================================#
#========================================= Public Packages ==================================================#
#============================================================================================================#
#============================================================================================================#
use strict;
use File::Basename;
use Getopt::Long qw(GetOptions);
use Cwd qw/abs_path/;
use Term::ANSIColor qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
#============================================================================================================#
#========================================= End of Public Packages ===========================================#
#============================================================================================================#
### Add Script Dir as include paths, most for all PlugIn APIs ###
use lib abs_path(dirname(__FILE__)) . '/plugins';
our $HDLGEN_ROOT = $ENV{"HDLGEN_ROOT"};
if ($HDLGEN_ROOT eq "") {
print STDOUT BOLD RED " !!! ERROR !!! : HDLGEN_ROOT is not defined!\n\n";
exit(1);
}
#============================================================================================================#
#========================= Inhouse Packages for internal developed functions ================================#
#============================================================================================================#
#require "HDLGen.pm";
use HDLGen;
#============================================================================================================#
#================================ End of Inhouse Packages ===================================================#
#============================================================================================================#
our($input_src, $output_vlg, $input_flist,$verbose, $debug, $clean, $usage) = ("", "", "", "", "", "", "");
GetOptions(
'verbose' => \$verbose,
'input=s' => \$input_src,
'output=s' => \$output_vlg,
'f=s' => \$input_flist,
'debug' => \$debug,
'clean' => \$clean,
'usage' => \$usage,
);
if ($verbose ) {
print("--- Verbose Debug Infomation is turned on ---\n");
}
our $HDLGEN_DEBUG_MODE = 0;
$HDLGEN_DEBUG_MODE = "1" if ($verbose && $debug);
if ($debug ne "") {
system("rm -r .eperl.pl") if (-e ".eperl.pl");
system("rm -r .epython.py") if (-e ".epython.py");
}
#============================================================================================================#
#============================================================================================================#
#============================================================================================================#
#=========================================== Main Function ==================================================#
#============================================================================================================#
#============================================================================================================#
#============================================================================================================#
#
if ($usage) {
&Usage();
} elsif ($input_flist eq "") {
if ( $input_src eq "" ) {
&Usage();
} else {
&HDLGen::ProcessOneFile($input_src, $output_vlg);
}
} else {
open(LIST_IN, "<$input_flist") or die "!!! Error: can't find input list file of ($input_flist) \n\n";
while (<LIST_IN>) {
chomp();
&HDLGen::ProcessOneFile($input_src, "");
}
}
sub Version {
print BOLD BLUE <<EOF;
*********************************************
****** Current HDLGen Version is V1.18 ******
*********************************************
EOF
}
sub Usage {
&Version();
select STDOUT;
print <<EOF;
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
--- This is a script to read in HDL design file with emdedded Perl/Python scripts in
--- and generate final HDL files with Perl/Python scripts parsed & executed
EX:
EOF
print <<EOF;
--> $0 -i HDL_Design.src
--> $0 -i HDL_Design.src -o HDL_Design_NewName.v ( default is HDL_Design.v )
--> $0 -i HDL_Design.src -d ( run with debug option )
EOF
RESET;
print <<EOF;
will print info and store internal data structures,
Perl/Python scripts are stored in .eperl.pl or .epython.py
EOF
print YELLOW <<EOF;
NOTE:
Currently "&AutoDef" for auto wire a/o reg defines is not perfect, or has bugs yet
this tool can only parse wire signals as simple as:
EOF
print GREEN <<EOF;
assign wire_sig[m:n] = left_sig<[q:p]>
EOF
RESET;
print YELLOW <<EOF;
or parse reg signals as simple as:
EOF
print GREEN <<EOF;
reg_sig<[m:n]> <= dd'h/b...
or: reg_sig <= dd{1'x...
or: reg_sig <= left_sig[q:p]
EOF
RESET;
print <<EOF;
--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------
EOF
exit;
}
#============================================================================================================#
#============================================================================================================#
#============================================ End of Main Function ==========================================#
#============================================================================================================#
#============================================================================================================#
#============================================================================================================#