240 likes | 394 Views
WebTA/WebChip Perl Utilities for Post-Processing Synthesis Results of SoC Designs. Steven Leung Brocade Communication Systems March 14, 2002. Outline. Introduction What Do We Want? Information better organized Automation to reduce manual efforts WebTA/WebChip Design Data IO GUI
E N D
WebTA/WebChipPerl Utilities for Post-Processing Synthesis Results of SoC Designs Steven Leung Brocade Communication Systems March 14, 2002
Outline • Introduction • What Do We Want? • Information better organized • Automation to reduce manual efforts • WebTA/WebChip Design • Data IO • GUI • Main script flow (WebTA) • Webization • Demo • Conclusions
Introduction: What is the Issue? • SoC designs: Blocks today are chips yesterday • Key implement issue in achieving TTM: “Timing Closure” • One aspect of the timing closure problem: Timing constraints take weeks, if not months, to clean • Major constraint types: Clocks, IO Timing, F-/M-Paths • Block vs. Chip • Synthesis vs. STA • Pre-layout vs. Post-layout • Logical vs. physical • Most of the time spent on exception path specifications • How can we speed up the constraints dev/mgmt process?
Introduction: Motivation • Recap: Timing closure Constraints F/M paths • Feedback from violation reports • Why does it take months to clean? • Coding/planning problems • Incompatibility between tools • Information not well organized • Labor intensive • WebTA is developed to address the last two areas • Information better organized • Automation to reduce manual work
What Do We Want? • Separate viols into groups based on • R-R vs. IO-related • Setup vs. Hold • Clock-pairs Orig. rpt size: 80MB+ 1.45M lines 31k+ timing path viols 4.5hrs to generate • Information better organized
What Do We Want? statistics summary • Information better organized • Timing information hierarchy • Extensive links to provide top-down, directed, immediate access
What Do We Want? • Automation to reduce manual work • Recognize “similar” paths and display just once # of viol paths reduced from 31k to < 1.4k!
What Do We Want? • Automation to reduce manual work • Capture false/multicycle path specs while designers examine the path violations
Data I/O: WebTA design.tim.max.rpt webta.cmd design.area.rpt input_file_basename design output_file_prefix webta delay_warning_threshold 0.15 delay_error_threshold 0.3 ... design.ref.rpt design.qor.rpt design.atpg.rpt design.test.chk webta.stat webta.html List of path summary in each timing path group webta_stat.html webta_smry_cgi.html webta_smry.html • Statistics • Cell/Net/Area • Timing violations • DFT/Test violations Timing path details webta_detail.html webta_sim_path.html webta_log.html Similar path information Other non-timing details Command Syntax: webta[design] design.cnstr.rpt WebTA
Data I/O: WebChip block_list_file File Format [# ]dir [<#_of_inst>] webchip_stat.html webchip.html dir1 /webta.stat • dir2/webta.stat dirn/webta.stat webchip_ctrl.html Command Syntax: webchipblock_list_file WebChip
WebTA/WebChip Design: GUI + : DFT viol multiple instantiation support * : setup viol
WebTA Design: Script Overview • Main Script Flow • Step 1: Collect path slack info and generate summary – Data structure is the key • Step 2: Suppress similar paths and add html/cgi • Webization Techniques • HTML tags: Simple labeling and links setting • CGI basic • Adding GUI widgets through the FORM tag
WebTA Design: Main Script Flow (1a) $st $start_clk $end $end_clk $is_iport $is_oport $type $slk • Collecting info in the path report Startpoint: u_clocks/dbs_div2_reg/Q (clock source 'clk_dei') Endpoint: u_tslice_0/tsl_s_phase_reg (rising edge-triggered flip-flop clocked by clk_dbs) Path Group: clk_dbs Path Type: max Point Incr Path ------------------------------------------------------------ clock clk_dei (rise edge) 0.00 0.00 u_clocks/dbs_div2_reg/Q (FD1SQAFP) 0.00 0.00 r . . . data arrival time -9.26 ------------------------------------------------------------ slack (VIOLATED) -6.60
$type $is_iport $is_oport $path_type Comments WebTA Design: Main Script Flow (1b) Max 0 0 0 Setup, R-R Max 1 0 1 Setup, I-R Max 0 2 2 Max, R-O Max 1 2 3 Max, I-O Min 0 0 4 Hold, R-R Min 1 0 5 Hold, I-R Min 0 2 6 Min, R-O Min 1 2 7 Min, I-O • Defining the variable $path_type as follows: $path_type = $is_iport + $is_oport + $type eq ‘min’ ? 4 : 0; • $path_type is used as index to a reg array @slk_of, which stores references of hashes holding path-slack pairs
WebTA Design: Main Script Flow (1c) %{ }–> {“$grp:$st->$end”} =$slk $slk_of[$path_type] where $grp = “$start_clk–$end_clk” (anonymous hash) key value grpi:startj->endk slk • Data structure that stores the slacks of ALL paths Each path is assigned a unique PID, which is stored exactly the same way ( %{$pid_of[$path_type]}–>{…} ) • Sort and dump out the entire table to a smry.tmp file; and generate statistics along the way
WebTA Design: Main Script Flow (2a) smry.tmp file • Main task in Step 2: Suppressing “similar” paths • “Similar” (Identify elements in the name that are exactly the same) • Bus situation: abc[0] is similar to abc[12] • Multiple instantiations: u_dlm0/abc[0] is similar to u_dlm2/abc[3] • Transformed to a canonical form where digits are replaced by ‘#’ • Perl: s/\d+/#/g
WebTA Design: Main Script Flow (2b) @add_line @smry_lines %line_no_of i msg added i lines to be printed i $path_pi … … u_sns_bs/ll#/sns_ R-R_SG15 122 123 clk_dei-bs2_rbc1 –2 123 123 *** 3 similar paths Suppressing similar paths (cont.) • Read back the already sorted endpt summaries from the tmp file • Save all lines to be printed to the array @smry_lines • For path lines, generate the canonical form ($path_pi) for $st->$end • First time see $path_pi => to be printed, save the path • Remember the index to @smry_lines associated with $path_pi • Save paths whose $path_pi already seen in a temp array • At end of each group, generate the similar path msg and put it into the @add_line array using $path_pi’s index to the @smry_lines array • Print lines in @smry_lines and @add_lines together later
Webization-1: HTML Tagging • Labeling and targeting webta_stat.html webta.html . . . <a href=webta_smry.html #R-R_SG9target =smry>R-R_SG9</a> . . . <frameset rows=15%,25%,60%> <frame name=stat src='webta_stat.html'> <frame name=smry src='webta_smry.html'> <frame name=detail src=webta_detail.htm Group ID Group ID is used in link, and displayed text label, webta_smry.html . . . <a name=R-R_SG9> R-R_SG9: Num of ... • Simple HTML header to disable formatting <html><head></head><body bgcolor=#FFFFE0><pre>
Webization-2: CGI Basic CGI (Common Gateway Interface) browser httpd (server) cgi-lib.pl executable perl script static html Program returns a header (+ content): Content-type: text/html or Location: <URL> Header must end with a blank line. var1 = val1var2 = val2 var1 = val1var2 = val2 . . . . . . Server passes req info thru ~20 env variables:QUERY_STRING REQUEST_METHOD CONTENT_LENGTH … GET: Form data appended to URL, limited size REQUEST_METHOD POST: Form data not passed thru URL, unlimited size; program obtains form data thru STDIN when req starts with cgi-bin/* FORM
Webization-3: Adding GUI Widgets • <input type=gui_type name=var value=val> Additional Attributes size=# maxlength=# text checked radio checked checkbox submit/reset button (In 4.0: button becomes a form object itself) • <select name=var > options </select> • Options: <option value=val [selected]> … </select> • <textarea rows=# cols=# name=name> … </textarea> • <form action=url method=get|post [target=frame]> • </form>
CGI Script to Generate F/M-Paths (1) to server browser -------- <aname=R-R_SG6>R-R_SG6: Num of [distinct] paths = 1, Total slacks clk_pci-clk_sgp -0.33 <a target=detail href=webta_detail1.html <input type=radio name=PType_R-R_S9325 value=false_path> False <input type=radio name=PType_R-R_S9325 value=mcycle_path> Multi- <input type=radio name=PType_R-R_S9325 value=0> Reset <input type=checkbox name=R-R_S9325_from value=u_pci/pci_io/ipci <input type=checkbox name=R-R_S9325_to value=u_pci/pci_dec/ipci_ *** 3 similar start-end-pts (<a target=detail href=webta_l <input type=checkbox name=R-R_S9325_from_Pi value=u_pci/pci_io <input type=checkbox name=R-R_S9325_to_Pi value=u_pci/pci_dec/ -------- { R-R_S9325 R-R_S9325 PType_R-R_S9325=false_path R-R_S9325_from=u_pci/pci_I R-R_S9325_to=u_pci/pci_dec output display html source
CGI Script to Generate F/M-Paths (2) cgi-lib.pl %value_of key value PType_R-R_S9325 R-R_S9325_from R-R_S9325_to false_path u_pci/pci_io/ipci_c_be_reg_0_ u_pci/pci_dec/ipci_par_reg_3_ • Output the CGI header • Script flow of gen_xcpt_paths • Recover the PIDs from PType_PID key-value pairs and separate them into false/mcycle path groups • For each PID in each group, write out the set_false/multicycle_path command and the -from/-to args, with the values derived from the PID_from[_pi]/PID_to[_pi] variables if they exist
WebTA/WebChip: Demo 23/20
Conclusions • The design of WebTA/WebChip utilities presented • Data I/O • Main script flow • Webization techniques • HTML and Web GUI widget basics • CGI to enable user interaction with web-based info • Web interface of synthesis/STA results to provide • Hierarchically organized timing and other statistics information • Top-down, directed, immediate access to any level of details • “Similar” timing path recognition to reduce amount of data • From timing viol reports to false/multicycle path spec via CGI • Help to speed up constraints development to achieve FTAT • Demo example: DB: 80+MB ~3MB ; Viol paths: 31k 1.4k