1 |
187 |
lanttu |
# +----------------------------------------------------------------------------+
|
2 |
|
|
# | License Agreement |
|
3 |
|
|
# | |
|
4 |
|
|
# | Copyright (c) 1991-2009 Altera Corporation, San Jose, California, USA. |
|
5 |
|
|
# | All rights reserved. |
|
6 |
|
|
# | |
|
7 |
|
|
# | Any megafunction design, and related net list (encrypted or decrypted), |
|
8 |
|
|
# | support information, device programming or simulation file, and any other |
|
9 |
|
|
# | associated documentation or information provided by Altera or a partner |
|
10 |
|
|
# | under Altera's Megafunction Partnership Program may be used only to |
|
11 |
|
|
# | program PLD devices (but not masked PLD devices) from Altera. Any other |
|
12 |
|
|
# | use of such megafunction design, net list, support information, device |
|
13 |
|
|
# | programming or simulation file, or any other related documentation or |
|
14 |
|
|
# | information is prohibited for any other purpose, including, but not |
|
15 |
|
|
# | limited to modification, reverse engineering, de-compiling, or use with |
|
16 |
|
|
# | any other silicon devices, unless such use is explicitly licensed under |
|
17 |
|
|
# | a separate agreement with Altera or a megafunction partner. Title to |
|
18 |
|
|
# | the intellectual property, including patents, copyrights, trademarks, |
|
19 |
|
|
# | trade secrets, or maskworks, embodied in any such megafunction design, |
|
20 |
|
|
# | net list, support information, device programming or simulation file, or |
|
21 |
|
|
# | any other related documentation or information provided by Altera or a |
|
22 |
|
|
# | megafunction partner, remains with Altera, the megafunction partner, or |
|
23 |
|
|
# | their respective licensors. No other licenses, including any licenses |
|
24 |
|
|
# | needed under any third party's intellectual property, are provided herein.|
|
25 |
|
|
# | Copying or modifying any file, or portion thereof, to which this notice |
|
26 |
|
|
# | is attached violates this copyright. |
|
27 |
|
|
# | |
|
28 |
|
|
# | THIS FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
29 |
|
|
# | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
30 |
|
|
# | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
|
31 |
|
|
# | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
32 |
|
|
# | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
33 |
|
|
# | FROM, OUT OF OR IN CONNECTION WITH THIS FILE OR THE USE OR OTHER DEALINGS |
|
34 |
|
|
# | IN THIS FILE. |
|
35 |
|
|
# | |
|
36 |
|
|
# | This agreement shall be governed in all respects by the laws of the State |
|
37 |
|
|
# | of California and by the laws of the United States of America. |
|
38 |
|
|
# | |
|
39 |
|
|
# +----------------------------------------------------------------------------+
|
40 |
|
|
|
41 |
|
|
# +----------------------------------------------------------------------------+
|
42 |
|
|
# | Created by the Altera University Program |
|
43 |
|
|
# | for use with the Altera University Program IP Cores |
|
44 |
|
|
# | |
|
45 |
|
|
# | Version: 1.0 |
|
46 |
|
|
# | |
|
47 |
|
|
# +----------------------------------------------------------------------------+
|
48 |
|
|
|
49 |
|
|
proc up_generate {dest_path src_path new_module_name params_str sections_str} {
|
50 |
|
|
# send_message info "Starting UP Generation from $src_path to $dest_path"
|
51 |
|
|
|
52 |
|
|
set src_file [ open "$src_path" "r" ]
|
53 |
|
|
set dest_file [ open "$dest_path" "w" ]
|
54 |
|
|
|
55 |
|
|
set src_module [ read $src_file ]
|
56 |
|
|
|
57 |
|
|
set dest_module [ up_modify_sections $src_module $sections_str ]
|
58 |
|
|
set dest_module [ up_modify_module_name $dest_module $new_module_name ]
|
59 |
|
|
set dest_module [ up_modify_params $dest_module $params_str ]
|
60 |
|
|
set dest_module [ string trim $dest_module ]
|
61 |
|
|
set dest_module "$dest_module\n"
|
62 |
|
|
|
63 |
|
|
puts $dest_file $dest_module
|
64 |
|
|
|
65 |
|
|
close $dest_file
|
66 |
|
|
close $src_file
|
67 |
|
|
}
|
68 |
|
|
|
69 |
|
|
proc up_modify_module_name {module_str new_module_name} {
|
70 |
|
|
set module_list [ split $module_str "\n" ]
|
71 |
|
|
|
72 |
|
|
foreach line $module_list {
|
73 |
|
|
if { [ string match "module*" $line ] } {
|
74 |
|
|
append dest_module "\n" "module $new_module_name ("
|
75 |
|
|
} else {
|
76 |
|
|
append dest_module "\n" $line
|
77 |
|
|
}
|
78 |
|
|
}
|
79 |
|
|
|
80 |
|
|
return $dest_module
|
81 |
|
|
}
|
82 |
|
|
|
83 |
|
|
proc up_modify_params {module_str params_str} {
|
84 |
|
|
set params_list [ split $params_str ":;" ]
|
85 |
|
|
set module_list [ split $module_str "\n" ]
|
86 |
|
|
|
87 |
|
|
foreach line $module_list {
|
88 |
|
|
if { [ string match "parameter*" $line ] } {
|
89 |
|
|
set param [ split $line "=;" ]
|
90 |
|
|
set param_name [ string trim [ join [ split [ lindex $param 0 ] "parameter" ] "" ] ]
|
91 |
|
|
|
92 |
|
|
append dest_module "\n" [ lindex $param 0 ]
|
93 |
|
|
if { [ string match "*$param_name:*" $params_str ] } {
|
94 |
|
|
append dest_module "= " [ string map $params_list $param_name ]
|
95 |
|
|
} else {
|
96 |
|
|
append dest_module "=" [ lindex $param 1 ]
|
97 |
|
|
}
|
98 |
|
|
append dest_module ";" [ lindex $param 2 ]
|
99 |
|
|
} else {
|
100 |
|
|
append dest_module "\n" $line
|
101 |
|
|
}
|
102 |
|
|
}
|
103 |
|
|
|
104 |
|
|
return $dest_module
|
105 |
|
|
}
|
106 |
|
|
|
107 |
|
|
proc up_modify_sections {module_str sections_str} {
|
108 |
|
|
set sections_list [ split $sections_str ":;" ]
|
109 |
|
|
set module_list [ split $module_str "\n" ]
|
110 |
|
|
|
111 |
|
|
# send_message info "Starting UP Modify Sections with $sections_list"
|
112 |
|
|
|
113 |
|
|
set recursive_ifs "0:1:1"
|
114 |
|
|
set in_ifdef 0
|
115 |
|
|
set allow_lines 1
|
116 |
|
|
set valid_lines 1
|
117 |
|
|
|
118 |
|
|
set line_num 0
|
119 |
|
|
|
120 |
|
|
foreach line $module_list {
|
121 |
|
|
set line_num [ expr $line_num + 1 ]
|
122 |
|
|
if { [ string match "`if*" $line ] } {
|
123 |
|
|
lappend recursive_ifs "$in_ifdef:$allow_lines:$valid_lines"
|
124 |
|
|
# send_message info "In ifdef |$recursive_ifs| at $line_num"
|
125 |
|
|
set in_ifdef 1
|
126 |
|
|
set allow_lines [ expr ($valid_lines && $allow_lines) ]
|
127 |
|
|
if { [ string match "`ifdef*" $line ] } {
|
128 |
|
|
set section_name [ string trim [ join [ split $line "`ifdef" ] "" ] ]
|
129 |
|
|
set valid_lines [ expr ([ string match "*$section_name:*" $sections_str ] && [ string map $sections_list $section_name ]) ]
|
130 |
|
|
} else {
|
131 |
|
|
set section_name [ string trim [ join [ split $line "`ifndef" ] "" ] ]
|
132 |
|
|
set valid_lines [ expr ([ string match "*$section_name:*" $sections_str ] && (!([ string map $sections_list $section_name ])) ]
|
133 |
|
|
}
|
134 |
|
|
set valid_lines [ expr ($valid_lines && $allow_lines) ]
|
135 |
|
|
|
136 |
|
|
# if { $valid_lines } {
|
137 |
|
|
# send_message info "$section_name is a valid section $in_ifdef:$allow_lines:$valid_lines"
|
138 |
|
|
# } else {
|
139 |
|
|
# send_message info "$section_name is NOT a valid section $in_ifdef:$allow_lines:$valid_lines"
|
140 |
|
|
# }
|
141 |
|
|
|
142 |
|
|
} elseif { [ string match "`elsif*" $line ] } {
|
143 |
|
|
if { !($in_ifdef) } {
|
144 |
|
|
send_message error "Unexpected `elsif statement at line $line_num"
|
145 |
|
|
}
|
146 |
|
|
set allow_lines [ expr (!($valid_lines) & $allow_lines) ]
|
147 |
|
|
set section_name [ string trim [ join [ split $line "`elsif" ] "" ] ]
|
148 |
|
|
set valid_lines [ expr ([ string match "*$section_name:*" $sections_str ] && [ string map $sections_list $section_name ]) ]
|
149 |
|
|
set valid_lines [ expr ($valid_lines && $allow_lines) ]
|
150 |
|
|
|
151 |
|
|
} elseif { [ string match "`else*" $line ] } {
|
152 |
|
|
if { !($in_ifdef) } {
|
153 |
|
|
send_message error "Unexpected `else statement at line $line_num"
|
154 |
|
|
}
|
155 |
|
|
set allow_lines [ expr (!($valid_lines) & $allow_lines) ]
|
156 |
|
|
set valid_lines $allow_lines
|
157 |
|
|
|
158 |
|
|
} elseif { [ string match "`endif*" $line ] } {
|
159 |
|
|
if { !($in_ifdef) } {
|
160 |
|
|
send_message error "Unexpected `endif statement at line $line_num"
|
161 |
|
|
}
|
162 |
|
|
set old_if [ split [ lindex $recursive_ifs end ] ":" ]
|
163 |
|
|
# send_message info "New data |$recursive_ifs| |$old_if| at $line_num"
|
164 |
|
|
set in_ifdef [ lindex $old_if 0 ]
|
165 |
|
|
set allow_lines [ lindex $old_if 1 ]
|
166 |
|
|
set valid_lines [ lindex $old_if 2 ]
|
167 |
|
|
set recursive_ifs [ lrange $recursive_ifs 0 end-1 ]
|
168 |
|
|
# send_message info "New data $in_ifdef $valid_lines $allow_lines at $line_num"
|
169 |
|
|
|
170 |
|
|
} elseif { $valid_lines } {
|
171 |
|
|
append dest_module "\n" $line
|
172 |
|
|
}
|
173 |
|
|
}
|
174 |
|
|
|
175 |
|
|
return $dest_module
|
176 |
|
|
}
|
177 |
|
|
|