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
1 File “adk.tcl” 3
2 File “calibre.layerprops” 3
3 File “stdcells.cdl” 4
4 Databook của thư viện 4
5 File “stdcells.v” 8
6 File “stdcells.lib” 12
III PHÂN TÍCH VÀ MÔ PHỎNG KHỐI ALU 20
1 Mô tả hoạt động 20
2 Code Verilog 20
3 Testbench 21
4 Kết quả mô phỏng 23
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
3 File “stdcells.cdl”
- Chứa các thông tin về bản quyền
- Thông tin về công nghệ và định dạng
- Thông tin về cell: các mô tả của một cell tiêu chuẩn (standard cell) trong ngôn ngữ CDL (Circuit Description Language), netlist của các cổng logic cơ bản
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
0.5V DD
0.5V DD DATA
- 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
5 File “stdcells.v”
▪ Các thông số mặc định
// * Default delays
// * comb path delay : 0.1
// * seq path delay : 0.1
// * delay cells : 0.1
// * timing checks : 0.1
//
// * NTC Setup
// * Export NTC sections : true
// * Combine setup / hold : true
// * Combine recovery/removal: true
- delay cells: Đặt giá trị mặc định cho độ trễ của các ô độ trễ là 0.1
- timing checks: Đặt giá trị mặc định cho kiểm tra thời gian là 0.1
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
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);
- 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 14Typical 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
Đ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
Trang 15define(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
Trang 17capacitance : 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 18// (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");
} }
} rise_constraint(Setup_3_3) {
index_1 ("0.00117378,0.0449324,0.198535");
index_2 ("0.00117378,0.0449324,0.198535");
Trang 1918
values ("0.029299,0.024425,0.037712", \ "0.041187,0.034581,0.045743", \ "0.055773,0.045995,0.054260");
} }
Trang 20- Chu kì 2: dữ liệu B từ buswires được đưa trực tiếp đến khối addsub và thực hiện phép cộng hoặc trừ với dữ liệu A
Trang 2120
- Việc thực hiện phép cộng hay trừ sẽ phụ thuộc vào mức logic của sub
- Kết quả sẽ được đưa vào thanh ghi gin khi gin = 1, khi có cạnh lên xung clock thì
dữ kết quả sẽ được đẩy ra aluout
2 Code verilog
module alu(ain, gin, sub, buswires, clk, aluout);
input ain, gin, sub, clk;
input [15:0] buswires;
output [15:0] aluout;
wire [15:0] raout;
reg [15:0] result;
REGISTER REGISTER_1 (.rin(ain), buswires(buswires), clk(clk), r(raout));
always @(posedge clk) begin
Trang 22wire [15:0] aluout; // Khai báo một dây (wire) 16-bit có tên là aluout
// reg: gán dữ liệu cho ngõ vào nên testbench phải sử dụng các thanh ghi (reg), gọi là input reg
// wire: do ngõ ra chỉ cần quan sát nên testbench chỉ cần sử dụng “wire” ở ngõ ra
alu alu1(.ain(ain),.gin(gin),.sub(sub),.buswires(buswires),.clk(clk),.aluout(aluout)); // kết nối các đầu vào/đầu ra của mô-đun với biến được khai báo ở phần code Verilog always #5 clk =~clk; // xung clock sẽ chuyển đổi mức logic sau 5 đơn vị thời gian
// khởi tạo các giá trị ban đầu cho ALU
Trang 23▪ Phân tích kết quả mô phỏng:
- Mức logic của các giá trị được khởi tạo ban đầu: clk = 0, ain = 0, gin = 0, sub = 0, buswires = 0
- Sau 10 đơn vị thời gian: ain = 1, giá trị buswires được khởi tạo là “3a”
- Sau 15 đơn vị thời gian thì clk đã có cạnh lên thứ 2 và ain = 1 nên cho dữ liệu
“3a” từ buswires vào thanh ghi đầu tiên
- Sau 20 đơn vị thời gian thì mức logic của sub = 1, gin = 1, giá trị buswires được khởi tạo là “4b” Do sub = 1 nên lúc này khối Addsub thực hiện phép cộng 2 số HEX: 3a+4b = 85, kết quả 85 được đưa vào thanh ghi thứ 2 do gin = 1, kết quả cũng được đưa ra aluout do có cạnh lên thứ 3 của xung clock
Trang 2423
- Tiếp tục khởi tạo giá trị buswires = 11, sub = 0, gin vẫn đang có mức logic 1 Lúc này khối Addsub thực hiện phép trừ giữa “4b” và “11”: 4b – 11 = 3a và kết quả cũng được đưa ra aluout do có canh lên thứ 4 của xung clock
TÀI LIỆU THAM KHẢO
1 Account: mflowgen https://github.com/mflowgen/freepdk-45nm (giữ ctrl và click vào liên kết)
2 Thầy Bùi An Đông, Slide bài giảng: Tổng hợp mạch – Thiết kế vi mạch số và lõi
Trang 2524
BÁO CÁO KỸ NĂNG PHÂN CÔNG CHỨC VỤ
BẢNG PHÂN CÔNG NHIỆM VỤ CHO TỪNG THÀNH VIÊN
Phân tích file “stdcells.cdl” Tuấn Trường 01/12 05/12 05 Hoàn thành
Phân tích file “stdcells.v” Cả nhóm 01/12 05/12 05 Hoàn thành Phân tích file “stdcells.lib” Cả nhóm 01/12 05/12 05 Hoàn thành Viết code verilog cho khối
ALU
Phú, Tuấn 06/12 10/12 04 Hoàn thành
Viết testbench Phú, Trường 06/12 10/12 04 Hoàn thành Chạy mô phỏng và sửa lỗi Cả nhóm 11/12 13/12 02 Hoàn thành
Chỉnh sửa báo cáo Tuấn, Trường 16/12 17/12 01 Hoàn thành
ĐÁNH GIÁ ĐIỂM THEO CÁC TIÊU CHÍ (tối đa 10 điểm/tiêu chí)