Tải bản đầy đủ (.pdf) (70 trang)

Quy Trình Thiết Kế Vi Mạch Số ĐH Bách Khoa TPHCM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.72 MB, 70 trang )

Tài liệu hướng dẫn thí nghiệm
Quy trình thiết kế vi mạch số
Lưu hành nội bộ

Phiên bản 0



Tài liệu hướng dẫn thí nghiệm
Quy trình thiết kế vi mạch số
Lưu hành nội bộ

Phiên bản 0

PGS. TS. Hoàng Trang
Đỗ Quang Thịnh
Trường đại học Bách Khoa - Đại học Quốc gia
Thành phố Hồ Chí Minh


Trang này được để trống có chủ ý.


Mở đầu
Vi mạch tích hợp (IC), hay có thể gọi là những mạch điện siêu nhỏ tích
hợp và kết nối nhiều linh kiện điện tử bên trong, đang dần trở thành một phần
khơng thể thiếu của bất kì máy móc nào trên tồn thế giới. Cùng với sự phát
triển khơng ngừng của khoa học và công nghệ, các vi mạch cũng phát triển
nhanh chóng về quy mơ, tính hiệu quả nhằm phục vụ tốt hơn cho cuộc sống
con người. Điện thoại thông minh, thiết bị an ninh, cho đến những ra-đa quân
sự, hệ thống điều khiển xí nghiệp chắc hẳn đều chứa đựng những vi mạch tích


hợp làm trọng tâm trong việc vận hành của bộ máy. Chính do đó, thiết kế và
sản xuất vi mạch đã, đang và sẽ là ngành công nghiệp hấp dẫn bởi tiềm năng
kinh tế to lớn mà nó mang lại.
Tài liệu này, với những bài thí nghiệm nhỏ, giúp mơ phỏng phần nào đó quy
trình thực hiện tạo ra một vi mạch, cũng như hướng dẫn cho sinh viên cách
chuẩn bị những kỹ năng, kiến thức cần thiết để tiếp cận ngành công nghiệp
lớn mạnh này. Những kiến thức cần thiết sẽ trải dài ở nhiều lĩnh vực, và chúng
cũng đòi hỏi những kĩ năng và cả những lối tư duy khác nhau để hồn thành
cơng việc. Do đó, một cá nhân kỹ sư đơn lẻ thường sẽ không thể nào am hiểu
tường tận tồn bộ q trình thiết kế và sản xuất vi mạch, kéo dài từ ý tưởng
thiết kế vi mạch ban đầu cho đến thành phẩm vi mạch thực tế tại nhà máy. Dù
vậy, mỗi cá nhân vẫn nên nắm được cái nhìn bao quát, tổng thể về quy trình
tạo ra vi mạch để chọn cho mình một cơng việc thích hợp trong chuỗi quy trình
này, đồng thời biết được cơng việc của mình sẽ có ảnh hưởng, có đóng góp thế
nào vào thành phẩm chung của toàn tập thể. Hi vọng tập tài liệu này sẽ cho
người đọc những câu trả lời phù hợp để tiếp tục phát triển sự nghiệp trong
tương lai.

v


vi


Mục lục
1 Giới thiệu chung
1.1 Thiết kế vi mạch . . . . . . . . . . . .
1.2 Cấu trúc một vi mạch . . . . . . . . .
1.3 ASIC và FPGA . . . . . . . . . . . . .
1.4 Quy trình của thiết kế vi mạch . . . .

1.4.1 Front end . . . . . . . . . . . .
1.4.2 Back end . . . . . . . . . . . .
1.5 Cần đạt yêu cầu gì để thiết kế vi mạch

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.

.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

1
. 1
. 2
. 3

. 4
. 5
. 7
. 11

2 Công cụ làm việc
2.1 Mô trường Linux và Bash Shell . . . .
2.1.1 Linux . . . . . . . . . . . . . .
2.1.2 Các lệnh Linux và Bash Shell .
2.1.3 Alias . . . . . . . . . . . . . . .
2.2 Giới thiệu về các ngôn ngữ viết script
2.3 Ngôn ngữ lập trình phần cứng . . . . .
2.4 Giới thiệu tool Synopsys . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.


.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.

.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.

.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.

.
.
.
.
.

.
.
.
.
.
.
.

13
13
13
14
16
16
17
18

.
.
.
.
.
.
.

.
.
.
.

19
19
19
19
20
21
21
21
24
24
30
35

3 Lab 1: Thiết kế bộ cộng 2 số 4 bit
3.1 Lý thuyết . . . . . . . . . . . . . .
3.1.1 Mục tiêu thiết kế . . . . . .
3.1.2 Bộ cộng 1 bit . . . . . . . .
3.1.3 Kết nối thành bộ cộng 4 bit
3.2 Thực hiện thiết kế . . . . . . . . .
3.2.1 Thiết kế cấp độ hệ thống .
3.2.2 Tạo dựng môi trường và các
3.2.3 Mô tả thiết kế bằng Verilog
3.2.4 Thực hiện viết testbench .
3.2.5 Tổng hợp (Synthesis) . . . .
3.3 Sinh viên tự thực hành . . . . . . .

vii

. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
chuẩn bị khác
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.


