Documentos de Académico
Documentos de Profesional
Documentos de Cultura
www.synopsys.com
Copyright Notice and Proprietary Information
Copyright 2005 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary
information that is the property of Synopsys, Inc. The software and documentation are furnished under a license agreement and
may be used or copied only in accordance with the terms of the license agreement. No part of the software and documentation
may be reproduced, transmitted, or translated, in any form or by any means, electronic, mechanical, manual, optical, or otherwise,
without prior written permission of Synopsys, Inc., or as expressly provided by the license agreement.
“This document is duplicated with the permission of Synopsys, Inc., for the exclusive use of
__________________________________________ and its employees. This is copy number __________.”
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE.
Trademarks (™)
abraCAD, abraMAP, Active Parasitics, AFGen, Apollo, Apollo II, Apollo-DPII, Apollo-GA, ApolloGAII, Astro, Astro-Rail, Astro-Xtalk,
Aurora, AvanTestchip, AvanWaves, BCView, Behavioral Compiler, BOA, BRT, Cedar, ChipPlanner, Circuit Analysis, Columbia,
Columbia-CE, Comet 3D, Cosmos, CosmosEnterprise, CosmosLE, CosmosScope, CosmosSE, Cyclelink, Davinci, DC Expert, DC
Expert Plus, DC Professional, DC Ultra, DC Ultra Plus, Design Advisor, Design Analyzer, Design Vision, DesignerHDL,
DesignTime, DFM-Workbench, DFT Compiler, Direct RTL, Direct Silicon Access, Discovery, DW8051, DWPCI,
Dynamic-Macromodeling, Dynamic Model Switcher, ECL Compiler, ECO Compiler, EDAnavigator, Encore, Encore PQ, Evaccess,
ExpressModel, Floorplan Manager, Formal Model Checker, FoundryModel, FPGA Compiler II, FPGA Express, Frame Compiler,
Galaxy, Gatran, HDL Advisor, HDL Compiler, Hercules, Hercules-Explorer, Hercules-II, Hierarchical Optimization Technology, High
Performance Option, HotPlace, HSPICE-Link, iN-Tandem, Integrator, Interactive Waveform Viewer, i-Virtual Stepper, Jupiter,
Jupiter-DP, JupiterXT, JupiterXT-ASIC, JVXtreme, Liberty, Libra-Passport, Library Compiler, Libra-Visa, Magellan, Mars,
Mars-Rail, Mars-Xtalk, Medici, Metacapture, Metacircuit, Metamanager, Metamixsim, Milkyway, ModelSource, Module Compiler,
MS-3200, MS-3400, Nova Product Family, Nova-ExploreRTL, Nova-Trans, Nova-VeriLint, Nova-VHDLlint, Optimum Silicon,
Orion_ec, Parasitic View, Passport, Planet, Planet-PL, Planet-RTL, Polaris, Polaris-CBS, Polaris-MT, Power Compiler,
PowerCODE, PowerGate, ProFPGA, ProGen, Prospector, Protocol Compiler, PSMGen, Raphael, Raphael-NES, RoadRunner,
RTL Analyzer, Saturn, ScanBand, Schematic Compiler, Scirocco, Scirocco-i, Shadow Debugger, Silicon Blueprint, Silicon Early
Access, SinglePass-SoC, Smart Extraction, SmartLicense, SmartModel Library, Softwire, Source-Level Design, Star, Star-DC,
Star-MS, Star-MTB, Star-Power, Star-Rail, Star-RC, Star-RCXT, Star-Sim, Star-SimXT, Star-Time, Star-XP, SWIFT, Taurus,
TimeSlice, TimeTracker, Timing Annotator, TopoPlace, TopoRoute, Trace-On-Demand, True-Hspice, TSUPREM-4, TymeWare,
VCS Express, VCSi, Venus, Verification Portal, VFormal, VHDL Compiler, VHDL System Simulator, VirSim, and VMC are
trademarks of Synopsys, Inc.
SystemC is a trademark of the Open SystemC Initiative and is used under license.
ARM and AMBA are registered trademarks of ARM Limited.
All other product or company names may be trademarks of their respective owners.
Unit 5: Conclusion
Workshop Goal ................................................................................................................ 5-2
Congratulations! You Have Now.................................................................................... 5-3
Share Work Applications................................................................................................. 5-4
Continue to Play With Lab Exercises .............................................................................. 5-5
Course Evaluation............................................................................................................ 5-6
Thank You! ...................................................................................................................... 5-7
Appendix.......................................................................................................................... 5-8
Optional: After Completion of Workshop ....................................................................... 5-9
How to Download Lab Files (1/4) ................................................................................. 5-10
How to Download Lab Files (2/4) ................................................................................. 5-11
How to Download Lab Files (3/4) ................................................................................. 5-12
How to Download Lab Files (4/4) ................................................................................. 5-13
VC- 2
#2: Select
Public Chat
VC- 3
Select an if
you were unable
to use chat. Select a happy
face or clap if you
are having fun.
VC- 4
Now scribble
something!
VC- 5
I opened the
Yes No tool bar!
Circle the
Markup Tools
correct
command
I know
I know
Type the
Public Chat command
VC- 6
VC- 7
Do you have
Yes No
a headset
with a
microphone?
VC- 8
VC- 9
VC- 10
Do you have:
Yes No
Printed lecture and lab materials?
Printed job aid materials?
VC- 11
Labs on EducationSphere will be available to you for 24 hours on each scheduled workshop day.
Taking a break
VC- 12
VC- 13
Log on to EducationSphere
Step #2 Type synopsys
for the User ID
Click the “Connect to
cluster” button on the
Design Sphere tool bar
Type
education for
the Password
Click Login
VC- 15
Step #4
VC- 16
VC- 17
i- 2
Tcl Tool Command Language
For additional reading, refer to SolvNet “Using Tcl with Synopsys Tools”,
v2004.06.
i- 3
Please share a:
Scripting application you are struggling with,
a script problem you have at work,
Public Chat a wished-for enhancement to an existing script
that you are hoping to resolve with the skills
learned in this workshop.
i- 4
i- 5
Tcl Tool Command Language
Physical Compiler 1
h ere
u are
Yo
PrimeTime 1
The Power of Tcl 1:
Becoming a
Proficient Tcl User
Design Compiler 1
The Power of Tcl 2:
Creating High-Impact
Procedures
DFT Compiler 1
i- 6
4 Practical Applications
5 Conclusion
6 Customer Support
i- 7
Lists
Strings Procedures
Math functions
Control flow
Definition of
Recommendation
Acronyms
i- 10
i- 11
i- 12
http://www.tcl.tk
Tcl developers’ forum
Tcl / Tk / TclPro download
man pages, documentation, etc.
http://tcl.sourceforge.net/faqs
Tcl FAQ
http://wiki.tcl.tk
i- 13
i- 14
# For translation from Tcl to the new command set for DFT Compiler
unix% db2xg dctcl_script xg_script
i- 15
4 Practical Applications
5 Conclusion
6 Customer Support
1- 2
Variable Substitution
1- 3
1- 4
Endpoint Slack
-------------------------------------------------------
Zro_Flag_reg/D -0.32 (VIOLATED)
RESULT_DATA[0] -0.31 (VIOLATED)
RESULT_DATA[1] -0.31 (VIOLATED)
RESULT_DATA[2] -0.31 (VIOLATED)
RESULT_DATA[3] -0.31 (VIOLATED)
RESULT_DATA[4] -0.31 (VIOLATED)
RESULT_DATA[5] -0.31 (VIOLATED)
Neg_Flag_reg/D -0.17 (VIOLATED)
Lachd_Result_reg[15]/D -0.17 (VIOLATED)
. . .
This report does NOT tally the total
number of setup violations (TNV)!
1- 5
TNV Total Number of Violations
1- 6
TNV Total Number of Violations
1- 7
TNV Total Number of Violations
1- 8
The redirect command will redirect all output, meaning intermediate output (eg. error, warning or
informational messages and the report itself) as well as the result of the command.
When there are errors during a redirect, a summary message will be printed to the screen.
Mark the
Markup Tools key words.
argument
command argument (script)
argument
(switch)
{ } and " " define a single
argument – this is called grouping
1- 9
****************************************
Report : constraint
-all_violators
-max_delay Output of
Design : ORCA command
. . .
max_delay/setup ('clk' group)
Endpoint Slack
-------------------------------------------------------
Zro_Flag_reg/D -0.32 (VIOLATED)
RESULT_DATA[0] -0.31 (VIOLATED)
. . .
1
unix% Return value or
result of command May include Error or
Warning messages.
1- 10
1- 11
Backslash substitution
used for line continuation
Yes No
Is grep a Tcl command?
1- 12
The characters \<newline> are replaced with a single space and is used for line continuation.
1- 13
TNV Total Number of Violations
myscript.tcl
1- 14
1- 15
TNV Total Number of Violations
command argument
argument
(option)
1- 17
Tcl has a comprehensive set of system commands that allow you to write you scripts 100% in Tcl!
# Lists the contents of a directory
ls
# Returns total CPU time in seconds
cputime
# Returns peak memory usage in kbytes
mem
# Manipulate file names and attributes
file
# Manipulate strings
regexp/string/regsub
# File I/O
open/close/read/puts
1- 18
1- 19
What is captured in
Public Chat rptstring?
1- 20
Endpoint Slack
-------------------------------------------------------
Zro_Flag_reg/D -0.32 (VIOLATED)
RESULT_DATA[0] -0.31 (VIOLATED)
. . .
1
" Return value or
result of command
1- 21
1- 22
Variable
substitution
1- 23
Variable substitution causes the $ and the variable name to be replaced by the value of the variable.
Nicer
The total number of violations is 28
pt_shell>
1- 24
Mark the
Markup Tools key words.
Command substitution
1- 26
The square brackets [ ] cause command substitution. Everything inside the square brackets and the
square brackets themselves are replaced with the return value of the embedded command execution.
good.tcl
redirect –var rptstring \
{report_constraint –all_violators}
regexp –all VIOLATED $rptstring
nice_try.tcl
regexp –all VIOLATED [report_constraint –all_violators]
1- 28
What are { }
Public Chat used for?
1- 29
The { } characters are used for grouping – to identify a single argument for the redirect command
in the example above.
What are [ ]
Public Chat used for?
1- 30
The [ ] delimit an embedded command – report_constraint is executed and replaced with its
result.
INSTRUCTOR
1- 31
10 Minute BREAK
20 Minute LAB
1- 32
1- 33
4 Practical Applications
5 Conclusion
6 Customer Support
2- 2
TNV < 20
YES YES
Markup Tools NO Markup Tools NO
Generate a timing
High effort compile
report
2- 3
Logical expression
2- 4
pt_shell> man if
NAME
if - Execute scripts conditionally
SYNOPSIS
if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ...
?else? ?bodyN?
DESCRIPTION
The if command evaluates expr1 as an expression (in the same way that expr
evaluates its argument). The value of the expression must be a boolean (a
numeric value, where 0 is false and anything is true, or a string value
such as true or yes for true and false or no for false); if it is true then
body1 is executed by passing it to the Tcl interpreter. Otherwise expr2 is
evaluated as an expression and if it is true then body2 is executed,
and so on. If none of the expressions evaluates to true then bodyN is
executed. The then and else arguments are optional ``noise words'' to make
the command easier to read. There may be any number of elseif clauses,
including zero. BodyN may also be omitted as long as else is omitted too.
The return value from the command is the result of the body script that was
executed, or an empty string if none of the expressions was non-zero and
there was no bodyN.
0 is interpreted as false.
Any number other than 0 is interpreted
as true.
2- 5
Numeric operands refers to either integers or floating point.
To do string comparison and matching, it is preferable to use the string command. This
command is taught later in this unit.
pt_shell> man expr; # The expression in if statements are evaluated using expr
. . .
Operands may be specified in any of the following ways:
1. As an numeric value, either integer or floating-point.
2. As a Tcl variable, using standard $ notation. The variable's value
will be used as the operand.
3. As a string enclosed in double-quotes. The expression parser will
perform backslash, variable, and command substitutions on the information
between the quotes, and use the resulting value as the operand
4. As a string enclosed in braces. The characters between the open brace and
matching close brace will be used as the operand without any substitutions.
5. As a Tcl command enclosed in brackets. The command will be executed
and its result will be used as the operand.
6. As a mathematical function whose arguments have any of the above forms
for operands, such as sin($x). See below for a list of defined functions.
What happens if
Identify operators TNV does not
Yes No on job aid #1. exist?
2- 6
2- 7
pt_shell> man info
. . .
info exists varName
Returns 1 if the variable named varName exists in the current context
(either as a global or local variable) and has been defined by being given a
value, returns 0 otherwise.
if {expr} {body}
# Execute start
# Execute body + next until expr is false
for {start} {expr} {next} {body}
2- 8
if {$TNV == 0} {
set new_clk_skew [expr $old_clk_skew * 1.1]
set_clock_uncertainty $new_clk_skew CLK
compile –incr –map_effort high
} else {
report_timing
}
2- 9
The above script is NOT representative of a recommended compile strategy. It is a
simple example to illustrate the expr command.
expr 10 + 5
15
expr 10.0 + 5
15.0
expr 12 / 7
1
expr 12 / 7 + 3.0
4.0
expr 12.0 / 7 + 3
4.71428571429
2- 10
Available operators and functions with the expr command. More details available in the man pages.
MATH OPERATORS
- + ~ ! Unary minus, unary plus, bit-wise NOT, logical NOT
* / % Multiply, divide, remainder
+ - Add and subtract
<< >> Left and right shift
< > <= >= Boolean less, greater, less than or equal, and greater than or equal
== != Boolean equal and not equal
& | Bit-wise AND and OR
^ Bit-wise exclusive OR
&& || Logical AND and OR
x?y:z If-then-else, as in C
MATH FUNCTIONS
abs cosh log sqrt
acos double log10 srand
asin exp pow tan
atan floor rand tanh
atan2 fmod round
ceil hypot sin
cos int sinh
Control Flow, Math Functions and Procedures 2-10
© 2005
The Power of Tcl 1: Becoming a Proficient Tcl User
Your Own Command get_TNV
2- 11
proc get_TNV {} {
redirect –variable rptstring \
{report_constraint –all_violators –max_delay}
regexp –all VIOLATED $rptstring
}
get_TNV.tcl
2- 12
Adding arguments
and default values
Command result
and command
output
2- 13
get_TNV.tcl
2- 14
get_TNV.tcl
Markup Tools
28
Error: no value given for parameter
"max_or_min" to "get_TNV"
2- 15
Defaulted arguments, if any, must be the last arguments for the procedure. If a default is
not specified, the argument is required. The following example is provided for
clarification:
Adding arguments
and default values
Command result
and command
output
2- 16
proc get_TNV {} {
redirect –variable rptstring \
{report_constraint –all_violators –max_delay}
regexp –all VIOLATED $rptstring
}
get_TNV.tcl
2- 17
Global
pt_shell> set rptstring "hello world"
pt_shell> get_TNV
proc get_TNV
28
pt_shell> printvar rptstring
rptstring == "hello world" Local and
temporary
2- 18
silly_TNV.tcl
2- 19
2- 20
Adding arguments
and default values
Command result
and command
output
2- 21
Return value or
result of command
2- 22
proc get_TNV {} {
redirect –variable rptstring \
{report_constraint –all_violators –max_delay}
set TNV [regexp –all VIOLATED $rptstring]
echo "The total number of violations is $TNV"
return $TNV
}
2- 23
pt_shell> man return
NAME
return - Return from a procedure
SYNOPSIS
return ?-code code? ?-errorinfo info? ?-errorcode code? ?string?
DESCRIPTION
Return immediately from the current procedure (or top-level command or source
command), with string as the return value. If string is not specified then
an empty string will be returned as result.
proc get_TNV {} {
redirect –variable rptstring \
{report_constraint –all_violators –max_delay}
regexp –all VIOLATED $rptstring
}
get_TNV.tcl
2- 24
Identify on
Yes No job aid #1.
2- 25
2- 26
2- 27
To set up man pages from the unix prompt, take a look at SolvNet article “How can I find
information on a command or variable I don’t know”, Doc ID 901270, last modified
05/09/2001
NO
YES!
2- 28
10 Minute BREAK
30 Minute LAB
2- 29
2- 30
Describe what
happens if this last
Public Chat
step is eliminated.
2- 31
echo $header
if {![info exists metrics_last_cputime]} {
echo "CPU usage since beginning of process is [cputime] seconds"
} else {
set delta_cputime [expr [cputime] -$metrics_last_cputime]
echo "CPU usage since last metrics is $delta_cputime seconds"
}
echo "Maximum memory used since beginning of process is [mem] kbytes\n"
2- 32
4 Practical Applications
5 Conclusion
6 Customer Support
3- 2
You will see and use strings and lists in most Tcl scripts!
3- 3
Endpoint Slack
-------------------------------------------------------
Zro_Flag_reg/D -0.32 (VIOLATED)
. . .
1
"
3- 4
strings embedded
lists
3- 6
Describe the
difference between
Public Chat
globbing and exact.
3- 7
The commands used to perform pattern matching for strings:
# Exact pattern matching
string exact pattern string
# Glob style pattern matching
string match pattern string
# Regular expression pattern matching and string extraction or counting
regexp
# Regular expression pattern matching and replacing
regsub
3- 8
Pattern String
sd_DQ* sd_DQ[2]
1 0
sd_DQ\[?\] sd_DQ[22]
1 0
sd_DQ\[[0-3]\] sd_DQ[1]
1 0
3- 9
3- 10
More information on the rules and the need for curly braces in the above examples
can be found in the next workshop The Power of Tcl 2: Creating high impact
procedures.
Are the
reports
identical? redirect –variable rpt1 {report_timing}
# Change the design mode
redirect –variable rpt2 {report_timing}
3- 11
This example does NOT work exactly as shown above. Each timing report will have a
date stamp which will differ. This date stamp must be eliminated and then the remainder
of the timing report can be matched.
mydes/Verilog/ALU.v
0 end
1 end-1
2 end-2
Related Tcl
commands string last
string range
string index
string first
3- 12
The command that allows you to manipulate strings based on indices is string.
end
0 end-1
1 end-2
2
3
Related Tcl
commands lrange lreplace
lindex
lsearch linsert
3- 13
3- 14
10 Minute BREAK
20 Minute LAB
3- 15
3- 16
4 Practical Applications
5 Conclusion
6 Customer Support
4- 2
mydes libs
Verilog
√ pp_ORCA.v
X post_ORCA.v
√ pp_ALU.v
X post_ALU.v
√ pp_CLOCK_GEN.v Design
. . . Compiler
4- 3
read_verilog pp_ORCA.v
read_verilog pp_ALU.v
read_verilog pp_CLOCK_GEN.v
. . .
Show me a
Yes No better way.
4- 4
4- 5
pt_shell> man glob
NAME
glob - Return names of files that match patterns
SYNOPSIS
glob ?switches? pattern ?pattern ...?
DESCRIPTION
This command performs file name ``globbing'' in a fashion similar to the
csh shell. It returns a list of the files whose names match any of the
pattern arguments.
run.tcl
Write a more
Yes No robust script.
4- 6
4- 7
./mydes/Verilog/pp_ORCA.v ./mydes/Verilog/pp_ALU.v
read_verilog $design_files
4- 8
The file name and the design name are assumed to be equivalent for the above example.
./mydes/Verilog/pp_ALU.v
4- 9
./mydes/Verilog/pp_ALU.v
4- 10
./mydes/Verilog/pp_ALU.v
split
{} /mydes/Verilog/pp ALU v
4- 11
./mydes/Verilog/pp_ALU.v
split
{} /mydes/Verilog/pp ALU v
list index 0 1 2 3
4- 12
4- 13
4- 15
pt_shell> rpt_TNV
4- 16
4- 17
Use caution when parsing tool reports. Synopsys does not guarantee format of reports
from tool version to version.
YES
*VIOLATED*? YES
NO
4- 18
proc rpt_TNV {} {
redirect –variable rptstring {report_constraint –all_violators}
set rptlist [split $rptstring \n]
}
****************************************
Report : constraint
-all_violators Each line is now an
-path slack_only
-max_delay
item in a list, the
Design : ORCA newlines removed.
****************************************
Endpoint Slack
----------------------------------------------------------------
pad[22] -0.14 (VIOLATED)
pad[27] -0.14 (VIOLATED)
4- 19
. . .
set TNV 0
foreach line $rptlist {
if {[string match *VIOLATED* $line]} {
incr TNV
} else {
echo $line
set TNV 0
}
}
4- 20
pt_shell> man incr
NAME
incr - Increment the value of a variable
SYNOPSIS
incr varName ?increment?
DESCRIPTION
Increments the value stored in the variable whose name is varName. The
value of the variable must be an integer. If increment is supplied then its
value (which must be an integer) is added to the value of variable
varName; otherwise 1 is added to varName. The new value is stored as a
decimal string in variable varName and also returned as result.
pt_shell> rpt_TNV
****************************************
Report : constraint
-all_violators
-path slack_only
Design : ORCA
****************************************
Forgot to write out
TNV!
max_delay/setup ('clk1' group)
Endpoint Slack
-------------------------------------------------------
4 Practical Applications
5 Conclusion
6 Customer Support
Conclusion 5-1
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Workshop Goal
5- 2
Conclusion 5-2
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Congratulations! You Have Now Yeah!
Lists
Strings Procedures
Math functions
Control flow
Conclusion 5-3
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Share Work Applications
5- 4
Conclusion 5-4
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Continue to Play With Lab Exercises
5- 5
Conclusion 5-5
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Course Evaluation
5- 6
Conclusion 5-6
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Thank You!
5- 7
Conclusion 5-7
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Appendix
Uninstall DesignSphere
Download Workshop Labs At Any Time
Conclusion 5-8
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Optional: After Completion of Workshop
Uninstall
DesignSphere
5- 9
Conclusion 5-9
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
How to Download Lab Files (1/4)
From the Synopsys home page select “Education & Support”
Then Select
Customer Education
5- 10
Conclusion 5-10
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
How to Download Lab Files (2/4)
Then Select
Download Labs
5- 11
Direct link: https://solvnet.synopsys.com/retrieve/002471.html
Conclusion 5-11
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
How to Download Lab Files (3/4)
After logging in through SolvNet, you will see:
Scroll
down
to the
Workshop
5- 12
Conclusion 5-12
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
How to Download Lab Files (4/4)
5- 13
A read me file should be present to help you unpack and untar the lab files.
Conclusion 5-13
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
This page was intentionally left blank.
Conclusion 5-14
The Power of Tcl 1: Becoming a Proficient Tcl User © 2005
Customer Support
2. Empower Yourself:
solvnet.synopsys.com
Online technical information and
access to support resources
Documentation & Media
CS- 2
CS- 3
CS- 4
Fastest access
Contact us:
Web “Enter A Call” from solvnet.synopsys.com
E-Mail support_center@synopsys.com
Phone 1-800-245-8005
Business Hours: Monday - Friday, 7am - 5:30pm PST
CS- 5
CS- 6
CS- 7
Instructor
Please provide contact information for any one you feel would benefit from one of our courses.
Name Name
Phone Number Phone Number
e-mail e-mail
What Units were the most valuable, least valuable for you and why?
Most:
Least:
What recommendations can you suggest for course improvement: materials and or presentation?
Less:
What suggestions would you offer the instructor to improve his/her delivery of the course?
What suggestions do you have that would make it easier to do business with us?
Your comments are sincerely appreciated. Please return the completed form to the instructor. Thanks!
8/01
Customer Education Services