Họ đã đề ra một số phương pháp luận để thiết kế mạch BĐB và đã thiết kế thành công một số chíp BĐB như Amulet của đại học Manchester, MiniMIPS của đại học Caltech, TITAC-2 của đại học To
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
Cán bộ hướng dẫn khoa học: TS Đinh Đức Anh Vũ
Cán bộ chấm nhận xét 1: TS Trần Ngọc Thịnh
Cán bộ chấm nhận xét 2: PGS TS Nguyễn Hữu Phương
Luận văn thạc sĩ được bảo vệ tại
HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ
TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày 18 tháng 8 năm 2009
Trang 3TRƯỜNG ĐẠI HỌC BÁCH KHOA Độc Lập - Tự Do - Hạnh Phúc
Tp HCM, ngày 03 tháng 7 năm 2009
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ và tên học viên: Phạm Quốc Cường Giới tính : Nam / Nữ Ngày, tháng, năm sinh: 28/03/1985 Nơi sinh : Tiền Giang Chuyên ngành: Khoa học Máy tính Khoá (Năm trúng tuyển) : 2007
1- TÊN ĐỀ TÀI: Nghiên cứu và xây dựng phương pháp hiện thực vi mạch bất đồng
bộ trên FPGA
2- NHIỆM VỤ LUẬN VĂN
- Nghiên cứu các phương pháp hiện thực vi mạch bất đồng bộ trên FPGA đã có
- Nghiên cứu và xây dựng phương pháp hiện thực vi mạch bất đồng bộ phù hợp với các FPGA hiện có ở Việt Nam
- Xây dựng công cụ hỗ trợ hiện thực
- Kiểm thử phương pháp và công cụ
3- NGÀY GIAO NHIỆM VỤ: 02/2009
4- NGÀY HOÀN THÀNH NHIỆM VỤ: 07/2009
5- HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN (Ghi đầy đủ học hàm, học vị ): T.S.Đinh Đức Anh Vũ
Nội dung và đề cương Luận văn thạc sĩ đã được Hội Đồng Chuyên Ngành thông qua
(Họ tên và chữ ký)
Trang 4LỜI CAM ĐOAN
Tôi cam đoan rằng, ngoại trừ các kết quả tham khảo từ các công trình khác như đã
ghi rõ trong luận văn, các công việc trình bày trong luận văn này là do chính tôi thực hiện và
chưa có phần nội dung nào của luận văn này được nộp để lấy một bằng cấp ở trường này hoặc
trường khác
Ngày 3 tháng 7 năm 2008
Phạm Quốc Cường
Trang 5LỜI CẢM ƠN
Tôi xin gửi lời cảm ơn chân thành nhất đến TS Đinh Đức Anh Vũ, người Thầy đã tận tình hướng dẫn tôi trong suốt quá trình thực hiện luận văn cao học và tạo mọi điều kiện để tôi có thể hoàn thành luận văn này
Để hoàn thành luận văn này, tôi cũng đã nhận được sự giúp đỡ của các thầy cô anh chị em bạn bè trong khoa Khoa học và Kỹ thuật Máy tính nói chung, bộ môn Kỹ thuật Máy tính nói riêng Tôi xin chân thành cảm ơn
Và tôi xin gửi lời cảm ơn sâu sắc đến gia đình, những người thân đã động viên và tạo điều kiện tốt nhất để tôi có thể tiếp tục theo đuổi việc học tập và nghiên cứu
Trang 6TÓM TẮT LUẬN VĂN
Ngày nay thiết kế bất đồng bộ ngày càng được đầu tư và phát triển nhờ vào các ưu thế của nó so với thiết kế đồng bộ như loại bỏ các vấn đề lệch xung đồng hồ và ít tiêu hao năng lượng Qua các nghiên cứu hiện tại trên thế giới, có nhiều phương pháp luận đã được giới thiệu để thiết kế một cách hiệu quả các hệ thống bất đồng bộ lớn Mặc dù các mạch bất đồng bộ có thể được hiện thực bằng công nghệ VLSI thủ công (Full-custom VLSI) nhưng thời gian chế tạo của công nghệ này quá dài để có thể thực hiện việc làm mẫu cho các thiết kế
Trong khi đó, FPGA đang chiếm ưu thế trong việc làm phương tiện hiệu quả để làm mẫu nhanh chóng và cung cấp khả năng thử nghiệm cho các mạch số với chi phí kỹ thuật thấp Tuy nhiên, FPGA hiện tại lại không hỗ trợ các mạch bất đồng bộ vì thiếu những phần tử
cơ bản đóng vai trò quan trọng trong mạch bất đồng bộ ví dụ như các cổng Muller Trong nghiên cứu này, chúng tôi đề nghị những phương pháp để có thể làm mẫu các mạch bất đồng
bộ cũng như các hệ thống kết hợp đồng bộ và bất đồng bộ trên các FPGA dạng LUT hiện tại Các kỹ thuật phát triển trong nghiên cứu này dựa trên việc xây dựng các phần tử đóng vai trò quan trọng trong mạch bất đồng bộ Các ràng buộc về thời gian và/hoặc ràng buộc về vị trí được sinh ra tự động để ánh xạ các phần tử chuyên biệt cho mạch bất đồng bộ vào các khối luận lý khả cấu hình của FPGA thỏa mãn các ràng buộc của mạch bất đồng bộ Các chip FPGA dạng LUT của các nhà cung cấp như Altera, Xilinx,… được dùng để hiện thực các mạch bất đồng bộ theo các phương pháp đề nghị trong nghiên cứu này Cuối cùng, chúng tôi giới thiệu một số mạch bất đồng bộ được hiện thực với họ Xilinx FPGA Spartan-3
Trang 7ABSTRACT
Nowadays, asynchronous design is more and more predominante over synchronous design because of its advanges such as no clock skew, lower power, etc As evidenced by many articles, methodologies have developed to efficiently design large asynchronous systems While asynchronous circuits can be built in custom VLSI chips, their fabricated-time
is too long to allow rapid prototyping
FPGA device is a dominant implementation medium for digital circuits Unfortunately, they do not support asynchronous circuits because of the lack of asynchronous circuit elements such as Muller gates, etc In this paper, new efficient approaches are proposed to prototype asynchronous or mixed synchronous/asynchronous circuits on Look-Up Table-based (LUT) FPGA rapidly The developed techniques are based on building of elements which play an important role in asynchronous circuits The hazard-free elements are predefined in libraries in HDL and EDIF format Timing and/or area constraints for place&route tool are automatically generated to map the asynchronous elements on suitable FPGA’s logic blocks Several FPGA devices such as Altera, Xilinx and Actel could be used
as target for the implementation For the purpose of demonstration, some asynchronous circuits are implemented with Xilinx Spartan 3 FPGA family
Trang 8MỤC LỤC
LỜI CAM ĐOAN i
LỜI CẢM ƠN ii
TÓM TẮT LUẬN VĂN iii
ABSTRACT iv
MỤC LỤC v
DANH MỤC HÌNH viii
DANH MỤC BẢNG xi
Chương 1 GIỚI THIỆU ĐỀ TÀI 1
1.1 Lý do thực hiện đề tài 1
1.2 Mục tiêu và giới hạn của đề tài 2
1.3 Tóm lược những kết quả đạt được 3
1.4 Bố cục luận văn 4
Chương 2 CƠ SỞ LÝ THUYẾT 6
2.1 Tổng quan về mạch Bất đồng bộ 6
2.1.1 Giới thiệu mạch bất đồng bộ 6
2.1.2 Phân biệt khái niệm mạch đồng bộ và bất đồng bộ 6
2.1.3 Ưu nhược điểm của thiết kế bất đồng bộ 7
2.1.4 Những vấn đề cần quan tâm trong thiết kế bất đồng bộ 9
2.1.5 Các mô hình bất đồng bộ 9
2.1.6 Các giao thức bắt tay 10
2.1.7 Hiện thực giao thức bắt tay dùng cổng Muller 13
2.2 Tổng quan về FPGA 14
2.2.1 Khái niệm FPGA 14
2.2.2 Kiến trúc FPGA 15
2.2.3 Những ứng dụng của FPGA 17
2.2.4 Thiết kế ứng dụng bằng FPGA 18
2.2.5 Các loại FPGA 20
2.3 Kết chương 25
Chương 3 NHỮNG CÔNG TRÌNH LIÊN QUAN ĐẾN HIỆN THỰC MẠCH BẤT ĐỒNG BỘ TRÊN FPGA 26
3.1 Những khó khăn khi hiện thực mạch bất đồng bộ trên FPGA 26
Trang 93.1.1 Nhiễu 26
3.1.2 Ràng buộc thời gian 27
3.1.3 Các phần tử giữ trạng thái (Stateholding Elements) 27
3.2 Các nghiên cứu đã được công bố 28
3.2.1 Xây dựng mạch bất đồng bộ trên các FPGA hiện có 28
3.2.2 Xây dựng kiến trúc FPGA mới phù hợp cho thiết kế bất đồng bộ 32
3.3 Đánh giá những đóng góp của các nghiên cứu trên 38
3.4 Kết chương 39
Chương 4 HIỆN THỰC CÁC CỔNG MULLER KHÔNG NHIỄU TRÊN FPGA 40
4.1 Các loại nhiễu 40
4.1.1 Nhiễu hàm tổ hợp (combinational functional hazard) 41
4.1.2 Nhiễu luận lý tổ hợp (combinational logic hazard) 42
4.2 Xây dựng cổng Muller không nhiễu trên FPGA dạng LUT 44
4.2.1 Phân tích nhiễu của mạch hiện thực trên LUT 44
4.2.2 Xây dựng cổng Muller không nhiễu trên FPGA dạng LUT 45
4.3 Hiện thực thư viện cổng Muller không nhiễu trên Xilinx CLB 46
4.3.1 Xây dựng cổng Muller không nhiễu dùng Xilinx LUT 46
4.3.2 Thư viện các cổng Muller cho Xilinx Spartan-3 49
4.4 Kết chương 49
Chương 5 CÁC PHƯƠNG PHÁP HIỆN THỰC MẠCH BẤT ĐỒNG BỘ TRÊN FPGA DẠNG LUT 51
5.1 Phương pháp dùng quy trình thiết kế FPGA truyền thống kết hợp với thư viện cổng Muller mức HDL 51
5.1.1 Tóm tắt quy trình thiết kế FPGA truyền thống 51
5.1.2 Hiện thực mạch bất đồng bộ dựa trên quy trình thiết kế FPGA truyền thống52 5.2 Phương pháp kết hợp PAiD và phần mềm hỗ trợ hiện thực FPGA 55
5.2.1 Phương pháp PAiD 55
5.2.2 Hiện thực mạch bất đồng bộ trên FPGA bằng sự kết hợp giữa PAiD và phần mềm hỗ trợ thiết kế FPGA 56
5.3 So sánh hai phương pháp hiện thực trong nghiên cứu này 59
5.4 Các ví dụ hiện thực mạch bất đồng bộ 60
5.4.1 Mạch bộ đệm 60
5.4.2 Mạch So sánh 61
Trang 105.5 Kết chương 64
Chương 6 KẾT LUẬN 65
6.1 Tổng kết 65
6.2 Những đóng góp của nghiên cứu này 65
6.3 Những vấn đề cần phải hoàn thiện và hướng phát triển 66
6.4 Công trình công bố liên quan 67
Tài liệu tham khảo 68
Phụ Lục A Cấu trúc dữ liệu miêu tả mạch bất đồng bộ 70
Phụ Lục B Electronic Design Interchange Format 76
B.1 Cấu trúc tổng quát EDIF 76
B.2 Ví dụ tập tin netlist 79
Phụ Lục C Thư viện các cổng MULLER không nhiễu 86
C.1 MULLER2 86
C.2 MULLER2R 87
C.3 MULLER3 88
C.4 MULER3R 89
C.5 MULLER4 90
Trang 11DANH MỤC HÌNH
Hình 1.1 Mô hình hệ thống hiện thực mạch bất đồng bộ trên FPGA 2
Hình 2.1 Ví dụ bảng dòng dữ liệu (flow table) 10
Hình 2.2 Kênh theo giao thức đóng gói dữ liệu 11
Hình 2.3 Giao thức đóng gói dữ liệu 4 pha 11
Hình 2.4 Giao thức đóng gói dữ liệu 2 pha 12
Hình 2.5 Một kênh dùng giao thức 2 đường ray 4 pha 12
Hình 2.6 Minh họa bắt tay trên giao thức 2 đường ray 2 pha 13
Hình 2.7 Ký hiệu và các cách đặc tả cổng Muller 2 ngõ nhập 13
Hình 2.8 Hiện thực cổng Muller 2 ngõ nhập 14
Hình 2.9 (a) Cổng Muller 4 ngõ nhập; (b) cổng Muller 3 ngõ nhập; (c) Cổng Muller 4 ngõ nhập với tín hiệu reset và (d) Cổng Muller 3 ngõ nhập với tín hiệu reset 14
Hình 2.10 Kiến trúc tổng quan FPGA 15
Hình 2.11 Một khối luận lý thông thường 16
Hình 2.12 Vị trí các ngõ vào/ra của một khối luận lý 16
Hình 2.13 Topology cho một hộp chuyển mạch 17
Hình 2.14 Qui trình thiết kế điển hình cho FPGA 18
Hình 2.15 Qui trình thiết kế cho FPGA của công ty Actel 19
Hình 2.16 Kiến trúc tổng quát của Xilinx Spartan-3 FPGA 21
Hình 2.17 Cấu trúc kết nối các slice trong một CLB của Xilinx Spartan-3 FPGA 22
Hình 2.18 Sơ đồ khối Altera Cyclone II 23
Hình 2.19 Cấu trúc một khối luận lý của Cyclone II 23
Hình 2.20 Kiến trúc ProAsic3 với 4 dãy ngõ vào/ra 24
Hình 2.21 Các cấu hình có thể của khối đa năng trong ProAsic3 24
Hình 3.1 Hai dạng cổng Muller và cấu tạo của nó trong Actel FPGA 29
Hình 3.2 Tập hợp các phần tử cho mạch bất đồng bộ trong nghiên cứu của Maheswaran 30
Hình 3.3 MULLER4 a Tổng hợp tự động, b tổng hợp không nhiễu (bằng tay) 30
Hình 3.4 Dòng thiết kế sử dụng thư viện cổng Muller trên Xilinx FPGA 31
Hình 3.5 Đặc tả VHDL cho cổng Muller 32
Hình 3.6 a Cấu trúc kênh truyền cũ, b cấu trúc kênh truyền của MONTAGE 33
Hình 3.7 Kiến trúc một RLB của MONTAGE 33
Hình 3.8 Hai loại đơn vị chức năng: khối luận lý (trái) và khối trọng tài (phải) 34
Trang 12Hình 3.9 Khối luận lý/trọng tài trong PGA-STC 35
Hình 3.10 Chi tiết khối luận lý của PGA-STC 35
Hình 3.11 Chi tiết bộ trọng tài của PGA-STC (trái) và chi tiết khối MUTEX (trái) 35
Hình 3.12 Khuôn mẫu tổng quát cho PHCB 36
Hình 3.13 Kiến trúc FPGA của phòng thí nghiệm TIMA 37
Hình 3.14 Kiến trúc bên trong một PLB 38
Hình 4.1 Ví dụ nhiễu hàm 41
Hình 4.2 Minh họa ngõ ra của nhiễu luận lý tĩnh 42
Hình 4.3 Ví dụ nhiễu luận lý tĩnh loại SIC 43
Hình 4.4 Minh họa ngõ ra của nhiễu luận lý động 43
Hình 4.5 Hiện thực hàm f = w’xz + w’xy + xyz bằng LUT 44
Hình 4.6 Mô hình minh họa cổng Muller chiếm nhiều hơn 1 LUT 46
Hình 4.7 Hiện thực cổng MULLER2 bằng LUT 4 ngõ nhập 46
Hình 4.8 Đặc tả Verilog-HDL cho cổng MULLER2 trong thư viện 48
Hình 4.9 Cấu trúc của ràng buộc vị trí trong Xilinx FPGA 48
Hình 4.10 Tổng kết hiện thực cổng Muller 4 ngõ nhập a) không sử dụng ràng buộc vị trí và b) có sử dụng ràng buộc vị trí 48
Hình 5.1 Quy trình thiết kế FPGA chi tiết 52
Hình 5.2 Quy trình thiết kế mạch bất đồng bộ trên FPGA dựa trên quy trình thiết kế FPGA truyền thống 53
Hình 5.3 Minh họa nội dung một tập tin ucf được sinh ra bởi Constraints Generator 54
Hình 5.4 Quy trình thiết kế của phương pháp PAiD 55
Hình 5.5 Minh họa cổng Muller 2 ngõ nhập được chuyển về dạng LUT 57
Hình 5.6 Minh họa chuyển mạch (x+y)(z+v) thành dạng LUT 57
Hình 5.7 Quy trình hiện thực mạch bất đồng bộ trên FPGA bằng cách kết hợp PAiD và phần mềm hiện thực FPGA 58
Hình 5.8 Dòng hoạt động của công cụ Transform 59
Hình 5.9 Sơ đồ cổng mạch bộ đệm 60
Hình 5.10 a Đặc tả ADL; b Đặc tả Verilog-HDL cho mạch bộ đệm 61
Hình 5.11 Sơ đồ cổng mạch so sánh 61
Hình 5.12 a Đặc tả ADL; b Đặc tả Verilog-HDL cho mạch so sánh 62
Hình 5.13 Sơ đồ cổng mạch chọn lựa 62
Hình 5.14 a Đặc tả bằng ADL; b Đặc tả bằng Verilog-HDL cho mạch chọn lựa 63
Hình A.1 Minh họa cấu trúc dữ liệu đặc tả mạch bộ đệm 75
Trang 13Hình C.1 Thiết kế LUT cổng Muller 2 ngõ nhập 86
Hình C.2 Thiết kế LUT cổng Muller 2 ngõ nhập với tín hiệu Reset 87
Hình C.3 Thiết kế LUT cổng Muller 3 ngõ nhập 88
Hình C.4 Thiết kế LUT cổng Muller 3 ngõ nhập có tín hiệu Reset 89
Hình C.5 Thiết kế LUT cổng Muller 4 ngõ nhập 90
Trang 14DANH MỤC BẢNG
Bảng 4.1 Tổng kết các cổng Muller được cung cấp bởi thư viện trong nghiên cứu này 49
Trang 15Chương 1
GIỚI THIỆU ĐỀ TÀI
Chương giới thiệu đề tài sẽ trình bày yêu cầu, mục tiêu và nội dung sơ lược của đề tài Đồng thời chương này cũng nêu lên những động cơ thúc đẩy việc thực hiện đề tài trong thực tiễn cũng như trong nghiên cứu
1.1 Lý do thực hiện đề tài
Cùng với sự phát triển của kỹ thuật, các hệ thống ngày nay được xây dựng ngày càng lớn hơn, nhanh hơn và phức tạp hơn Tốc độ của hệ thống đồng bộ (ĐB) phụ thuộc vào xung
nhịp (“clock”) và đường tín hiệu dài nhất Ngược lại trong hệ thống bất đồng bộ (BĐB), các
hệ thống con có thể hoạt động đồng thời và hiệu suất của hệ thống chỉ bị giới hạn bởi sự phụ thuộc dữ liệu và điều khiển Do đó hệ thống bất đồng bộ có những lợi điểm so với đồng bộ như: hiệu suất được tính trong trường hợp trung bình, tối thiểu hóa sự tiêu hao năng lượng, khả năng chuyển đổi công nghệ tốt hơn, có khả năng mô-đun hóa và phát triển tích hợp,… [1][2][6] Công nghệ thiết kế bất đồng bộ, tức là công nghệ không dùng xung đồng bộ, đã và đang là mối quan tâm hàng đầu của một số công ty trong công nghiệp, viện nghiên cứu và các trường đại học trên khắp thế giới Vào cuối những năm 1980 đầu những năm 1990 cho đến nay một số trung tâm nghiên cứu về vi mạch BĐB ra đời chẳng hạn các trung tâm của đại học Manchester, đại học Caltech, đại học Cornell, đại học Ultah,… Trong công nghiệp một số công ty như Philips, Sun, Intel, Handshake Solutions, Fulcrum, Silistix, Achronix, Camgian Networks… đã quan tâm nghiên cứu lĩnh vực vi mạch BĐB Các trường đại học và các công
ty trên đã có những thành công bước đầu trong lĩnh vực này Họ đã đề ra một số phương pháp luận để thiết kế mạch BĐB và đã thiết kế thành công một số chíp BĐB như Amulet của đại học Manchester, MiniMIPS của đại học Caltech, TITAC-2 của đại học Tokyo, ASPRO-216 của trung tâm IMAG ở Grenoble và trong số đó có một số sản phẩm đã được thương mại hóa như các vi xử lý BĐB 80C51 và ARM996HS của Philips, Pentium 4 của Intel với một số thành phần không sử dụng xung clock, vi xử lý DDMP của Sharp Do vậy việc nghiên cứu về
vi mạch BĐB là một hướng đi hứa hẹn có nhiều ứng dụng trong tương lai
Tuy nhiên, mạch bất đồng bộ hiện chủ yếu được hiện thực bằng công nghệ mạch tích
hợp cao thủ công hoặc bán thủ công (“custom/semi-custom VLSI”), do đó thời gian sản xuất
những chip bất đồng bộ này kéo dài và giá thành sản xuất ở mức cao Điều này cản trở việc
Trang 16làm mẫu nhanh chóng các vi mạch bất đồng bộ để kiểm thử cũng như để sản xuất với số lượng nhỏ Các cách hiện thực này thường được hiện thực với nhiều giả sử và thường bị mắc lỗi về thời gian trễ Do đó, các hệ thống bất đồng bộ tối ưu và tinh vi khó có thể được hiện thực theo cách này
Trong khi đó, FPGA (“Field Programmable Gate Arrays”) [3][4][5] cung cấp khả
năng làm mẫu nhanh chóng và khả năng thử nghiệm cho các mạch số với chi phí kỹ thuật thấp do vậy đang chiếm ưu thế trong việc làm phương tiện hiện thực các mạch số Tuy nhiên các FPGA cũng như các công cụ hỗ trợ thiết kế trên FPGA hiện tại chưa đáp ứng được các ràng buộc thời gian của mạch bất đồng bộ là (1) thời gian trễ hồi tiếp để tránh nhiễu (hazard)
và (2) mối quan hệ giữa tín hiệu dữ liệu và tín hiệu điều khiển trong truyền nhận dữ liệu giữa hai thành phần khác nhau Ngoài ra, các FPGA hiện tại không có các phần tử đặc biệt được yêu cầu trong thiết kế bất đồng bộ như cổng Muller, bộ trọng tài (arbiter)…
Là một giải pháp tự nhiên để làm mẫu nhanh chóng các thiết kế bất đồng bộ tối ưu và tinh vi, thiết kế và hiện thực hệ thống bất đồng bộ trên FPGA là một trong những mối quan tâm hàng đầu của các nghiên cứu về thiết kế hệ thống bất đồng bộ trên thế giới cũng như ở Việt Nam Hiện tại trên thế giới có hai hướng nghiên cứu giải quyết vấn đề này là (1) xây dựng một kiến trúc FPGA mới phù hợp với thiết kế và hiện thực mạch bất đồng bộ [13][14][10][7] (2) xây dựng một phương pháp luận thiết kế mạch bất đồng bộ trên các hệ thống FPGA hiện có trên thị trường (hầu như chỉ hỗ trợ mạch đồng bộ) [7][8][9][11]
Không nằm ngoài xu hướng của thế giới nghiên cứu này sẽ chọn hướng tiếp cận thứ hai để nghiên cứu và xây dựng phương pháp hiện thực vi mạch bất đồng bộ trên FPGA nhằm phù hợp với điều kiện hiện tại đang có là các thiết bị FPGA ở Việt Nam chủ yếu hỗ trợ thiết
kế đồng bộ
1.2 Mục tiêu và giới hạn của đề tài
Hình 1.1 Mô hình hệ thống hiện thực mạch bất đồng bộ trên FPGA
Trang 17Hình 1.1 mô tả mô hình hệ thống để hiện thực mạch bất đồng bộ trên FPGA Nghiên cứu này sẽ xây dựng một phương pháp hiện thực các mạch bất đồng bộ trên FPGA Đầu vào của quy trình hiện thực là một vi mạch bất đồng bộ đã được thiết kế thỏa mãn những yêu cầu của mạch bất đồng bộ và được đặc tả dưới dạng netlist Đầu ra của quy trình hiện thực có thể
mô phỏng trên máy tính bởi các phần mềm mô phỏng hoặc có thể được hiện thực trên các FPGA Đó là mục tiêu của đề tài luận văn này
Nghiên cứu này giới hạn trong khuôn khổ hiện thực các mạch bất đồng bộ dạng QDI
(“Quasi-Delay Insensitive”) vì đây là dạng vi mạch bất đồng bộ được nghiên cứu nhiều và
phương pháp luận để hiện thực nó đã được phát triển trước đây tại khoa KH&KTMT trường Đại học Bách Khoa [6] Vi mạch QDI là loại vi mạch không chịu sự ràng buộc nào về thời gian trễ trong mạch, ngoại trừ các rẽ nhánh đồng đẳng (“isochronic fork”) Người ta chứng minh được rằng QDI là loại vi mạch khả thi mạnh nhất trong các loại vi mạch bất đồng bộ Bên cạnh đó, đề tài này cũng giới hạn hiện thực các vi mạch QDI trên các FPGA dạng LUT
(“Look-Up Table”) vì các FPGA này hiện chiếm phần lớn thị phần FPGA và được sản xuất
bởi các công ty hàng đầu về FPGA như Xilinx, Altera,…
1.3 Tóm lƣợc những kết quả đạt đƣợc
Với những mục tiêu và giới hạn đã đề ra trong đề tài, sau một thời gian nghiên cứu
và hiện thực, chúng tôi đã xây dựng được hai phương pháp hữu hiệu để hiện thực vi mạch bất đồng bộ trên FPGA dạng LUT và các công cụ hỗ trợ thiết kế Phương pháp thứ nhất là sử dụng quy trình thiết kế điển hình của các FPGA hiện tại kết hợp với việc sử dụng một thư
viện ở mức HDL (“Hardware Description Languages”) định nghĩa trước các cổng Muller [6]
[7] [12] không nhiễu Các cổng Muller này được dùng để hiện thực các kênh truyền thông trong vi mạch QDI Phương pháp thứ hai là sử dụng kết hợp phương pháp luận thiết kế PAiD (viết tắt của “Project Asynchronous circuit Design”) [6] được phát triển tại khoa KH&KTMT trường Đại học Bách Khoa TPHCM năm 2008 và phần mềm hỗ trợ hiện thực FPGA đi kèm với từng sản phẩm FPGA Ngoài ra phương pháp thiết kế thứ hai này còn sử dụng một thư viện ở mức netlist đặc tả các cổng Muller không gây ra nhiễu Thư viện này được đặc tả theo
định dạng EDIF (“Electronic Design Interchange Format”) [24]
Ngoài hai thư viện các cổng Muller không nhiễu ở hai mức HDL và EDIF như nêu trên, đề tài này còn đóng góp các công cụ hỗ trợ thiết kế là Constraints Generator và Transform Trong đó, Constraints Generator có nhiệm vụ phân tích tập tin netlist mạch bất đồng bộ theo chuẩn EDIF để tìm ra các LUT cấu thành các cổng Muller và sinh ra các ràng
Trang 18buộc để bảo đảm sẽ không xảy ra nhiễu khi hiện thực mạch trên FPGA Công cụ Transform
có chức năng chuyển đổi mạch bất đồng bộ tạo ra bởi PAiD thành mạch bất đồng bộ có cấu trúc tương tự nhưng các phần tử cơ bản trong mạch được tạo thành từ các LUT của FPGA Mạch bất đồng bộ sau khi đã chuyển đổi sẽ thích hợp cho hiện thực trên FPGA một các tự động Đầu vào các công cụ này là tập tin netlist dạng EDIF 2.0.0 nên các công cụ này dễ dàng
có thể tương tác với các phần mềm hỗ trợ thiết kế khác vì chuẩn EDIF là định dạng đã được chuẩn hóa bởi Electronic Industries Alliance (EIA)
Một số mạch bất đồng bộ có kích thước nhỏ và trung bình cũng đã được thiết kế và kiểm thử bằng mô phỏng để bảo đảm tính đúng đắn của các phương pháp được xây dựng cũng như các công cụ hỗ trợ Kết quả của quá trình kiểm thử này đã chứng minh rằng các phương pháp, các công cụ và các thư viện được hiện thực trong nghiên cứu này có thể hỗ trợ việc thiết kế mạch bất đồng bộ dạng QDI trên FPGA dạng LUT
Kết quả của nghiên cứu này cũng đã được tóm tắt thành bài báo “New Approaches
to Design Asynchronous Circuits on FPGA” và đã được chấp nhận tại hội nghị
ATC/REV-2009 (www.atc09.org) tổ chức tại Hải Phòng từ ngày 12-14 tháng 10 năm 2009
là phương tiện để hiện thực mạch bất đồng bộ QDI
Chương 3 tóm tắt về những công trình trên thế giới cùng giải quyết vấn đề nêu ra trong luận văn này Các ưu khuyết điểm và tính khả thi của các nghiên cứu này nếu áp dụng vào thực tế ở Việt Nam cũng sẽ được phân tích
Chương 4 sẽ trình bày lý thuyết hiện thực cổng Muller không nhiễu trên FPGA Đồng thời chương này sẽ trình bày về thư viện các cổng Muller không nhiễu ở mức HDL dùng trong hiện thực mạch bất đồng trên trên FPGA Spartan-3 của Xilinx
Chương 5 sẽ miêu tả chi tiết hai phương pháp hiện thực mạch bất đồng bộ trên FPGA dạng LUT Để kiểm tra tính đúng đắn của hai phương pháp, chương 5 cũng
sẽ trình bày ví dụ thiết kế một vi mạch bất đồng bộ QDI trên FPGA Spartan-3 của Xilinx
Trang 19 Chương 6 sẽ nêu lên những kết quả đạt được, những hạn chế và phương hướng phát triển trong tương lai của nghiên cứu này Cuối cùng phần phụ lục sẽ giới thiệu cấu trúc dữ liệu phục phụ cho đặc tả mạch bất đồng bộ, giới thiệu tổng quát
về cấu trúc chuẩn EDIF và trình bày chi tiết hiện thực các cổng Muller trong hai thư viện hỗ trợ
Trang 20Huffman đã phát triển phương pháp thiết kế các mạch chế độ cơ bản (“fundamental - mode
circuits”) và Muller đã phát triển lý thuyết nền móng của các mạch độc lập tốc độ (“speed - independent circuits”)
Từ những ngày đầu tiên, mạch bất đồng bộ đã được sử dụng trong những ứng dụng
lý thú Vào những năm 50 và 60, Muller và các đồng nghiệp đã sử dụng mạch độc lập tốc độ trong thiết kế của ILLIAC và ILLIAC 2 Từ rất sớm, thiết kế bất đồng bộ cũng được dùng trong máy tính mainframe MU – 5 và Atlas Vào những năm 70, kỹ thuật bất đồng bộ được
đại học Utah sử dụng trong thiết kế máy tính điều khiển dòng dữ liệu đầu tiên (“operational
dataflow computer”) và ở Evans và Sutherland thì được dùng trong hệ thống thương mại có
đồ họa đầu tiên (“commercial graphic system”)
Nhờ vào những ưu điểm của mạch bất đồng bộ, có rất nhiều phong trào thiết kế bất đồng bộ và gần đây có nhiều dự án đã thành công Năm 1989, những nhà nghiên cứu ở Caltech thiết kế hoàn chỉnh vi xử lý bất đồng bộ Kể từ đó, nhiều nhóm nghiên cứu khác đã thiết kế và sản xuất những vi xử lý bất đồng bộ với độ phức tạp tăng dần Về mặt thương mại, mạch bất đồng bộ cũng đạt được những thành công Philips đã sử dụng nhiều thiết kế bất đồng bộ với mục đích ít hao năng lượng Và có lẽ thành tựu nổi bật nhất là sự ra đời của họ vi
xử lý bất đồng bộ 80C51 Ngoài ra, dự án RAPPID ở Intel đã minh họa đầy đủ bộ giải mã độ
dài lệnh bất đồng bộ (“asynchronous instruction-length decoder”) cho tập lệnh x86 với sự cải
tiến 3 lần về tốc độ và 2 lần về năng lượng so với thiết kế đồng bộ đã có
2.1.2 Phân biệt khái niệm mạch đồng bộ và bất đồng bộ
Mạch đồng bộ (“Synchronous Circuit”) gồm tập các khối luận lý kết nối với nhau và
được phân chia bằng các thanh ghi Các khối luận lý này thực hiện các phép tính toán đã được định nghĩa trước và truyền kết quả cho các khối tính toán kế cận nó thông qua các thanh ghi
Trang 21Các thanh ghi lưu trữ kết quả của phép tính toán để ngăn việc ghi đè (“overwrite”) dữ liệu
Các thanh ghi được điều khiển bởi một xung đồng hồ toàn cục Xung đồng hồ này quyết định thời điểm thanh ghi nhận giá trị mới
Mạch bất đồng bộ (“Asynchronous Circuit”) gồm tập các khối luận lý kết nối với
nhau và được phân chia bởi các latch Không giống như mạch đồng bộ, các latch này không được điều khiển bởi xung đồng hồ toàn cục Những bộ điều khiển này điều khiển dòng dữ liệu
trong mạch thông qua các tín hiệu bắt tay (“handshaking signal”) và sử dụng các giao thức
giao tiếp với các bộ xử lý kế cận Trong mạch bất đồng bộ, điều quan trọng nhất là tính đúng đắn của chuỗi tín hiệu phải được đảm bảo Giao thức bất đồng bộ được định nghĩa trong một
cặp tín hiệu với một tín hiệu là tín hiệu yêu cầu (“request”) hành động và một tín hiệu là tín hiệu phản hồi (“acknowledge”) hành động đã được thực hiện xong Một mô-đun, gọi là bên
gửi, gửi một sự kiện yêu cầu (Req) đến một mô-đun khác, gọi là bên nhận Khi bên nhận hoàn thành xong hành động được yêu cầu nó sẽ gửi lại sự kiện phản hồi (Ack) cho mô-đun nhận để kết thúc một giao dịch giữa bên gửi và bên nhận Để đảm bảo thứ tự của chuỗi sự kiện các mô-đun giao tiếp với nhau phải đảm bảo các yêu cầu sau đây:
– Quy tắc 1: Bên gửi không được gửi tín hiệu yêu cầu mới cho đến khi yêu cầu cũ trước đó được phản hồi
– Quy tắc 2: Bên nhận không được gửi tín hiệu phải hồi trừ khi nó nhận được tín hiệu yêu cầu
2.1.3 Ƣu nhƣợc điểm của thiết kế bất đồng bộ
Hiện nay, đa số thiết kế mạch luận lý (logic) dựa trên 2 giả định cơ bản: (1) tất cả các tín hiệu đều là tín hiệu nhị phân và (2) thời gian rời rạc Mạch bất đồng bộ chỉ sử dụng một giả định tất cả tín hiệu là 2 mức mà không sử dụng giả định thời gian rời rạc Điều này làm
cho mạch bất đồng bộ có những ưu điểm so với mạch đồng bộ [1][2][6]:
– Loại bỏ được vấn đề lệch xung nhịp (“eliminate clock skew problems”): vì mạch bất đồng
bộ được định nghĩa không có đồng hồ toàn cục nên không cần quan tâm về hiện tượng lệch xung đồng hồ Ngược lại, hệ thống đồng bộ thường phải làm chậm mạch để tránh hiện tượng lệch xung đồng hồ
– Hiệu suất tính theo trường hợp trung bình thay vì trong trường hợp xấu nhất: trong hệ thống đồng bộ, hiệu suất phải được tính theo trường hợp xấu nhất, chu kỳ đồng hồ phải đủ dài
Trang 22để cung cấp cho tác vụ chậm nhất Ngược lại, trong mạch bất đồng bộ, tốc độ của mạch có thể thay đổi động nên hiệu suất tương ứng với trường hợp trễ trung bình
– Ít hao năng lượng: các mạch đồng bộ chuẩn phải có tín hiệu đồng hồ ngược (“toggle
clock”) và có thể có tín hiệu trước nạp (“precharge”) và không nạp (“discharge”) trong những
phần mạch không dùng trong bước tính toán hiện tại Mặc dù mạch bất đồng bộ thường cần nhiều transitor hơn mạch đồng bộ nhưng mạch bất đồng bộ chỉ cần truyền đến những vùng liên quan đến bước tính toán hiện tại
– Khả năng thích ứng với sự thay đổi vật lý: sự trễ của một mạch tích hợp cao (VLSI) có thể thay đổi nhiều với những điều kiện khác nhau trong chế tạo như nhiệt độ và nguồn điện cung cấp Thiết kế mạch đồng bộ phải thiết lập tốc độ xung đồng hồ để cho phép tác vụ đúng trong một số trường hợp cho phép Nhờ vào đặc tính thích nghi, mạch bất đồng bộ thực hiện tác vụ đúng trong mọi sự thay đổi và đơn giản chỉ tăng hoặc giảm tốc độ khi cần
– Giảm nhiễu: trong thiết kế đồng bộ, tất cả hoạt động đều phụ thuộc tần số rất chính xác Kết quả là hầu như tất cả năng lượng đều tập trung trong một vùng băng thông hẹp ở tần số xung đồng hồ và các hài tần của nó Vì thế, có sự nhiễu ở những tần số đó Hoạt động trong mạch bất đồng bộ không tương quan với nhau, kết quả là phân bố nhiễu ở nhiều mức tần số
và giảm giá trị nhiễu cực đại
Tuy nhiên, mạch bất đồng bộ cũng có một số nhược điểm:
– Chi phí cho tín hiệu bắt tay (“handshaking overhead”): các mạch bất đồng bộ cần tín hiệu
bắt tay thường phải trả giá, ví dụ như tăng diện tích silicon, giảm tốc độ, tiêu hao năng lượng
– Có thể dẫn tới bị chết mạch (“deadlock”): do mạch bất đồng bộ dùng cơ chế bắt tay nên
nếu việc bắt tay không được thiết kế tốt thì có thể dẫn đến các thành phần chờ đợi lẫn nhau và dẫn đến bị chết mạch
– Thiếu các công cụ hỗ trợ thiết kế (“CAD tool”) và những người thiết kế có kinh nghiệm:
mạch bất đồng bộ khó thiết kế hơn mạch đồng bộ do người thiết kế phải chú ý nhiều đến các trạng thái động của mạch Thứ tự các tác vụ trong mạch đồng bộ được cố định bằng cách đặt các latch được điều khiển bởi xung đồng hồ toàn cục, trong khi đó trong mạch bất đồng bộ phải đảm bảo thứ tự này bằng điều khiển bất đồng bộ Đối với một số mạch phức tạp, điều này phải được xử lý bằng tay
Trang 232.1.4 Những vấn đề cần quan tâm trong thiết kế bất đồng bộ
Thiết kế mạch là một công việc rất khó Điều kiện đầu tiên là phải nắm được các đặc
tả Ngoài ra, còn có các thuộc tính khác cần phải được tối ưu Những thuộc tính này không thể được tối ưu đồng thời, một thuộc tính chỉ được tối ưu ở một mức độ nào đó và phải trả giá ở các thuộc tính khác Những thuộc tính quan trọng bao gồm:
– Diện tích: diện tích của vi mạch càng nhỏ thì càng ít tốn silicon và hiệu suất cao Những nguyên nhân gây hư hại như khuyết trên mặt nạ, khuyết do tiếp xúc với những vật thể khác (ví dụ hạt bụi)… ít ảnh hưởng đến vi mạch khi diện tích của nó nhỏ
– Tốc độ: mạch thực hiện những tác vụ tính toán càng nhanh thì tỉ lệ được sử dụng lại càng cao Việc tăng tốc độ tính toán thường cần diện tích lớn vì thường phải nhân bản phần cứng
để song song hóa việc tính toán
– Sự tiêu hao năng lượng: khi một vi mạch tiêu hao quá nhiều năng lượng, nó sẽ quá nóng
và dừng công việc hoặc phải tốn kém nhiều cho việc làm mát nó Đặc biệt đối với những thiết
bị di động thì vấn đề tiết kiệm năng lượng là quan trọng
– Thời gian thiết kế: Việc thiết kế mạch tích hợp còn là một hoạt động kinh tế nên một vi mạch thỏa mãn những yêu cầu của đặc tả cần được sản xuất càng sớm càng tốt Chi phí thiết
kế là một yếu tố quan trọng, đặc biệt là khi cần sản xuất số lượng nhỏ
– Khả năng kiểm tra: Tất cả vi mạch phải được kiểm tra trước khi được đưa vào sử dụng
Vì vậy vi mạch dễ kiểm tra cũng là mục tiêu của thiết kế
2.1.5 Các mô hình bất đồng bộ
2.1.5.1 Mô hình thời gian trễ có giới hạn (“Bounded-Delay Model”)
Đây là mô hình thiết kế dùng cho mạch bất đồng bộ giống với mô hình dùng cho mạch đồng bộ Mô hình này giả định rằng thời gian trễ của tất các các phần tử và các đường dây trong mạch là biết trước hoặc có giới hạn Mạch thiết kế với mô hình này được gọi là
mạch Huffman (“Huffman circuit”)
Trong mô hình này, mạch bất đồng bộ được thiết kế giống như mạch đồng bộ Mạch
được biểu diễn ở dạng bảng dòng dữ liệu (“flow-table”), bảng này tương tự như bảng sự thật (“truth-table”) Trong ví dụ ở Hình 2.1, mỗi hàng tương ứng với mỗi trạng thái bên trong, mỗi
cột tương ứng với đầu vào Mỗi phần tử trong bảng chỉ ra trạng thái tiếp theo và giá trị ngõ xuất (output) được sinh ra khi giá trị đầu vào (giá trị của cột) được đưa vào trạng thái hiện tại
Trang 24Hình 2.1 Ví dụ bảng dòng dữ liệu (flow table)
2.1.5.2 Mô hình độc lập tốc độ (“Speed-Independence model”)
Mô hình độc lập tốc độ giả định rằng thời gian trễ của các cổng là không có giới hạn
(“unbounded”) còn tất cả thời gian trễ của dây nối là không đáng kể (nhỏ hơn thời gian trễ
nhỏ nhất của các cổng)
2.1.5.3 Mô hình thời gian trễ không nhạy có chừng mực (“Quasi-Delay-Insensitive” - QDI)
Mô hình thời gian trễ không nhạy có chừng mực thì giả sử rằng cả cổng và dây nối
đều có thời gian trễ không giới hạn nhưng có thêm giả định rằng tại các nhánh dây (“fork
wire”) sự khác biệt về thời gian trễ giữa các đích đến là không đáng kể
2.1.5.4 Mô hình thời gian trễ không nhạy (“Delay-Insensitive model”)
Mạch bất đồng bộ thiết kế theo mô hình thời gian trễ không nhạy hoàn toàn trái ngược với mô hình thời gian trễ có giới hạn Mô hình này giả định rằng thời gian trễ giữa các
thành phần và các đường dây là không có giới hạn (“unbounded”) Trong mạch thời gian trễ
có giới hạn, người ta giả sử rằng thời gian cho trước đủ để một thành phần được thiết lập để đáp ứng khi xuất hiện tín hiệu nhập và tín hiệu nhập được gởi đi một cách bảo đảm Trong mô hình thời gian trễ không nhạy, người ta không quan tâm đến mạch phải chờ bao lâu để đảm bảo rằng dữ liệu được nhận một cách đúng đắn Điều này buộc bên nhận phải thông báo cho bên gởi khi nhận được tín hiệu Chức năng này được thực hiện hoàn toàn bởi bên nhận Bên gởi chỉ cần chờ đến khi nhận được thông báo đã nhận đúng từ bên nhận rồi mới gởi dữ liệu tiếp theo
2.1.6 Các giao thức bắt tay
Khi thiết kế mạch dùng ngôn ngữ mô tả phần cứng và các công cụ tổng hợp, người thiết kết phải tập trung vào việc xử lý dữ liệu và sự tồn tại của xung đồng hồ toàn cục Trong mạch bất đồng bộ, tín hiệu đồng hồ được thay bởi một dạng nào đó của giao thức bắt tay giữa các thành phần Dưới đây là một số giao thức bắt tay tiêu biểu
Trang 252.1.6.1 Giao thức đóng gói dữ liệu 4 pha (“Bundled-data 4 phase protocol”)
Đóng gói dữ liệu nghĩa là dùng các mức luận lý Boolean để mã hóa dữ liệu, tín hiệu
yêu cầu (“request”) và tín hiệu xác nhận (“acknowledge”) Hai tín hiệu yêu cầu và xác nhận
được đóng gói với các tín hiệu dữ liệu như minh họa trong Hình 2.2
Hình 2.2 Kênh theo giao thức đóng gói dữ liệu
Trong giao thức 4 pha (Hình 2.3), tín hiệu yêu cầu và xác nhận được mã hóa bằng các mức luận lý Boolean Có 4 hành động giao tiếp theo thứ tự sau:
– Bên gởi chuẩn bị dữ liệu và thiết lập mức cao cho tín hiệu yêu cầu
– Bên nhận tiếp nhận dữ liệu và thiết lập mức cao cho tín hiệu xác nhận
– Bên gởi đáp ứng bằng cách thiết lập mức thấp cho tín hiệu yêu cầu (tại thời điểm này, dữ liệu không còn hợp lệ)
– Bên nhận xác nhận điều này bằng việc thiết lập mức thấp cho tín hiệu xác nhận
Hình 2.3 Giao thức đóng gói dữ liệu 4 pha
2.1.6.2 Giao thức đóng gói dữ liệu 2 pha (Bundled-data 2 phase protocol)
Tương tự giao thức đóng gói dữ liệu 4 pha, tín hiệu yêu cầu và xác nhận trong giao thức đóng gói dữ liệu 2 pha (Hình 2.4) cũng được đóng gói vào dữ liệu, thông tin trên dây này được mã hóa bằng sự chuyển đổi tín hiệu từ 0 lên 1 và từ 1 xuống 0 Về mặt lí thuyết, giao thức đóng gói dữ liệu 2 pha làm cho mạch nhanh hơn giao thức đóng gói dữ liệu 4 pha nhưng việc hiện thực phức tạp hơn
Trang 26Hình 2.4 Giao thức đóng gói dữ liệu 2 pha
2.1.6.3 Giao thức 2 đường ray 4 pha (“4-phase dual-rail protocol”)
Giao thức này mã hóa tín hiệu yêu cầu vào tín hiệu dữ liệu dùng 2 dây cho 1 bit
thông tin (Hình 2.5) Hai dây yêu cầu cho 1 bit thông tin d gồm dây d.t cho tín hiệu ở mức 1
và dây d.f cho tín hiệu ở mức 0
{d.f, d.t} = {1, 0}: thể hiện giá trị luận lý bằng 0 là hợp lệ
{d.f, d.t} = {0, 1}: thể hiện giá trị luận lý bằng 1 là hợp lệ
{d.f, d.t} = {0, 0}: báo hiệu không có dữ liệu hoặc giá trị rỗng (NULL)
{d.f, d.t} = {1, 1}: giá trị này không được sử dụng
Hình 2.5 Một kênh dùng giao thức 2 đường ray 4 pha
Sự chuyển đổi từ giá trị hợp lệ này sang giá trị hợp lệ khác của bộ (d.f, d.t) được cho
phép theo sơ đồ trong Hình 2.5
2.1.6.4 Giao thức 2 đường ray 2 pha (2-phase dual-rail protocol)
Tương tự giao thức 2 đường ray 4 pha, giao thức này cũng sử dụng 2 dây {d.f, d.t} cho một bit nhưng dùng sự thay đổi mức để mã hóa thông tin Trên một kênh N bit dữ liệu, một từ dữ liệu (“codeword”) được nhận khi có chính xác một dây trong mỗi N cặp dây có sự
Trang 27thay đổi mức Hình 2.6 minh họa dạng sóng trên một kênh 2 bit dữ liệu dùng giao thức 2 đường ray 2 pha
Hình 2.6 Minh họa bắt tay trên giao thức 2 đường ray 2 pha
2.1.7 Hiện thực giao thức bắt tay dùng cổng Muller
Để thực hiện các giao thức truyền thông, ngoài các cổng luận lý cơ bản, người ta còn
phải dùng thêm cổng Muller [6][8] (hay còn gọi là phần tử C – “C-element”) Các cổng
Muller này đóng vai trò rất quan trọng trong việc hiện thực mạch bất đồng bộ Nó được dùng
để hiện thực các mạch điều khiển bắt tay và kiểm tra việc hoàn thành tính toán Giá trị ngõ xuất của cổng Muller bằng với giá trị ngõ nhập nếu như các giá trị ở ngõ nhập bằng nhau Trong trường hợp giá trị ở các ngõ nhập khác nhau, giá trị ngõ xuất sẽ giữ nguyên giá trị cũ trước đó Hình 2.7 trình bày ký hiệu và các cách đặc tả khác nhau của cổng Muller 2 ngõ nhập
Hình 2.7 Ký hiệu và các cách đặc tả cổng Muller 2 ngõ nhập
Từ đặc tả chức năng của cổng Muller 2 ngõ nhập, Hình 2.8 trình bày các cách hiện thực bằng cổng luận lý cơ bản và bằng transistor Ngoài ra, trong thực tế người ta còn sử dụng các cổng Muller với số lượng ngõ nhập cao hơn và có thêm các tín hiệu reset (nếu tích cực thì ngõ ra sẽ là 0) Hình 2.9 biểu diễn ký hiệu của các cổng Muller nhiều hơn 2 ngõ nhập được dùng trong thực tế
Trang 28Hình 2.8 Hiện thực cổng Muller 2 ngõ nhập
Hình 2.9 (a) Cổng Muller 4 ngõ nhập; (b) cổng Muller 3 ngõ nhập; (c) Cổng Muller 4 ngõ nhập
với tín hiệu reset và (d) Cổng Muller 3 ngõ nhập với tín hiệu reset
2.2 Tổng quan về FPGA
2.2.1 Khái niệm FPGA
FPGA (“Field Programmable Gate Array”) là một thiết bị bán dẫn có thể được cấu
hình bởi khách hàng hay người thiết kế sau khi được sản xuất Nó bao gồm một dãy các phần
tử khả lập trình được kết nối với nhau theo một cách tổng quát Các kết nối này có thể được thiết lập theo mong muốn của người sử dụng Khái niệm FPGA lần đầu tiên được giới thiệu bởi công ty Xilinx [19] vào năm 1985 Sau đó rất nhiều các công ty khác tham gia phát triển các sản phẩm FPGA như: Actel, Altera, QuickLogic, Cypress,…
Hình 2.10 biểu diễn một kiến trúc tổng quát FPGA, nó bao gồm một dãy 2 chiều các
khối luận lý (“logic blocks”), được gọi là kiến trúc của FPGA (“architecture”), có thể được kết nối với nhau bằng các tài nguyên kết nối (“interconnection resources”), hay còn gọi là tài nguyên đi dây (“routing resource”) Các tài nguyên kết nối bao gồm các đoạn dây có chiều
dài khác nhau Các công tắc khả lập trình cũng xuất hiện bên trong các tài nguyên kết nối này
để kết nối các khối luận lý với các dây nối hay giữa các dây nối với nhau Các khối luận lý có thể được cấu hình để thực hiện một hàm tổ hợp phức tạp hay chỉ là tác vụ của một cổng cơ bản AND hay OR Trong hầu hết các FPGA, các khối luận lý cũng bao gồm các phần tử bộ
Trang 29nhớ, có thể đơn giản là các Flip-Flop hay là các khối bộ nhớ hoàn chỉnh Một mạch luận lý được hiện thực trên FPGA bằng cách phân chia luận lý vào các khối luận lý độc lập trên FPGA và sau đó kết nối các khối này lại với nhau theo yêu cầu thông qua các công tắc
Hình 2.10 Kiến trúc tổng quan FPGA
2.2.2 Kiến trúc FPGA
Kiến trúc tổng quát của FPGA bao gồm một dãy các khối luận lý khả cấu hình
(“Configurable Logic Block” – CLB) và các kênh nối dây (“Routing Channel”) Có nhiều ngõ vào ra (“IO Pad”) được đặt vừa theo chiều cao hoặc chiều rộng của một dãy các khối luận lý
như trên Hình 2.10 Thông thường các kênh nối dây có cùng kích thước (số lượng dây nối) Một mạch ứng dụng phải được ánh xạ vào loại FPGA thích hợp
Một khối luận lý trong FPGA cơ bản thông thường bao gồm 1 LUT (“Look-up
Table”) 4 ngõ nhập và một Flip-Flop như Hình 2.11 Những sản phẩm FPGA mới gần đây
LUT có thể được mở rộng lên đến 6 ngõ nhập và số lượng các LUT trong CLB cũng tăng dần
Trang 30Hình 2.11 Một khối luận lý thông thường
Mỗi khối luận lý chỉ có một ngõ ra, ngõ ra này có thể ở một trong hai trạng thái là trạng thái ngõ ra hiện tại của LUT hay trạng thái trước đó được giữ bởi Flip-Flop Mỗi khối luận lý sẽ có một ngõ vào cho xung nhịp và xung nhịp này thường có hệ số đầu ra (fan-out) rất cao (do tất cả các khối luận lý đều dùng cùng một tín hiệu xung nhịp) nên sẽ được kết nối thông qua một mạng kết nối chuyên biệt
Vị trí các ngõ vào/ra của một khối luận lý được biểu diễn như trong Hình 2.12 Các ngõ vào sẽ được đặt ở các cạnh khác nhau của khối luận lý và có thể được kết nối với các đoạn dây trên các kênh kết nối lân cận Trong khi đó ngõ ra của khối luận lý có thể được kết nối vào kênh kết nối bên phải hoặc phía dưới của khối luận lý tương ứng
Hình 2.12 Vị trí các ngõ vào/ra của một khối luận lý
Tương tự như vậy, các ngõ vào/ra của FPGA cũng có thể được kết nối với bất kỳ dây nối nào trên kênh kết nối lân cận nó Ví dụ một ngõ vào ra trên đỉnh FPGA có thể được kết
nối với bất kỳ dây nào trong số W dây, với W là số dây nối trong kênh kết nối ngang ngay
phía dưới ngõ vào/ra này
Mỗi đoạn dây nối sẽ làm “nhịp cầu” kết nối giữa khối luận lý và hộp chuyển mạch
(“switch box”) Các dây nối dài được xây dựng bằng cách đóng các công tắc trong các hộp
chuyển mạch Hình 2.13 biểu diễn cấu trúc của một hộp chuyển mạch Ở mỗi điểm giao nhau của kênh kết nối dọc và kênh kết nối ngang sẽ có một hộp chuyển mạch Khi một dây nối đi vào trong hộp chuyển mạch sẽ có 3 khả năng kết nối với các dây nối khác ở các kênh lân cận
D Flip-Flop
4-input Look-Up Table
in1 out
Trang 31Hình 2.13 Topology cho một hộp chuyển mạch
Các dòng FPGA hiện đại mở rộng kiến trúc vừa giới thiệu ở trên bằng cách áp dụng khả năng chứa đựng nhiều chức năng trên bán dẫn Có những chức năng chung được nhúng vào trong bán dẫn sẽ làm giảm diện tích dùng cho thiết kế và nâng cao tốc độ thực thi của mạch so với khi xây dựng mạch từ các phần tử cơ bản Ngày nay các khối xử lý tín hiệu số
(DSP), bộ xử lý nhúng (“Embedded Processor”), giao tiếp ngoại vi tốc độ cao, bộ nhớ,…
thường được đưa vào trong các khối FPGA
2.2.3 Những ứng dụng của FPGA
FPGA có thể được sử dụng trong những ứng hiện tại đang sử dụng các công nghệ
khác như MPGA (“Mask-Programmed Gate Array”), PLD [16] và các chip tích hợp mật độ
thấp (SSI) Dưới đây là các loại ứng dụng có thể sử dụng công nghệ FPGA
2.2.3.1 Các mạch tích hợp ứng dụng chuyên biệt (“Application-Specific Intergrated Circuit” – ASIC)
Một FPGA là một phương tiện tổng quát hoàn chỉnh để hiện thực các mạch số FPGA cũng phù hợp để hiện thực các mạch tích hợp cho các ứng dụng chuyên biệt Các mạch chuyên biệt đã được hiện thực bằng FPGA có thể kể ra là: bộ điều khiển máy in, thiết bị đồ họa (graphic engine), bộ truyền nhận mạng T1 cũng như là các ứng dụng trong truyền thông khác
2.2.3.2 Hiện thực mạch luận lý ngẫu nhiên
Các mạch luận lý hiện tại được hiện thực chủ yếu trên PALs [16] Nếu tốc độc của mạch không phải là vấn đề quan trọng (PALs có tốc độ cao hơn FPGA) thì mạch có thể được
Trang 32luận lý đòi hỏi từ 10 đến 20 PAL Trong tương lai số lượng này còn có thể sẽ tăng lên nhanh chóng
2.2.3.3 Làm mẫu
FPGA là một ý tưởng phù hợp nhất cho mục đích làm mẫu (“prototyping”) Giá
thành thấp và thời gian hiện thực nhanh tạo ra những ưu thế cho FPGA so với những cách tiếp cận truyền thống để xây dựng các mẫu Phiên bản khởi đầu có thể được hiện thực nhanh chóng và sau đó là một chuỗi các thay đổi trên nguyên mẫu có thể được thực hiện dễ dàng với chi phí thấp
Ngoài ra các ứng dụng của FPGA còn bao gồm: xử lý tín hiệu số DSP, các hệ thống hàng không, vũ trụ, quốc phòng, các hệ thống điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã học, mô hình phần cứng máy tính
Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớp những bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính, ngoài ra nhờ mật độ cổng logic lớn FPGA được ứng dụng cho những bài toán đòi hỏi khối lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực
2.2.4 Thiết kế ứng dụng bằng FPGA
Người thiết kế muốn hiện thực ứng dụng sử dụng FPGA đạt kết quả tốt phải sử dụng
các công cụ hỗ trợ thiết kế (“Computer Aid Design” – CAD) hiệu quả Hình 2.14 biểu diễn
một qui trình thiết kế điển hình cho FPGA Tuy nhiên đối với mỗi loại FPGA sẽ có một dòng thiết kế riêng dựa trên mô hình chung này Hình 2.15 biểu diễn qui trình thiết kế chi tiết cho các FPGA của công ty Actel
Thiết kế ban đầu
Tối ưu luận lý
Ánh xạ công nghệ
Sắp đặt
Đi dây
Kết quả thiết kế
Cấu hình cho FPGA
Hình 2.14 Qui trình thiết kế điển hình cho FPGA
Trang 33Hình 2.15 Qui trình thiết kế cho FPGA của công ty Actel
Điểm bắt đầu của quá trình thiết kế là mô tả luận lý cho mạch sẽ được hiện thực Bước này có thể thực hiện bằng cách sử dụng các chương trình vẽ sơ đồ mạch hay miêu tả bằng các ngôn ngữ đặc tả phần cứng – HDL hoặc có thể biểu diễn bằng các hàm Boolean Sau khi mô tả luận lý, các vi mạch được chuyển đổi về dạng chuẩn tắc, thường là hàm Boolean Các hàm Boolean này sau đó được xử lý bằng các bộ tối ưu với mục đích là chỉnh sửa hàm để tối ưu diện tích hoặc tốc độ của mạch sau khi hiện thực Sau đó sử dụng những công cụ thiết
kế tự động (“Electronic Design Automation” - EDA) để tạo ra tập tin netlist đã được ánh xạ
công nghệ Netlist này sẽ được đặt vào trong một FPGA thực tế bằng quá trình sắp đặt và đi dây Thông thường mỗi công ty sản xuất FPGA sẽ cung cấp một công cụ phần mềm hỗ trợ quá trình sắp đặt và đi dây này Kết quả lắp đặt và đi dây này có thể được người sử dụng kiểm tra lại thông qua các công cụ phân tích thời gian trể, công cụ mô phỏng hay bằng các công cụ
Trang 34hiển thị cấu trúc kết nối trực quan Khi thiết kế và kiểm tra hoàn chỉnh, kết quả của thiết kế là tập tin nhị phân sẽ được tạo ra, tập tin này dùng để cấu hình FPGA theo mong muốn của thiết
kế Thông thường công cụ tạo ra tập tin này cũng được cung cấp bởi công ty sản xuất FPGA tương ứng cho từng loại FPGA
Để đơn giản hóa việc thiết kế các ứng dụng FPGA phức tạp, những thư viện định nghĩa trước các hàm và mạch phức tạp được cung cấp cho những người thiết kế Các thư viện này đã được tối ưu và kiểm tra tính đúng đắn Những mạch định nghĩa trước này thường được gọi là các lõi sở hữu trí tuệ (IP-Cores) được cung cấp bởi nhà cung cấp FPGA hoặc một công
ty hay tổ chức độc lập
Trong suốt quá trình thiết kế, người thiết kế ứng dụng FPGA phải thực hiện việc mô phỏng tại nhiều bước trong quá trình thiết kế Thiết kế ban đầu bằng cách vẽ mạch hay ngôn
ngữ HDL được mô phỏng bằng các tạo ra các mẫu kiểm tra (“testbench”) và quan sát kết quả
Sau khi thiết kế được tổng hợp và ánh xạ công nghệ tạo thành netlist thì netlist này cũng được
mô phỏng để bảo đảm quá trình tổng hợp không có lỗi Cuối cùng, thiết kế được đưa vào FPGA và các trễ lan truyền có thể được thêm vào và mô phỏng lại
2.2.5 Các loại FPGA
Là một trong những nhánh phát triển lớn nhất của công nghiệp bán dẫn, thị trường FPGA có nhiều khác biệt Các công ty liên quan đến FPGA thay đổi nhanh chóng và khó để nói sản phẩm nào là tốt nhất khi công nghiệp đạt đến trạng thái ổn định.Vì lý do này và để tập trung hơn, phần này chỉ giới thiệu những sản phẩm FPGA hiện có ở phòng thí nghiệm Kỹ thuật Máy tính khoa Khoa học và Kỹ thuật Máy tính (KH&KTMT), trường Đại học Bách Khoa TPCHM, các sản phẩm này sẽ phục vụ cho việc hiện thực các thiết kế cũng như dùng kiểm thử phương pháp hiện thực trong đề tài này
Hiện nay các FPGA trên thị trường được chia thành 2 loại: (1) FPGA dựa trên SRAM, (2) FPGA dựa trên cầu chì Ở loại đầu tiên, Xilinx và Altera đang là những nhà sản xuất có số lượng khách hàng nhiều nhất Ở loại thứ hai, Actel, QuickLogic, Cypress và Xilinx đang cạnh tranh nhau
Trang 35Spartan-IIE trước đó bằng cách gia tăng số tài nguyên luận lý, RAM, số ngõ vào ra cũng như gia tăng hiệu suất và cải tiến hàm quản lý xung nhịp Hình 2.16 biểu diễn kiến trúc tổng quát của Xilinx Spartan-3 FPGA với các thành phần như:
– Khối luận lý khả cấu hình (CLB) bao gồm các LUT theo dạng RAM dùng để hiện thực các hàm luận lý cũng như là các phần tử lưu trữ,
– RAM,
– Các bộ Multiplier có khả năng thực hiện phép nhân 2 số nhị phân 18 bits,
– Digital Clock Manager (DCM) cung cấp khả năng phân chia, làm trễ, nhân và chia tần số, dịch pha tín hiệu xung nhịp
Hình 2.16 Kiến trúc tổng quát của Xilinx Spartan-3 FPGA
Trong các thành phần trên, CLB sẽ được quan tâm nhiều nhất trong việc hiện thực mạch bất đồng bộ trên FPGA Đối với Xilinx Spartan-3 FPGA thì các CLB tạo thành tài nguyên luận lý chính cho việc hiện thực các mạch đồng bộ cũng như là các mạch tổ hợp Mỗi CLB bao gồm 4 Slice được kết nối với nhau như Hình 2.17 Các Slice được đánh số theo hàng
và cột theo dạng X#Y#, trong đó ký hiệu X theo sau là số chỉ ra giá trị cột của Slice tính từ trái sang phải Ký hiệu Y theo sau là số chỉ ra hàng của Slice tính từ trên xuống dưới
Mỗi Slice gồm có 2 khối Function Generator, 2 khối lưu trữ, multiplexer, carry logic
và các cổng số học Các khối Function Generator thuộc dạng RAM, hay còn được gọi là LUT,
là tài nguyên chính để hiện thực các hàm luận lý Mỗi LUT trong hai LUT (F và G) có 4 ngõ nhập (I0-I3) và một ngõ xuất (O) Do vậy, mỗi LUT có thể cho phép hiện thực một hàm Boolean 4 biến bất kỳ Ngoài ra, các khối multiplexer có thể dùng để kết hợp các LUT một các hiệu quả để hiện thực các hàm luận lý phức tạp hơn
Trang 36Hình 2.17 Cấu trúc kết nối các slice trong một CLB của Xilinx Spartan-3 FPGA
2.2.5.2 Altera Cyclone II PFGAs
Đây là sản phẩm giá thành thấp của công ty Altera [18] với 68416 khối luận lý, với 1,1 Mb bộ nhớ được sản xuất theo công nghệ 30mm wafer Hình 2.18 biểu diễn sơ đồ khối của FPGA Altera Cyclone II với các khối bộ nhớ, bộ phân kênh, PLL được nhúng vào trong FPGA
Mỗi khối luận lý của Cyclone II bao gồm các đặc điểm sau:
– Một bảng tìm kiếm (LUT) 4 ngõ vào có khả năng hiện thực bất kỳ hàm 4 biến nào
– Một thanh ghi khả lập trình
– Một kết nối chuỗi lan truyền (“Carry chain connection”)
– Một kết nối chuỗi thanh ghi (“Register chain connection”)
– Khả năng điều khiển tất cả các loại kết nối: cục bộ (local), theo hàng, theo cột, chuỗi thanh ghi và liên kết trực tiếp giữa các kết nối
– Hỗ trợ đóng gói thanh ghi (“Register packing”)
– Hỗ trợ hồi tiếp thanh ghi (“Register feedback”)
Trang 37Hình 2.18 Sơ đồ khối Altera Cyclone II
Hình 2.19 Cấu trúc một khối luận lý của Cyclone II
Hình 2.19 biểu diễn cấu trúc của một khối luận lý trong Cyclone II Mỗi khối luận lý
có ba ngõ ra để điều khiển tài nguyên kết nối cục bộ, hàng và cột Ngõ ra của LUT hay thanh ghi có thể điều khiển một trong ba ngõ ra này một cách độc lập Hai ngõ ra của bộ luận lý điều khiển hàng hoặc cột và liên kết trực tiếp với tài nguyên kết nối, trong khi đó một ngõ ra khác điều khiển tài nguyên kết nối bên trong cho phép LUT điều khiển một ngõ ra và thanh ghi điều khiển một ngõ ra khác Kỹ thuật này, kỹ thuật đóng gói thanh ghi, làm tăng khả năng
Trang 38sử dụng của thiết bị bởi vì thiết bị có thể sử dụng thanh ghi và LUT cho những hàm không có quan hệ với nhau
2.2.5.3 Actel ProAsic3
Hình 2.20 Kiến trúc ProAsic3 với 4 dãy ngõ vào/ra
ProAsic3 là sản phẩm FPGA thế hệ thứ 3 của công ty Actel [17] dựa trên công nghệ
flash Công nghệ flash ổn định (“Nonvolatile flash technology”) làm cho ProAsic3 tin cậy hơn, tiêu thụ năng lượng thấp ProAsic3 cung cấp một bộ nhớ bán dẫn (“Flash memory”) 1Kb
trên chip, khả lập trình, bộ nhớ ổn định FlashROM, cũng như là mạch tạo xung nhịp dựa trên
PLL (“Phase-Locked Loop”), hỗ trợ lên đến 1 triệu cổng, 144Kbits bộ nhớ RAM hai chiều và
lên đến 300 ngõ vào ra Hình 2.20 mô tả kiến trúc của ProAsic3 với 4 dãy ngõ vào ra
Phần lõi của FPGA bao gồm các khối đa năng Mỗi khối có thể cấu hình thành một LUT 3 ngõ vào (hiện thực được bất kỳ hàm luận lý 3 biến), một D Flip-Flop (có hoặc không
có enable), hoặc mạch chốt (latch) bằng cách lập trình chính xác các kết nối Hình 2.21 miêu
tả các cấu hình có thể xây dựng được từ các khối đa năng trong ProAsic3
Hình 2.21 Các cấu hình có thể của khối đa năng trong ProAsic3
Trang 392.3 Kết chương
Phần 1 của Chương 2 đã giới thiệu định nghĩa mạch bất đồng bộ, phân biệt mạch bất dồng bộ và đồng bộ cũng như các ưu nhược điểm của thiết kế bất đồng bộ so với thiết kế đồng bộ Đồng thời, chương này cũng đã nêu lên những vấn đề quan trọng trong thiết kế bất đồng bộ và điểm qua các mô hình điển hình như mô hình thời gian trễ có giới hạn, mô hình thời gian trễ không nhạy, mô hình độc lập tốc độ và mô hình thời gian trễ không nhạy có chừng mực Các giao thức bắt tay thường gặp trong thiết kế bất đồng bộ như giao thức đóng gói dữ liệu, giao thức 2 đường ray 4 pha, giao thức 2 đường ray 2 pha cũng đã được giới thiệu trong chương này Cuối cùng Phần 1 cũng đã trình bày về cổng Muller, một thành phần quan trọng để hiện thực các giao thức truyền thông trong mạch bất đồng bộ
Phần 2 của đã giới thiệu tổng quan về FPGA, qui trình thiết kế một ứng dụng FPGA Kiến trúc của ba FPGA của Xilinx, Altera và Actel hiện có ở phòng thí nghiệm Kỹ thuật Máy tính đã được giới thiệu trong phần này Kiến trúc tổng quát của các FPGA đã giới thiệu cũng
sẽ làm nền tảng và cơ sở lý thuyết để phát triển một phương pháp hỗ trợ thiết kế vi mạch bất đồng bộ trên FPGA
Chương tiếp theo sẽ trình bày về các công trình liên quan đến việc hiện thực mạch bất đồng bộ trên FPGA đã và đang được nghiên cứu trên thế giới Các nghiên cứu này sẽ được đánh giá những ưu nhược điểm để làm cơ sở tham khảo phát triển phương pháp hiện thực mạch bất đồng bộ trên FPGA phù hợp với điều kiện thực tế ở Việt Nam
Trang 40Chương 3
NHỮNG CÔNG TRÌNH LIÊN QUAN ĐẾN HIỆN THỰC MẠCH BẤT ĐỒNG BỘ TRÊN FPGA
3.1 Những khó khăn khi hiện thực mạch bất đồng bộ trên FPGA
Mặc dù thiết kế bất đồng bộ đang ngày càng phổ biến, nhưng các thiết bị để hiện thực mạch cũng như hệ thống bất đồng bộ chưa đáp ứng được những yêu cầu của thiết kế bất đồng bộ Các thiết bị khả lập trình hiện nay như FPGA hay CPLD không có các phần tử đặc biệt được sử dụng để hiện thực mạch bất đồng bộ như các cổng Muller, phần tử trọng tài,… Ngoài ra, các thiết bị khả lập trình này không bảo đảm việc hiện thực mạch bất đồng bộ sẽ không xảy ra nhiễu [13]
FPGA là một phương tiện đang chiếm ưu thế để làm mẫu và hiện thực các mạch số Tuy vậy chúng vẫn thiếu các phần tử là đóng vai trò quan trọng trong thiết kế bất đồng bộ Hơn nữa, giải quyết vấn đề này không đơn giản là chỉ thêm các phần tử này vào FPGA FPGA phải có khả năng tiên đoán được thời gian trễ của dây nối và phải không tạo ra nhiễu luận lý lẫn nhiễu do trễ truyền Ngoài ra, các công cụ ánh xạ phải được chỉnh sửa lại nhằm giải quyết các vấn đề của mạch bất đồng bộ đặc biệt là phân rã mạch luận lý hữu hiệu để đặt vào những khối luận lý và đi dây hữu hiệu để bảo đảm rằng mối quan hệ thời gian truyền phải được thõa mãn
Có rất nhiều khó khăn khi hiện thực hệ thống bất đồng bộ trên FPGA Những khó khăn này rơi vào các loại (1) nhiễu, (2) ràng buộc thời gian, (3) các thiết bị giữ trạng thái
3.1.1 Nhiễu
Trong mạch đồng bộ, một xung nhịp sẽ quyết định khi nào tín hiệu được xử lý Giá trị của tín hiệu chỉ quan trọng ở thời điểm xung quanh thời điểm có cạnh của xung nhịp Điều này cho phép người thiết kế bỏ qua rất nhiều sự dao động của tín hiệu ngoài thời điểm xuất hiện cạnh xung nhịp Ngược lại, một mạch bất đồng bộ phải giữ tín hiệu liên tục không thay đổi nếu không có yêu cầu từ các phần tử khác trong mạch Do đó, bất kỳ chuyển đổi nào trong tín hiệu của mạch bất đồng bộ điều có khả năng gây ra lỗi
Nhiễu là vấn đề cố hữu của các hàm Boolean hoặc xuất hiện do cách hiện thực hàm Boolean đó [1][2][6][7] Ví dụ, nếu cả hai ngõ vào của một cổng XOR được cho phép thay