viii
4 Lab 2: Thiết kế bộ đếm
4.1 Lý thuyết . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Mạch tổ hợp và mạch tuần tự . . . . . . . .
4.1.2 Setup time và hold time . . . . . . . . . . .
4.1.3 Thiết kế bộ đếm lên . . . . . . . . . . . . .
4.2 Thực hiện thiết kế . . . . . . . . . . . . . . . . . .
4.2.1 Thiết kế cấp độ hệ thống . . . . . . . . . .
4.2.2 Tạo dựng môi trường và các chuẩn bị khác
4.2.3 Mô tả thiết kế bằng Verilog . . . . . . . . .
4.2.4 Thực hiện viết testbench . . . . . . . . . .
4.2.5 Tổng hợp (Synthesis) . . . . . . . . . . . . .
4.2.6 Kiểm tra netlist . . . . . . . . . . . . . . .
4.3 Sinh viên tự thực hành . . . . . . . . . . . . . . . .

MỤC LỤC

.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.


.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.

.
.
.
.
.
.
.
.
.

37
37
37
37
40
43
43
43
44
47
48
49
53

5 Lab 3: Thiết kế bộ nhớ

55

6 Lab 4: Thiết kế máy trạng thái


57

7 Lab 5: Dùng pipeline

59

8 Lab 6: Thiết kế CPU đơn giản

61


Chương 1

Giới thiệu chung
1.1

Thiết kế vi mạch

Như đã đề cập ở phần mở đầu, các vi mạch tích hợp là một phần khơng
thể thiếu trong máy móc ở thời đại hiện nay. Lợi thế của chúng là nhỏ gọn, với
cấu trúc tích hợp những linh kiện điện tử từ nhỏ đến siêu nhỏ, mà vẫn đảm
bảo thực hiện những khối lượng xử lý cực lớn. Để đạt được đến thành tựu này,
ta phải gửi lời cảm ơn đến sự bùng nổ của ngành công nghiệp bán dẫn ở nửa
sau của thế kỉ 20. Các chất bán dẫn, với một loạt các tính chất hữu ích như
khả năng điều chỉnh chiều và đường đi của dòng điện, thay đổi điện trở dựa
trên ánh sáng hoặc nhiệt, từ đó dùng để mở rộng, đóng ngắn mạch điện hay
chuyển đổi năng lượng. Nói cách khác, công nghiệp bán dẫn là nền tảng cho
việc tận dụng năng lượng điện thông qua các linh kiện bán dẫn, đặt nền móng
cho ngành cơng nghiệp vi mạch hiện tại.
Bên cạnh đó, sự phát triển của ngành cơng nghiệp vi mạch cũng đồng thời

mở ra một ngành công nghiệp mạnh mẽ không kém là ngành công nghiệp phần
mềm. Vi mạch, bao gồm những linh kiện điện tử sẽ được coi là phần cứng và
được sử dụng cùng điều khiển bởi các phần mềm, vốn là những dòng code từ
các lập trình viên. Tính ứng dụng cao của phần mềm hiện nay (thiết kế đồ họa,
game, các ứng dụng) dẫn đến yêu cầu về những phần cứng đủ khả năng để
chạy được những phần mềm mới nhất. Chính vì lẽ đó, hai ngành cơng nghiệp
vi mạch và phần mềm đòi hỏi phát triển song song một cách bền vững nhằm
đáp ứng yêu cầu của nhau và của cả người dùng.
Tóm lại, ngành cơng nghiệp vi mạch nắm giữ một vị trí tối quan trọng trong
bối cảnh hiện tại cũng như tương lai sắp đến. Cơ hội về việc làm, cũng như
nghiên cứu là vô cùng lớn, với những thành tựu to lớn đến từ nhiều ứng dụng
mà vi mạch mang lại. Mặt khác, đây cũng là đấu trường khốc liệt mà độ hiệu
quả cùng tính cạnh tranh của thành phẩm được đặt lên hàng đầu, do đó yêu
cầu người trong ngành phải khơng ngừng học hỏi, khơng ngừng tìm tịi để tránh
bị tụt lại phía sau.
1


2

CHƯƠNG 1. GIỚI THIỆU CHUNG

(a) Mặt trước

(b) Mặt sau

Hình 1.1: Cấu tạo vi mạch bên trong một chiếc iPhone 6.

1.2


Cấu trúc một vi mạch

Một câu hỏi chắc chắn sẽ được đặt ra với một người lần đầu đến với thiết
kế vi mạch: Vi mạch thường dùng có cấu tạo như thế nào? Câu trả lời là chúng
có cấu tạo từ những khối con. Các khối con này sẽ có những chức năng và
nhiệm vụ khác nhau. Lấy ví dụ ở điện thoại thơng minh iPhone 6 theo hình 1.1
chẳng hạn, trong vi mạch điều khiển có thể thấy những khối nhỏ hơn như bộ
nhớ Flash, module Wifi, LTE radio hay vi xử lý A8 của Apple. Những khối cấu
thành vi mạch nêu trên, tất nhiên cũng có thể tạo thành từ những khối nhỏ
hơn, nhỏ hơn nữa. Nói cách khác, vi mạch sản phẩm là tổ hợp lắp ghép một
cách hợp lý nhiều khối con lại với nhau nhằm đáp ứng mục đích cuối cùng của
sản phẩm mà nó hướng đến.
Như vậy, vi mạch có thể có cấu trúc rất lớn, liệu một doanh nghiệp, một


