VLSI Lab5 2012 GIỚI THIỆU VỀ TOOL IC COMPILER I/ MỤC ĐÍCH Giới thiệu và làm quen với tool ICC của Synopsys II/ LÝ THUYẾT 1/ Giới thiệu quy trình layout Quý trình layout gồm các bước sau: Phân vùng (Partitioning) thiết kế Dựng nền (Floorplanning) Sắp xếp (Placement) Tổng hợp cây clock (Clock tree synthesis) Đi dây (Routing) Xác định RC (RC extraction) 1.1/ Phân vùng thiết kế Hình 1: Ví dụ về một mô hình được phân vùng thiết kế Hai kiểu thiết kế ASIC phổ biến: thiết kế san bằng (flat) và thiết kế phân cấp (hierarchical). Thiết kế san bằng thì không cần phân vùng thiết kế, mà ta sẽ san bằng và sắp xếp các cổng sao cho phù hợp với các ràng buộc hay tối ưu thiết kế. Cách này được áp dụng với các thiết kế loại nhỏ 1 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 Nếu chọn thiết kế phân cấp, ta tiến hành phân vùng thiết kế trong ASIC. Việc phân vùng thiết kế này có thể được thực hiện ở bước logic gọi là phân vùng logic hoặc bước vật lý gọi là phân vùng vật lý. Với kiểu thiết kế này, ta có thể gặp nhiều vấn đề về thời gian trễ và tốn nhiều diện tích hơn thiết kế san bằng. Nhưng với cách này việc quản lý thiết kế dễ dàng hơn, nhờ thế tránh được các lỗi có thể phát sinh do việc tập trung mật độ các dây ở một khu vực nào đó… 1.2/ Dựng nền (Floorplanning) Bước dựng nền (Floorplanning) nhằm thực hiện tạo các mạng power và ground trong chip, tạo các pad power và ground cho lõi (core) và I/O, tạo các vòng (Ring) power, ground bao quanh core, nối các điểm power và ground cho các cell chuẩn. Ngoài ra, floorplanning còn xác định vị trí các pad I/O, xác đinh vị trí và số lương pad power, xác định vị trí và kiểu phân phối clock. 1.3/ Sắp xếp (Placement) Sắp xếp (Placement) nhằm tổng hợp vật lý của thiết kế từ tập tin mức cổng (Netlist). Bước này trong quá trình thiết kế vật lý đóng vai trò rất quan trọng vì nó sẽ quyết định nhiều yếu tố của thiết kế như là tối ưu về thời gian, diện tích, hay công suất và khả năng đi dây… Placement sẽ xác định kích thước cell, phân chia các lưới, chèn các buffer đệm hay nhân đôi cổng nhằm tăng thêm độ trễ ở các đường. Mục đính là khắc phục các vấn đề về thời gian thiết lập (Setup time), thời gian giữ (Hold time) hay tránh sự tắc nghẽn (congestion driven placement) trong quá trình đi dây (Routing) 1.4/ Tổng hợp cây clock (Clock Tree Synthesis) Clock Tree Synthesis (CTS) nhằm tối thiểu hóa độ lệch clock giữa clock nguồn và các nhánh bằng cách chèn buffer vào nhằm đồng bộ các clock. Đồng thời lợi dụng sự lệch clock giữa các tín hiệu cũng giúp cho việc sửa các lỗi về thời gian đơn giản hơn. Quá trình này phụ thuộc nhiều vào công cụ mà ta sử dụng để tối ưu 2 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 Hình 2: Minh họa về chèn các buffer vào tín hiệu clock trong CTS 1.5/ Di dây (Routing) Di dây (Routing) thực hiện nối các cổng sau khi ta đã sắp xếp trong Placement. Routing là quá trình tạo sự liên kết vật lý dựa trên tính kết nối logic. Những chân tín hiệu thì được kết nối bằng các liên kết kim loại. Các đường kết nối này sẽ được thực hiên sao cho đảm bảo các yêu cầu về thời gian, độ lệch clock, độ trễ giữa các cổng, điện dung… Do tính phức tạp của các thiết kế ASIC và số lượng liên kết rất lớn nên khi routing ta chia thành ba giai đoạn: Routing riêng biệt (special routing), routing toàn bộ (global routing) và routing chi tiết (detail routing). Hình 3: Một thiết kế đã được routing 1.6/ Xác định RC (RC Extraction) RC Extraction nhằm xác định các giá trị ký sinh RC được sinh ra trong thiết kế sau khi được layout. Với các công nghệ ngày càng cao, các giá trị này sẽ ảnh hưởng khá lớn đến độ trễ của các đường dữ liệu (path delay). Chính vì thế những đường mà trong quá trình ta kiểm tra ở 3 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 Pre-layout có thể là đúng nhưng sau khi qua layout sẽ sai. Do đó, trong bước Pre-layout có một bước kiểm tra chức năng của thiết kế với ràng buộc về thời gian đưa ra nhưng thường đươc bỏ qua, do kết quả của nó không có tín thuyết phục cao. Các giá trị vật lý của layout sẽ quyết định rất lớn đến khả năng sống của thiết kế. Do đó bước này cần tiến hành kỹ 2/ Giới thiệu về công cụ IC Compiler Hình 4: Tổng quát về một quy trình IC Compiler 4 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 Tập tin mức cổng (Netlist): đuôi .v hoặc .ddc Tập tin ràng buộc (Constraints): đuôi .sdc Thư viện công nghệ (Library synopsys): đuôi .db, .tf … TLUPlus là tập tin có định dạng bảng nhị phân lưu trữ các hệ số RC. Các mô hình TLUPlus được tổng hợp bởi nhà sản xuất, nhờ nó ta có thể kiểm tra được các giá trị RC chính xác bao gồm các hệ số chiều rộng, khoảng cách, mật độ và nhiệt độ theo các hệ số điện trở. Các tập tin cần để thiết lập mô hình TLUPlus là : Tập tin tham chiếu (.map) để có thể chỉ định tương ứng đến các lớp (Layer) và Via trong tập tin công nghệ Milkyway (.tf) File mô hình TLUPlus cực đại (maximum). File mô hình TLUPlus cực tiểu (minimum). 3/ Các lệnh cơ bản trong IC Compiler #Tao ra thu vien mw cua thiet ke create_mw_lib -technology $Techfile \ -mw_reference_library $Ref_lib \ $my_mw_lib -technology file_name: Xác định tập tin công nghệ (.tf) -mw_reference_library file_names: Xác định thư viện tham chiếu Milkyway. Dùng để tạo ra thư viện của thiết kế mình library_name: Tên của thư viên thiết kế mà mình muốn tạo ra. #Import cac tap tin thu vien TLUPlus trong layout set_tlu_plus_files \ -max_tluplus $Tlupmax \ -min_tluplus $Tlupmin \ -tech2itf_map $Tech2itf -max_tluplus file_name: Tập tin mô hình TLUPlus cực đại (maximum) -min_tluplus file_name: Tập tin mô hình TLUPlus cực tiểu (minimum). -tech2itf_map file_name: Tập tin công nghệ Milkyway (.tf) #Import tap tin netlist import_designs \ -format verilog \ -top $cell_name \ 5 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 -cel $cell_name ${LinkNetlist}/${cell_name}_NL.v #Neu import tap tin .v thi khong can tap tin .ddc #import_designs -format ddc ${LinkNetlist}/${cell_name}_NL.ddc #Import tap tin rang buoc cua thiet ke read_sdc "${LinkNetlist}/${cell_name}.sdc" Tập tin Netlist ở đây có thể là tập tin verilog (.v) hay tập tin định dạng cơ sở dự liệu của Synopsys (.ddc) và tập tin quy định các ràng buộc (.sdc) đươc mô tả trong bước tổng hợp thiết kế initialize_floorplan \ -core_utilization $Core_util \ -left_io2core $Core_space \ -bottom_io2core $Core_space \ -right_io2core $Core_space \ -top_io2core $Core_space Lệnh initialize_floorplan để tiến hành khởi tạo Floorplan nhằm tạo nên khung của thiết kế. Các thiết lập trong lệnh này là : -core_utilization: Xác định hệ số sử dụng lõi của thiết kế. Giá trị này sẽ cho biết phạm vi mà ta tiến hành sắp xếp các cell chuẩn là bao nhiêu của tổng diện tích thiết kế. Giá trị nằm trong 0 đến 1. Thông thường ta nên sử dụng là 0.6 hay 0.7 vì nếu lõi chiếm quá cao thì sẽ không có chỗ cho ta tiến hành đi dây (routing). Còn nếu quá nhỏ sẽ lãng phí không gian của thiết kế Utilization = (Tổng diên tích các cell hay Macro) x 100% / ( Kích thước của thiết kế) -left_io2core: Xác định khoảng cách từ lề bên trái của lõi với bên phải của cực hoặc pad gần nhất -bottom_io2core: Xác định khoảng cách từ lề bên dưới của lõi với bên phải của cực hoặc pad gần nhất -right_io2core: Xác định khoảng cách từ lề bên phải của lõi với bên phải của cực hoặc pad gần nhất -top_io2core: Xác định khoảng cách từ lề bên trên của lõi với bên phải của cực hoặc pad gần nhất 6 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 derive_pg_connection \ -create_ports all\ -power_net VDD \ -power_pin VDD \ -ground_net VSS \ -ground_pin VSS \ -tie Lệnh derive_pg_connection dùng để tạo các port kết nối nguồn (VDD) và đất (VSS) cho thiết kế. Các thiết lập trong lệnh là: -create_ports: Tạo port trên mức top của thiết kế. -power_net: Xác định tên của lưới nguồn (Power net) -power_pin: Xác định tên của chân nguồn (Power pin) -ground_net: Xác định tên của lưới đất (Ground net) -ground_pin: Xác định tên của chân đất (Ground pin) -tie: kết nối các chân liên kết cao (tie-high) và liên kết thấp (tie-low). Các mạng power và ground phải tồn tại trước khi kết nối các chân tie-high và tie-low #Tao vong VDD create_rectangular_rings \ -nets {VDD} \ -right_offset 2.0 \ -right_segment_layer M4 \ -right_segment_width 2.0 \ -left_offset 2.0 \ -left_segment_layer M4 \ -left_segment_width 2.0 \ -bottom_offset 2.0 \ -bottom_segment_layer M5 \ -bottom_segment_width 2.0 \ -top_offset 2.0 \ -top_segment_layer M5 \ -top_segment_width 2.0 #Tao vong VSS create_rectangular_rings \ -net {VSS} \ 7 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 -left_offset 0.5 \ -left_segment_layer M5 \ -left_segment_width 2.0 \ -right_offset 0.5 \ -right_segment_layer M5 \ -right_segment_width 2.0 \ -bottom_offset 0.5 \ -bottom_segment_layer M5 \ -bottom_segment_width 2.0 \ -top_offset 0.5 \ -top_segment_layer M5 \ -top_segment_width 2.0 Lệnh create_rectangular_rings thực hiện tạo các vòng. Với các thiết lập như sau: -net: Loại đường ta tạo -left_offset: khoảng lệch so với bên trái -left_segment_layer: lớp mà ta tiến hành tạo -left_segment_width: độ rộng của đường được tạo #Tao cac strap VDD,VSS create_power_straps \ -direction vertical \ -start_at 30 \ -num_placement_strap 8 \ -increment_x_or_y 20 \ -nets {VDD} \ -layer M6 \ -width 1.0 \ -do_not_route_over_macros create_power_straps \ -direction vertical \ -start_at 40 \ -num_placement_strap 8 \ -increment_x_or_y 20 \ -nets {VSS} \ -layer M7 \ -width 1.0 \ -do_not_route_over_macros 8 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 Lệnh create_power_straps thực hiện tạo các lưới. Ở đây ta dùng lệnh này để tiến hành tạo lưới nguồn và đất. Các thiết lập của lệnh này là : -direction: Hướng mà ta tiến hành xây dựng, có hai hướng: vertical(Theo chiều ngang) hoặc horizontal (Theo chiều dọc). -start_at: Vị trí bắt đầu tiến hành xây dựng -num_placement_strap: số đường mà ta muốn xây dựng -increment_x_or_y: Khoảng cách giữa hai đường -nets: Loại đường (net) -layer: Lớp thực hiện -width: Độ rộng của các đường #Tien hanh Placement place_opt Tiến hành tối ưu Placement theo chế độ mặc định #Tien hanh CTS clock_opt -fix_hold_all_clocks -inter_clock_balance Tương tự như quá trình Placement, Synopsys hỗ trợ ta các lệnh để thiết lập tổng hợp cây clock (CTS) bằng lệnh clock_opt. #Tien hanh Routing set_fix_hold [all_clocks] route_opt -incremental -only_hold_time Đây là bước kế cuối trong quy trình thiết kế vật lý. Ở đây các cell chuẩn sẽ được nối lại với nhau. Bước này sẽ phát sinh thêm các đặc tính vật lý của thiết kế. Trong IC Compiler, lệnh dùng để thực hiện chức năng này là route_opt #Them cac Core Filler Cells insert_stdcell_filler \ -connect_to_power "VDD" -connect_to_ground "VSS" Lệnh insert_stdcell_filler: Thêm các filler cells nhằm đảm bảo các đường powe và ground liên tuc, cũng như đảm bảo tính liên tục của các n-well và p-well tại mỗi hàng của các cell chuẩn. Các filler cells chứa trong thư viện cell chuẩn. #Tien hanh phu kim loai o 9 lop insert_metal_filler \ 9 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 -purge \ -out self \ -from_metal 1 -to_metal 9 \ -timing_driven -routing_space 2 insert_metal_filler -out self -tie_to_net ground \ -from_metal 1 -to_metal 9 -routing_space 2 Lệnh insert_metal_filler: Tiến hành phủ kim loại ở các lớp. -purge: Làm sáng tỏ tất cả vị trí kim loại phủ trong các cell đươc thấy -out self: Xác định vị trí để tạo ngõ ra.-from_metal 1 -to_metal 9: tạo ngõ ra từ lớp 1 đến lớp 9 -timing_driven: Phủ kim loại được định hướng theo thới gian -routing_space: Khoảng cách giửa các dây và kim loại phủ -tie_to_net: Xác định kim loại phủ được kết nối với net hay không.-tie_to_net ground: Kim loại phủ kết nối với đất (Ground) 4/ Tiến hành chạy công cụ IC Compiler Ta có 3 cách tiến hành chạy công cụ Design Compiler Cách 1: Tiến hành chạy trên giao diện GUI. Gõ lệnh icc_shell –gui Cách 2: Tiến hành chạy trên terminal và tiến hành gõ các lệnh. - Gõ lệnh icc_shell - Tiến hành gõ các lệnh trên terminal để tiến hành chạy. Cách 3: Tiến hành chạy từ đầu đến cuối của một tập tin ràng buộc bằng cách sử dụng một file script.tcl. - Gõ lệnh icc_shell –f .tcl 10 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 Tiến hành chạy và các thông báo về warning, error sẽ xuất ra trên terminal icc_shell –f .tcl | tee .log Sau khi chạy, các thông báo trên terminal sẽ lưu vào một file .log giúp ta quan sát dễ hơn III/ THỰC HÀNH Bước 1: Sửa folder [Lab5]ICC thành Lab5_ICC Tạo folder ThucHanh trong Lab5_ICC Tạo folder netlist, sdc, icc trong folder ThucHanh Tạo folder icc_report trong folder icc Tạo file icc_script.tcl trong folder icc Copy file counter_NL.v ở trong Lab4_PT/ThucHanh/netlist vào folder netlist mới tạo Copy file counter_SDC.sdc ở trong Lab4_PT/ThucHanh/sdc vào folder sdc mới tạo Bước 2: Viết file icc_script.tcl với nội dung như sau: 1. Thiết lập các biến đường dẫn cho file script: #Thiet lap ten thiet ke set cell_name "Counter" set my_mw_lib "Counter_Lib" #Thiet lap cac duong dan set mw_path < đường dẫn đến folder icc> set LinkProject < đường dẫn đến folder Lab5_ICC/ThucHanh> set LinkLibrary_mk set LinkLibrary_db set LinkReport < đường dẫn đến folder icc_report> set LinkNetlist < đường dẫn đến folder netlist> #Thiet lap mot so bien trong thiet ke set Core_util "0.60" set Core_space "4" set mw_logic0_net VSS set mw_logic1_net VDD set power "VDD" set ground "VSS" set powerPort "VDD" set groundPort "VSS" 11 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 2. Thiết lập đường dẫn các thư viện #Thiet lap cac duong dan den cac thu vien cong nghe set Techfile "${LinkLibrary_mk}/astro/tech/astroTechFile.tf" set Ref_lib "${LinkLibrary_mk}/astro/fram/saed90nm_fr" set Tlupmax "${LinkLibrary_mk}/star_rcxt/tluplus/saed90nm_1p9m_1t_Cmax.tluplus" set Tlupmin "${LinkLibrary_mk}/star_rcxt/tluplus/saed90nm_1p9m_1t_Cmin.tluplus" set Tech2itf "${LinkLibrary_mk}/astro/tech/tech2itf.map" set target_library [list ${LinkLibrary_db}/saed90nm_min.db / ${LinkLibrary_db}/saed90nm_typ.db / ${LinkLibrary_db}/saed90nm_max.db] set link_library [list * ${LinkLibrary_db}/saed90nm_max.db] set mw_logic0_net VSS set mw_logic1_net VDD 3. Khởi tạo thư viện Milkyway #Tao ra thu vien mw cua thiet ke create_mw_lib -technology $Techfile \ -mw_reference_library $Ref_lib \ $my_mw_lib 4. Thiết lập các tập tin TLUPlus #Import cac tap tin thu vien TLUPlus trong layout set_tlu_plus_files \ -max_tluplus $Tlupmax \ -min_tluplus $Tlupmin \ -tech2itf_map $Tech2itf 5. Đọc tập tin Netlist và tập tin ràng buộc (Constraints) #Import tap tin netlist import_designs \ -format verilog \ -top $cell_name \ -cel $cell_name ${LinkNetlist}/${cell_name}_NL.v #Import tap tin rang buoc cua thiet ke read_sdc "${LinkNetlist}/${cell_name}.sdc" #Luu thiết kế save_mw_cel -as "mw_Counter" 12 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 6. Khới tạo floorplaning initialize_floorplan \ -core_utilization $Core_util \ -left_io2core $Core_space \ -bottom_io2core $Core_space \ -right_io2core $Core_space \ -top_io2core $Core_space 7. Kết nối Power và Ground derive_pg_connection \ -create_ports all\ -power_net VDD \ -power_pin VDD \ -ground_net VSS \ -ground_pin VSS \ -tie 8. Tạo vòng power và ground #Tao vong VDD create_rectangular_rings \ -nets {VDD} \ -right_offset 2.0 \ -right_segment_layer M4 \ -right_segment_width 0.5 \ -left_offset 2.0 \ -left_segment_layer M4 \ -left_segment_width 0.5 \ -bottom_offset 2.0 \ -bottom_segment_layer M5 \ -bottom_segment_width 0.5 \ -top_offset 2.0 \ -top_segment_layer M5 \ -top_segment_width 0.5 \ -extend_tl \ -extend_th #Tao vong VSS create_rectangular_rings \ -net {VSS} \ -left_offset 0.5 \ 13 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 -left_segment_layer M5 \ -left_segment_width 0.5 \ -right_offset 0.5 \ -right_segment_layer M5 \ -right_segment_width 0.5 \ -bottom_offset 0.5 \ -bottom_segment_layer M5 \ -bottom_segment_width 0.5 \ -top_offset 0.5 \ -top_segment_layer M5 \ -top_segment_width 0.5 \ -extend_tl \ -extend_th preroute_standard_cells -mode rail -nets "VSS VDD" 9. Tạo các dãi power và ground #Tao cac strap VDD,VSS create_power_straps \ -direction vertical \ -start_at 6 \ -num_placement_strap 10 \ -increment_x_or_y 2 \ -nets {VDD} \ -layer M6 \ -width 0.5 \ -do_not_route_over_macros create_power_straps \ -direction horizontal \ -start_at 6 \ -num_placement_strap 10 \ -increment_x_or_y 2 \ -nets {VSS} \ -layer M7 \ -width 0.5 \ -do_not_route_over_macros #Luu thiết kế save_mw_cel -as "mw_Counter_floorplan" 14 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 10. Tiến hành Placement #Tien hanh Placement place_opt -congestion 11. Clock Tree Synthesis #Tien hanh CTS clock_opt -no_clock_route -only_psyn -fix_hold_all_clocks -only_hold_time #Report timing report_placement_utilization > đường dẫn report tạo ra file cts_${cell_name}_util.rpt report_qor_snapshot > đường dẫn report tạo ra file cts_${cell_name}_qor_snapshot.rpt report_qor > đường dẫn report tạo ra file cts_${cell_name}_qor.rpt report_timing –max_paths 20 –delay max > đường dẫn report tạo ra file cts_${cell_name}_setup.rpt report_timing –max_paths 20 –delay min > đường dẫn report tạo ra file cts_${cell_name}_hold.rpt #Luu thiết kế save_mw_cel -as "mw_Counter_cts" 12. Routing #Tien hanh Routing route_opt #Report timing report_placement_utilization > đường dẫn report tạo ra file route_${cell_name}_util.rpt report_qor_snapshot > đường dẫn report tạo ra file route_${cell_name}_qor_snapshot.rpt report_qor > đường dẫn report tạo ra file route_${cell_name}_qor.rpt report_timing –max_paths 20 –delay max > đường dẫn report tạo ra file route_${cell_name}_setup.rpt report_timing –max_paths 20 –delay min > đường dẫn report tạo ra file route_${cell_name}_hold.rpt #Luu thiết kế save_mw_cel -as "mw_Counter_route" 15 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM VLSI Lab5 2012 IV/ BÀI TẬP Bài 1: Tiến hành chạy layout thiết kế Counter và chụp hình kết quả trên giao diện GUI ở từng bước. Tống hợp các kết quả trên vào một file report (pdf hay word) Bài 2: Tiến hành chạy layout thiết kế ChipLevel. Chụp hình kết quả trên giao diện GUI ở từng bước. Gữi báo cáo về timing (setup time và hold time) ở các bước CTS, route và kết quả kiểm tra DRC, LVS của thiết kế (Sử dụng 2 lệnh verify_drc và verify_lvs) 16 Khoa Điện Tử - Viễn Thông, Trường ĐH KHTN, Tp HCM