



















Preview text:
  lOMoAR cPSD| 59703641
ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN - ĐIỆN TỬ            
BÁO CÁO THIẾT KẾ VLSI   
Synchronous FIFO with RAM from RTL to GDS     
Giảng viên hướng dẫn: TS.  Nguyễn Vũ Thắng 
 Nhóm SV thực hiện:   Nguyễn Minh Quân   20214061    Hoàng Ngọc Minh  20213999                           Hà Nội, 1/2025      
CHƯƠNG I. TỔNG QUAN VLSI  I. 
Giới thiệu về VLSI 
Thiết kế VLSI là một lĩnh vực công nghệ cao tập trung vào việc thiết kế và sản xuất 
các mạch tích hợp (IC) với quy mô cực lớn. Ưu điểm nổi bật của VLSI là khả năng 
tích hợp hàng tỷ transistor lên một chip duy nhất, tạo ra các thiết bị điện tử nhỏ 
gọn, hiệu năng cao và tiêu thụ điện năng thấp. 
● Tích hợp cao: VLSI cho phép tích hợp nhiều thành phần điện tử lên một chip duy 
nhất, giúp giảm kích thước và tăng độ phức tạp của các thiết bị. 
● Hiệu năng cao: Nhờ quy mô lớn và công nghệ tiên tiến, các mạch VLSI hoạt động 
nhanh hơn, xử lý thông tin hiệu quả hơn so với các mạch truyền thống. 
● Tiêu thụ điện năng thấp: Các kỹ thuật thiết kế hiện đại giúp giảm thiểu tiêu thụ 
điện năng của các mạch VLSI, tăng tuổi thọ pin của các thiết bị di động. 
● Đa dạng ứng dụng: VLSI được ứng dụng rộng rãi trong nhiều lĩnh vực, từ vi xử lý, 
bộ nhớ, cảm biến cho đến các hệ thống nhúng và trí tuệ nhân tạo. 
Tuy nhiên, thiết kế VLSI cũng đòi hỏi kiến thức chuyên sâu và các công cụ thiết kế 
phức tạp. Các kỹ sư thiết kế VLSI cần phải cân nhắc nhiều yếu tố như hiệu suất, 
diện tích chip, tiêu thụ điện năng, độ tin cậy và chi phí sản xuất. 
II. Quy trình thiết kế VLSI 
Quy trình thiết kế VLSI có thể được biểu diễn bởi 5 bước cơ bản, bao hàm các thao 
tác cần thực hiện để có thể đưa ra bản vẽ kĩ thuật cho mạch, gồm: 
● HDL Coding - Lập trình mô tả phần cứng. 
○ Mạch điện tử số có thể được mô tả thông qua lập trình, dựa trên chức năng/hành 
vi của mạch (behavioral), cấu trúc (structural), đặc điểm luồng dữ liệu (data-flow). 
○ Sử dụng các ngôn ngữ mô tả phần cứng (HDL) như Verilog, VHDL, 
SystemVerilog, v.v.. ● Logic Verification – Kiểm thử logic. 
○ Được sử dụng để kiểm tra logic của phần cứng được thiết kế trên HDL, đảm bảo tính 
hoạt động đúng đắn của mạch khi được thiết kế.       
● Logic Synthesis & Timing Analysis – Tổng hợp logic & Phân tích hiệu năng thời gian. 
○ Dựa trên kết quả lập trình HDL đã đúng logic, tiến hành chuyển đổi mô tả của mạch 
dưới dạng chức năng/cấu trúc sang tập các cổng logic thực tế & liên kết giữa các 
cổng cần thiết để tạo ra mạch thật. 
○ Phân tích hoạt động của mạch về mặt thời gian (timing analysis) để xác định hiệu 
năng hoạt động, từ đó tạo các ràng buộc/giới hạn cho thiết kế. 
● Physical Layout – Tạo bản vẽ vật lý. 
○ Dựa vào thiết kế đã được dịch sang tập các cổng logic & liên kết, cùng với thư viện 
công nghệ & các ràng buộc thiết kế (hiệu năng thời gian, diện tích, năng lượng, …), 
tiến hành tạo bản vẽ vật lý của mạch 
● Physical Verification & Sign-off – Kiểm thử vật lý & Hoàn thiện.  Physical Verification: 
o Kiểm tra bản vẽ của mạch, dựa trên các bộ quy định (design rule) được cung cấp 
từ phía nhà sản xuất (foundry). Bản vẽ phải đảm bảo không có lỗi so với bộ quy 
định trên Design Rule Check (DRC) 
o Kiểm tra độ trùng khớp giữa sơ đồ nguyên lý (schematic) so với bản vẽ (layout). Về 
mặt logic, sơ đồ nguyên lý & bản vẽ phải tương đồng.   Layout Vs Schematic (LVS) 
 Post-Timing Analysis: Kiểm tra hiệu năng thời gian sau khi đã có bản vẽ. Thiết kế với 