1.3. ASIC VÀ FPGA

3

cơng ty, hay chính Apple đã nói ở trên có thể bao quát hết tất cả các khối mà
họ sẽ sử dụng trong vi mạch? Câu trả lời thường sẽ là khơng. Có thể kỹ sư,
nhân viên của tập đoàn sẽ trực tiếp thực hiện thiết kế một hay nhiều khối trong
cấu thành vi mạch, nhưng sẽ khơng phải tất cả. Các khối cịn lại sẽ được mua
lại từ những doanh nghiệp khác chuyên sâu hơn, tất nhiên là thường được bảo
mật kỹ càng để tránh lộ bí mật cơng nghệ. Những khối được mua lại như trên
gọi là IP (Intellectual Property), và sẽ xuất hiện khá thường xuyên trong quá
trình thiết kế vi mạch của bất cứ công ty, doanh nghiệp nào.
Trong trường hợp một khối địi hỏi ta phải tự thiết kế (khơng phải IP), ta
hẳn cũng phải nắm được cấu tạo của nó. Sau khi đi qua hết những cấp bậc
phân theo khối, ta sẽ đến được một cấp độ thấp hơn gọi là cấp cổng; tức là kết

hợp nhiều cổng sẽ cho ta một khối ở cấp phân bậc nhỏ nhất. Những cổng này
là những cổng logic thường thấy, dùng cho thực hiện các phép toán logic như
cổng AND, OR, XOR hay NOT. Đúng như vậy đấy, vi mạch chức năng cao
siêu đến mấy cũng xuất phát từ vô số cổng logic nhỏ li ti mà thôi.
Nếu đi vào sâu hơn nữa, các cổng logic sẽ được tạo thành từ các MOSFET
hay transistor, những linh kiện bán dẫn cơ bản mà ở đó ta nắm được cách thức
điều khiển dòng điện vật lý. Đồng thời, các MOSFET hay transistor trên lại
được cấu thành từ những chất bán dẫn mang điện dương hay âm (electron và
lỗ trống) nhằm tạo ra những phân cực tạo ra dịng điện (hình 1.2). Tuy nhiên,
với một người kỹ sư thiết kế vi mạch, khía cạnh vật lý ở cấp độ linh kiện bán
dẫn sẽ không được quá chú tâm mà thay vào đó các nhà máy sản xuất vi mạch
sẽ chịu trách nhiệm cung cấp thư viện linh kiện cùng đòi hỏi, yêu cầu sử dụng
những linh kiện trên một cách phù hợp. Quá trình tương tác giữa bên thiết kế
vi mạch (doanh nghiệp) và bên sản xuất vi mạch (nhà máy) sẽ được mô tả kĩ
hơn ở phần 1.4.

1.3

ASIC và FPGA

Trước khi đi tiếp vào quy trình thiết kế vi mạch, ta cần chú ý tới hai loại
hình vi mạch phổ biến nhất hiện nay: ASIC và FPGA.
ASIC (Application Specific Integrated Circuit), là những vi mạch chuyên
dụng, chỉ dùng cho một mục đích duy nhất, đồng thời đi kèm với hiệu năng và
kích thước tối ưu. Quy trình trong tài liệu này sẽ hướng đến cho việc thiết kế
một ASIC, bởi lẽ chúng hiệu quả và được dùng nhiều hơn trong công nghiệp.
Để tạo ra một ASIC, doanh nghiệp cần chuẩn bị kĩ lưỡng về cấu tạo, chức năng
của ASIC dựa trên yêu cầu ràng buộc của bên nhà máy sản xuất. Nhà máy sẽ
chịu trách nhiệm tạo ra ASIC thành phẩm và sản xuất hàng loạt theo yêu cầu
của doanh nghiệp. Tuy nhiên, ASIC đã tạo ra mà có sai sót thì coi như phải

sản xuất lại từ đầu, kéo theo chi phí cực lớn nên các doanh nghiệp đủ mạnh
mới chọn hướng đi này.
FPGA (Field Programmable Gate Array), ở hướng ngược lại, vốn bản thân
đã là một vi mạch thành phẩm. Điểm khác biệt, và cũng là điểm tối ưu của nó,
chính là khả năng thay đổi cấu trúc và kết nối bản thân nó để trở thành một


4

CHƯƠNG 1. GIỚI THIỆU CHUNG

Hình 1.2: Ví dụ về cấu trúc bên trong của một vi mạch.

vi mạch hoạt động theo mong muốn của người thiết kế. Nói cách khác, FPGA
có vai trị giống với nhà máy ở trên, tuy nhiên nó có khả năng lập trình lại để
khắc phục sai sót, qua đó giảm thiểu chi phí. Tuy nhiên, trên thực tế, FPGA
lại chỉ phổ biến trong môi trường nghiên cứu, học tập cùng các doanh nghiệp
vừa và nhỏ. Đó là do vi mạch dựa trên FPGA thua xa vi mạch ASIC về hiệu
năng cũng như kích thước. Đây cũng là điều dễ hiểu bởi FPGA không thể tận
dụng tất cả tài nguyên của nó (quá đa dụng) cũng như không thể tối ưu cấu
trúc bên trong (phần cứng cố định).

1.4

Quy trình của thiết kế vi mạch

