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

Lập trình cho FPGA từ Spartan 3

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 (1.47 MB, 215 trang )

Tiếp cận lập trình cho FPGA từ Spartan -3

1
MỞ ĐẦU

Trong những năm gần đây, kỹ thuật điện tử đã liên tục có những tiến bộ vượt
bậc, đặc biệt là trong những kỹ thuật vi điện tử. Khi kích thước và độ phức tạp của
các hệ thống số ngày càng gia tăng, rất nhiều công cụ thiết kế được trợ giúp bởi
máy tính đã được đưa vào quá trình thiết kế phần cứng. H
ỗ trợ mạnh mẽ cho
phương pháp thiết kế này là những ngôn ngữ mô tả phần cứng HDL. Nói đến HDL
tức là chúng ta đã đề cập đến công nghệ thiết kế ASIC – hay còn gọi là IC chuyên
dụng.
Ở nước ta, do nhu cầu về công nghệ ASIC còn chưa cao trong khi đó việc mua
sẵn các DSP đa năng không phải là điều khó khăn. Tình hình sẽ hoàn toàn thay đổi
trong tương lai khi nhu cầu về bảo mật, độc lập và tự ch
ủ công nghệ điện tử - viễn
thông phục vụ công cuộc công nghiệp hoá và hiện đại hoá đất nước tăng lên nhanh
chóng. Việc ứng dụng rộng rãi công nghệ ASIC trong tương lai gần sẽ là một điều
có thể dự đoán trước. Do vậy, việc tìm hiểu về công nghệ ASIC để có thể làm chủ
các ứng dụng trong công nghiệp là một việc làm hoàn toàn cần thiết. Hơn thế nữa,
nh
ững hiểu biết sâu sắc về các đặc tính kỹ thuật trong công nghệ ASIC không
những chỉ có ý nghĩa riêng đối với các lĩnh vực Điện tử - Viễn thông, Công nghệ
thông tin nói chung mà còn có ý nghĩa đặc biệt quan trọng trong lĩnh vực an ninh,
quốc phòng.
Công nghệ FPGA (Field-Programmable Gate Array) đã xuất hiện như một
giải pháp cơ bản cho vấn đề tranh thủ thời gian và chi phí ban đầu thấp. Nó cho
phép chế tạo ngay và giá thành sản phẩ
m thấp, tạo nên sức cạnh tranh lớn trên thị
trường. FPGA là một thiết bị cấu trúc logic có thể được người sử dụng lập trình trực


tiếp mà không phải sử dụng bất kỳ một công cụ chế tạo mạch tích hợp nào. FPGA
được công ty Xilinx giới thiệu đầu tiên vào năm 1985. Hiện nay FPGA đã được
nhiều công ty phát triển là AcTel, Altera, Plus Logic, AMD,…
Ở Việt Nam, trong một số năm gần đây, việc nghiên cứ
u về FPGA đã đạt được
những thành tựu nhất định đặc biệt trong các lĩnh vực như xử lý tín hiệu Rađa, các
Tiếp cận lập trình cho FPGA từ Spartan -3

2
lĩnh vực bảo mật điện thoai Trên một số diễn đàn, người ta đã giới thiệu rất nhiều
về FPGA, về công nghệ lập trình Ram tĩnh, cầu trì nghịch. Với những người đã bỏ
ra khoảng thời gian không nhỏ để nghiên cứu về lĩnh vực này thì có thể những
thông tin đó hoàn toàn đủ để hình dung ra vấn đề, xong những người đang có ý định
tìm hiểu thì qu
ả thực với những thông tin đó để hiểu ra được thì cũng lại phải mất
một khoảng thời gian khá dài.
Cuốn sách “ Tiếp cận lập trình cho FPGA từ Spartan -3 ” với mục đích
cung cấp những thông tin cần thiết nhất về công nghệ FPGA và đặc biệt cung cấp
cho các đối tượng đang có nhu cầu tìm hiểu về công nghệ này có khả năng tiếp cận
một cách nhanh chóng với cách thức l
ập trình cho một FPGA cụ thể. Cuốn sách bao
gồm 5 chương:
Chương I: Giới thiệu về công nghệ ASIC
Chương II: Giới thiệu một số công nghệ mới liên quan đến thiết kế ASIC hiện
nay – Công nghệ FPGA .
Chương III: Giới thiệu bo mạch Spartan-3 starter kid board và môi trường lập
trình ISE 7.1
Chương IV: Sơ lược về ngôn ngữ VHDL
Chương V: Các bài toán thiết kế và giao tiếp
Trong đó người đọc có thể đọc lướt qua các chương I và II để tìm kiếm một vài

thông tin mong muốn. Chương III đặc biệt phải quan tâm vì đây là một FPGA cụ
thể. Chương IV giới thiệu sơ lược về ngôn ngữ VHDL, thực ra về ngôn ngữ VHDL
có rất nhiều sách đã đề cập tới. Tuy vậy, chúng ta chỉ cần nắm lượng thông tin ở
chương này sau đó đọc kỹ từng bài toán ở chươ
ng V sẽ giúp chúng ta có điều kiện
hiểu rõ hơn về ngôn ngữ. Chương V sẽ là các bài toán từ dễ đến khó, với 6 bài tập
chúng ta hoàn toàn làm chủ đựơc bo mạch, và vì vậy, với các bài toán bất kì chỉ cần
căn cứ vào thuật toán là chúng ta hoàn toàn có thể triển khai thực hiện được.
Do trình độ còn hạn chế vì vậy không tránh khỏi những khiếm khuyết rất
mong nhận được các ý kiến đóng góp từ người đọc. Cu
ốn sách này có sử dụng khá
nhiều chi tiết từ luận văn cao học của anh Lê Hải Triều – ĐHBK – Hà Nội.
Tiếp cận lập trình cho FPGA từ Spartan -3

3

CHƯƠNG I: CÔNG NGHỆ ASIC

1.1. Các hướng tiếp cận thiết kế ASIC
1.1.1. Các công nghệ lập trình thiết kế ASIC
Tóm tắt các công nghệ lập trình cho ASIC được trình bày trong bảng dưới
đây.
Bảng1.1. Các đặc tính công nghệ lập trình thiết kế ASIC
Công nghệ lập trình
Tính
bay hơi
Có thể
lập trình
Diện tích của
ASIC

Điện trở
(ohm)
Điện
dung
(pF)
Các phần tử RAM tĩnh Có
Trong
mạch
Lớn 1 - 2K 10 - 20
Lập trình cầ
u chì
nghịch PLICE (PLICE
Anti-fuse)
Không Không Anti-fuse nhỏ
Số tranzitor
lớn
300 - 500K 3 - 5
Lập trình cầu chì
nghịch ViaLink
(ViaLink Anti-fuse)
Không Không Anti-fuse nhỏ
Số tranzitor
lớn
50 - 80K 1 - 3
EPROM Không
Ngoài
mạch
Nhỏ 2 - 4K 10 - 20
EEPROM Không
Trong

mạch
2xEPROM 2 - 4K 10 - 20
1.1.2. Thiết kế logic ASIC đầu vào (Logic Design Entry)
Mục đích của thiết kế đầu vào là mô tả một hệ thống vi điện tử dựa trên các
công cụ của hệ tự động thiết kế đi
ện tử EDA (Electronic-Design Automation). Các
Tiếp cận lập trình cho FPGA từ Spartan -3