bản vẽ thu được phải đảm bảo các đường dữ liệu hoạt động theo đúng giới hạn 
thời gian, không phát sinh trạng thái không xác định trên toàn mạch.     
III. Ngôn ngữ mô tả phần cứng Verilog 
Verilog là một ngôn ngữ mô tả phần cứng (HDL - Hardware Description Language) 
được sử dụng để mô phỏng, thiết kế và xác định các hệ thống kỹ thuật số. Được 
phát triển vào những năm 1980, Verilog đã trở thành một trong những ngôn ngữ 
phổ biến nhất trong lĩnh vực thiết kế vi mạch. 
Verilog được sử dụng để mô tả hành vi và cấu trúc của các mạch kỹ thuật số, từ 
mạch đơn giản như cổng logic cho đến mạch phức tạp như vi xử lý. Ngôn ngữ này 
cung cấp cú pháp và cấu trúc cho việc mô phỏng và thiết kế hệ thống số thông qua 
việc sử dụng các module, tín hiệu, biến, và các câu lệnh điều khiển. 
Verilog cung cấp một cách để mô phỏng hoặc tạo ra một mô hình của hệ thống kỹ 
thuật số và cho phép kiểm tra và xác minh tính đúng đắn của nó trước khi triển 
khai vào phần cứng thực tế. Nó cũng được sử dụng trong quá trình thiết kế vi mạch, 
từ việc mô phỏng và kiểm tra đơn giản cho đến tổ chức và xác định các mạch phức  tạp hơn. 
Trên thực tế, Verilog đã trở thành một ngôn ngữ chuẩn trong lĩnh vực thiết kế mạch 
tích hợp và thường được sử dụng trong các công cụ thiết kế như Xilinx ISE, Altera 
Quartus, và Cadence Design Systems.  1. Module 
Trong Verilog, một module là một đơn vị cơ bản để mô tả một phần của hệ thống 
kỹ thuật số. Nó được sử dụng để định nghĩa các thành phần riêng lẻ của mạch và 
xác định cách chúng tương tác với nhau. Mỗi module trong Verilog có thể được 
xem như một "khối xây dựng" trong thiết kế phần cứng. 
Một module trong Verilog bao gồm các phần chính sau: 
● Tên module: Mỗi module được đặt tên duy nhất để xác định nó trong thiết kế. 
● Khối chứa: Module có thể chứa các khối khác như input, output, wire, reg, và các 
module con khác. Các khối này đại diện cho tín hiệu, biến và các thành phần khác  trong mạch. 
● Cổng vào và cổng ra: Module có thể có các cổng vào (input) và cổng ra (output) để 
tương tác với các module khác hoặc với môi trường bên ngoài. 
● Internal logic: Module có thể chứa các khối logic và câu lệnh điều khiển để thiết lập  hành vi bên trong. 
● Instantiation: Module có thể được sử dụng như một thành phần trong các module 
khác bằng cách sử dụng cú pháp instantiation. Điều này cho phép tái sử dụng và 
phân cấp các module để xây dựng mạch phức tạp hơn.     
Module trong Verilog cung cấp một cách để tạo ra các phần tử mạch đơn giản và 
kết hợp chúng thành mạch phức tạp hơn. Nó giúp tăng tính tái sử dụng, hiệu suất 
và khả năng mô phỏng của quá trình thiết kế vi mạch. 
Dưới đây là một ví dụ đơn giản về mô tả module cho cổng AND 2 bit đầu vào: 
module AND_gate(input a, input b, output y);   assign y = a & b;  endmodule   
Trong ví dụ này, chúng ta định nghĩa một module có tên là "AND_gate". Module 
này có hai cổng vào (input) là "a" và "b", và một cổng ra (output) là "y". Các cổng 
vào và cổng ra được khai báo bằng từ khóa "input" và "output". 
Dòng "assign y = a & b;" xác định rằng giá trị của cổng ra "y" là kết quả của phép 
AND logic giữa cổng vào "a" và "b". Dấu "&" đại diện cho phép AND logic trong 
Verilog. Module "AND_gate" này có chức năng thực hiện phép AND logic giữa hai 
tín hiệu đầu vào và đưa ra kết quả qua cổng ra.  2. Kiểu dữ liệu 
Trong Verilog, có nhiều kiểu dữ liệu (data types) khác nhau để đại diện cho các loại 
giá trị và tín hiệu trong mạch kỹ thuật số. Dưới đây là một số kiểu dữ liệu phổ biến  trong Verilog: 
● Bit và logic: Kiểu dữ liệu 'bit' và 'logic' đại diện cho một bit duy nhất có giá trị logic 
0 hoặc 1. Cả hai kiểu dữ liệu này có thể được sử dụng để biểu diễn các tín hiệu logic  đơn giản. 
● Integer: Kiểu dữ liệu 'integer' đại diện cho một số nguyên có dấu trong khoảng từ 
-2^31 đến 2^31-1. Nó được sử dụng để biểu diễn các giá trị số nguyên trong mạch. 
● Reg: Kiểu dữ liệu 'reg' đại diện cho một thanh ghi (register). Nó được sử dụng để 
lưu trữ các giá trị tạm thời trong quá trình thực hiện mạch kỹ thuật số. 
● Wire: Kiểu dữ liệu 'wire' đại diện cho một tín hiệu không đồng bộ (asynchronous 
signal) hoặc một liên kết điểm (net). Nó được sử dụng để kết nối các thành phần 
trong mạch và truyền giá trị giữa chúng. 
● Reg và wire vector: Verilog cũng hỗ trợ các kiểu dữ liệu vectơ, bao gồm 'reg [n:0]' 
và 'wire [n:0]', trong đó n là số bit của vectơ. 
Các kiểu dữ liệu vectơ này cho phép lưu trữ và xử lý các tín hiệu có độ rộng lớn hơn  một bit. 
● Struct và Union: Verilog cung cấp cú pháp để định nghĩa các kiểu dữ liệu struct và 
union tương tự như trong ngôn ngữ lập trình. Các kiểu dữ liệu này cho phép nhóm 
các thành phần dữ liệu có cấu trúc hoặc không liên quan vào một đối tượng đơn.     
Ngoài ra, Verilog còn hỗ trợ các kiểu dữ liệu khác như 'real' (đại diện cho số thực) 
và các kiểu dữ liệu tùy chỉnh được định nghĩa bởi người dùng. Các kiểu dữ liệu này 
cung cấp linh hoạt trong việc mô phỏng và biểu diễn các giá trị và tín hiệu trong  mạch kỹ thuật số.  3. Block quan trọng 
Trong Verilog, các phép gán dùng để gán giá trị cho một biến hoặc một tín hiệu. Nó 
cho phép ta thiết lập giá trị của một biến dựa trên giá trị của các biến khác, hoặc 
thiết lập giá trị của một tín hiệu dựa trên các điều kiện và logic khác. Có 3 kiểu cơ  bản:   always  @  (condition) 
 Luôn thực thi khi thỏa mãn điều kiện (condition)  initial 
