lOMoARcPSD| 59703641
ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN - ĐIỆN T
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à Ni, 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 nghcao tập trung vào việc thiết kế và sản xuất
các mạch ch hợp (IC) với quy cực lớn. Ưu điểm nổi bật của VLSI khả năng
ch hợp hàng ttransistor 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à êu thụ điện năng thấp.
Tích hợp cao: VLSI cho phép 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: Nhquy lớn công nghệ ên ến, các mạch VLSI hoạt động
nhanh hơn, xử lý thông n 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 ê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ử ,
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 cthiết kế
phức tạp. Các kỹ thiết kế VLSI cần phải n nhắc nhiều yếu tố nhiệu suất,
diện ch chip, êu thụ điện năng, độ n 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ố thể được 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 dliệu (data-ow).
Sử dụng các ngôn ng tả phần cứng (HDL) như Verilog, VHDL,
SystemVerilog, v.v..
Logic Vericaon – Kim 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 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 ch hiệu năng thời gian.
Dựa trên kết quả lập trình HDL đã đúng logic, ến hành chuyển đổi mô tả của mạch
ới dạng chức 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 ch hoạt động của mạch về mặt thời gian (ming 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 ch, năng lượng, …),
ến hành tạo bản vẽ vật lý của mạch
Physical Vericaon & Sign-o – Kiểm thử vật lý & Hoàn thiện.
Physical Vericaon:
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 lỗi so với bquy
định trên Design Rule Check (DRC)
o Kiểm tra độ trùng khớp giữa sơ đồ nguyên lý (schemac) 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 Schemac (LVS)
Post-Timing Analysis: Kiểm tra hiệu năng thời gian sau khi đã 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 ngtả phần cứng (HDL - Hardware Descripon Language)
được sử dụng đ phỏng, thiết kế 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
phbiến nhất trong lĩnh vực thiết kế vi mạch.
Verilog được sử dụng để tả hành vi 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ử . 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, 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 xác minh nh đúng đắn của trước khi trin
khai vào phần cứng thực tế. cũng được sdụ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 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
ch hợp 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ị bản để tả một phần của hệ thống
kỹ thuật số. được sử dụng để định nghĩa các thành phần riêng lcủa mạch
xác định cách chúng tương tác với nhau. Mỗi module trong Verilog 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 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 n hiệu, biếncá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.
Instanaon: Module có thể được sử dụng như một thành phần trong các module
khác bằng cách sdụng pháp instanaon. Điều này cho phép tái sử dụng
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 tmạch đơn giản
kết hợp chúng thành mạch phức tạp hơn.giúp tăng nh tái sdụng, hiệu suất
và khả năng mô phỏng của quá trình thiết kế vi mạch.
ớ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 dụ y, chúng ta định nghĩa một module tên "AND_gate". Module
này hai cổng vào (input) "a" và "b", một cổng ra (output) "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" 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
n hiệu đầu vào và đưa ra kết quả qua cổng ra.
2.
Kiểu dữ liu
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à 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ữ liu '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ữ liu này thể được sử dụng để biu diễn các 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 dliệu 'reg' đại diện cho một thanh ghi (register). đượ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 n hiệu không đồng bộ (asynchronous
signal) hoặc một liên kết điểm (net). được sử dụng để kết nối c thành phn
trong mạch và truyền giá trị giữa chúng.
Reg và wire vector: Verilog ng htrcá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 trxử các n hiệu có độ rng lớn hơn
một bit.
Struct và Union: Verilog cung cấp pháp đđịnh nghĩa các kiểu dliệu struct
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 htrcác kiểu dữ liệu khác như 'real' ại diện cho số thực)
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 phỏng biểu diễn các giá tr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 n hiệu.
cho phép ta thiết lập gtrcủa một biến dựa trên giá trị của các biến khác, hoc
thiết lập giá trị của một n hiệu dựa trên các điều kiện và logic khác. 3 kiểu
bản:
always @
(condion)
Luôn thực thi khi thỏa mãn điều kiện (condion)
inial
Chthự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 khi inial always
wire chcó 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 inial/always, cần phải đưa vào trong cp
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ó thchứa các module con khác. Bằng cách sử dụng cú
pháp ".tên_module_con(tên_n_hiệu)", chúng ta thể kết nối các module con
với nhau và với các n hiu ở mức cao hơn. Dưới đây là một ví dụ:
Trong dụ này, chúng ta module TopLevel là module cấp cao nhất trong hình
thiết kế. Nó chứa hai module con là sub_module1 và sub_module2. Các 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 n hiệu a, b, c d tương ứng thông qua 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 (buer) 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 nhận dữ liu. Vì thế, FIFO gồm hai miền
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 dliu, 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, ơng đương với số phần tử dữ liệu tối đa
FIFO có thể lưu trữ.
II. Mô tả thiết kế
Đề tài: Thiết kế khối FIFO đồng bsử 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 n hiệu
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, ch cực mức thấp
wdata [WIDTH-
1:0]
I
Dữ liệu đưa vào sFIFO (viết vào RAM), rộng WIDTH
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ữ liu
o_wready
O
Thông báo sFIFO sẵn sàng nhận dữ liệu ếp theo
o_rready
O
Thông báo có thể đọc dữ liệu ra từ sFIFO hay không
rdata [WIDTH-
1:0]
O
Dữ liệu đọc ra từ sFIFO (đọc ra từ RAM), rng WIDTH
bit
fo_isfull
O
Thông báo trạng thái của sFIFO, sFIFO đã đầy hay
chưa
fo_isempty
O
Thông báo trng 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ố ợ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ộ, 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 n hiu
i_wreq & 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 n hiệu i_rreq & n
hiệu o_rready cùng ở mức 1 (yêu cầu đọc & sFIFO sẵn sàng đọc ra dliệu), dữ liu
mới được đọc ra từ sFIFO.
Thông báo trạng thái của sFIFO:
fo_isfull: Đưa lên 1 nếu bộ nhớ (RAM) trong FIFO đã đầy, không nhận thêm dữ liu
mới cho đến khi được đọc ra
fo_isempty: Đưa n 1 nếu bộ nh(RAM) trong FIFO đã rỗng, không thể đọc dữ
liệu ra cho đến khi dliệ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 địa chỉ ờn dương,
thực hiện đọc ghi tại sườn âm của clk
Module Control xậy dựng các khối sequenal điều khiển 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 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 n hiệu i_rreq và o_rready đều bằng I
Khối Control sẽ gửi n hiệu csb để điều khiển 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 thđọc ghi, các n hiệu fo_empty = fo_full = 0, 0_wready
= o_rready = 1, các địa chlưu data địa chỉ ngay sau ô nhvừa thực hiện cùng
chức năng addr = addr + 1;
FIFO_EMPTY: FIFO chthể ghi, các n hiệu fo_empty = 1, fo_full = 0, 0_wready
=1, o_rready = 0,
FIFO_FULL: FIFO chỉ có thể ghi, các n hiệu fo_empty =o, fo_full =1, 0_wready =
0 , o_rready = 1,
IV. KIỂM THỬ CHỨC NĂNG
Kiểm thử thiết kế số quá trình kiểm tra đánh giá sự đúng đắn 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 sdụng. Đây là
một khâu thiết yếu trong quá trình phát triển các hệ thống số đó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ế
(specicaon) và các êu chuẩn về thiết kế.
Mục êu của quá trình kiểm ththiết kế số nhằm phát hiện cũng nloạ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 đ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ử thể 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ụ thnà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 ê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 y cung cấp việc phát trin
một môi trường kiểm thử thể 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 creaon): Trong giai đoạn này, các thnghiệ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 execuon): 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 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 vn
đề 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 ếp
Thưc hiện đọc dữ liệu 3 lần liên ế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 ếp
Kiểm tra mạch có full không,
Thực hiện ghi ế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 ế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 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 n hiệu clk, tạo các n hiệu đầu vào cho dut quan sát kết quả
đầu ra để kim 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 mch
Kết quả đạt được khi chạy mô phỏng trên QuestaSim
IV. Triển khai ow back_end cho thiết kế
Systhesis - Stac 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 ê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 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 thphỏng đtest trên chip được phải test trực ế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 le HDL)
Library
Constraints
UPF
Đầu ra của Synthesis
Net list
Reports (Area, Timing etc. )
UPF: Unied Power Format
Các chiến lược tối ưu.
Biên dịch từ ớ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à ế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 ttrên xuống hoặc từ ớ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 ch thời gian nh 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à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
Parasics
Design constraints
Physical Design
Đây quá trình chuyển đổi tả logic mức trừu tượng thành một 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 kết nối các thành
phần logic trên một chip dể đảm bảo hiệu suất , độ n cậy của mạch.
Quy trình bản vẽ vật
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 ch
đá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

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