4
hệ thống điện tử được xây dựng dựa trên các thành phần tĩnh, như là các IC TLL.
Thiết kế đầu vào đối với các hệ thống này chính là công việc vẽ các mạch và tổng
hợp dạng giản đồ. Giản đồ thể hiện các thành phần được kết nối với nhau như thế
nào, đó chính là liên kết của một ASIC. Phần này của quá trình thiết kế đầu vào
được gọi là đầ
u vào giản đồ, hoặc là bắt giản đồ. Một giản đồ mạch mô tả một
ASIC giống như là một bản thiết kế cho một công trình xây dựng.
Giản đồ mạch là một bản vẽ, là một khuôn dạng đơn giản để chúng ta có thể
hiểu và sử dụng, nhưng các máy tính cần làm việc với các phiên bản ASCII hoặc
các tệp nhị phân mà chúng ta gọi là netlist (đi dây). Đầu ra của công cụ thi
ết kế giản
đồ chính là một file netlist mà có chứa mô tả của tất cả các thành phần trong một
bản thiết kế và các đường kết nối của chúng.
Không phải tất cả các thông tin thiết kế có thể chuyển thành giản đồ mạch
hoặc netlist, vì không phải tất cả các chức năng của một ASIC đều được mô tả qua
thông tin kết nối. Ví dụ, giả sử chúng ta sử dụng một ASIC lậ
p trình được cho một
vài chức năng logic ngẫu nhiên. Một phần của ASIC có thể được thiết kế bằng cách
sử dụng ngôn ngữ lập trình dạng văn bản. Trong trường hợp này thiết kế đầu vào
cũng gồm có cả viết mã nguồn. Vậy điều gì nếu một ASIC trong hệ thống của
chúng ta có chứa một PROM (Programmable Memory)? Phải chăng vi mã lệnh là

một phần của thiế
t kế đầu vào? Việc điều hành hệ thống của chúng ta chắc chắn là
phụ thuộc vào chương trình chuẩn của PROM. Vì vậy có lẽ mã lệnh PROM phải là
một phần của thiết kế đầu vào. Mặt khác không ai coi mã lệnh hệ điều hành đã được
nạp vào RAM trên một ASIC là một phần của thiết kế đầu vào. Rõ ràng là có nhiều
dạng thiết kế đầu vào khác nhau. Trong mỗi một trường h
ợp nó rất quan trọng để
bảo đảm là bạn hoàn thành chỉ định cho hệ thống - không chỉ là xây dựng cấu trúc
chính xác mà còn để bất kỳ ai cũng hiểu được là hệ thống làm việc như thế nào.
Thiết kế đầu vào là một trong những phần quan trọng nhất của công nghệ ASIC.
Cho đến hiện hay thì hầu hết các thiết kế đầu vào cho ASIC vẫn sử dụng
phương pháp giản đồ
đầu vào. Do ASIC ngày càng trở nên phức tạp hơn, các
phương pháp thiết kế đầu vào khác ngày càng trở nên phổ biến. Các phương pháp
Tiếp cận lập trình cho FPGA từ Spartan -3

5
thiết kế đầu vào đều có thể sử dụng phương pháp đồ hoạ, chẳng hạn là một giản đồ,
hoặc các tệp dạng text dưới dạng ngôn ngữ lập trình. Việc sử dụng ngôn ngữ mô tả
phần cứng HDL (Hardware Description Language) cho mục đích thiết kế đầu vào
cho phép chúng ta tạo ra các netlist trực tiếp bằng cách tổng hợp logic. Chúng ta sẽ
đề cập đến các phương pháp thiết kế đầ
u vào mức thấp cùng với các ưu điểm cũng
như nhược điểm của chúng trong mục 2.3.
Thiết kế đầu vào bao gồm các thành phần thiết kế sau:
- Thiết kế thư viện ASIC.
- Thiết kế thư viện các vi mạch ASIC lập trình được (Programmable ASIC).
- Thiết kế phần tử logic ASIC lập trình được.
- Thiết kế phần tử vào/ra ASIC lập trình được.
- Thiết kế phần tử kết nối ASIC lập trình được.

Phần mềm thiết kế ASIC lập trình được:
- Thiết kế logic mức thấp đầu vào (low-level design entry) sử dụng
VHDL: Bộ Quốc Phòng Mỹ (The U.S. Department of Defence - DoD) đã
hỗ trợ việc phát triển ngôn ngữ VHDL (VHSIC Hardware Description
Language) như một phần của chương trình quốc gia VHSIC (Very High-
Speed IC) vào đầu thập kỷ 80.
- T
ổng hợp logic (logic synthesis): Tổng hợp logic cung cấp liên kết giữa
một tệp HDL (VHDL hoặc Verilog) và một netlist tương tự như cách mà
một bộ biên dịch C cung cấp liên kết giữa mã lệnh chương trình C và ngôn
ngữ máy.
- Mô phỏng (simulation): Các kỹ sư đã quen với các hệ thống mẫu dùng để
kiểm tra sản phẩm thiết kế của họ, thương thường sử dụng một
đế thử
mạch mẫu, cho phép cắm các IC và các dây dẫn lên. Đế thử mạch mẫu có
thể thực hiện được khi có cho phép xây dựng hệ thống từ một vài IC TTL.
Tuy nhiên điều này là phi thực tế đối với thiết kế ASIC. Do vậy hầu hết các
kỹ sư thiết kế ASIC đều sử dụng phương pháp mô phỏng tương đương
thay cho mô hình đế thử mạch.
Tiếp cận lập trình cho FPGA từ Spartan -3

6
- Thử nghiệm mức logic (test): Các ASIC được thử nghiệm theo hai giai
đoạn trong quá trình sản xuất bằng cách sử dụng các phương pháp thử
nghiệm sản xuất.
1.1.3. Thiết kế vật lý (Physical Design)
Hình 1.1 biểu diễn một phần của sơ đồ thiết kế, đó là các bước thiết kế vật lý
đối với một ASIC.

Hình 1.1. Một phần của thiết kế ASIC gồm có phân chia hệ thống, lên sơ

đồ mặt bằng, sắp xếp các phần tử và các bước định tuyến đường kết nối.
Đầu tiên chúng ta áp dụng việc phân chia hệ thống để chia một hệ thống vi
điện tử thành các ASIC. Trong phần lên sơ đồ mặt bằng chúng ta sẽ đánh giá kích
thước và đặt các vị trí liên quan của các khối trong ASIC (đôi khi còn được gọi là
xếp chip - chip planning). Cùng thời điểm này chúng ta định vị khoảng trống cho
đường xung nhịp và nguồn và quyết định vị trí của cổng I/O. Việc sắp xếp định
nghĩa vị trí của các phần tử logic cùng với sự linh hoạt của các khối và khoảng
trống dành cho việc nối các phần tử logic. Việc sắp xếp đối với thiết kế ma trận
Tiếp cận lập trình cho FPGA từ Spartan -3

