2 - Bộ công cụ FreePDK45 là bộ công cụ thiết kế quy trình nguồn mở - Nó không tương ứng với bất kỳ quy trình thực tế nào và không thể chế tạo được - Cho phép các nhà nghiên cứu và sinh v
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA ĐIỆN TỬ – VIỄN THÔNG BỘ MÔN ĐIỆN TỬ
-o0o -
MÔN: THIẾT KẾ VI MẠCH SỐ VÀ LÕI IP
CHỦ ĐỀ: TÌM HIỂU VỀ THƯ VIỆN SỐ VÀ ỨNG DỤNG
Giảng viên hướng dẫn: ThS Bùi An Đông Họ tên sinh viên:
Lê Vĩnh Phú – 20200306 Trần Huỳnh Tuấn – 20200407 Trương Công Trường – 20200391
TP Hồ Chí Minh, tháng 12 năm 2023
Trang 21
MỤC LỤC
I GIỚI THIỆU CHUNG VỀ THƯ VIỆN 2
II PHÂN TÍCH CHI TIẾT THƯ VIỆN 3
TÀI LIỆU THAM KHẢO 23
BÁO CÁO KỸ NĂNG 24
Trang 32
- Bộ công cụ FreePDK45 là bộ công cụ thiết kế quy trình nguồn mở
- Nó không tương ứng với bất kỳ quy trình thực tế nào và không thể chế tạo được - Cho phép các nhà nghiên cứu và sinh viên thử nghiệm thiết kế trong một nút công
nghệ hiện đại mà không cần các bản cam kết về bản quyền hoặc trả tiền cho giấy phép
- Cho phép sử dụng trên các bộ công cụ thiết kế (ví dụ: Cadence Virtuoso) để thiết kế cả mạch analog và digital
- Các flie có trong thư viện:
II PHÂN TÍCH CHI TIẾT THƯ VIỆN 1 File “adk.tcl”
Đây là một script TCL (Tool Command Language) được sử dụng để cấu hình môi trường thiết kế ASIC (Application-Specific Integrated Circuit) Nó đặt ra các biến quan trọng để xác định quy trình công nghệ, lớp định tuyến, lớp lưới nguồn điện, loại cell dẫn đầu, giá trị điện dung tải trung bình, và nhiều tham số khác liên quan đến thiết kế chip Tập tin cũng cung cấp hỗ trợ cho các công cụ mã nguồn mở và xác định các danh sách cell cần được loại trừ trong quá trình mô phỏng và kiểm tra
Một số mô tả tiêu biểu:
set ADK_PROCESS 45: Xác định quy trình công nghệ ASIC sử dụng, ở đây là 45nm set ADK_DRIVING_CELL "INV_X2": Chọn loại cell dẫn đầu sẽ được sử dụng trong mô phỏng và thiết kế
// Cổng logic được chọn cần phản ánh độ trễ và hiệu suất tương đương với những cổng logic thực tế mà chip sẽ sử dụng Điều này giúp đảm bảo rằng mô phỏng sẽ phản ánh chính xác hành vi của chip thực tế khi được triển khai
Trang 43
set ADK_TYPICAL_ON_CHIP_LOAD 7 : Đặt giá trị điện dung tải trung bình trên chip (7 pF), nó có thể được sử dụng để định rõ độ trễ dự kiến của các cổng và mạch logic trên chip khi chúng phải đối mặt với điện dung tải trung bình này
set ADK_TIE_CELLS \ "LOGIC1_X1 \
LOGIC0_X1"
Xác định các cell được sử dụng để kết nối với nguồn và đất
LOGIC1_X1: Đây có thể là một cell logic đơn giản (ví dụ: NAND hoặc NOR) được thiết kế để tạo ra tín hiệu logic "1" (hoặc VDD) khi được kích thích
LOGIC0_X1: Tương tự, đây có thể là một cell logic đơn giản được thiết kế để tạo ra tín hiệu logic "0" (hoặc VSS/đất) khi được kích thích
2 File “calibre.layerprops”
Chứa thông tin về các lớp (layer) trong quy trình layout
Trích xuất một dòng tiêu biểu trong file mô tả: 10 green speckle contact 1 1
10: Số hiệu lớp, được sử dụng để định danh lớp trong quy trình sản xuất chip Trong trường hợp này, lớp này được đặt là 10
green: Màu của speckle cho lớp này Trong trường hợp này, màu được chọn là xanh lá cây
speckle: Chỉ ra rằng lớp này chứa speckle, tức là có sự chèn thêm các điểm nhỏ (đốm) vào
contact: Loại của lớp Ở đây, lớp này được mô tả là "contact"
1: Độ dày của lớp, được đặt là 1 Thông thường, độ dày được đo bằng đơn vị micromet hoặc nanomet, tùy thuộc vào quy trình sản xuất chip cụ thể
1: Giá trị khác, có thể đại diện cho một thuộc tính khác của lớp hoặc quy trình, nhưng không có thông tin cụ thể nào được cung cấp trong dòng này
Trang 54 4 Databook của thư viện
▪ Chọn một cell đại diện có trong thư viện để nghiên cứu
- Databook Build Date: Ngày xây dựng Databook,
- Copyright: Bản quyền © 2004-2010 của công ty Nangate Inc.,
- Conditions for Characterization Library: Điều kiện cho thư viện đặc tính, bao gồm góc (corner) "NangateOpenCellLibrary_typical_typical" với các thông số:
- Vdd (điện áp nguồn): 1.10V - Tj (nhiệt độ chói): 25.0 độ C
- Output Transition Definition (Định Nghĩa Chuyển Đổi Đầu Ra): Chuyển động đầu ra được xác định từ 30% đến 70% (tăng) và từ 70% đến 30% (giảm) của điện áp đầu ra
- Propagation Delay Measurement (Đo Độ Trễ Truyền):
- Đo độ trễ truyền từ 50% (tăng đầu vào) hoặc 50% (giảm đầu vào) đến 50% (tăng đầu ra) hoặc 50% (giảm đầu ra)
▪ Block diagram của D Flip Flop
Trang 65 ▪ Các thông tin cơ bản về Flip Flop D
Bảng dưới cho ta một số thông tin cơ bản về FlipFlip: Đây là một flipflop hoạt động khi có cạch dương Clk, có diện tích cell là 4.522um2, có input là D, output là Q và QN
- Description: "Pos edge" là viết tắt của "Positive edge", có nghĩa là Flip-Flop này
hoạt động khi có cạnh dương của tín hiệu xung Clock
- Cell Area 4.522 um²: Diện tích của Flip-Flop D trên chip là 4.522 (um²) Đây là
thông số quan trọng để đánh giá mức độ chiếm diện tích của Flip-Flop trên chip
- Equation (Phương trình): Đây là phương trình logic mô tả của tín hiệu - Q = "(D)": Q được tạo ra từ tín hiệu D
- QN = "(!(D))":QN được tạo ra từ tín hiệu D đảo
- Type: Sequential: Loại Flip-Flop là Sequential, có nghĩa là nó lưu trữ thông tin và hoạt động dựa trên xung Clock
- Input D: Flipflop này có đầu vào là D - Output Q, QN: Có đầu ra là Q và QN
- PG Pins (Power/Ground Pins): Các Pin cung cấp nguồn cho flipflip là VDD và VSS
Trang 76 ▪ Bảng trạng thái
▪ Các thông số về độ trễ
- Input Transition [ns]: thời gian mà tín hiệu mất để chuyển từ mức logic thấp sang
mức logic cao hoặc ngược lại tại đầu vào của flip-flop
- Load Capacitance [fF] (điện dung tải): có vai trò quan trọng trong việc xác định
độ trễ lan truyền (propagation delay) của flip-flop Khi flip-flop chuyển trạng thái (từ mức logic thấp sang mức logic cao hoặc ngược lại), nó phải "nạp" hoặc "xả" một lượng điện tích tương ứng với dung lượng tải, dung lượng tải càng lớn, độ trễ lan truyền thường càng tăng, do cần phải chuyển điện tích lớn hơn khi tín hiệu
chuyển động qua mạch
- Clock_to_Q Propagation Delay
Clock-to-Q Time: Thời gian sớm nhất sau khi clock đến flipflop hoặc latch mà dữ liệu đúng xuất hiện ở ngõ ra
Trang 87 ▪ Các thông số khác
- Ràng buộc về thời gian
Setup Time: Thời gian tối thiểu dữ liệu phải “ổn định” trước khi xuất hiện clock để chốt (latch) hay flipflop chuyển mạch
Hold Time: Thời gian tối thiểu mà dữ liệu phải giữ trạng thái sau khi clock đến để chốt (latch) hay flipflop chuyển mạch đúng
- Capacitance (Dung lượng đầu vào): Là dung lượng mà đầu vào của flip-flop
phải vượt qua khi tín hiệu đầu vào chuyển đổi từ mức thấp sang mức cao hoặc ngược lại Dung lượng này bao gồm dung lượng của các transistor và các thành
phần khác trong mạch đầu vào
Trang 98
- Leakage power (Công suất rò rỉ): Mức công suất tiêu tốn khi mạch đang ở trạng
thái chờ đợi hoặc không hoạt động Điều này thường là kết quả của dòng điện "rò rỉ" thông qua các transistor khi chúng ở trong trạng thái tắt
// * NTC Setup
// * Export NTC sections : true // * Combine setup / hold : true // * Combine recovery/removal: true //
Trang 109 Extras:
- Export \celldefine: Thiết lập để không xuất (false) celldefinetrong mã nguồn Verilog.celldefine` thường được sử dụng để xác định một lớp bảng mô tả và có thể ảnh hưởng đến quá trình mô phỏng và tổ hợp mã nguồn
- Export \timescale: Thiết lập để không xuất (false) timescaletrong mã nguồn Verilog.timescale` thường được sử dụng để xác định đơn vị thời gian trong mô hình và mô phỏng
▪ Code verilog mô tả các module
- Trích xuất code verilog mô tả về một Flipflop D module DFF_X1 (D, CK, Q, QN);
input D; input CK; output Q; output QN; reg NOTIFIER; `ifdef NTC
\seq_DFF_X1 (IQ, nextstate, CK_d, NOTIFIER); not(IQN, IQ);
buf(Q, IQ); buf(QN, IQN); buf(nextstate, D_d); `else
\seq_DFF_X1 (IQ, nextstate, CK, NOTIFIER); not(IQN, IQ);
buf(Q, IQ); buf(QN, IQN); buf(nextstate, D); `endif
specify
(posedge CK => (Q +: D)) = (0.1, 0.1); (posedge CK => (QN -: D)) = (0.1, 0.1); `ifdef NTC
Trang 1110
$setuphold(posedge CK, negedge D, 0.1, 0.1, NOTIFIER, , ,CK_d, D_d); $setuphold(posedge CK, posedge D, 0.1, 0.1, NOTIFIER, , ,CK_d, D_d); $width(negedge CK, 0.1, 0, NOTIFIER);
$width(posedge CK, 0.1, 0, NOTIFIER); `else
$setuphold(posedge CK, negedge D, 0.1, 0.1, NOTIFIER); $setuphold(posedge CK, posedge D, 0.1, 0.1, NOTIFIER); $width(negedge CK, 0.1, 0, NOTIFIER);
$width(posedge CK, 0.1, 0, NOTIFIER); `endif
endspecify endmodule
- Phân tích đoạn code trên
Đoạn code mô tả một mô-đun Verilog là "DFF_X1" đại diện cho một Flip-Flop D lớp x1 Dưới đây là mô tả tổng quát về các khối chính trong đoạn mã:
Input và Output:
input D: Đầu vào dữ liệu (Data) của Flip-Flop input CK: Đầu vào xung clock (Clock)
output Q: Đầu ra dữ liệu của Flip-Flop
output QN: Đầu ra đảo của dữ liệu (inverted output) Internal Reg:
reg NOTIFIER:
Biến đăng ký (register) để đánh dấu sự thay đổi trạng thái của Flip-Flop
Conditional Compilation (`ifdef NTC):
Sử dụng ifdef để kiểm soát việc sử dụng quy tắc NTC (Nangate Library Characterizer) Dựa vào điều kiện, các tín hiệu được đưa vào mạch flip-flop được chọn từ D hoặc D_d, CK hoặc CK_d
Sequential Element (`\seq_DFF_X1):
Sử dụng một mô-đun hoặc mô-đun ngược để triển khai phần logic chính của Flip-Flop D
Trang 1211 Logic Gates (not, buf):
not(IQN, IQ): Tạo ra đầu ra đảo QN từ đầu ra Q buf(Q, IQ): Đảm bảo Q giữ giá trị của IQ
buf(QN, IQN): Đảm bảo QN giữ giá trị của IQN
buf(nextstate, D_d): Đảm bảo nextstate giữ giá trị của D_d hoặc D tùy thuộc vào việc sử dụng NTC hay không
Specify Block (`specify):
Xác định thời gian và điều kiện về thời gian cho Flip-Flop Sử dụng $setuphold để đặt giới hạn về thời gian setup và hold Sử dụng $width để đặt giới hạn về chiều rộng dữ liệu
Tóm lại, mô-đun "DFF_X1" này chứa một Flip-Flop D lớp x1, có thể được điều chỉnh sử dụng quy tắc NTC Các thời gian đặc tả và điều kiện về thời gian cũng được xác định trong khối specify
- Chạy code trên tool
6 File “stdcells.lib”
▪ Standard cell - Level attributes
* Spice engine : Nanspice v2011.01-HR04-2011-01-19-1102050200 * Liberty export type : conditional
*
* Characterization Corner : typical * Process : TypTyp
Trang 1312
* Temperature : 25C * Voltage : 1.1V *
****************************************************************************/ library (NangateOpenCellLibrary) {
library_features (report_delay_calculation,report_power_calculation); /* Units Attributes */
time_unit : "1ns";
leakage_power_unit : "1nW"; voltage_unit : "1V"; current_unit : "1mA"; pulling_resistance_unit : "1kohm"; capacitive_load_unit (1,ff);
▪ Standard cell – Điều kiện hoạt động (Operating Conditions)
/* Operation Conditions */
nom_process : 1.00; nom_temperature : 25.00; nom_voltage : 1.10; voltage_map (VDD,1.10);
Trang 14tree_type : balanced_tree;
- operating_conditions (typical)
Điều kiện hoạt động: Biến thiên của công nghệ, Biến thiên của điện thế, Biến thiên
của nhiệt độ
Typical case: transitor N nhanh, transitor P chậm, điện thế và nhiệt độ trung bình
hay transitor N chậm, transitor P nhanh, điện thế và nhiệt độ trung bình - process_corner : "TypTyp";
Điện thế hoạt động của thiết kế thuộc loại : balanced_tree
▪ Standard cell – Thuộc tính của Cell trong tập tin lib
default_operating_conditions : typical; /* Threshold Definitions */
slew_lower_threshold_pct_fall : 30.00 ; slew_lower_threshold_pct_rise : 30.00 ; slew_upper_threshold_pct_fall : 70.00 ; slew_upper_threshold_pct_rise : 70.00 ; slew_derate_from_library : 1.00 ; input_threshold_pct_fall : 50.00 ; input_threshold_pct_rise : 50.00 ;
Trang 1514
output_threshold_pct_fall : 50.00 ; output_threshold_pct_rise : 50.00 ; default_leakage_power_density : 0.00 ; default_cell_leakage_power : 0.00 ; /* Default Pin Attributes */
default_inout_pin_cap : 1.000000; default_input_pin_cap : 1.000000; default_output_pin_cap : 0.000000; default_fanout_load : 1.000000;
default_max_transition : 0.198535; define(drive_strength, cell, float);
wire_load xác định mối tương quan giữa fanout với chiều dài dây và ước lượng để tính
toán sự ảnh hưởng khi place và route dây,dựa trên chiều dài dây dẫn kết nối pin với pin
Fanout của transistor và chiều dài dây kết nối quyết định tốc độ chuyển mạch
Trong thư viện có nhiều wire_load, chọn wire_load("1K_hvratio_1_4") để nghiên cứu /* Wire load tables */
wire_load("1K_hvratio_1_4") {
capacitance : 1.774000e-01; // điện trở trên một đơn vị chiều dài resistance : 3.571429e-03; // điện dung trên một đơn vị chiều dài slope : 5.000000; // được dùng để nội suy tuyến tính
fanout_length( 1, 1.3207 ); // số fanout: 1, wire length: 1.3207 fanout_length( 2, 2.9813 );
fanout_length( 3, 5.1135 ); fanout_length( 4, 7.6639 ); fanout_length( 5, 10.0334 ); fanout_length( 6, 12.2296 ); fanout_length( 8, 19.3185 ); }
Ví dụ về tính: pin-to-pin RC delays
capacitance net = 1.774000e-01 x 1.3207
Trang 1615 resistance net = 3.571429e-03 x 1.3207
/******************************************************************************************
Module : DFF_X1
Cell Description : Pos.edge D-Flip-Flop with drive strength X1
*******************************************************************************************/
cell (DFF_X1) {
drive_strength : 1; ff ("IQ" , "IQN") {
next_state : "D"; clocked_on : "CK"; }
area : 4.522000; pg_pin(VDD) {
voltage_name : VDD;
pg_type : primary_power; }
pg_pin(VSS) {
voltage_name : VSS;
pg_type : primary_ground; }
cell_leakage_power : 79.112308; leakage_power () {
when : "!CK & !D & !Q & QN"; value : 73.812310;
}
leakage_power () {
when : "!CK & !D & Q & !QN";
Trang 1716
value : 77.650980; }
direction : input; // xác định chiều của Pin
related_power_pin : "VDD"; // có liên quan đến chân VDD related_ground_pin : "VSS";
capacitance : 1.140290; // Xác định tải ngõ vào khi nối vào mạch fall_capacitance : 1.062342;
rise_capacitance : 1.140290; timing () {
Trang 1817
related_pin : "CK"; timing_type : hold_rising; fall_constraint(Hold_3_3) {
index_1 ("0.00117378,0.0449324,0.198535"); index_2 ("0.00117378,0.0449324,0.198535"); values ("0.001650,0.010970,0.010626", \ "0.004131,0.010748,0.006379", \ "0.143222,0.153005,0.144764");
// (Lookup table) Mô hình độ trễ không tuyến tính của CMOS được qui định một hoặc 2 chiều phụ thuộc vào sự chuyển mạch ở ngõ vào và tụ ngõ ra
// Pin D là ma trận 2 chiều 3X3
// index 1: data transitions – tọa độ dọc
// index 2: clock transitiion – tọa độ ngang, với index 1 và 2 → giá trị delay }
rise_constraint(Hold_3_3) {
index_1 ("0.00117378,0.0449324,0.198535"); index_2 ("0.00117378,0.0449324,0.198535"); values ("0.003805,0.015977,0.020421", \ "0.016803,0.029868,0.034184", \ "0.098513,0.113992,0.121949"); }
} timing () {
related_pin : "CK";
timing_type : setup_rising; fall_constraint(Setup_3_3) {
index_1 ("0.00117378,0.0449324,0.198535"); index_2 ("0.00117378,0.0449324,0.198535"); values ("0.036831,0.022224,0.015916", \ "0.054595,0.039810,0.033507", \ "0.100487,0.085013,0.077078"); }
rise_constraint(Setup_3_3) {
index_1 ("0.00117378,0.0449324,0.198535"); index_2 ("0.00117378,0.0449324,0.198535");