1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

25 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu về thư viện số và ứng dụng
Tác giả Lê Vĩnh Phú, Trần Huỳnh Tuấn, Trương Công Trường
Người hướng dẫn ThS. Bùi An Đông
Trường học Đại học Quốc gia TP. Hồ Chí Minh
Chuyên ngành Thiết kế vi mạch số và lõi IP
Thể loại Báo cáo kỹ năng
Năm xuất bản 2023
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 25
Dung lượng 625,95 KB

Nội dung

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 2

1

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 3

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 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 4

3

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 5

4

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 6

5

▪ 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 7

6

▪ 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 8

7

▪ 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 9

8

- 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 10

9

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 11

10

$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 12

11

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 14

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

Đ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 15

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

Trang 17

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 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 19

18

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 21

20

- 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 22

wire [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 24

23

- 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 25

24

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í)

Ngày đăng: 04/07/2024, 20:06

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w