Để làm rõ quy trình thiết kế vi mạch, trước hết ta cần nắm được đầu ra và
đầu vào của quá trình này. Khi nói về đầu vào của thiết kế vi mạch, ta đang
đề cập đến ý tưởng về vi mạch mong muốn được tạo ra với những chức năng,
hành vi, cách vận hành cụ thể. Dựa trên những ý tưởng ban đầu, đội ngũ thiết

kế tiến hành xây dựng, lắp ghép các khối con trên nền tảng cấp cổng hay cấp
MOSFET, trong đó thơng số vật lý của các linh kiện bán dẫn cùng các ràng
buộc về vị trí, diện tích được quy định bởi nhà máy nơi dự định sản xuất vi
mạch trên. Các thông số mô tả cho vi mạch như trên, hay đầu ra của thiết kế vi
mạch, sẽ được gửi đến nhà máy, để nhà máy dựa trên đó mà chế tạo ra những
mask (hay mặt nạ quang học) làm khuôn để sản xuất vi mạch hàng loạt.
Quy trình thiết kế vi mạch gồm nhiều khâu, nhiều bước phức tạp, và được
chia thành hai công đoạn lớn: Front End và Back End. Front End, như tên gọi
của nó, là cơng đoạn trước tiên, trong đó cấu trúc cùng chức năng của vi mạch


1.4. QUY TRÌNH CỦA THIẾT KẾ VI MẠCH

5

Hình 1.3: Các bước trong quy trình thiết kế một vi mạch.

được kiểm định và chú trọng nhiều hơn. Trong khi đó, cơng đoạn Back End
nhận nhiệm vụ đảm bảo cho vi mạch hoạt động trong các điều kiện vật lý thích
hợp, đặc biệt là về mặt thời gian, diện tích và hiệu suất. Tồn bộ các bước của
quy trình thiết kế vi mạch, bao gồm đầu ra, đầu vào, công cụ hỗ trợ của từng
bước được thể hiện trong hình 1.3. Lưu ý rằng không nhất thiết phải thực hiện
tuần tự lần lượt từng bước, và khơng bắt buộc phải có mặt tất cả các bước như
trong hình trên; thứ tự và số lượng các bước trong quy trình sẽ được cân chỉnh
cho phù hợp với đặc điểm vi mạch cũng như tình hình thực tế khách quan.

1.4.1

Front end


Bước đầu tiên cho thiết kế vi mạch là lên ý tưởng và cụ thể hóa, chi tiết
hóa nó dưới dạng các tài liệu (Specification), sao cho người khác nhìn vào có


6

CHƯƠNG 1. GIỚI THIỆU CHUNG

Hình 1.4: Ví dụ mơ hình cấp hệ thống trong Matlab.

thể hiểu được bản chất, mục đích của vi mạch để tiến hành thực hiện các bước
tiếp theo. Các Specification này có thể ở bất kì định dạng nào; có thể là file
văn bản, bài thuyết trình, hay thậm chí là bản mơ tả vẽ trên giấy, miễn sao nó
đạt được mục đích thể hiện rõ ràng, cụ thể vi mạch cần tạo và dễ hiểu, dễ tiếp
cận với người đọc Specification.
Dựa trên mô tả của Specification, người ta tiến hành thực hiện bước System Level Design (Thiết kế ở cấp độ hệ thống). Bước này thường chỉ diễn
ra ở những thiết kế có quy mơ lớn đến rất lớn, mà ở đó các khối con tạo
thành vi mạch có bản chất quy mơ cũng là khá "khủng bố". Ở quy mô lớn
như vậy, các mô hình mơ phỏng sử dụng ngơn ngữ lập trình cấp độ cao như
C++/SystemC/Python/Matlab được ưa chuộng sử dụng (hình 1.4). Chúng là
những ngơn ngữ lập trình dựa trên nền tảng các thư viện đồ sộ, phù hợp cho
việc kiểm tra hành vi của vi mạch ở mức độ hệ thống. Từng khối con trong
vi mạch sẽ được xây dựng dựa trên các ngôn ngữ cấp cao và kết nối với nhau
trong một model hay platform để kiểm chứng hoạt động của vi mạch tổng.
Bước tiếp theo trong việc xây dựng các khối của vi mạch là RTL Design
(thiết kế ở cấp độ chuyển thanh ghi). Những mô tả của các bước trước đó được
cụ thể hóa dưới dạng ngơn ngữ lập trình phần cứng (Verilog, System Verilog
hay VHDL). Ở đó, các khối trong vi mạch được thể hiện dưới dạng các module;
trong các module lại có thể chứa nhiều module con (tương tự như phân bậc các
khối con trong mô tả ở phần trước), và các module có thể thể hiện nhỏ nhất

đến mức độ cấp cổng (hình 1.5). RTL design được đánh giá là bước rất quan
trọng trong thiết kế vi mạch, bởi nó mơ tả vừa đủ chi tiết, cụ thể của vi mạch,
nhưng cũng đủ bao quát cho việc kiểm tra chức năng vi mạch diễn ra thuận
tiện, khơng q phức tạp.
Để kiểm tra tính đúng đắn của các file code trong bước RTL Design, người
ta thực hiện tiếp bước RTL Verification (Kiểm định RTL). Ở bước này, các
công cụ kiểm định (Synopsys/Mentor/Cadence) sẽ được sử dụng nhằm tìm ra
lỗi hay sai sót của RTL để sửa lại cho phù hợp. Các testbench (hình 1.6), tức
mơi trường dùng cho kiểm tra RTL, sẽ được xây dựng, từ quy mơ tổng qt
đến cục bộ, vừa nhằm tìm ra sai sót trong RTL, vừa phải đảm bảo mọi tình