7
cổng (gate-array) hoặc phần tử tiêu chuẩn (standard-cell) bố trí mỗi một phần tử
logic vào vị trí trong cùng một hàng. Việc lên sơ đồ mặt bằng và sắp xếp phần tử
đôi khi có thể sử dụng công cụ CAD. Việc định tuyến thực hiện đường kết nối giữa
các phần tử logic. Việc định tuyến là một vấn đề rất khó và thường được phân chia
thành các bướ
c riêng biệt được gọi là định tuyến toàn cục và định tuyến cục bộ.
Định tuyến toàn cục xác định các kết nối giữa các phần tử logic đã đặt chỗ và các
khối sẽ đặt chỗ ở đâu. Còn định tuyến cục bộ là mức định tuyến cụ thể và chi tiết
đến từng phần tử.
1.1.4. Các công cụ CAD (CAD Tools)
Để phát triển một công cụ CAD cần thiết ph
ải chuyển đổi mỗi một bước trong
thiết kế vật lý thành các vấn đề có mục đích và định hướng rõ ràng. Mục đích là
những gì chúng ta cần phải thực hiện, còn định hướng là cách thực hiện mục đích.
Ví dụ trong các bước thiết kế vật lý ASIC thì các mục đích và định hướng như sau:
Phân chia hệ thống (System partitioning):
- Mục đích: Phân chia một hệ thống thành một số các ASIC.
- Định hướng: Tối thiểu hoá số lượng các kết nối ngoài giữa các ASIC. Giữ
cho mỗi ASIC nhỏ hơn kích thước cực đại.

Lên sơ đồ mặt bằng (Floorplanning):
- Mục đích: Tính toán kích thước của tất cả các khối và sắp xếp vị trí của
chúng.
- Định hướng: Bảo đảm sự liên kết cao giữa các khối về mặt tự nhiên càng
gần càng tốt.
Sắ
p xếp các phần tử (Placement):
- Mục đích: Sắp xếp việc kết nối giữa các vùng và vị trí của tất cả các phần
tử logic cùng với các khối linh hoạt.
- Định hướng: Tối thiểu hoá các vùng ASIC và mật độ kết nối.
Định tuyến toàn cục (Global routing):
- Mục đích: Quyết định vị trí của tất cả các kết nối.
- Định hướng: Tối thiể
u hoá toàn bộ vùng kết nối được sử dụng.
Tiếp cận lập trình cho FPGA từ Spartan -3

8
Định tuyến chi tiết (Detailed routing):
- Mục đích: Hoàn thành định tuyến tất cả các kết nối trên chip.
- Định hướng: Tối thiểu hoá tổng số độ dài kết nối được sử dụng.
1.2. Thiết kế ASIC đầu vào (design entry)
1.2.1. Thiết kế thư viện ASIC
Thư viện phần tử là một phần chính trong thiết kế ASIC. Đối với một ASIC
lập trình được thì một công ty chuyên về PLD, FPGA cung cấp cho chúng ta m
ột
thư viện các phần tử lôgic dưới hình thức một bộ kit thiết kế, thường là chúng ta
không có một sự lựa chọn nào và giá của nó nói chung khoảng vài nghìn đô la. Đối
với MGAs và CBICs chúng ta có ba lựa chọn : nhà cung cấp ASIC (công ty sẽ xây
dựng ASIC cho chúng ta) sẽ cung cấp một thư viện phần tử, hoặc chúng ta có thể
mua một thư viện phần tử từ một nhà cung cấp thư viện thứ ba, hoặc chúng ta có thể

tự xây dựng thư viện phần tử của chính mình.
Sự lựa chọn đầu tiên, đó là sử dụng một thư viện ASIC của nhà cung cấp, yêu
cầu chúng ta phải sử dụng một tập các công cụ thiết kế đã được cung cấp bởi nhà
cung cấp ASIC để đưa vào và mô phỏng thiết kế của chúng ta. Tức là chúng ta phải
mua các công cụ và thư viện phần tử. Một vài nhà cung cấp ASIC (
đặc biệt cho
MGAs) đã cung cấp các công cụ được phát triển theo yêu cầu.
Thư viện của nhà cung cấp ASIC thông thường là một thư viện ảo - các phần
tử chỉ là các khối trống rỗng, nhưng nó bao gồm đủ thông tin để bố trí sơ đồ mạch.
Sau khi chúng ta hoàn thành việc bố trí sơ đồ mạch, chúng ta đưa ra netlist đến nhà
cung cấp ASIC để họ bổ sung vào các phần tử ảo trước khi bắt đầu s
ản xuất chip
cho chúng ta.
Các lựa chọn thứ hai và ba yêu cầu chúng ta thực hiện một quyết định mua
bán. Nếu chúng ta hoàn thành việc thiết kế một ASIC sử dụng thư viện phần tử mà
chúng ta mua, thì chúng ta đã sở hữu việc chế tạo chip được sử dụng để sản xuất
ASIC của chính mình. Những thư viện phần tử như vậy thường đắt (có thể lên đến
vài trăm nghìn đ
ô la). Tuy nhiên điều này có nghĩa rằng việc mua một thư viện đắt
có thể rẻ về lâu dài nếu chúng ta sản xuất nhiều hơn là các giải pháp khác.
Tiếp cận lập trình cho FPGA từ Spartan -3

9
Lựa chọn thứ ba sẽ phát triển một thư viện phần tử theo yêu cầu. Nhiều công
ty máy tính và công ty điện tử lớn chọn phương án này. Hầu hết thư viện phần tử
thiết kế hiện nay vẫn tiếp tục được phát triển theo hình thức “yêu cầu” mặc dù thực
tế quá trình phát triển thư viện rất phức tạp và đắt.
Tuy nhiên để tạo ra mỗi phần t
ử trong một thư viện phần tử ASIC phải bao
gồm các yếu tố sau:

- Sơ đồ bố trí vật lý
- Mô hình hoạt động
- Mô hình Verilog/VHDL
- Mô hình tính toán thời gian chi tiết
- Chiến lược thử nghiệm, kiểm tra
- Sơ đồ mạch
- Biểu tượng của phần tử
- Mô hình tải
- Mô hình định tuyến
1.2.2. Các vi mạch ASIC lập trình được
Có hai loại ASIC lập trình được: Thiết bị logic lập trình được - PLD
(Programmable Logic Device
) và Ma trận cổng lập trình được theo hàng - FPGA
(Field-Programmable Gate Array). Việc phân biệt giữa hai loại ASIC này chưa
được chuẩn hoá. Sự khác nhau thực tế chỉ là sự kế thừa của chúng. PLDs bắt đầu từ
những thiết bị nhỏ dùng để thể thay thế một một phần của họ IC TTL, và chúng đã
được phát triển tương tự như người “anh em” FPGA của chúng, chỉ khác nhau về
công nghệ chế tạo. Trong mụ
c này, chúng ta sẽ coi lại cả hai loại ASICs đều là các
ASIC lập trình được.
Một ASIC lập trình được chính một chip mà chúng ta, như một người thiết kế
hệ thống, có thể tự lập trình. Chúng ta tiến hành thiết kế đầu vào và mô phỏng. Tiếp
theo, một phần mềm đặc biệt tạo ra một chuỗi các bit mô tả thêm mở rộng các kết
nối theo yêu cầu để thực hiện thiết kế của chúng ta - gọ
i là tệp cấu hình. Sau đó,
chúng ta kết nối máy tính tới chip và lập trình cho chip đó tuân theo tệp cấu hình.
Tiếp cận lập trình cho FPGA từ Spartan -3

10
Tuy nhiên công nghệ lập trình có thể có hoặc có thể không lâu dài. Do vậy

