เมื่อคุณกําลังปรับแต่งการออกแบบ การดูข้อมูลเกี่ยวกับระดับตรรกะระหว่างการลงทะเบียนจะเป็นประโยชน์มาก สคริปต์ต่อไปนี้สร้างค่าที่คั่นด้วยเครื่องหมายจุลภาค (. ไฟล์ csv) ที่มีจํานวนพาธที่มีตรรกะในระดับต่างๆ ในการออกแบบของคุณ คุณสามารถแผนภูมิข้อมูลนี้หรือสร้างฮิสโตแกรมใน Excel ที่แสดงการเผยแพร่พาธตามระดับของตรรกะ
ถ้าสองการลงทะเบียนมีพาธลอจิกหลายพาธระหว่างกัน เฉพาะพาธที่มีระดับลอจิกมากที่สุดจะถูกนับด้วยสคริปต์นี้ ตัวอย่างเช่น การลงทะเบียนสองรายการที่มีหนึ่งสี่ระดับและหนึ่งพาธสองระดับจะถูกนับเป็นพาธสี่ระดับหนึ่ง
สคริปต์สร้างไฟล์ CSV ที่มีชื่อ<ชื่อการแก้ไข>.levels_of_logic.csv
โดยสมมติคุณบันทึกสคริปต์ในไฟล์ที่มีชื่อว่า report_levels_of_logic.tclคุณสามารถเรียกใช้งานสคริปต์ได้ด้วยคําสั่งต่อไปนี้:
quartus_tan -t report_levels_of_logic.tcl -project <project name> [-revision <revision name>] [-name_pattern <string to match>]
คุณสามารถใช้ตัวเลือก -name_pattern เพื่อจํากัดการนับพาธตามลําดับชั้นเฉพาะในการออกแบบของคุณ ระบุสตริงที่จะจับคู่กับการจับคู่ภาษาตัวแทนของเครื่องมือ (Tcl) หากคุณไม่ได้ระบุค่าสําหรับตัวเลือก -name_pattern ตัวเลือกจะเป็นค่าเริ่มต้นเป็น * ตัวอย่างเช่น หากคุณต้องการรายงานระดับตรรกะระหว่างการลงทะเบียนในลําดับชั้น ของ mult:inst6|lpm_mult:lpm_mult_component ในการออกแบบของคุณ ให้ระบุ mult:inst6|lpm_mult:lpm_mult_component* สําหรับค่าของตัวเลือก -name_pattern
แพคเกจ load_package advanced_timing ต้องใช้ตัวเลือกชุด cmdline {\ { "project.arg" "" "ชื่อโครงการ" } \ { "revision.arg" "" "" "ชื่อการปรับปรุง" } \ { "name_pattern.arg" "*" "จํากัดเพื่อลงทะเบียนการจับคู่รูปแบบนี้ "} } ชุดอาร์เรย์ [::cmdline::getoptions quartus(args) $options] ชุดอาร์เรย์ num_levels [list] # เปิดโครงการและรับชื่อการปรับปรุงหาก { [string equal "" $opts(แก้ไข)] } { project_open $opts(project) -current_revision } อย่างอื่น { project_open $opts(project) -การปรับปรุงแก้ไข $opts(การปรับปรุง) } ชุดการปรับปรุง [get_current_revision] # เตรียม netlist เวลาถ้า { {create_timing_netlist; create_p2p_delays } res] } { post_message -type error $res project_close qexit -error } # ทําซ้ําผ่านการลงทะเบียนทุกรายการใน design foreach_in_collection dest [get_timing_nodes -type reg] { # รับรายชื่อผู้รักษาประตู (ลงทะเบียน, พิน นาฬิกา) # ที่ป้อนไปยัง ชุดโหนดลงทะเบียนdelays_from_keepers [get_delays_from_keepers $dest] # หากชื่อการลงทะเบียนปลายทางไม่ตรงกับรูปแบบ # เพียงไปที่โหนดถัดไป ตั้งค่าdest_name [get_timing_node_info -$destชื่อข้อมูล] หาก { ! [string match $opts(name_pattern) $dest_name] } { continue } #Walk throughers ทั้งหมดป้อนพิ นและนาฬิกาชั่วคราวของโหนดลงทะเบียน $delays_from_keepers { set src [lindex $delay 0] # Keeper สามารถรวมพินและนาฬิกาและเราต้องการลงทะเบียนเท่านั้น ถ้า { ! [string equal "reg" [get_timing_node_info -info type $src]] } { continue } # หากชื่อการลงทะเบียนแหล่งที่มาไม่ตรงกับรูปแบบ # เพียงไปที่ชุดถัดไปsrc_name [get_timing_node_info -ชื่อข้อมูล $src] หาก { ! [string match $opts(name_pattern) $src_name] } { continue } # ณ จุดนี้ ทั้งชื่อต้นทางและปลายทาง # ตรงตามรูปแบบ และเป็นพาธ ลงทะเบียนเพื่อลงทะเบียน # คําสั่ง get_delay_path ส่งคืนรายการโหนดบน # พาธ ความยาวของพาธคือความยาวของรายการ # รายการประกอบด้วยแหล่งข้อมูลและการลงทะเบียนปลายทาง # ระดับตรรกะระหว่างการลงทะเบียนคือ - พาธที่ตั้งไว้ 2 ชุด [get_delay_path -type ยาวที่สุด -จาก $src -to $dest] ตั้งค่าlevels_of_logic [expr { llength $path] - 2 } ] # บันทึกข้อมูลในอาร์เรย์ หาก { [info มีnum_levels($levels_of_logic)] } { incr num_levels($levels_of_logic) } } อื่น { ตั้งค่า num_levels($levels_of_logic) 1 } } project_close # เขียนข้อมูลลงในไฟล์หาก { [.levels_of_logic{rev}.levels_of_logic.csv w} fh] } { post_message -type error $fh } อื่น { # เขียนส่วนหัวคําอธิบายลงในไฟล์ จะใส่$fh "ระดับตรรกะสําหรับ$optsโครงการ (โครงการ) $revแก้ไข" ใส่$fh "ไฟล์ที่สร้างขึ้นโดย Quartus® II $quartus(version) บน \ [clock format [seconds]]" จะใส่$fh "\nพอร์ตพาธสําหรับชื่อการลงทะเบียนที่ตรงกัน$opts(name_pattern)" ใส่$fh "ระดับลอจิก,จํานวนในการออกแบบ" ระดับแนวหน้า [lsort -integer [array name num_levels]] { หาก { { การแบ่งจํานวน$fh "$level,$num_levels($level)" } } res] } { post_message -type error $res break } } อย่างใกล้ชิด { close $fh } }