1.4. QUY TRÌNH CỦA THIẾT KẾ VI MẠCH

7

Hình 1.5: Ví dụ thiết kế file Verilog cho thiết kế một bộ cộng.
huống có thể xảy đến với vi mạch được thiết kế, thơng qua các file report hay
waveform (dạng sóng) thể hiện hành vi, hoạt động của vi mạch mô tả trong
RTL.
Sau khi đảm bảo sạch lỗi về chức năng của RTL, các file RTL này sẽ được
đưa đi Synthesis (tổng hợp). Bước này cơ bản được thực hiện thông qua các
công cụ hỗ trợ. Nhiệm vụ của công cụ hỗ trợ khi Synthesis đó là chuyển các
module trong RTL design sang dạng các module tương đương mà được hỗ trợ
bởi các thư viện phần cứng. Đồng thời, các kết nối, cách sắp xếp của các module,
các cổng cũng được tối ưu lại mà không ảnh hưởng đến chức năng ban đầu của
chúng (hình 1.7). Kết quả của quá trình Synthesis là các file RTL đã chuyển
tương đương cùng với các báo cáo về hiệu năng cùng timing (hình 1.8).
Sau khi có được RTL chuyển tương đương sau bước Synthesis, người ta sẽ
tiến hành kiểm tra lại một lần nữa để đảm bảo chức năng của vi mạch. Lý do

đơn giản là vì cơng đoạn Synthesis thực hiện hầu hết bởi phần mềm hỗ trợ và
có thể dẫn đến sai sót. Bước này gọi là Netlist Verification (kiểm tra Netlist)
nhằm đảm bảo sự tương đồng của RTL trước và sau Synthesis. Đây cũng là
bước cuối cùng trong công đoạn Front End.
Trong q trình kiểm tra, nếu có sai sót xảy đến thì cần thiết phải thực
hiện lại các cơng đoạn trước đó nhằm khắc phục lỗi phát sinh. Trên thực tế,
vi mạch sau khi thiết kế RTL thường phải sửa chữa, khắc phục rất nhiều lần
cho đến khi đạt được tính chính xác mong muốn; do đó q trình thiết kế ra vi
mạch thường ít khi "đi thẳng" từ đầu đến đích mà đi theo dạng "vịng xốy"
lặp đi lặp lại với kết quả vi mạch thiết kế hoàn thiện hơn sau mỗi chu trình.

1.4.2

Back end

Design For Test (DFT), là cụm từ dùng mô tả cho việc chèn những khối
phụ vào trong thiết kế vi mạch chính nhằm mở ra một con đường kiểm tra vi
mạch sau khi đã hoàn thiện sản xuất. Các khối phụ, gọi là BIST (Built-in Self


8

CHƯƠNG 1. GIỚI THIỆU CHUNG

Hình 1.6: Ví dụ sử dụng testbench để kiểm tra RTL.

Hình 1.7: Ví dụ cho bước Synthesis trong thiết kế vi mạch.


1.4. QUY TRÌNH CỦA THIẾT KẾ VI MẠCH


9

Hình 1.8: Mơ tả quá trình Synthesis sử dụng tool DC của Synopsys.

Test), thậm chí được thêm vào RTL gốc bởi kỹ sư thiết kế và sau đó cũng được
Synthesis. Nói cách khác, chúng vận hành như những RTL phụ phục vụ chủ
yếu cho mục đích kiểm tra, thường là kiểm tra bộ nhớ (hình 1.9), hay các kết
nối quan trọng trong RTL. Bước DFT thường chỉ áp dụng cho các thiết kế có
quy mơ lớn, khi mà q trình kiểm tra tổng thể trở nên quá phức tạp và phải
dùng các BIST để đảm bảo hoạt động cục bộ của các khối chính yếu.
Trước đây, các BIST thường chỉ phát huy tác dụng sau khi vi mạch đã sản
xuất, tức là có chip mẫu để kiểm tra các khối cùng các kết nối quan trọng.
Tuy nhiên, hiện nay các nhà cung cấp kiểm định lớn đã có khả năng cung cấp
những thiết bị chứa một lượng lớn logic cell cùng khả năng tái cấu trúc và tạo
kết nối giữa chúng. Về cơ bản những thiết bị này hoạt động khá tương tự với
FPGA, tuy nhiên chúng kém linh hoạt hơn và chỉ phù hợp cho việc kiểm tra
những phần quan trọng nhất của vi mạch, chính là kiểm tra các BIST để cập ở
trên. Bù lại, các thiết bị này có số lượng logic cell cực lớn, rất thích hợp để mơ
phỏng luồng dữ liệu lớn, vốn xuất hiện thường xuyên trong thời buổi thông tin
bùng nổ như hiện nay.
Static Timing Analysis (STA), hay phân tích thời gian tĩnh là bước tiếp
theo trong quy trình thiết kế vi mạch. Ở bước này, các thông số về hiệu năng
và timing được đặt lên hàng đầu. Dựa trên thư viện cơng nghệ hiện có, cùng
các yêu cầu, ràng buộc về vi mạch, STA sẽ xây dựng các mơ hình timing nhằm
tìm ra những vi phạm ràng buộc (nếu có) về mặt timing, hiệu năng của vi
mạch hiện có, đồng thời cung cấp thêm những ràng buộc về mặt khơng gian
(hình 1.10) cho bước cuối cùng của công đoạn Back End, Place & Route.
Place & Route, là bước sắp xếp lại các khối trong vi mạch về mặt khơng
gian (hình 1.11). Các khối con, các IP cùng các kết nối I/O (input/output) sẽ