chúng ta không thể xoá bỏ những lập trình trong các ASIC lập trình được một lần.
Vì thế, ngày nay người ta thường sử dụng các loại PLD và FPGA có khả năng lập
trình lại được.
1.2.3. Các phần tử logic ASIC lập trình được
Tất cả các ASIC (hoặc PLD hoặc FPGAs) đều chứa một phần tử lôgic cơ bản.
Đó là ba kiểu phần tử lôgic cơ bản khác nhau: (1) Bộ dồ
n kênh cơ sở; (2) Bảng sự
thật cơ sở; (3) Phần tử logic ma trận lập trình được. Việc lựa chọn giữa các phần tử
đó phụ thuộc vào công nghệ lập trình.
1.2.4. Các phần tử vào/ra ASIC lập trình được
Tất cả ASICs lập trình được đều chứa một vài kiểu phần tử Vào/Ra (I/O) nào
đó. Các phần tử Vào/Ra đó điều khiển mức lôgic tín hiệu vào - ra của chip, nhận và
ki
ểm tra điều kiện của các đầu vào từ bên ngoài, cũng như bảo vệ tĩnh điện cho
chip.
Sau đây là các yêu cầu khác nhau của các loại phần tử Vào/Ra:
- Nguồn đầu ra DC: điều khiển trở kháng tải tại đầu ra DC hoặc tần số thấp
(thấp hơn 1 MHz). Ví dụ các loại trở kháng tải như LED, rơ le, mô-tơ loại nhỏ…
- Nguồn đầu ra AC: điều khi
ển dung kháng tải tốc độ cao (lớn hơn 1 MHz). Ví
dụ dung kháng tải các chip logic khác, bus dữ liệu hoặc bus địa chỉ, cáp ruy băng.
- Nguồn đầu vào DC: ví dụ các nguồn như chuyển mạch, cảm biến, hoặc các
chip logic khác.
- Nguồn đầu vào AC: ví dụ các nguồn như tín hiệu logic tốc độ cao (lớn hơn 1
MHz) từ các chip khác.
- Nguồn tạo xung nhịp đầu vào: ví dụ là đồng hồ xung nhịp hệ thống hoặc các
tín hiệu trên bus
đồng bộ.
- Nguồn cung cấp đầu vào: chúng ta cần cấp nguồn cho phần tử Vào/Ra và các
phần tử lôgic bên trong chip, mà điện áp không bị sụt hoặc nhiễu. Ngoài ra chúng ta

có thể cũng cần một nguồn cung cấp riêng biệt để lập trình cho chip.
Tiếp cận lập trình cho FPGA từ Spartan -3

11
Các tùy chọn đối với phần tử Vào/Ra là: sự khác nhau về mức độ của nguồn,
tính tương thích với TTL, các đầu vào trực tiếp hoặc phải được điều chỉnh, các đầu
ra trực tiếp hoặc phải được điều chỉnh, phối hợp trở kháng, bảo vệ quá điện áp, điều
khiển tốc độ tròn, và quét hạn chế.
1.2.5. Các phần tử ASIC liên kết n
ối lập trình được
Tất cả ASIC đều chứa các phần tử liên kết nối lập trình được. Cấu trúc và sự
phức tạp của các phần tử liên kết nối phần lớn được xác định thông qua công nghệ
lập trình và kiến trúc của các phần tử lôgic cơ bản. Chất liệu mà chúng ta dùng để
xây dựng các phần tử liên kết nối là hợp kim nhôm, loại hợp kim có thể chịu được
x
ấp xỉ 50 mW/1 đơn vị diện tích và dung kháng là 0.2 pFcm
-1
. Các loại ASIC lập
trình được đời đầu tiên được xây dựng sử dụng công nghệ hai lớp kim loại; còn các
ASIC hiện nay sử dụng ba lớp kim loại hoặc nhiều hơn.
1.2.6. Phần mềm thiết kế ASIC lập trình được
Có năm thành phần cấu thành một ASIC: (1) Công nghệ lập trình, (2) Phần tử
lôgic cơ bản, (3) Phần tử Vào/Ra, (4) Phần tử liên kết nối, và (5) Phần mềm thiết kế
cho phép chúng ta lập trình ASIC. Ph
ần mềm thiết kế thường là bị ràng buộc gần
gũi hơn với kiến trúc PLD và FPGA hơn các kiểu ASICs khác.
Đối với bất kỳ ASIC nào thì một nhà thiết kế cũng cần phần mềm thiết kế đầu
vào, một thư viện phần tử, và phần mềm thiết kế vật lý. Mỗi một nhà cung cấp
ASIC thường bán các bộ kit thiết kế bao gồm tất cả phần m
ềm và phần cứng mà

một người thiết kế cần đến. Rất nhiều bộ kit thiết kế này sử dụng phần mềm thiết kế
đầu vào của một công ty khác. Thường thì người thiết kế mua luôn phần mềm đó từ
nhà cung cấp ASIC. Phần mềm này được gọi là phần mềm OEM (Original
Equipment Manufacturer). Tất cả các nhà cung cấp ASIC đều có phần mềm thiết kế
vật lý củ
a riêng mình - vì các phần mềm thiết kế như vậy mới có thể phù hợp với
các giải thuật tương ứng với kiến trúc họ.
Giản đồ đầu vào không phải là phương pháp duy nhất thiết kế đầu vào cho các
ASIC lập trình được. Một số nhà thiết kế mô tả việc điều khiển lôgic và trạng thái
máy dưới dạng các phương trình lôgic và giản đồ trạng thái. Một giải pháp khác nữa
Tiếp cận lập trình cho FPGA từ Spartan -3

12
cho thiết kế ASIC là sử dụng một trong số các ngôn ngữ mô tả phần cứng (HDL)
dựa theo một số tiêu chuẩn. Có hai dạng ngôn ngữ thông dụng. Thứ nhất là các
phần mềm được phát triển từ việc lập trình cho các ASIC loại PLD. Đó là ABEL,
CUPL, và PALASM, đó là các ngôn ngữ đơn giản và dễ học. Các ngôn ngữ này rất
mạng trong việc mô tả các máy trạng thái và tổ hợp lôgic. Thứ hai là các ngôn ngữ
HDL bao gồm VHDL và Verilog, đó là các ngôn ngữ bậ
c cao hơn và sử dụng phức
tạp hơn nhưng chúng có khả năng mô tả hoàn chỉnh các ASICs và cả một hệ thống.
Sau khi hoàn thành thiết kế đầu vào và tạo ra một netlist, bước tiếp theo là việc
mô phỏng. Có hai kiểu mô phỏng thường được sử dụng cho thiết kế ASIC. Kiểu mô
phỏng đầu tiên là mô phỏng lôgic theo hoạt động, chức năng, và mô phỏng thời
gian. Công cụ này có thể phát hiên bất kỳ lỗi thiế
t kế nào. Người thiết kế cung cấp
các tín hiệu đầu vào để mô phỏng và kiểm tra đầu ra theo yêu cầu.
Kiểu mô phỏng thứ hai, là kiểu thường sử dụng nhất trong thiết kế ASIC, đó là
một công cụ phân tích - tính toán thời gian. Công cụ phân tích - tính toán thời gian
là một thiết bị mô phỏng tĩnh và bỏ qua việc cung cấp các tín hiệu đầu vào. Thay

vào đó công cụ phân tích - tính toán thời gian kiểm tra các đường giới hạn mà ở đó
làm h
ạn chế tốc độ hoạt động - các đường tín hiệu gây ra độ trễ lớn.
1.3. Thiết kế logic mức thấp đầu vào (low-level design entry)
1.3.1. Giản đồ đầu vào (Schematic Entry)
Giản đồ đầu vào là phương pháp phổ biến nhất của thiết kế đầu vào đối với
các ASIC. Các ngôn ngữ HDL đang thay thế cho các giản đồ đầu vào mức cổng
thông thường, nhưng các công cụ đồ hoạ mới dựa trên các giản
đồ đầu vào ngay nay
cũng đang được sử dụng để tạo ra một số lượng lớn các mã nguồn HDL.
Các giản đồ mạch được vẽ trên các sheet giản đồ. Kích thước tiêu chuẩn của
các sheet giản đồ tuân theo tiêu chuẩn ANSI A-E (chủ yếu dùng ở Mỹ) và ISO A4-
A0 (chủ yếu dùng ở châu Âu). Như trên hình 2.2 thể hiện 2 hình giống cái “cái mai”
và “cái xẻng”, đó là các biểu tượng đã được công nhận của các cổng AND, NAND,
OR và NOR.
Tiếp cận lập trình cho FPGA từ Spartan -3