Chỉ thực thi một lần kể từ lúc mô phỏng  assign [LHS] =  [RHS] 
 Giá trị LHS luôn được cập nhật khi RHS thay đổi   Một số lưu ý: 
● reg chỉ có thể được gán trong các khối initial và always 
● wire chỉ có thể được gán thông qua câu lệnh assign 
● Nếu như có nhiều dòng lệnh trong khối initial/always, cần phải đưa vào trong cặp  begin .. end  Hierarchy 
Hierarchy trong Verilog là khả năng tổ chức mô hình thiết kế thành các cấu trúc 
phân cấp và nhóm các module lại với nhau. Điều này cho phép xây dựng mạch 
phức tạp từ các thành phần nhỏ hơn và giúp quản lý và tái sử dụng mã nguồn  một cách hiệu quả. 
Trong Verilog, hierarchy cho phép định nghĩa các module con bên trong module 
chính, và các module con có thể chứa các module con khác. Bằng cách sử dụng cú 
pháp ".tên_module_con(tên_tín_hiệu)", chúng ta có thể kết nối các module con 
với nhau và với các tín hiệu ở mức cao hơn. Dưới đây là một ví dụ:       
Trong ví dụ này, chúng ta có module TopLevel là module cấp cao nhất trong mô hình 
thiết kế. Nó chứa hai module con là sub_module1 và sub_module2. Các tín hiệu a, 
b, c, d và result được khai báo ở mức topLevel và được sử dụng trong các module  con. 
Mỗi module con (sub_module1 và sub_module2) có cấu trúc và logic của riêng nó. 
Chúng được gắn kết với các tín hiệu a, b, c và d tương ứng thông qua cú pháp đã  đề cập ở trên.                         
CHƯƠNG II. THIẾT KẾ VÀ TRIỂN KHAI SYNCHRONOUS WITH  RAM I.  Khái niệm về FIFO 
FIFO (First in- First out) là một cấu trúc bộ đệm vòng trong đó dữ liệu được ghi vào 
trước sẽ được đọc ra trước. FIFO thường được dùng làm bộ đệm (buffer) trung 
gian để lưu trữ tạm thời dữ liệu và truyền dữ liệu giữa hai hệ thống mà có sự khác 
biệt về tần số xung nhịp giữa bên truyền và nhận dữ liệu. Vì thế, FIFO gồm hai miền 
tín hiệu write và read độc lập. Trong FIFO đồng bộ (synchronous), các thao tác đọc 
và ghi dữ liệu sử dụng cùng tần số clock. Thông thường, chúng được sử       
dụng với tần số cao để hỗ trợ các hệ thống tốc độ cao. 
FIFO được đặc trưng bởi hai thông số: 
● DATA_WIDTH: độ rộng của dữ liệu, tương đương với kích thước của dữ liệu của 
một phần tử dữ liệu có thể write/read trong một chu kỳ write/read. 
● FIFO_DEPTH: chiều sâu của FIFO, tương đương với số phần tử dữ liệu tối đa mà  FIFO có thể lưu trữ. 
II. Mô tả thiết kế 
Đề tài: Thiết kế khối FIFO đồng bộ sử dụng RAM module (Synchronous FIFO with 
RAM), thực hiện từ lập trình mô tả phần cứng (RTL coding) cho tới tạo bản thiết kế  (layout).          ● Yêu cầu I/O:    Tên tín hiệu  Hướng  Chức năng      clk  I 
Xung đồng hồ, điều khiển hoạt động của khối sFIFO  rstn  I 
Tín hiệu reset, tích cực mức thấp  wdata [WIDTH-
Dữ liệu đưa vào sFIFO (viết vào RAM), rộng WIDTH  1:0]  I  bit  i_wreq  I 
Tín hiệu thông báo đầu vào tới (yêu cầu ghi dữ liệu)  i_rreq  I 
Tín hiệu yêu cầu đọc dữ liệu  o_wready  O 
Thông báo sFIFO sẵn sàng nhận dữ liệu tiếp theo  o_rready  O 
Thông báo có thể đọc dữ liệu ra từ sFIFO hay không  rdata [WIDTH- O  1:0] 
Dữ liệu đọc ra từ sFIFO (đọc ra từ RAM), rộng WIDTH  bit 
Thông báo trạng thái của sFIFO, sFIFO đã đầy hay  fifo_isfull  O  chưa  fifo_isempty  O 
Thông báo trạng thái của sFIFO, sFIFO có rỗng hay  không  ● Yêu cầu tham số: 
○ WIDTH (W) Độ rộng dữ liệu đưa vào sFIFO (word width) 
○ DEPTH (D) Độ sâu của RAM module – số lượng word có thể lưu trữ trong 
RAM ● Yêu cầu chức năng: 
○ Dữ liệu tới sFIFO được lưu vào trong RAM module. Dữ liệu được đọc ra từ RAM 
module. Quá trình viết/đọc hoạt động theo cơ chế First-In-First-Out (FIFO). 
○ sFIFO hoạt động đồng bộ, theo xung clock (clk) 
○ Tín hiệu reset không đồng bộ, tích cực ở mức thấp (resetn) 
○ Tín hiệu i_wreq thông báo có dữ liệu mới đến sFIFO & yêu cầu viết. Chỉ khi tín hiệu 
i_wreq & tín hiệu o_wready cùng ở mức 1 (yêu cầu ghi & sFIFO sẵn sàng nhận dữ 
liệu mới), dữliệu mới được ghi vào trong sFIFO.     
○ Tín hiệu i_rreq thể hiện yêu cầu đọc dữ liệu ra từ sFIFO. Chỉ khi tín hiệu i_rreq & tín 
hiệu o_rready cùng ở mức 1 (yêu cầu đọc & sFIFO sẵn sàng đọc ra dữ liệu), dữ liệu 
mới được đọc ra từ sFIFO. 
○ Thông báo trạng thái của sFIFO: 
■ fifo_isfull: Đưa lên 1 nếu bộ nhớ (RAM) trong FIFO đã đầy, không nhận thêm dữ liệu 
mới cho đến khi được đọc ra 
■ fifo_isempty: Đưa lên 1 nếu bộ nhớ (RAM) trong FIFO đã rỗng, không thể đọc dữ 
liệu ra cho đến khi dữ liệu mới được ghi vào.  ● Ghi chú: 
○ Các tham số WIDTH, DEPTH được sử dụng để quy định loại RAM module sẽ được 
sử dụng trong thiết kế. 
○ RAM module được cung cấp sẵn, không yêu cầu lập trình & tạo layout trong quá  trình sử dụng          
III. Triển khai thiết kế RTL bằng Verilog và SystemVerilog 
Đoạn code khai báo khởi tạo module FIFO top với các thong số đầu vào,  ra   
Module top gồm 2 sub module là Control và RAM, module RAM được         
được CoAsia cấp, là thư viện OpenRAM được tạo dựa trên thư viện PDK 
SKY130nm, ta chỉ cần thiết kế khối Control để điều khiển đọc, ghi trên RAM 
Module RAM thực hiện nhận dữ liệu đầu vào là data và địa chỉ ở sườn dương, và 
thực hiện đọc ghi tại sườn âm của clk       
Module Control xậy dựng các khối sequential điều khiển và tính toán trạng thái 
FIFO và giá trị địa chỉ để đưa cho RAM, 
● Sau khi reset, FIFO sẽ xóa dữ liệu về trạng thái empty 
● Tín hiệu điều khiển ghi vào RAM khi tín hiệu i_wreq và o_wready đều bằng I 
● Tín hiệu điều khiển đọc vào RAM khi tín hiệu i_rreq và o_rready đều bằng I 
● Khối Control sẽ gửi tín hiệu csb để điều khiển và addr để chỉ ô nhớ được đọc,ghi 
dữ liệu, trên 2 port0 (ghi) và port1 (đọc) của RAM, 
● Cập nhật trạng thái của FIFO trên mỗi sườn dương của clk         
Trạng thái của FIFO gồm 3 state: 
● FIFO_DONE: FIFO có thể đọc và ghi, các tín hiệu fifo_empty = fifo_full = 0, 0_wready 
= o_rready = 1, các địa chỉ lưu data là địa chỉ ngay sau ô nhớ vừa thực hiện cùng  chức năng addr = addr + 1; 
● FIFO_EMPTY: FIFO chỉ có thể ghi, các tín hiệu fifo_empty = 1, fifo_full = 0, 0_wready  =1, o_rready = 0, 
● FIFO_FULL: FIFO chỉ có thể ghi, các tín hiệu fifo_empty =o, fifo_full =1, 0_wready =  0 , o_rready = 1,           
IV. KIỂM THỬ CHỨC NĂNG 
Kiểm thử thiết kế số là quá trình kiểm tra và đánh giá sự đúng đắn và chức năng 
của hệ thống hoặc thiết kế số trước khi được triển khai và đưa ra sử dụng. Đây là 
một khâu thiết yếu trong quá trình phát triển và các hệ thống số và đóng vai trò 
quan trọng trong việc đảm bảo hệ thống đó đáp ứng được các yêu cầu thiết kế 
(specification) và các tiêu chuẩn về thiết kế. 
Mục tiêu của quá trình kiểm thử thiết kế số nhằm phát hiện cũng như loại bỏ các 
lỗi phát sinh trong quá trình thiết kế, đảm bảo hệ thống thực hiện được theo đúng 
yêu cầu, chức năng ở các trường hợp và điều kiện khác nhau. Quá trình đó bao 
gồm việc tạo ra một môi trường kiểm thử có thể mô phỏng các trường hợp khác 
nhau và kiểm tra được hoạt động của hệ thống ở các điều kiện khác nhau.     
Các pha trong kiểm thử thiết kế số 
Các pha khác nhau trong kiểm thử thiết kế có thể khác nhau, phụ thuộc vào việc sử 
dụng phương pháp hay luồng kiểm thử cụ thể nào đó. Tuy nhiên, các pha trong 
kiểm thử đều có những điểm chung, có thể kể đến: 
● Lên kế hoạch kiểm thử (Planning): Ở pha này, các mục tiêu hay phạm vi kiểm thử 
được xác định và kế hoạch kiểm thử được phát triển. 
● Phát triển testbench (Testbench development): Pha này cung cấp việc phát triển 
một môi trường kiểm thử có thể mô phỏng được thiết kế cũng như cung cấp các 
đầu vào phù hợp cho việc kiểm thử. 
● Tạo kiểm thử (Test creation): Trong giai đoạn này, các thử nghiệm được tạo dựa 
trên các yêu cầu và kịch bản được chỉ ra trong kế hoạch kiểm thử. 
● Thực hiện kiểm thử (Test execution): Các kiểm thử được tạo ở giai đoạn trước được 
thực hiện trên thiết kế và kết quả sau đó được phân tích. 
● Gỡ lỗi (Debugging): Giai đoạn này liên quan đến việc xác định và giải quyết mọi vấn 
đề về thiết kế hoặc lỗi được phát hiện trong các giai đoạn trước.   
Xây dựng testplan cho thiết kế 
● Kiểm tra đọc ghi dữ liệu chung 
○ Thực hiện ghi dữ liệu 5 lần liên tiếp 
○ Thưc hiện đọc dữ liệu 3 lần liên tiếp 
○ Kiểm tra 3 data đọc có khớp với ghi hay không 
● Kiểm tra hoạt động của mạch khi reset  ○ Đọc và ghi 1 lần  ○ Reset mạch 
○ Kiểm tra mạch có empty không, dữ liệu đã xoas chưa 
● Kiểm tra trạng thái full của FIFO 
○ Thực hiện ghi 16 lần liên tiếp 
○ Kiểm tra mạch có full không, 
○ Thực hiện ghi tiếp xem trạng thái mạch như thế nào 
● Kiểm tra trạng thái empty của FIFO  ○ Thưc hiện ghi 3 lần 
○ Thực hiện đọc 3 lần 
○ Kiểm tra mạch có empty không 
○ Thực hiện đọc tiếp để xem trạng thái mạch 
● Kiểm tra random để check khả năng lưu lâu dài 
○ Thực hiện random tín hiệu điều khiển đọc ghi nhiều lần để check trạng thái mạch 
trong hoạt động trong nhiều chu kỳ     
 Xây dựng testbench  