10

CHƯƠNG 1. GIỚI THIỆU CHUNG

Hình 1.9: MBIST, tức BIST cho bộ nhớ, được chèn vào thiết kế RTL.

Hình 1.10: Mơ tả quá trình STA sử dụng tool PrimeTime của Synopsys.


1.5. CẦN ĐẠT YÊU CẦU GÌ ĐỂ THIẾT KẾ VI MẠCH

11

Hình 1.11: Ví dụ cho Place & Route cho một vi mạch đơn giản.

được chỉnh sửa về vị trí sao cho không vi phạm những ràng buộc mà các bước
Synthesis và STA cung cấp, qua đó vừa đảm bảo hoạt động của vi mạch về
chức năng, hiệu suất, thời gian, vừa tối ưu diện tích của vi mạch tạo thành.
Kết quả của bước này là layout tổng hợp tất cả thành quả của các bước trên;
nó sẽ được gửi đến nhà máy và tiến hành sản xuất.
Cần lưu ý là các ràng buộc, thư viện công nghệ sử dụng trong các bước
Synthesis, STA và Place & Route đều phải trùng khớp với nhà máy ta mong
muốn sản xuất vi mạch. Về bản chất, bên thiết kế vi mạch (doanh nghiệp) sẽ
không quá tập trung về mặt hoạt động vật lý của vi mạch, mà nhường lại phần
đó cho bên sản xuất vi mạch (các nhà máy), vốn nghiên cứu, nắm rõ hơn về
bán dẫn. Các nhà máy sản xuất vi mạch sử dụng những kiến thức đó để tạo
nên các thư viện cơng nghệ, các ràng buộc như đã nói ở trên.


1.5

Cần đạt yêu cầu gì để thiết kế vi mạch

Như trình bày ở phần trước, thiết kế vi mạch gồm rất nhiều công đoạn mà
rõ ràng chỉ một cá nhân khơng thể nào bao qt hết. Do đó, một cá nhân kỹ


12

CHƯƠNG 1. GIỚI THIỆU CHUNG

sư trước khi bước chân vào ngành công nghiệp này cần xác định rõ hướng đi
phù hợp, mà trước nhất là giữa Front End và Back End:
❼ Front end: Người hoạt động ở công đoạn này cần thiết phải nắm được vi
mạch ở mức độ hành vi, tức hoạt động của vi mạch trong các tình huống
cụ thể về mặt chức năng.
❼ Back end: Người hoạt động ở công đoạn này tập trung nhiều hơn vào các
đặc tính vật lý cũng như q trình sản xuất vi mạch.

Tiếp đó, vi mạch là ngành cơng nghiệp phát triển rất nhanh. Do đó, nó địi
hỏi người thực hiện không ngừng học hỏi, nghiên cứu nếu không muốn bị loại
bỏ khỏi cuộc chơi. Thiết kế và sản xuất vi mạch là hình thức kinh doanh siêu
lợi nhuận, tuy nhiên chi phí bỏ ra cũng cực cao. Khơng cải tiến sản phẩm của
mình đồng nghĩa với việc vi mạch khơng bán được, chịu lỗ rất lớn.


Chương 2

Công cụ làm việc

Trong chương này, tài liệu sẽ cho sinh viên tiếp cận với một số công cụ làm
việc cơ bản, cần thiết cho một kĩ sư thiết kế vi mạch. Trong đó, các cơng cụ hỗ
trợ, mơi trường và các ngơn ngữ lập trình sẽ được mơ tả sơ lược. Việc nghiên
cứu chuyên sâu, sử dụng chúng sẽ phụ thuộc vào chính người đọc.

2.1
2.1.1

Mơ trường Linux và Bash Shell
Linux

Linux là một hệ điều hành mã nguồn mở, tự do cho mọi người khám phá
và sử dụng. Mọi cấu trúc mã nguồn của Linux có thể được thay đổi bởi người
dùng, từ giao diện đến cấu trúc thư mục, tất cả đều có thể được thay đổi và
cải tiến cho tốt hơn. Nói cách khác, đây chính là mơi trường thích hợp cho việc
thực hiện thiết kế vi mạch khi ta không phải chịu quá nhiều hạn chế và ràng
buộc.
Tất cả các chương trình trong mơi trường Linux đều được cài đặt dưới dạng
gói (package). Các gói này rất dễ sử dụng, cài đặt cũng như loại bỏ đi. Nếu
nói riêng về thiết kế vi mạch, các hãng phầm mềm lớn cung cấp phần mềm
cho việc này cũng thường ưa thích lựa chọn cung cấp gói phầm mềm trên nền
tảng Linux, bởi lẽ chúng rất dễ cài đặt và chỉnh sửa, không phải qua nhiều
khâu kiểm tra như các hệ điều hành mã nguồn đóng khác. Ngồi ra, người ta
thường lầm tưởng Linux sẽ khơng có tính bảo mật tốt; tuy nhiên thực tế tính
bảo mật của Linux cũng đạt được cấp độ an toàn cao với các cơng cụ hỗ trợ
như sandbox, các chế định mã hóa, và đặc biệt là người dùng hay cộng đồng có
thể dễ dàng vá lỗ hổng bảo mật (mã nguồn mở mà).
Ngồi ra, cịn có một đặc điểm nổi trội mà ai dùng Linux cũng phải biết
đến, đó là giao diện dịng lệnh (Terminal) (hình 2.1). Linux cung cấp giao diện
Terminal dưới dạng hộp đen cùng các dòng lệnh, như một cơng cụ để ta có thể