13

Hình 1.2. IEEE khuyến nghị kích thước và các ký hiệu cho các cổng logic.
(a) Cổng NAND; (b) Cổng OR-độc nhất.

Hình 1.3. Các thuật ngữ được dùng trong các giản đồ mạch
Các công cụ vẽ giản đồ đầu vào cho thiết kế ASIC tương tự như thiết kế bo
mạch in PCB (Printed-Circuit Board). Trên một PCB thường chỉ có vài trăm thành
phần hoặc phần tử TTL hoặc các điện trở, tranzitor hoặc tụ điện, cuộn cảm Nếu
chúng ta coi một cổng logic trên một ASIC tương đương với một thành phầ
n trên
một PCB, thì một ASIC cỡ lớn chứa hàng trăm ngàn thành phần như vậy. Do vậy
để vẽ toàn bộ các phần tử của một ASIC là điều không tưởng.

1.3.1.1. Thiết kế theo thứ bậc (Hierarchical Design)
Việc thiết kế theo thứ bậc sẽ làm giảm kích thước và độ phức tạp của một giản
đồ đầu vào. Một giản đồ điện tử có thể
chứa các giản đồ con. Các giản đồ con cũng
có thể chứa các giản đồ nhỏ hơn nữa.
Việc lựa chọn để thiết kế theo thứ bậc là để có thể vẽ được tất cả các thành
phần của một ASIC trên một giản đồ cực lớn không có thứ bậc dạng thiết kế phẳng.
Đối với một ASIC đời mới có chứa hàng ngàn hoặc nhiề
u hơn nữa các cổng logic
Tiếp cận lập trình cho FPGA từ Spartan -3

14
bằng cách sử dụng thiết kế phẳng hoặc giản đồ phẳng là điều không thể thực hiện
được. Do vậy người ta phải phân cấp thiết kế cho các giản đồ thiết kế đầu vào.
1.3.1.2. Thư viện phần tử (The Cell Library)
Các thành phần trong một giản đồ ASIC thường được chọn từ một thư viện
các phần tử logic. Các phẩn tử của thư
viện cho tất cả các loại ASIC đôi khi còn
được biết đến như là các khối modul (module).
Hầu hết các công ty trong lĩnh vực ASIC đều cung cấp một thư viện các phần
tử với các cổng cơ bản được sử dụng trong giản đồ đầu vào.
Có hai vấn đề cần đặt ra đối với các thư viện giản đồ ASIC là không có qui
ước về đặt tên và không có tiêu chuẩn dành riêng cho hoạt động c
ủa phần tử.
Trong thư viện các phần tử thì các cổng logic là các phần tử cơ bản, chẳng hạn
như cổng NAND. Trong một thiết kế phân cấp ASIC thì một phần tử có thể là một
cổng NAND, một mạch flip-flop, một bộ nhân hoặc thậm chí có thể là một bộ vi xử
lý. Chính vì vậy mà chúng ta thấy rằng các thuật ngữ về phần tử đều được chấp
nhận m
ột cách chung chung trong một giản đồ đầu vào nhiều khi gây ra sự lầm lẫn.

Thuật ngữ phần tử được dùng để biểu diễn cả các phần tử cơ bản và cả các giản đồ
con. Mặc dù chúng có khác nhau trên thực tế như chúng vẫn có mối liên quan gần
gũi, và được chấp nhận dùng chung.
1.3.1.3. Các tên gọi (Names)
Mỗi một phần tử, có thể là phần tử cơ bản hoặ
c không phải, khi được đặt vào
một giản đồ thiết kế ASIC đều phải có tên. Mỗi phần tử khi sử dụng đều dùng theo
một tên duy nhất và không được trùng lặp trong giản đồ đầu vào mặc dù chúng có
thể là bản sao chép của nhau từ cùng một thư viện.
1.3.1.4. Các biểu tượng và ký hiệu trên giản đồ (Schematic Icons and
Symbols)
Hầu hết các chương trình vẽ giản đồ đầu vào đều cho phép người thiết k
ế sử
dụng các biểu tượng đặc biệt hoặc biểu tượng tự tạo. Ngoài ra công cụ vẽ giản đồ
đầu vào cũng thường tự động tạo ra biểu tượng cho các giản đồ con để dùng trong
các giản đồ mức cao hơn. Đây được gọi là các biểu tượng gốc hoặc ký hiệu gốc.
Tiếp cận lập trình cho FPGA từ Spartan -3

15
Các đường kết nối ngoài của giản đồ con được tự động gắn thêm biểu tượng,
thường thường là một hình chữ nhật. Ví dụ về các biểu tượng và ký hiệu đối với
một phần tử có tên là DLAT được cho trong hình 2.4.

Hình 1.4. Một phần tử và các giản đồ con của nó. (a) Một thư viện giản đồ
chứa các biểu tượng dành cho các phần tử cơ bản; (b) Một giản đồ con cho một
phần tử DLAT, chứa tên của các phần tử cơ bản; (c) Biểu tượng cho phần tử
DLAT.
1.3.1.5. Các đường nối (Nets)
Các giản đồ trên hình 2.4 có chứa cả các đường nối cục bộ và đường nối bên
ngoài. Như trên hình 2.4.b đường nối cục bộ là n1, nối giữa một phần tử AND có