Testbench gen tín hiệu clk, tạo các tín hiệu đầu vào cho dut và quan sát kết quả 
đầu ra để kiểm tra bằng waveform và transcript   
Tiến hành viết hàm điều khiển đọc ghi cho testbench       
Viết task tạo sequence theo testplan và tạo xung clk cho mạch       
 Kết quả đạt được khi chạy mô phỏng trên QuestaSim                             
IV. Triển khai flow back_end cho thiết kế   
Systhesis - Static Time Analyst 
Tổng hợp logic là quá trình chuyển đổi code RTL thành dạng code ở mức thấp 
hơn. Cụ thể là chuyển code về các cổng logic được thiết kế sẵn. 
● Mục tiêu của tổng hợp logic ○ Tạo ra được Gate-level Nestlist. 
○ Chèn cổng logic để tối ưu về mặt năng lượng, chặn tín hiệu clock đi vào 1 module 
○ Tối ưu về mặt logic: tối giản các mạch logic để mạch nhỏ hơn, giảm cổng logic để  tăng tốc độ xử lý. 
○ Chèn DFT logic: chèn thêm mạch test sau khi con chip được sản xuất ra sau khi sản 
xuất không thể mô phỏng để test trên chip được mà phải test trực tiếp trên con 
chip. Việc chèn con chip DFT có thể giúp test con chip sau khi sản xuất. 
● Quy trình tổng hợp diễn ra theo các bước sau:          
● Đầu vào của Synthesis 
○ Code RTL (các file HDL)  ○ Library  ○ Constraints  ○ UPF 
● Đầu ra của Synthesis  ○ Net list 
○ Reports (Area, Timing etc. ) 
○ UPF: Unified Power Format ● Các chiến lược tối ưu.      
● Biên dịch từ dưới lên: Các thiết kế riêng lẻ được biên dịch riêng biệt, bắt dầu từ 
phần dưới cùng của phân cấp hệ thống và tiếp tục đi lên qua các cấp độ của phân 
cấp hệ thống cho đến khi thiết kế cấp cao được biên dịch tốt nhất. 
● Biên dịch hợp nhất: Chiến lược từ trên xuống hoặc từ dưới lên, tùy chọn nào phù 
hợp nhất được áp dụng cho các thiết kế riêng lẻ.   
Phân tích thời gian tĩnh là một kĩ thuật kiểm tra trong mạch số. Nó sẽ xác minh bản 
thiết kế có thể hoạt động ở mức thời gian hạn chế mà mình đã đặt ra hay không 
● Các bước chính trong STA 
○ B1. Chia thiết kế thành các thời gian tập hợp các đường dẫn. 
○ B2. Tính toán từng đường dẫn 
○ B3. Kiểm tra tốc độ của đường dẫn để xem liệu các dữ liệu rõ ràng về thời gian đã 
chọn phải là meta không.  ● Dữ liệu vào:   ○ Gate-level Netlist  ○ Libraries  ● Dữ liệu ra  ○ SDF  ○ Parasitics  ○ Design constraints    Physical Design 
Đây là quá trình chuyển đổi mô tả logic ở mức trừu tượng thành một mô tả hình 
thức của mạch điện tử. Quá trình này tập trung vào việc đặt và kết nối các thành 
phần logic trên một chip dể đảm bảo hiệu suất , độ tin cậy của mạch.     
Quy trình bản vẽ vật lý     
B1. Design and Timing setup 
Trước khi tạo bản vẽ vật lý ta cần chuẩn bị:  ● Gate level design 
● Logical & Physical libraries  ● Timing constraints 
● Physical Design constraints. 
B2. Floorplanning & Powerplanning 
Xác định vị trí và kích thước của các khối logic trên chip để tối ưu hóa diện tích và 
đáp ứng các yêu cầu về đường dây và nguồn năng lượng.      Đầu vào Floorplan:  ● Netlist (.v), Physical  library,  logical/Timing libraries,..  ● Timing constraints (.sdc) 
● Power requirements: Value – PG net structure ● Control parameters: Values, Power  spec