tiếp cận mọi thứ trong máy. Khi thiết kế vi mạch, đây cũng là giao diện tối ưu
để giúp tăng tính hiệu quả của thực hiện cơng việc. Giao diện đồ họa có vẻ ưa
13


14

CHƯƠNG 2. CƠNG CỤ LÀM VIỆC

Hình 2.1: Giao diện Terminal của Linux.
nhìn và dễ sử dụng, dễ hiểu hơn; tuy nhiên thực tế cũng chỉ ra rằng làm việc
với Terminal, chỉ sử dụng bàn phím và một cửa sổ tỏ ra hiệu quả hơn nhiều,
đặc biệt là khi đã quen với việc sử dụng các lệnh.
Cơng bằng mà nói, Linux thực tế vẫn có nhiều khuyết điểm, nhất là khi so
sánh với hệ điều hành phổ biến nhất hiện nay là Windows. Tuy nhiên, trong
ngành thiết kế vi mạch, khi mà các công cụ đều hỗ trợ trên Linux, giao diện
Terminal cũng tăng hiệu quả làm việc, Linux được ưu tiên trong số các hệ điều
hành là điều dễ hiểu (nhất là sử dụng cho các máy chủ).

2.1.2

Các lệnh Linux và Bash Shell

Để làm việc trên Linux, người dùng cần nắm được các câu lệnh phổ biến để
sử dụng trong Terminal. Các lệnh này có nhiều cơng dụng, từ tạo thư mục đến
thay đổi cấp quyền, hay hỗ trợ người dùng cách sử dụng lệnh. Bảng 2.1 sẽ cho
ta làm quen với một số lệnh cơ bản nhất trong Linux.
Các lệnh trong Linux có thể đi kèm với các option nhằm hướng dẫn lệnh
thực thi sao cho đúng. Để biết được lệnh nào có những option gì, ta có thể chọn
một trong hai cách sau:

❼ help [Lệnh cần tìm hiểu]
❼ info [Lệnh cần tìm hiểu]

Lệnh help thường hướng dẫn đơn giản, trong khi lệnh info sẽ mở một file hướng
dẫn chi tiết cách sử dụng. Do đó, sau khi tìm hiểu xong lệnh thơng qua info,
nhấn phím Q để trở lại Terminal.
Đơi khi ta có nhu cầu thực hiện một hay một nhóm lệnh lặp đi lặp lại, chẳng
hạn như khi ta thực hiện thiết lập mỗi khi bắt đầu một dự án, hay dùng một


2.1. MÔ TRƯỜNG LINUX VÀ BASH SHELL

15

Bảng 2.1: Một số lệnh thơng dụng trong mơi trường Linux.
pwd
ls
ll

In ra vị trí hiện tại
Liệt kê các file và thư mục ở vị trí hiện tại
Liệt kê các file và thư mục ở vị trí hiện tại có kèm theo chi tiết
về quyền truy cập, chủ sở hữu, kích cỡ, thời gian tạo/chỉnh sửa
Di chuyển vị trí hiện tại theo đường dẫn mà ta chỉ định. Để
nắm rõ được lệnh này, ta cần hiểu được cách định nghĩa đường
dẫn của Linux. Đường dẫn trong Linux được phân theo cấp thư
mục mẹ và con, giữa các thư mục trong đường dẫn ngăn cách
bởi dấu /. Trong đó có một số định nghĩa chuẩn cho vị trí như
sau:


cd

❼ Dấu "∼" đại diện cho vị trí thư mục gốc, thư mục cấp
cao nhất trong hệ điều hành.
❼ Dấu "." đại diện cho vị trí thư mục hiện tại
❼ Dấu ".." đại diện cho thư mục cấp cao hơn vị trí hiện tại
một bậc.

Ví dụ cho lệnh cd:
❼ cd ∼/Desktop
❼ cd ./thu_muc_con_A/thu_muc_chau_AA
❼ cd ../.. (di chuyển lên thư mục mẹ của thư mục mẹ)

mkdir

Tạo thư mục tại đường dẫn chỉ định kèm tên gọi (nếu không
kèm đường dẫn thì là ở vị trí hiện tại). Ví dụ cho tạo một thư
mục mới tên là Thumucnew:
❼ mkdir Thumucnew
❼ mkdir ../abc/Thumucnew

cp fileA fileB
mv fileA fileB
rm fileA
rm -r folderA
chmod
fileA

777


chmod 777 -r
folderA
touch fileA