tên là and1 và một phần tử OR có tên là or1. Còn đường nối ngoài là đường nối
giữa một phần tử với một đường nối khác, trên hình 2.4.b là n3.
Để thuận tiện cho việc đặt tên các đường kết nối trong một giản đồ phân cấp
người ta sử dụng tên tiền tố của phần tử để đặt tên cho đường nố
i. Các ký tự đặc
biệt (như ‘;’ ‘/’ ‘$’ ‘#’ ) không được dùng để đặt tên cho đường nối. Tuy nhiên
việc đặt tên thường là được thực hiện tự động thông qua công cụ vẽ giản đồ đầu
vào. Trong các ngôn ngữ HDL (VHDL và Verilog) có cách đặt tên cho đường nối
rất chính xác và chặt chẽ đã được tiêu chuẩn trong các kiến trúc phân cấp.
1.3.1.6. Các đầu nối (Connections)
Các phần tử có các đầu cuối (terminal) là các đầu vào hoặc đầu ra của phần t

đó. Các đầu cuối (terminal) còn được biết đến dưới các tên như các chân (pin), các
đầu nối (connection), hoặc là các đầu tín hiệu (signal). Thuật ngữ chân (pin) được
sử dụng rất rộng rãi, tuy nhiên ở đây chúng ta chủ yếu sử dụng thuật ngữ đầu cuối
để tránh nhầm với thuật ngữ chân (pin) trong một ASIC đã đóng gói. Ngoài ra thuật
Tiếp cận lập trình cho FPGA từ Spartan -3

16
ngữ chân (pin) còn thường được dùng trong giản đồ đầu vào và chương trình định
tuyến đường nối chủ yếu cho các thiết kế PCB.

Hình 1.5. Ví dụ về việc sử dụng bus để đơn giản hoá một giản đồ. (a) Các
đầu nối A, B, C; (b) Các đầu nối A, B, C và DQ0 - DQ7
1.3.2. Các ngôn ngữ thiết kế mức thấp (Low-level Design Languages)
Trong trường hợp thiết kế ASIC thì ngôn ngữ này rất quan trọng. Có hai vấn
cần đề cập đến là: việc thay đổi một giản đồ rất khó và vẫn chưa có tiêu chuẩn đối
với các ký hiệu và thông tin giản đồ dùng để lư
u trữ trong một netlist. Điều này có
nghĩa là chúng ta cần phải chuyển đổi từ thiết kế mức thấp mà bạn đã sử dụng thiết

kế PLD thành một hoặc nhiều thiết kế ASIC tương ứng. Thông thường thì chúng ta
nhập nhiều PLD thành một PLD đơn lớn hơn chính là ASIC. Đó chính là ngôn ngữ
thiết kế mức thấp để chuyển đổi và đọc hiểu từ các PLD sang khuôn dạng mà bạn
có thể sử dụng được trong các hệ thống thiết kế ASIC khác.
Một số ngôn ngữ như sau:
- Ngôn ngữ ABEL: ABEL là một ngôn ngữ lập trình PLD từ các dữ liệu I/O
(Data I/O).
- Ngôn ngữ CUPL: CUPL là một ngôn ngữ thiết kế PLD từ các thiết bị logic
(Logical Devices).
Định dạng EDIF:
Đây là một tiêu chuẩn dùng để trao đổi thông tin giữa các công cụ EDA với
nhau đó là định dạng trao đổi lẫn nhau trong thiết k
ế điện tử - Electronic Design
Interchange Format - EDIF. Phiên bản hay được sử dụng nhất là EDIF 2 0 0 do
EIA (Electronic Industries Association - Hiệp hội công nghiệp điện tử) phát hành có
Tiếp cận lập trình cho FPGA từ Spartan -3

17
tên là Tiêu chuẩn ANSI/EIA 548-1988 - còn được gọi là EDIF 1988. Hiện nay đã
có phiên bản 3.0.0 và 4.0.0. Hầu hết các công ty trong lĩnh vực EDA đều hỗ trợ
chuẩn EDIF. Các công ty chuyên về ASIC - FPGA là Altera và Actel đều sử dụng
EDIF như là khuôn dạng netlist của họ và Xilinx cũng đã thông báo họ cũng đã đề
cập đến việc chuyển dần khuôn dạng XNF của họ sang khuôn dạng EDIF.
1.4. Tổng hợp logic (Logic Synthesis)
Tổng hợp logic cung cấp một liên kết giữa HDL và netlist tương tự nh
ư cách
một trình biên dịch C cung cấp liên kết giữa mã nguồn C và ngôn ngữ máy. Tuy
nhiên, việc so sánh song song như trên cung chỉ mang tính tương đối. C được phát
triển để sử dụng với các trình biên dịch, còn HDL thì không được phát triển để sử
dụng với các công cụ tổng hợp logic. Verilog thì được thiết kế như một ngôn ngữ

mô phỏng còn VHDL thì được thiết kế như một ngôn ngữ mô tả và dữ liệu. Cả
Verilog và VHDL đều đượ
c phát triển từ đầu thập niên 80, trước khi nó được giới
thiệu như một phần mềm thương mại dùng để tổng hợp logic. Do các ngôn ngữ
HDL đó hiện nay được sử dụng vào mục đích không phải như đúng ý đồ ban đầu,
nên hiện trạng của nó trong tổng hợp logic gần giống như các bộ biên dịch ngôn
ngữ máy tính. Do vậy tổng hợp logic buộc người thiết kế ph
ải sử dụng một tập con
của cả Verilog và VHDL. Hiện nay, VHDL được sử dụng rộng rãi và chủ yếu ở
Châu Âu, còn Verilog thì được dùng chính ở Mỹ và Nhật. Việc này làm cho tổng
hợp logic là một vấn đề rất khó. Hiện trạng của các phần mềm tổng hợp giống như
việc một người học ngoại ngữ nhưng năm năm sau mới sử dụng đến.
Khi nói
đến công cụ tổng hợp logic sử dụng HDL thì người ta thường nghĩ nó
liên quan đến phần cứng hơn là việc tổng hợp logic sẽ thực hiện trên netlist. Theo
đánh giá của các chuyên gia “ASIC học” thì phải 5 năm nữa chúng ta mới hoàn
thiện được quá trình tổng hợp logic như mong muốn.
Người thiết kế sử dụng thiết kế đầu vào dạng text hoặc đồ hoạ để tạo ra mô
hình hoạt động HDL không bao gồ
m bất kỳ tham chiếu nào đến các phần tử logic.
Các sơ đồ trạng thái, các mô tả đường dẫn dữ liệu đồ hoạ, các bảng sự thật, các mẫu
RAM/ROM, và các giản đồ mức cổng (gate-level) có thể sử dụng cùng với một mô
Tiếp cận lập trình cho FPGA từ Spartan -3

18
tả HDL. Mỗi khi hoàn thành một mô hình hoạt động HDL, hai thành phần yêu cầu
phải xử lý là: một bộ tổng hợp logic (bao gồm phần mềm và tài liệu đi kèm) và một
thư viện phần tử (bao gồm các phần tử logic chẳng hạn như cổng NAND, AND )
được gọi là thư viện nguồn. Hầu hết các công ty phần mềm tổng hợp chỉ cung cấp
phần mềm. Còn hầu hết các nhà cung cấp ASIC thì chỉ

cung cấp các thư viện phần
tử.
Mô hình hoạt động được mô phỏng để kiểm tra việc thiết kế theo tham số kỹ
thuật còn sau đó bộ tổng hợp logic sẽ được sử dụng để tạo ra một netlist, một mô
hình cấu trúc chỉ chứa tham chiếu đến các phần tử logic. Hiện nay không có khuôn
dạng tiêu chuẩn cho các netlist mà tổng hợp logic tạo ra, nhưng phổ biến nhất hiện
nay ng
ười ta vẫn sử dụng khuôn dạng EDIF. Một vài công cụ tổng hợp logic cũng
có thể tạo ra cấu trúc HDL (như Verilog và VHDL). Sau khi tổng hợp logic bản
thiết kế được thực hiện mô phỏng lại để so sánh với việc mô phỏng hoạt động trước
đó. Việc xếp lớp đối với bất kỳ ASIC nào đều có thể được tạo ra từ mô hình cấu
trúc sinh ra thông qua quá trình tổng hợp logic.
1.4.1. Ví dụ về
tổng hợp logic
Trước hết chúng ta hãy tìm hiểu về một ví dụ của tổng hợp logic. Ở đây các
phần tử logic đều sử dụng công nghệ VLSI 1.0 m m. ASIC đầu tiên được thiết kế
bằng tay sử dụng các giản đồ đầu vào và một sổ tay dữ liệu. ASIC thứ hai sử dụng
Verilog cho thiết kế đầu vào và một bộ tổng hợp logic. Bảng 2.2 so sánh kết quả của
hai phươ
ng pháp trên. Việc tổng hợp ASIC theo phương pháp thứ hai cho kết quả là
ASIC nhỏ hơn 16% và tốc độ nhanh hơn 13% so với cách tổng hợp bằng tay.
Chúng ta cùng tìm hiểu tại sao lại có vấn đề trên. Hình 2.6 biểu diễn giản đồ
một bộ so sánh và dồn kênh được thiết kế bằng tay. Còn bên phải của hình 2.6 là mã
nguồn cũng của bộ so sánh và dồn kênh có cùng chức năng. Việc so sánh hai kết
quả cho trong bảng 2.3 đã chỉ ra lý do củ
a phương pháp thứ hai cho sản phẩm có
kích thước nhỏ hơn, tốc độ nhanh hơn thậm chí còn sử dụng nhiều phần tử hơn.
Tiếp cận lập trình cho FPGA từ Spartan -3

19

Bảng1.2. So sánh thiết kế tổng hợp logic ASIC bằng tay và tổng hợp logic
sử dụng Verilog theo lý thuyết

Trễ đường
dẫn/ns (
1)
Số các phần tử logic
tiêu chuẩn
Số tranzitor
tiêu chuẩn
Kích thước/
mils 2 (2)
Thiết kế bằng tay 41.6 1,359 16,545 21,877
Thiết kế tổng hợp
logic
36.3 1,493 11,946 18,322
Bảng 1.3. So sánh thiết kế tổng hợp logic ASIC bằng tay và tổng hợp logic
sử dụng Verilog trên bộ so sánh và dồn kênh trong thực tế

Trễ đường
dẫn/ns (
1)
Số các phần tử logic
tiêu chuẩn
Số tranzitor
tiêu chuẩn
Kích thước/
mils 2 (2)
Thiết kế bằng tay 4.3 12 116 68.88
Thiết kế tổng hợp logic 2.9 15 66 46.43



// Mã nguồn chương trình
// comp_mux.v
module comp_mux(a, b, outp);
input [2:0] a, b;
output [2:0] outp;
function [2:0] compare;
input [2:0] ina, inb;
begin
if (ina <= inb) compare = ina;
else compare = inb;
end
endfunction
assign outp = compare(a, b);
endmodule
Hình 1.6. Thiết kế đầu vào bằng tay và sử dụng Verilog
Tiếp cận lập trình cho FPGA từ Spartan -3

20
1.4.2. VHDL và tổng hợp logic
Hầu hết các bộ tổng hợp logic bắt buộc chúng ta phải tuân theo một tập các
qui tắc khi chúng ta sử dụng một hệ thống logic để bảo đảm là chúng ta tổng hợp
tuân theo đúng như trong mô tả hoạt động của nó. Tập các qui tắc để sử dụng theo
tiêu chuẩn VHDL IEEE hệ thống 9 giá trị.
- Chúng ta có thể sử dụng các giá trị logic tương ứng với các trạng thái ‘1’,
‘H’, ‘0’ và ‘L’ trong b
ất kỳ cách nào.
- Một vài công cụ tổng hợp không chấp nhận trạng thái logic ‘U’ khởi động.
- Chúng ta có thể sử dụng các trạng thái logic ‘Z’, ‘X’, ‘W’ và ‘-’ trong tín

hiệu và các phép gán biến theo bất kỳ cách nào. ‘Z’ được tổng hợp thành 3
trạng thái logic.
- Các trạng thái ‘X’, ‘W’ và ‘-’ được xử lý như các giá trị không biết hoặc
không quan tâm.
Các giá trị ‘Z’, ‘X’, ‘W’ và có thể sử dụng trong các mệnh đề điều kiện chẳng
hạn như so sánh trong các lệnh if hoặ
c case. Tuy nhiên một vài công cụ tổng hợp sẽ
bỏ qua chúng và chỉ tuân theo quanh các bit ‘1’ và ‘0’. Do vậy, một thiết kế được
tổng hợp có thể hoạt động khác với khi mô phỏng nếu một tác nhân kích thích sử
dụng ‘Z’, ‘X’, ‘W’ hoặc ‘-’. Các đóng gói tổng hợp IEEE cung cấp một hàm dành
riêng cho việc so sánh là STD_MATCH.
Trong VHDL có các mô hình tổng hợp như sau:
- Khởi động và khởi động lại (Initialization and Reset)
- Tổ hợp Tổng hợp logic trong VHDL (Combinational Logic Synthesis in
VHDL)
- Các b
ộ dồn kênh trong VHDL (Multiplexers in VHDL)
- Các bộ giải mã trong VHDL (Decoders in VHDL)
- Các bộ công trong VHDL (Adders in VHDL)
- Logic tuần tự trong VHDL (Sequential Logic in VHDL)
- Thuyết minh trong VHDL (Instantiation in VHDL)
Tiếp cận lập trình cho FPGA từ Spartan -3

21
- Các thanh ghi dịch và tạo xung nhịp trong VHDL (Shift Registers and
Clocking in VHDL)
- Các bộ cộng và hàm thuật toán (Adders and Arithmetic Functions)
- Các bộ cộng/trừ (Adder/Subtracter)
1.4.3. Tổng hợp bộ nhớ
Có nhiều phương pháp tổng hợp bộ nhớ:

- Sử dụng thành phần logic ngẫu nhiên flip-flop hoặc bộ chốt dữ liệu.
- Sử dụng các tệp thanh ghi trong datapath.
- Sử dụng các thành phần RAM tiêu chuẩn.
- Sử dụng các bộ biên d
ịch RAM.
Phương pháp đầu tiên sử dụng các vector lớn hoặc các ma trận trong mã lệnh
HDL. Bộ tổng hợp sẽ ánh xạ các phần tử đó tới ma trận của các flip-flop hoặc các
bộ chốt dữ liệu. Phương pháp này độc lập với bất kỳ phần mềm nào hoặc kiểu ASIC
nào và dễ sử dụng nhất nhưng phạm vi ứng dụng không hiệu quả. Một flip-flop
chiếm diện tích s
ử dụng 10 đến 20 lần so với một cell RAM tĩnh có 6 tranzitor.
Phương pháp thứ hai sử dụng tổng hợp trực tiếp để tổng hợp bộ nhớ thành các
thành phần datapath. Phương pháp này hiệu quả hơn phương pháp trước, tuy nhiên
bị phụ thuộc vào phần mềm và công nghệ ASIC mà chúng ta sử dụng.
Phương pháp thứ ba sử dụng các thành phần tiêu chuẩn được các nhà sản xuất
ASIC cung cấp kèm. Phương pháp này rất hiệu qu
ả nhưng phụ thuộc vào công nghệ
của từng hãng sản xuất.
Phương pháp cuối cùng, đó là sử dụng bộ biên dịch RAM, đây là phương pháp
hiệu quả nhất. Nó phụ thuộc vào khả năng của trình biên dịch cùng với công cụ tổng
hợp.
1.5. Mô phỏng (Simulation)
Thông thường chúng ta thường sử dụng các hệ thống mẫu để kiểm tra các thiết
kế của mình, mà thường là các đế thử (
bread-board), sau đó lắp các IC và đấu dây
trên các đế thử đó. Tuy nhiên cách làm này chỉ áp dụng đối với các mạch nhỏ có vài
phần tử dạng TTL. Trong thực tế, để thực hiện việc này đối với một ASIC thì sử
Tiếp cận lập trình cho FPGA từ Spartan -3

22

dụng đế thử là điều không thể thực hiện được. Do vậy, đối với thiết kế ASIC, chúng
ta phải dùng đến các phương pháp mô phỏng.
1.5.1. Phân loại mô phỏng (Type of Simulation)
Có thể phân chia mô phỏng theo loại hoặc theo phương pháp:
- Mô phỏng hoạt động (Behavioral simulation)
- Mô phỏng chức năng (Functional simulation)
- Phân tích thời gian tĩnh (Static timing analysis)
- Mô phỏng mức cổng/logic (Gate-level/Logic simulation)
- Mô phỏng m
ức chuyển mạch (Switch-level simulation)
- Mô phỏng mức tranzitor hoặc mức mạch (Transistor-level or Circuit-level
simulation)
Trên đây là thứ tự các mức độ mô phỏng từ cao xuống thấp, các mức này có
độ chính xác tăng dần đồng thời độ phức tạp và thời gian cũng tăng theo.
Có nhiều cách để tạo ra một mô hình mô phỏng ảo cho một hệ thống. Phương
pháp thường dùng nhất là mô hình hoá các mô-đul lớn của hệ th
ống thành một khối
(giống như một hôp đen - black box) chỉ có các đầu vào và ra. Đây chính là mô
phỏng hoạt động (Behavioral simulation), chủ yếu là sử dụng ngôn ngữ VHDL và
Verilog.
Mô phỏng chức năng (Functional simulation) sẽ bỏ qua thời gian hoạt động và
các trễ trong từng mô-đul mà thiết lập mức trễ với các giá trị cố định (ví dụ là 1ns
chẳng hạn). Sau khi thực hiện mô phỏng hoạt độ
ng và chức năng hoàn thành, cho
kết quả tốt thì người mới kiểm tra thời gian hoạt động của từng khối.
Tại thời điểm này, hệ thống được phân chia thành các ASIC và việc mô phỏng
thời gian được thực hiện trên từng ASIC độc lập. Một trong các phương pháp mô
phỏng thời gian là sử dụng phương pháp phân tích thời gian tĩnh (Static timing
analysis) trong trường hợp hoạt động tĩnh, sau đó tính toán thời gian trễ
cho từng

phần tử. Phương pháp này được gọi là phân tích thời gian tĩnh (Static timing
analysis) vì nó không đòi hỏi phải tạo ra một tập các phép thử nghiệm đối với các
ASIC lớn.
Tiếp cận lập trình cho FPGA từ Spartan -3

23
Tiếp theo là mô phỏng mức cổng/logic (Gate-level/Logic simulation) có thể
cũng được dùng để kiểm tra thời gian hoạt động của một ASIC. Trong mô phỏng
mức cổng/logic một cổng logic hoặc phần từ logic (NAND, NOR hoặc tương
đương) được kiểm tra hoạt động giống như mô hình hộp đen theo các chức năng
nhưng các giá trị tín hiệu đầu vào thay đổi được.
Mô phỏng mức chuyển mạch (Switch-level simulation) cung cấp m
ức độ chính
xác về thời gian cao hơn mô phỏng mức cổng/logic nhưng không có khả năng sử
dụng trễ của các phần tử logic làm tham số cho việc mô phỏng.
Chính xác nhất và cũng phức tạp nhất, mất nhiều thời gian nhất là mô phỏng
mức tranzitor hoặc mức mạch (Transistor-level or Circuit-level simulation).
Phương pháp này yêu cầu các mô hình tranzitor cụ thể, mô tả điện áp phi tuyến và
các tham số dòng cung cấp của chúng. Mỗi phươ
ng pháp thường đi kèm với một
công cụ phần mềm khác nhau. Tuy nhiên có thể kết hợp một số phương pháp mô
phỏng vào việc mô phỏng một ASIC.
Tiếp theo chúng ta sẽ giới thiệu về một số yêu cầu về hệ thống logic và mô
hình ứng dụng trong quá trình mô phỏng.
1.5.2. Lựa chọn các hệ thống logic (Logic Systems)
Như chúng ta đã biết trong thực tế, các tín hiệu số là các mức điện áp (hoặc
dòng) tươ
ng tự mà thay đổi liên tục như sự thay đổi của chúng. Việc mô phỏng số
giả sử là các tín hiệu số chỉ là một tập các giá trị logic (hoặc là các trạng thái logic)
từ một hệ thống logic. Do vậy khi lựa chọn một hệ thống logic để mô phỏng rất

quan trọng. Nếu quá nhiều giá trị logic thì sẽ làm cho việc mô phỏng trở nên phức
tạp và tốc độ bị chậm lại. N
ếu ít giá trị quá thì sẽ làm giảm độ chính xác của mô
phỏng không phản ánh đúng hoạt động của phần cứng.
Ví dụ về một hệ thống 4 giá trị logic cho trong bảng 1.4.
Tiếp cận lập trình cho FPGA từ Spartan -3

24



Bảng 1.4. Hệ thống 4 mức logic
Trạng thái logic Mức logic Giá trị logic
0 Không (zero) Không (zero)
1 Một (one) Một (one)
X Không (zero) hoặc Một (one) Không rõ
Z Không (zero), Một (one) hoặc không có gì Trở kháng cao
1.5.3. Mô phỏng logic hoạt động như thế nào
Hầu hết các loại mô phỏng số đều sử dụng mô phỏng theo hoạt động sự kiện
(event-driven). Khi một nút mạch thay đổi giá trị theo thời gian, còn giá trị mới là
một tập được biết đến dứi dạng các sự kiện. Sự kiện được lập lịch bằng cách đưa
chúng vào một hàng đợi sự kiện hoặc danh sách sự ki
ện. Khi thời gian được chỉ
định đến, giá trị logic của nút được thay đổi. Sự thay đổi tác động đến các phần tử
logic ở nút đó như một giá trị đầu vào. Tất cả các phần tử logic bị tác động phải
được đánh giá, việc này để có thể thêm các sự kiện vào danh sách sự kiện. Mô
phỏng bảo đảm việc kiểm tra thời gian hiện thời, bước thời gian và danh sách sự
ki
ện dùng để giữ các sự kiện sắp xảy ra. Đối với mỗi một nút mạch thì mô phỏng
bảo đảm một bản ghi trạng thái logic và độ lớn của nguồn hoặc các nguồn cấp cho

nút. Khi một nút thay đổi trạng thái logic thì sẽ gây ra một sự kiện.
1.5.4. Các mô hình phần tử (Cell models)
Có nhiều loại mô hình phần tử khác nhau, đó là:
- Mô hình nguyên thuỷ, là mô hình sinh ra thông qua thư viện ASIC và mô
tả chức năng và đặc đ
iểm của mỗi một phần tử logic (NAND, D flip-flop,
…) sử dụng các hàm nguyên thuỷ.
- Mô hình VHDL và Verilog sinh ra thông qua thư viện ASIC từ các mô
hình nguyên thuỷ.
Tiếp cận lập trình cho FPGA từ Spartan -3

25
- Các mô hình độc quyền sinh ra thông qua các thư viện dùng để mô tả các
phần tử logic nhỏ hoặc các chức năng lớn như các bộ vi xử lý.
1.5.5. Các mô hình trễ (Delay models)
Mô hình trễ phần tử được dùng để tính toán khoảng trễ của phần tử logic.
Chúng ta sử dụng thuật ngữ mô hình thời gian (timing model) để mô tả trễ bên
ngoài các phần tử logic và mô hình trễ (Delay models) để mô tả trễ bên trong mỗi
phần tử logic. Các thu
ật ngữ này hay được sử dụng lẫn lộn và không được chuẩn
hoá, thực tế chúng có một số điểm khác nhau như sau:
- Trễ từ chân đến chân (pin-to-pin delay) là một khoảng trễ giữa một chân
đầu vào và một chân đầu ra của một phần tử logic.
- Trễ chân (pin delay) là khoảng trễ dồn vào một chân cố định của một phần
tử logic (thường là một đầ
u vào).
- Trễ đường kết nối (net dalay) hoặc trễ đường dây (wire delay) là khoảng
trễ bên ngoài của một phần tử logic.
















×