Copy một fileA thành fileB, có thể đi kèm thêm đường dẫn.
Tương tự lệnh copy nhưng fileA sẽ bị xóa mất (giống lệnh Cut
trong Windows)
Xóa fileA, có thể đi kèm thêm đường dẫn
Xóa thư mục folderA cùng nội dung bên trong, lưu ý cần có
thêm option "-r"
Cấp full quyền truy cập cho fileA, bao gồm quyền đọc (read),
ghi (write) và thực thi (execute). Mỗi quyền lại được chia làm
3 cấp độ (root, user và other). Con số 777 đại diện cho 9 bit
thể hiện các quyền trên đều được đưa lên 1. Lệnh này dùng
trong các trường hợp file cần truy cập, đọc hay ghi bị hạn chế
về quyền.
Cấp full quyền truy cập cho thư mục A, có option "-r"
Tạo mới file A, nếu đã tồn tại thì cập nhật lại ngày tạo


16

CHƯƠNG 2. CƠNG CỤ LÀM VIỆC

Hình 2.2: Ví dụ sử dụng file Bash Shell.

nhóm lệnh để tự động tạo một bảng có nội dung cực lớn. Trong những trường
hợp này, ta thường có nhu cầu lưu trữ các lệnh này để dùng lại mỗi khi cần,
và file dùng để lưu trữ chúng gọi là một file Bash Shell. File này có định dạng
đi là .sh và có thể được thực thi thơng qua lệnh source hay bash (hình 2.2).


2.1.3

Alias

Alias, dịch nơm na là biệt danh, là cách mà ta có thể định nghĩa lệnh riêng
của mình, thơng qua một file bash shell ở thư mục gốc (∼/.bashrc). Bên trong
file .bashrc này, ở phần phía sau của file có thể thấy các dịng lệnh alias. Đây
chính là cách ta dùng để định nghĩa những lệnh mới của riêng chúng ta. Lưu
ý là ta cần source lại file .bashrc trước khi có thể sử dùng lệnh mới (hình 2.3).
Ngồi ra, ta cịn có thể dùng lệnh which để tìm hiểu xem Linux liệu có hiểu một
lệnh nào đó, có thể là lệnh do ta vừa dùng alias, hay một lệnh của gói chương
trình nào đó mà ta muốn xem liệu Linux có cài đặt nó đúng hay chưa.

2.2

Giới thiệu về các ngơn ngữ viết script

Ngôn ngữ script, khá tương tự với Bash Shell, cũng chứa các lệnh nhằm thực
thi một tác vụ nào đó. Tuy nhiên, khi người ta sử dụng các ngơn ngữ script
trong lập trình một tác vụ, tác vụ đó thường hoặc tác động nhiều đến các tệp,
hoặc cần điều khiển các luồng lệnh,... Trên thực tế, các doanh nghiệp thường
dùng ngôn ngữ script để thực hiện các tác vụ về tool, cấu trúc khung bộ nhớ,
hay các tác vụ dùng dữ liệu lớn. Đó chính là vì các ngôn ngữ script thường xử
lý tác vụ ở tốc độ cao và giúp ta điều khiển nhiều tác vụ con một cách dễ dàng


2.3. NGƠN NGỮ LẬP TRÌNH PHẦN CỨNG

17


Hình 2.3: Dùng alias để tạo lệnh mới.

hơn. Trong tài liệu này, ta sẽ đề cập đến ba loại ngôn ngữ script: Perl, Makefile
và Tcl. Cụ thể về cách dùng 3 loại ngôn ngữ này sẽ được hướng dẫn (một cách
đơn giản) thông qua các bài lab). Việc nghiên cứu chuyên sâu được dành cho
sinh viên tự thực hiện.

2.3

Ngơn ngữ lập trình phần cứng

Để thiết kế vi mạch, như đã trình bày ở các phần trước, cần thiết phải
định nghĩa phần cứng. Hiện tại, ngơn ngữ lập trình phần cứng phổ biến nhất là
Verilog. Trong tài liệu này, các bài lab đều sẽ sử dụng Verilog cho thiết kế và mô
phỏng phần cứng, tức tương ứng với các bước RTL Design và RTL Verification.
Việc tìm hiểu, nghiên cứu sâu về Verilog dành cho sinh viên tự thực hiện, bởi
đây là nền tảng cho thực hiện thiết kế vi mạch.
SystemVerilog là ngơn ngữ lập trình phần cứng phát triển tiếp nối Verilog,
được thêm vào nhiều tính năng mới như randomization, mảng đa chiều,... Ở
Việt Nam, đa phần các kĩ sư thiết kế RTL vẫn đang sử dụng Verilog thay vì
SystemVerilog, tuy nhiên xu hướng dự kiến trong tương lai sẽ chuyển hẳn sang
SystemVerilog cho cả thiết kế và kiểm định RTL.
Về phần VHDL, đây cũng là một ngơn ngữ lập trình phần cứng chất lượng.
Tuy nhiên, điểm trừ của nó là cú pháp khá phức tạp, nhiều quy định, ngược lại
với Verilog khá gần gũi với ngôn ngữ C phổ thông. Nhưng công bằng mà nói,
VHDL có cú pháp lại rất chỉn chu, rõ ràng, phù hợp cho những người mới tập
làm quen với lập trình phần cứng một cách khoa học. Việc sử dụng VHDL hay
không là tùy thuộc vào sinh viên, nhưng cần chú ý Verilog vẫn đang được sử
dụng phổ biến hơn.



×