TÓM TẮT LUẬN VĂN Tái cấu hình từng phần động TCHTP FPGA là một kỹ thuật hiện thực cho phép chỉ một bộ phận được chỉ định của thiết bị FPGA được tái cấu hình trong khi phần còn lại không
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA -
NGUYỄN VĂN QUANG ÁNH
HIỆN THỰC TÁI CẤU HÌNH TỪNG PHẦN FPGA CHO HỆ THỐNG NHẬN
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA -
NGUYỄN VĂN QUANG ÁNH
HIỆN THỰC TÁI CẤU HÌNH TỪNG PHẦN FPGA CHO HỆ THỐNG NHẬN
Trang 3CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG TP HCM
Cán bộ hướng dẫn khoa học: PGS.TS Trần Ngọc Thịnh
Cán bộ chấm nhận xét 1:
Cán bộ chấm nhận xét 2:
Luận văn thạc sĩ được bảo vệ tại: Trường đại học Bách Khoa – ĐHQG TP.HCM, ngày………tháng………năm………
Thành phần hội đồng đánh giá luận văn thạc sỹ gồm: 1
2
3
4
5
Xác nhận của chủ tịch hội đồng đánh giá luận văn và Trưởng khoa quản lý chuyên ngành sau khi luận văn đã được sữa chữa (nếu có)
Trang 4ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ tên học viên: NGUYỄN VĂN QUANG ÁNH MSHV: 11070440
Ngày, tháng, năm sinh: 11/11/1983 Nơi sinh: Bình Thuận
Chuyên ngành: Khoa học máy tính Mã số : 60.48.01
I TÊN ĐỀ TÀI: Hiện thực tái cấu hình từng phần (TCHTP) FPGA cho hệ thống nhận dạng virus tốc độ cao
II NHIỆM VỤ VÀ NỘI DUNG:
Nghiên cứu chi tiết kỹ thuật TCHTP trên các thiết bị FPGA, các cách thức
áp dụng kỹ thuật này trong các hệ thống của các tác giả khác
Hiểu kiến trúc của hệ thống chống virus HR-AV sử dụng tái cấu hình truyền thống (tái cấu hình toàn bộ FPGA) cả về phần cứng và phần mềm
Hiện thực TCHTP cho hệ thống HR-AV, đảm bảo trong quá trình TCHTP hệ thống vẫn có thể tiếp tục hoạt động giao tiếp với phần mềm quét virus
III NGÀY GIAO NHIỆM VỤ : 23/06/2014
IV NGÀY HOÀN THÀNH NHIỆM VỤ : 10/07/2015
Trang 5LỜI CẢM ƠN
Lời đầu tiên tôi xin chân thành cảm ơn tới Thầy hướng dẫn, PGS.TS Trần Ngọc Thịnh đã tin tưởng giao đề tài, và hướng dẫn tôi tận tình trong suốt quá trình thực hiện luận văn này Đặc biệt thầy đã tạo điều kiện cho tôi có thể trao đổi và nhận được sự hỗ trợ của những sinh viên, học viên cùng làm trong lĩnh vực FPGA Đây là một phần không thể thiếu để tôi có hoàn thành luận văn này
Tôi cũng xin cảm ơn các em Trần Trung Hiếu, Trần Nguyên Vũ, Nguyễn Việt Tiến, Nguyễn Duy Thái đã giúp đỡ tôi trong quá trình tìm hiểu phần cứng và phần mềm hệ thống hiện tại, và những góp ý quý báu đối với các giải pháp hiện thực hệ thống mới Tôi cũng cần phải nói lời cám ơn đến các em Trần Thị Thùy Châu, Đỗ Minh Chiến và Nguyễn Duy Quốc về những giúp đỡ nhiệt tình trong quá trình hiện thực và thử nghiệm hệ thống
Cuối cùng xin cám ơn bố mẹ đã luôn nhắc nhở tôi cố gắng học tập Cảm ơn vợ và con trai luôn ủng hộ tôi trong suốt chặng đường đã qua
Trang 6TÓM TẮT LUẬN VĂN
Tái cấu hình từng phần động (TCHTP) FPGA là một kỹ thuật hiện thực cho phép
chỉ một bộ phận được chỉ định của thiết bị FPGA được tái cấu hình trong khi phần còn
lại không hề thay đổi; hệ thống hiện thực trên FPGA vẫn có thể tiếp tục hoạt động bình
thường Người ta vì vậy có thể dùng kỹ thuật này để xây dựng hệ thống dựa trên FPGA
mà có yêu cầu là phải đảm bảo hệ thống có thể vận hành ngay cả khi cần thay đổi thiết
kế phần cứng hiện thực trên FPGA Hệ thống HR-AV (HCMUT Reconfigurable
Anti-Virus) là một hệ thống phát hiện virus máy tính được phát triển dựa trên sự kết hợp
giữa tính mềm dẻo của phần mềm và sức mạnh tính toán vượt trội của phần cứng hiện
thực trên thiết bị FPGA Virterx-5 gắn trên board mạch Net-FPGA 10G Tốc độ quét
virus nhanh của HR-AV làm cho nó có thể ứng dụng vào hệ thống máy chủ hay
gate-way
Tuy nhiên, vì cơ sỡ dữ liệu các loại virus hầu như được cập nhật hàng ngày, đặc
biệt là trong một thế giới kết nối cao nhờ vào sự phát triển nhanh của cơ sở hạ tầng
Internet như hiện nay, yêu cầu cần phải xem xét và cập nhật các thuật giải quét virus
trở nên thường xuyên hơn trước Trong khi đó hệ thống hiện tại chỉ hỗ trợ việc tái cấu
hình truyền thống Cách này luôn tái cấu hình toàn bộ thiết bị FPGA khi cần phải cập
nhật thiết kế dù là nhỏ Thực nghiệm cho thấy, hiện tại cấu hình thiết bị FPGA Virtex-5
thông qua cổng JTAG tốn khoảng 20s Thêm vào đó, sau khi quá trình tái cấu hình toàn
bộ được hoàn thành, phần mềm phải khởi động lại các chức năng giao tiếp với phần
cứng trước khi hệ thống có thể quay trở lại hoạt động bình thường Do đó hệ thống
phải dừng việc quét virus trong suốt một thời gian dài có thể nói là không thể chấp
nhận được đối với một ứng dựng trên máy chủ Áp dụng TCHTP vào hệ thống HR-AV
được kỳ vọng sẽ loại bỏ hạn chế này của hệ thống
Trong luận văn này, tác giả đã đề nghị giải pháp hiện thực lõi kép để có thể áp
dụng DPR cho hệ thống hiện tại Việc tái cấu hình có thể được thực hiện dùng cổng
giao tiếp ngoại vi JTAG hoặc dùng logic bên trong để điều khiển khối tích hợp sẵn
ICAP (Internal Configuration Access Port) Kết quả thực nghiệm cho thấy trong quá
trình thiết bị FPGA đang được tái cấu hình, hệ thống có thể duy trì tính đúng đắn và
50% khả năng quét virus Thêm vào đó hệ thống có thể nhanh chóng quay trở lại hoạt
động với hiệu suất cao nhất sau 6 giây nếu như cổng JTAG được sử dụng và chỉ 9
mili-giây nếu như “ICAP Controller” được lựa chọn cho việc tái cấu hình
Trang 7ABSTRACT
Dynamic Partial Reconfiguration (DPR) FPGA is an implementation technique allowing a specific portion of FPGA device to be reconfigured while keeping the rest intact; making it possible for hardware system running on FPGA to be functional, still One thus can use this to develop FPGA-based system where it’s important to ensure the operation even during the period the hardware design deployed in FPGA device is being altered by a new or updated version HR-AV (HCMUT Re-configurable Anti-Virus) is a computer virus detection system developed by combining the flexibility of software and processing power of Virtex-5 FPGA device mounted on Net-FPGA 10G board The high speed scanning performance of HR-AV makes it applicable to be used
in server or gateway environment
However virus database is updated almost every day, especially in a connected world thanks to fast-growing Internet infrastructure like today The demand
highly-to reconsider and update virus scanning algorithm thus arise more often than ever Whereas, current system only supports traditional configuration method which always reconfigure the entire FPGA device whenever it's required to update design regardless of design change complexity Configuring the entire Virtex-5 FPGA device
at least takes 20 seconds using JTAG configuration port Furthermore, after the FPGA
is reconfigured, software needs to re-strart the commnucation with hardware before the entire system can be back to normal operation This means that the system has to stall virus scanning process by hardware in a considerably unacceptable amount of time for
a server application Applying DPR to current system is expected to remove this limitation
In this thesis, the author proposed dual-core implementation to apply DPR
to current system The configuration can be done using external JTAG port for using internal logic to control built-in ICAP (Internal Configuraton Access port) primitive Experimental results show that during FPGA reconfiguration period, the system can maintain operation correctness and fifty-percent scanning capability Also system can
be switched back to full-capability mode after 6 seconds if external JTAG is used and 9 milli-seconds if the later
Trang 8LỜ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 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 tháng năm 2015
Nguyễn Văn Quang Ánh
Trang 10-2.1 Tổng quan về thiết bị FPGA và quá trình cấu hình FPGA 5
-2.1.1 Field Programmable Gate Array (FPGA) 5 2.1.2 Quy trình thiết kế và tái cấu hình truyền thống - tái cấu hình toàn bộ - 9 - 2.1.3 Quy trình thiết kế và tái cấu hình từng phần (TCHTP) - 11 -
-2.2 Các yêu cầu phần cứng đối với hệ thống hộ TCHTP 14 2.3 Chi tiết quá trình tái cấu hình Virtex5 và cấu trúc “bitstream” - 16 -
-2.3.1 Các bước cơ bản của quá trình tái cấu hình FPGA 16
-2.4.2 Hiện thực phần cứng của hệ thống 27 2.4.3 Quy trình giao tiếp giữa phần cứng và phần mềm - 29 -
Trang 11-CHƯƠNG 3 TỔNG HỢP CÁC CÔNG TRÌNH NGHIÊN CỨU LIÊN QUAN 32
-3.1 Áp dụng TCHTP vào hệ thống phát hiện tấn công mạng (NIDS) 32 3.2 Áp dụng TCHTP vào hệ thống “virtual network” - 34 - 3.3 Áp dụng TCHTP vào việc hiện thực mã hóa IPsec trên FPGA - 36 - 3.4 Tăng tốc quá trình TCHTP dùng bộ điều khiển “ICAP” tốc độ cao - 38 -
-4.2 Xây dựng môi trường mô phỏng và mô phỏng phần cứng 67
-4.3.1 Qui trình của phần mềm quản lý TCHTP dùng “JTAG” 69 4.3.2 Qui trình của phần mềm quản lý TCHTP dùng “ICAP” - 71 - 4.3.3 Qui trình quét virus dùng lõi kép - 74 -
-5.1.1 Tốc độ TCHTP dùng cổng giao tiếp JTAG 76 5.1.2 Đánh giá tốc độ của “ICAP Controller” so với các công trình khác - 76 -
-5.2 Đánh giá tốc độ quét virus và ảnh hưởng của kích thước “buffer” 78 5.3 Đánh giá ảnh hưởng của TCHTP lên quá trình quét virus - 80 -
-5.3.1 Đánh giá ảnh hưởng lên hàm “cli_bbf_static_scanbuff” 80 5.3.2 Đánh giá ảnh hưởng của TCHTP lên toàn bộ phần mềm quét virus - 82 -
-5.4 Đánh giá lợi ích của việc hỗ trợ giao tiếp bất đồng bộ 83 5.5 Đánh giá tài nguyên tiêu tốn cho việc hỗ trợ TCHTP - 84 - Đánh giá ảnh hưởng của kích thước vùng động lên hệ thống
Trang 12-CHƯƠNG 6 KẾT LUẬN VÀ ĐỀ XUẤT 89
Trang 13-MỤC LỤC BẢNG
Bảng 21: Mẫu nhận dạng “bitwidth” tự động 17
Bảng 22: Mẫu nhận dạng “Sync word” 17
Bảng 23: Cấu trúc “lệnh” cho packet loại 1 18
Bảng 24: Cấu trúc “lệnh” cho packet loại 2 18
Bảng 25: Thứ tự các “word” trong một “full bitstream” thông thường 19
Bảng 26: Đặc tả giao tiếp vào ra (I/O) của ICAP “primitive” 23
Bảng 27: Chi tiết phần “header” của packet 30
Bảng 41: Thay đổi trong định dạng gọi tin kết quả 46
Bảng 42: Thay đổi trong định dạng gọi tin từ phần mềm gửi xuống phần cứng 47
Bảng 43: Thay đổi trong định dạng gọi tin từ phần mềm gửi xuống phần cứng 49
Bảng 44: Mã hóa và ý nghĩa của các trạng thái trong “DPR Control FSM” 57
Bảng 45: Các trạng thái trong “Core Monitor FSM” 60
Bảng 46: Đặc tả của thanh ghi dùng cho việc TCHTP dùng cổng JTAG 63
Bảng 47: Đặc tả của thanh ghi dùng cho việc TCHTP sử dụng ICAP 63
Bảng 51: Thời gian TCHTP dùng JTAG với các kích thước bitstream khác nhau 76 -Bảng 5-2: “throughput” của hàm quét một block trong quá trình TCHTP một core - 80 -Bảng 5-3: “Throughput” của hàm quét một block trong quá trình TCHTP hai core - 81 Bảng 54: Tài nguyên tiêu tốn cho việc hỗ trợ TCHTP 85
Trang 14-MỤC LỤC HÌNH
Hình 21 Kiến trúc tổng quát của một thiết bị FPGA 5
Hình 22 Cấu trúc của một CLB 6
Hình 23 Cấu trúc của một tài nguyên DSP có sẵn 7
Hình 24 Quy trình thiết kế và tái cấu hình truyền thống 9
Hình 25 Cấu trúc thiết bị FPGA của Xilinx hỗ trợ TCHTP 11
Hình 26 Quy trình place&route và sinh “bitstream” áp dụng TCHTP 12
Hình 27 Các “logic” cần để “decoupling” vùng động PRR0 và các vùng khác 14
Hình 28 Giá trị của tín hiệu Enable và Reset trong quá trình TCHTP PRR0 15
Hình 29 Các bước lập trình thiết bị FPGA Virtex5 16
Hình 210 Phần đầu chứa syncword của bitstream 20
Hình 211 Phần chứa ghi vào thanh ghi FDRI, theo sau là dữ liệu cấu hình 20
Hình 212 Phần chứa lệnh để kiểm tra CRC 20
Hình 213 Phần cuối cùng lệnh để “DESYNC” 20
Hình 214 Cách kiểm tra lỗi CRC trong quá trình nạp “partial bitstream” 22
Hình 215 Cấu trúc của HWICAP 24
Hình 216 Tóm tắt bitstream và việc tái cấu hình 25
Hình 217 Kiến trúc hệ thống HRAV 26
Hình 218 Cấu trúc phần cứng của hệ thống HRAV hiện tại 27
Hình 219 Cách thức phân chia gói tin để giao tiếp giữa phần cứng và phần mềm 29 Hình 220 Thuật giải giản lược của hàm quét một “block” 29
Hình 221 Định dạng gói tin gửi từ phần mềm xuống phần cứng 30
Hình 222 Định dạng gói tin kết quả từ phần cứng gửi lên phần mềm 31
Hình 31 Kiến trúc hiện thực NIDS áp dụng kỹ thuật TCHTP 32
Hình 32 Kiến trúc hiện thực “virtual network” áp dụng kỹ thuật TCHTP 34
Hình 33 Kiến trúc hiện thực mã hóa IPSec áp dụng kỹ thuật TCHTP 36
Hình 34 Kiến trúc hiện thực của “ICAP controller” tốc độ cao 38
Hình 41 Kiến trúc hiện thực lõi kép hỗ trợ TCHTP 42
Hình 42 Thay đổi trong việc truyền gói tin xuống phần cứng lõi kép 45
Hình 43 Kiến trúc hiện thực lõi kép hỗ trợ tái cấu hình từng phần 50
Hình 44 Sơ đồ chuyển trạng thái của “Demux Control FSM” 51
Hình 45 Chi tiết hiện thực của “Collector” 52
Hình 46 Cấu trúc của khối “DPR Controller” 55
Hình 47 Sơ đồ chuyển trạng thái của “DPR Control FSM” 57
Hình 48 Cấu trúc của “khối con” “Packet buffer” 59
Hình 49 Cấu trúc của “khối con” “Result Packet Processor” 61
Hình 410 Cấu trúc của “khối con” “ICAP Controller” 62
Hình 411 Cấu trúc “testbench” của môi trường mô phỏng hệ thống 67
Trang 15Hình 412 Lược đồ hoạt động của phần mềm TCHTP dùng JTAG 69
Hình 413 Lược đồ hoạt động của phần mềm TCHTP dùng ICAP “Debug mode” 71 Hình 414 Lược đồ hoạt động của phần mềm TCHTP dùng ICAP “Stream mode” 72 Hình 415 Thuật giải của hàm quét một “block” dùng lõi kép và hỗ trợ TCHTP 74
Hình 51 Tốc độ quét virus với các cấu hình “packet” buffer khác nhau 78
Hình 52 So sánh tốc độ với cấu hình “core_clk” khác nhau 83
Hình 53 “Floorplan” cho vùng động của hệ thống dùng planAhead 84
Hình 54 Kết quả hiện thực với kích thước vùng động lớn hơn yêu cầu 86
Hình 55 Lỗi “timing violation” khi vùng động lớn và có “ICAP controller” 87 Hình 56 Kết quả không có lỗi sau khi đã thay đổi ràng buộc vị trí của vùng động 88
Trang 16-CHƯƠNG 1 GIỚI THIỆU LUẬN VĂN
1.1 Tính cấp thiết của đề tài
Trong một thế giới “kết nối” ngày nay, Internet là một trong những cơ sở hạ tầng không thể thiếu, nếu không nói là quan trọng bậc nhất đối với cuộc sống của nhân loại Với nhiều lợi ích lớn mà Interent mang lại, thì số lượng người dùng đã không ngừng gia tăng Theo Wiki, thì đến năm 2013, tổng số người sử dụng Internet chiếm 39% dân
số thế giới Đặc biệt là ở các nước phát triển, tỷ lệ dân số kết nối internet đã tăng khoảng bốn lần; từ 8% trong năm 2005 lên 31% trong năm 2013 Riêng ở Việt Nam, theo WordBank, sự xâm nhập của Internet chỉ là 3.8% tổng dân số trong năm 2003 Nhưng sau chỉ một thập kỷ, vào năm 2013, con số này là 39.5%, tức là tăng hơn 10 lần
Đi đôi với sự phát triển, Internet mặt khác lại là phương tiện hữu hiệu để phát tán các virus máy tính Các virus này có thể lấy cắp các thông tin bảo mật, nhạy cảm của người dùng, xóa các dữ liệu quan trọng, hay nguy hiểm hơn là tạo điều kiện cho người phát tán virus đột nhập chiếm quyền điều khiển hệ thống máy tính Do đó an ninh thông tin, hay cụ thể hơn là chống virus máy tính là một vấn đề tối quan trọng Thêm vào đó, nếu như trước đây các virus máy tính chủ yếu lan truyền qua các thiết bị lưu trữ
cá nhân như đĩa mềm, đĩa CD thì ngày nay nó có thể dễ dàng và nhanh chóng lan truyền đến hàng loạt máy tính kết nối Internet qua các trang web, thư điện tử Từ đó, có thể nói rằng việc xây dựng và phát triển các chương trình hay hệ thống chống virus máy tính là điều rất cần thiết, nhất là đối với các doanh nghiệp, các tổ chức lớn, các cơ quan của chính phủ, quân đội, nơi mà sự xâm nhập của virus nếu không được ngăn chặn có thể dẫn đến thiệt hại rất lớn
Hiện nay, có rất nhiều giải pháp phần mềm chống virus như Kaspersky, Avast, BKAV, ClamAV… Các giải pháp này có tính uyển chuyển cao do dễ dàng cập nhật khi cần cải tiến thuật giải hay thay đổi cơ sở dữ liệu virus Tuy nhiên với sự phát triển lớn của các loại virus thì giải pháp phần mềm khó có thể đáp ứng được yêu cầu về tốc
độ, đặc biệt là đối với các hệ thống máy chủ, các gateway đòi hỏi băng thông dữ liệu nhiều Gbps, và phải đồng thời phục vụ hàng trăm ngàn người dùng Vì vậy cần có các giải pháp tăng tốc dùng phần cứng Thiết bị phần cứng khả lập trình (Field Programmable Gate Array - FPGA) là lựa chọn phù hợp trong trường hợp này do khả năng uyển chuyển rất cao so với các giải pháp phần cứng dùng ASIC (Application Specific Integrated Circuit) mặc dù tốc độ thường là thấp hơn ASIC Việc sử dụng
Trang 17FPGA có thể đảm bảo việc cập nhật hệ thống là dễ thực hiện, trong khi đó tốc độ xử lý
là vượt trội so với phần mềm Dẫu vậy tài nguyên phần cứng trên các thiết bị FPGA là hữu hạn, nên không phải tất cả các công việc đều có thể được hiện thực bằng phần cứng Do đó một giải pháp tổng thể thường cần phải kết hợp cả phần mềm và phần cứng để tận dụng điểm mạnh, khắc phục điểm yếu của cả hai HV-AV (HCMUT Reconfigurable Anti-Virus) [1] là một hệ thống quét virus như vậy
Với các hệ thống dùng FPGA, thông thường khi cập nhật dữ liệu hay thuật giải thì cần phải tái cấu hình toàn bộ FPGA và vì vậy hệ thống phải tạm ngưng hoạt động; mặc
dù trong nhiều trường hợp chỉ một số khối chức năng nhỏ trong toàn bộ hệ thống là cần phải thay đổi Điều này là không phù hợp trong các hệ thống đòi hỏi tính đáp ứng liên tục như các máy chủ hay ‘gateway’ Kỹ thuật tái cấu hình từng phần (partial reconfiguration) cho phép chỉ tái cấu hình một số vùng của thiết bị FPGA mà không làm ảnh hưởng đến các vùng còn lại[2] Điều này mang đến hai lợi ích lớn sau đây :
Một là các thành phần khác của hệ thống vẫn có thể hoạt động bình thường và
vì vậy đảm bảo hệ thống có thể đáp ứng người dùng trong quá trình tái cấu hình
Hai là thời gian tái cấu hình thường nhanh hơn do chỉ một phần của thiết bị là cần được lập trình lại
Nói cách khác việc thêm chức năng TCHTP sẽ giúp hệ thống hiện tại có thể được áp dụng cho các hệ thống đòi hỏi đáp ứng thời gian thực Ngoài ra nhìn một cách xa hơn, TCHTP là một lĩnh vực đã được nghiên cứu và áp dụng trong nhiều hệ thống trên thế giới, tuy nhiên ở Trường Đại học Bách Khoa, kiến thức về lĩnh vực này còn rất hạn chế, nếu không nói là chưa được nghiên cứu và áp dụng trước đây Đề tài sẽ góp phần quan trọng tạo tiền đề thúc đẩy việc nghiên cứu và áp dụng lĩnh vực này trong tương lai
Trang 181.2 Những đóng góp của luận văn
Những đóng góp chính là:
Xây dựng được kiến trúc hệ thống cho phép việc thay đổi giải thuật của phần cứng trong vùng TCHTP (vùng động) mà không cần phải thay đổi các phần cứng trong vùng tĩnh Đồng thời việc hỗ trợ lõi kép giúp cho hệ thống có thể hoạt động với công suất bằng 50% bình thường trong quá trình TCHTP
Xây dựng thành công phần mềm và phần cứng để thực hiện việc TCHTP
Đề xuất và hiện thực thành công phương án thay đổi giao thức giữa phần mềm quét virus và phần cứng đảm bảo phần mềm quét virus có thể hoạt động đúng một cách hoàn toàn độc lập với phần mềm tái cấu hình Điều này là rất quan trọng trong các mở rộng về sau Ở đây cần chú ý rằng phần mềm quét virus là phần mềm hiện có của hệ thống còn phần mềm để tái cấu hình từng phần là phần mềm mới phát triển
Xây dựng thành công khối “ICAP controller” hỗ trợ 3 phương thức TCHTP khác nhau, dùng chuẩn giao tiếp phổ biến là “bus AXI ” Hiệu suất tối đa của mỗi phương thức lần lượt 1Mbs, 50Mbs và 3Gbs Đặc biệt đây là hiệu suất khi hoạt động thức tế khi quá trình quét virus diễn ra song song với quá trình TCHTP, chứ không phải là hiệu suất của riêng “ICAP controller” như nhiều công bố trước đó
1.3 Cấu trúc luận văn
Chương 2: Trình bày chi tiết về thiết bị FPGA, làm rõ quy trình tái cấu hình toàn
bộ và tái cấu hình từng phần Chương này cũng sẽ trình bày chi tiết về cấu trúc của tập tin “bitstream” dùng để lập trình Xilinx Virtex5 FPGA vì việc hiểu cấu trúc của tập tin này là tối quan trọng trong quá trình viết phần mềm và thiết kế phần cứng tiếp nhận tập tin nó Cấu trúc phần cứng và cách thức giao tiếp giữa phần mềm và phần cứng trong quá trình quét virus của hệ thống hiện tại – hệ thống tái cấu hình toàn bộ cũng được sơ lược trong chương này
Chương 3: Tổng hợp các công trình nghiên cứu liên quan đến quá trình hiện thực tái cấu hình từng phần Các công trình nghiên cứu được phân loại, sơ lược và đánh giá
ưu điểm cũng như khuyết điểm
Chương 4: Đây là chương trọng tâm của luận văn Chi tiết hiện thực của hệ thống được làm rõ ở chương này Vì việc TCHTP đòi hỏi sự thay đổi trên phần mềm và phần cứng, nên cả phần cứng, phần mềm cùng với cách thức giao tiếp đều được trình bày chi tiết Kiểm định đặc tả phần cứng bằng mô phỏng là một việc rất cần thiết, chương này
Trang 19cũng miêu tả cách thức tác giả xây dựng hệ thống kiểm định và kiểm định hệ thống bằng mô phỏng trước khi thực thi trên phần cứng thật
Chương 5: Trình bày cách thức kiểm định và kết quả kiểm định hệ thống
Chương 6: Đây là chương để đúc kết lại luận văn và đề xuất các hướng mở rộng hệ thống cho các nghiên cứu trong tương lai
Trang 20CHƯƠNG 2 KIẾN THỨC NỀN TẢNG
Chương này giới thiệu thiết bị FPGA, phân biệt tái cấu hình toàn bộ và tái cấu hình từng phần Tiếp theo, một số yêu cầu bắt buộc đối với hệ thống hỗ trợ TCHTP được trình bày Hiểu rõ về hệ thống HR-AV là một yêu cầu chính của luận văn, chương này cũng trình bày hiểu biết chi tiết về phần cứng và cách thức phần cứng giao tiếp với phần mềm để từ đó làm nền tảng cho việc hiện thực tái cấu hình từng phần
2.1 Tổng quan về thiết bị FPGA và quá trình cấu hình FPGA
2.1.1 Field Programmable Gate Array (FPGA)
FPGA, viết tắt của “Field Programmable Gate Array” [3], là một loại thiết bị bán dẫn có kiến trúc được minh họa như hình 2-1 sau đây
Hình 2-1 Kiến trúc tổng quát của một thiết bị FPGA
Hình 2-1 cho ta thấy rằng FPGA bao gồm năm thành phần cơ bản Thành phần thứ nhất là các khối logic khả lập trình thường được gọi tắt là các CLB (configurable logic blocks) Mỗi CLB thường bao gồm một bảng tra LUT (lookup table) có thể được lập trình để thực hiện các chức năng luận lý cơ bản (combinational logic) như AND, OR, NOT, XOR, hoặc các chức năng kết hợp phức tạp hơn như bộ giải mã Về bản chất các LUT có thể là ROM hoặc là RAM nếu cho phép người dùng thực hiện chức năng ghi
Trang 21Chẳng hạn như một 5-1 LUT có thể đóng vai trò là một bộ nhớ RAM 32-bit Như vậy
8 5-1 LUT có thể kết hợp lại để làm một bộ nhớ 32x8 Bộ nhớ được cấu thành từ việc kết hợp nhiều LUT được gọi là các bộ nhớ phân tán (distributed RAM) để phân biệt với block RAM là các tài nguyên bộ nhớ có sẵn Ngoài ra mỗi CLB bao gồm 1 thanh ghi (register) có thể được sử dụng như là latch, JK, SR, hay D flip-flop vốn được dùng phổ biến để thiết kế các mạch tuần tự (sequential logic) Trong mỗi CLB còn có các
“carry chain” để chuyên dùng cho việc thiết kế các phép toán số học như phép cộng Hình 2-2 (a) cho thấy các thành phần cơ bản trong một CLB của một chip FPGA Virtex-5 của Xilinx Trong các dòng FPGA mới hơn như Virtex-6, Virtex-7 thì cấu trúc 6-2 LUT được hiện thực như hình 2-2 (b) Thực tế thì hai 5-1 LUT được ghép lại thành một 6-2 LUT
Hình 2-2 Cấu trúc của một CLB
Thành phần chủ yếu thứ hai của một thiết bị FPGA là các khối tài nguyên thiết kế sẵn Đây là các tài nguyên bộ nhớ, gọi là block RAM và các khối chuyên dụng cho cách các xử lý tín hiệu số (DSP) hay toán học như các bộ nhân, chia Các block RAM
có thể được lập trình để đóng vai trò là các bộ nhớ SP (Single Port) chỉ có thể hoặc đọc hoặc ghi tại mỗi thời điểm, hay DP (Dual Port) cho phép quá trình đọc và ghi có thể diễn ra đồng thời trên hai “port” khác nhau Ngoài ra còn có các logic đi kèm để có thể
dễ dàng lập trình kết nối các block RAM thành các bộ nhớ lớn hơn, hay dễ dàng kết nối các block RAM với các mạch điều khiển thành một FIFO hoàn chỉnh Hình 2-3 minh họa cấu trúc một bộ DSP có sẵn trong thiết bị FPGA Xilinx
Carry Chain
LUT
Carry in
Carry out
S/R
Trang 22Hình 2-3 Cấu trúc của một tài nguyên DSP có sẵn
Các bộ DSP có sẵn đã được thiết kế tối ưu cho phép người dùng có thể trực tiếp thiết kế các hệ thống cần nhiều tính toán toán học đạt hiệu suất cao Các tài nguyên cấu thành một DSP có thể được cấu hình để sử dụng như các tài nguyên thông thường khi cần thiết Chẳng hạn như người dùng có thể sử dụng các bộ nhân (MULT) trong các DSP có sẵn làm bộ nhân trong các mạch được thiết kế bởi người dùng Tất nhiên, trong những trường hợp đó, hiệu suất thường không cao
Thành phần chính yếu thứ ba là các bộ đệm vào ra dùng để kết nối các thành phần bên trong với các cổng I/O (còn gọi là I/O PAD) cho phép FPGA giao tiếp với các thiết
bị bên ngoài chẳng hạn như bộ nhớ SDRAM Các chip FPGA còn có sẵn các khối SERDES (ISERDES hay OSERDES) sử dụng trong việc thiết kế các chuẩn giao tiếp tuần tự tốc độ cao Thành phần thứ tư trong một chip FPGA là thành phần dùng để kết nối các tài nguyên với nhau Điều đặc biệt là các kết nối này có thể lập trình được cho phép có thể tùy biến thay đổi việc kết nối các khối luận lý với nhau khi thiết kế của hệ thống thay đổi Đây là một trong những đặc điểm nổi bật làm cho thiết bị FPGA rất uyển chuyển, tuy nhiên nó cũng là điểm có thể hạn chế tốc độ của các thiết bị FPGA so với các thiết bị ASIC vì cần phải sử dụng các tài nguyên kết nối có sẵn để kết nối các khối chức năng Ta không thể tùy ý lựa chọn kết nối như trong các thiết bị ASIC
“Routing” vì vậy thường là bài toán phức tạp trong thiết kế FPGA Cuối cùng, một bộ phận không thể thiếu trong thiết bị FPGA dù không được thể hiện rõ trong hình 2-1, chính là các tài nguyên để sinh ra nhịp xung clock từ clock tham khảo đầu vào
48
0
0 72
Y 36 X
0 17-bit shift 17-bit shift
CE
B REG
D 2-Deep Q
P
PATTERN DETECT
Trang 23(reference clock) và phân phối các tín hiệu clock này đến tất cả các thành phần mạch tuần tự trong toàn bộ thiết bị Cũng tương tự như các “routing resources” thì các tài nguyên này có thể tái lập trình Chẳng hạn như ta có thể dễ dàng thay đổi đầu vào của một MMCM (Mixed-Mode Clock Manager) để thay đổi tần số của clock đầu ra Tuy nhiên việc phải sử dụng các tài nguyên thiết kế sẵn để tạo và phân tán các tín hiệu clock làm cho hiệu suất của FPGA thấp hơn thiết bị ASIC nơi mà người dùng có thể phân tán các tín hiệu clock một cách “tự do” hơn
Ngoài năm thành phần cơ bản vừa trình bày, tùy thuộc vào nhà sản xuất, hay dòng sản phẩm mà các thiết bị FPGA có thể có thêm các khối chức năng có sẵn Chẳng hạn như chip FPGA XC5VFX70T của Xilinx có tích hợp sẵn một PowerPC Processor, trong khi chip XC5VSX240T có tích hợp sẵn 4 Ethernet MAC (Media Accessor Controller) [3]
Trang 242.1.2 Quy trình thiết kế và tái cấu hình truyền thống - tái cấu hình toàn bộ
Như đã đề cập ở phần mở đầu, điểm mạnh chính yếu của FPGA so với các thiết bị phần cứng dùng ASIC chính là tính uyển chuyển nhờ khả năng tái cấu hình Phần này
sẽ sơ lược về quy trình thiết kế hệ thống sử dụng cách thức cấu hình toàn bộ phổ biến [4] Hình 2-4 (a) minh họa một quy trình thiết kế FPGA thông thường và hình 2-4 (b) ở bên phải minh họa chi tiết các các bước để “tải” hay là cấu hình một chip FPGA của Xilinx Cách thức cấu hình cho FPGA của một hãng lớn (như Altera) cũng tương tự
(a) (b)
Hình 2-4 Quy trình thiết kế và tái cấu hình truyền thống
Có hai điểm cần lưu ý ở đây Một là ngoại trừ các bước thiết kế 1 và 2 phụ thuộc nhiều vào người phát triển hệ thống, thì các bước còn lại trong quy trình thiết kế hầu hết có thể được thực hiện tự động bằng các công cụ EDA (được cung cấp bởi các nhà sản xuất), người phát triển chủ yếu chỉ phải thực hiện việc xác lập các mục tiêu về tốc
độ và ánh xạ các cổng I/O (trong nhiều trường hợp có thể tái sử dụng các ánh xạ mẫu của các nhà cung cấp board mạch chủ) Mỗi khi cần thay đổi hệ thống, người phát triển chỉ cần phải sửa thiết kế HDL, và sử dụng công cụ EDA để tự động lặp lại các bước
Trang 25một cách rất thuận tiện Điểm lưu ý còn lại nằm ở bước 6.1, đó là toàn bộ bộ nhớ cấu hình (configuration memory) phải được xóa trước khi tải bitstream mới xuống thiết bị
Vì vậy, toàn bộ hệ thống phải ngưng hoạt động cho đến khi dữ liệu cấu hình mới được tải vào hệ thống từ các thiết bị lưu trữ bên ngoài Cũng vì tính chất này mà cách thức tái cấu hình này còn được gọi là tái cấu hình tĩnh (static reconfiguration) Ví dụ như toàn bộ bitstream của thiết bị là 10Mb, tốc độ cấu hình là khoảng 10Mb/s (dùng Flash tốc độ cao) thì quá trình tái cấu hình tốn ít nhất là 1 giây (chưa kể cả “overhead” khác) Việc phải tạm ngưng hoạt động trong 1 giây tuy nhiên lại là không thể chấp nhận trong các hệ thống an ninh đòi hỏi đáp ứng liên tục Quá trình truyền nhận dữ liệu cấu hình
“bitstream” chỉ được thực hiện qua các chuẩn giao tiếp bên ngoài cũng làm cho tốc độ tái cấu hình không cao vì các chuẩn giao tiếp này thường có tốc độ thấp
Trang 262.1.3 Quy trình thiết kế và tái cấu hình từng phần (TCHTP)
Như tên gọi của giải pháp đã thể hiện, điểm mấu chốt của phương pháp này là cho phép việc tái cấu hình chỉ diễn ra trong một số vùng gọi là vùng tái cấu hình từng phần PRR (partial reconfiguration region) [5] ngay trong quá trình hoạt động của thiết bị Vì vậy cách thức tái cấu hình này còn được gọi là tái cấu hình động (dynamic reconfiguration) Hình 2-5 mô tả kiến trúc của một FPGA của Xilinx hỗ trợ TCHTP
Hình 2-5 Cấu trúc thiết bị FPGA của Xilinx hỗ trợ TCHTP
Để có thể hiện thực TCHTP thì cần xác định các PRR (có thể có một hoặc nhiều PRR), các phần còn lại thuộc về một phân vùng duy nhất gọi là vùng tĩnh (static region) Mỗi PRR có thể được cấu hình bằng một hoặc nhiều PRM (partial recongiuration module) Có hai điểm khác cơ bản với phương pháp tái cấu hình từng phần Đầu tiên các giao tiếp giữa các PRR với các module trong vùng tĩnh hay giữa các PRR khác nhau phải được thực hiện thông qua “bus macro” hoặc “decoupling-logic” Chính các “bus macro/decoupling logic” sẽ tách biệt một PRR với vùng tĩnh và các PRR khác, đảm bảo việc tái cấu hình PRR đó không làm ảnh hưởng đến các vùng khác Khái niệm “bus macro” này tương tự như khái niệm “isolation cell” trong các thiết kế phần cứng nhiều “power domain” Tuy nhiên đây cũng là điểm có thể làm giảm tốc độ của hệ thống, vì việc “routing” từ vùng này sang vùng khác có nhiều ràng
Trang 27buộc hơn Một lưu ý quan trọng là khái niệm “Bus Macro” được áp dụng trong các thiết bị FPGA Virtex2 trở về trước Trong thiết bị FPGA Virtex-5 thì việc tách biệt giữa một PRR với vùng tĩnh và các PRR khác phải được hiện thực bằng việc đặt các bộ đệm “decoupling” Phần này sẽ được làm rõ hơn ở phần ngay sau đây của chương này Điểm mấu chốt thứ hai là việc hiện thực khối ICAP (Intenal Configuration Access Port) cho phép các module người dùng có thể trực tiếp tải dữ liệu cấu hình vào các PRR Khả năng này giúp cho việc tái cấu hình hoàn toàn được kiểm soát bởi các khối chức năng được thiết kế trong vùng tĩnh Việc tái lập trình vì vậy có thể được thực hiện nhanh hơn thông qua các chuẩn giao tiếp tốc độ cao Chẳng hạn như người dùng có thể truyền dữ liệu cấu hình từng phần (partial bitstream) bên ngoài qua các giao tiếp tốc độ cao như PCIe, Ethernet vào bộ nhớ bên trong FPGA (block RAM) hay bộ nhớ ngoài tốc độ cao (DDR), sau đó sử dụng các “DMA controller” hay “embedded processor” để chuyển dữ liệu cấu hình vào các PRR[6][7] Bên cạnh đó người dùng vẫn có thể sử dụng các chuẩn giao tiếp truyền thống để tái cấu hình PRR hoặc toàn bộ hệ thống Cổng tái cấu hình truyền thống hiện tại là thông qua “JTAG”, tuy cách này lập trình chậm nhưng đáng tin cậy và Xilinx đã có phần mềm để hỗ trợ rất tốt việc này
Nói về quy trình thiết kế, thì nhìn chung giống với quy trình thiết kế truyền thống
đã trình bày ở phần trước Chủ yếu điểm khác biệt nằm ở bước thứ 6, về các bước thứ 5
và thứ 6 Cụ thể bước thứ 5 trở nên phức tạp hơn và có thể được thực hiện theo quy trình tổng quát như hình 2-6 sau đây [5]
Hình 2-6 Quy trình place&route và sinh “bitstream” áp dụng TCHTP
Cụ thể ở đây người thiết kế cần phải quyết định việc phân chia thiết bị ra các vùng (design partitioning) tĩnh và vùng PRR Sau đó việc P&R phải được thực hiện riêng lẻ
Trang 28cho các khối chức năng trong vùng tĩnh và trong các cùng PRR Chú ý là bước tổng hợp logic cũng cần phải được thực hiện riêng lẻ, tuy nhiên bước này thường đơn giản nên không được đề cập đến ở đây Một điểm chú ý khác là “top level module” của hệ thống phải được đặt trong vùng tĩnh, và trong quá trình tổng hợp có thể xem các PRM như là các hộp đen (black-box) Cuối cùng cần phải gộp (merge) các hiện thực để sinh
ra full bitstream (để cấu hình toàn bộ hệ thống lần đầu tiên), và các PRM bitstream để cập nhật trong quá trình hoạt động Các PRM bitstream có thể được cập nhật và thay đổi mà không cần phải thay đổi các static bitstream, miễn là các PRM có thể được chừa
đủ (“fit”) trong một PRR tương ứng với nó Người sử dụng vẫn có thể sử dụng các công cụ EDA truyền thống có hỗ trợ tái cấu hình từng phần, tuy nhiên cần phải xác lập nhiều ràng buộc hơn như vị trí, kích thước của các PRR, ràng buộc “timing” giữa PRR
và vùng tĩnh Trong đề tài này việc hiện thực tái cấu hình từng phần dùng phần mềm EDA PlanAhead [2] của Xilinx
Trang 292.2 Các yêu cầu phần cứng đối với hệ thống hộ TCHTP
Để một hệ thống phần cứng hiện thực trên thiết bị FPGA Virtex-5 trở lên có thể hỗ trợ việc TCHTP thì hệ thống đó phải đáp ứng các yêu cầu chính sau
Các clock buffer toàn cục (global clock buffer) hoặc các bộ sinh clock (DCM, PLL) phải nằm trong vùng tĩnh, tức là chỉ có thể được tái cấu hình toàn bộ
Các “I/O PAD” thì cũng nên đặt trong vùng tĩnh, việc đặt trong vùng động sẽ đòi hỏi phải thỏa mãn khá nhiều yêu cầu phụ khác
Những “timing critical path” cũng không nên đặt ở hai phân vùng khác nhau
Một yêu cầu rất quan trọng đó là việc tách biệt (decoupling) các ngõ ra của vùng động với các vùng khác Trong quá trình tái cấu hình từng phần tất cả ngõ ra của các khối trong vùng động đang được TCHTP sẽ ở trạng thái luận lý bất định (underministic state) điều này có thể làm ảnh hưởng đến hoạt động của các khối khác Trong các thiết bị FPGA Virtex-4 trở về trước thì người dùng phải đặt các
“Bus Macro” là một “pritimive cell” của FPGA, điều này là tương đối phức tạp Tuy nhiên trong Virtex5 trở lên thì yêu cầu này được giảm xuống bằng cách dùng một tính hiệu “enable” để cố định giá trị output của vùng đang được tái cấu hình từng phần Đồng thời người dùng được khuyên là nên “buffer” tín hiệu output từ vùng động Cuối cùng sau khi tái cấu hình xong, cần phải có “soft reset” để “reset” vùng đã được tái cấu hình xong về trạng thái khởi tạo ban đầu Hình sau minh họa yêu cầu này
Hình 2-7 Các “logic” cần để “decoupling” vùng động PRR0 và các vùng khác
Control module (Static region)
Module A(PRR0)
Module B(Static region or PRR)
DFF
Prr0_Reconfig_Enable
Mạch tổhợp
Trang 30Điều cốt yếu ở đây là cần phải có một “Control Module” để sinh hai tín hiêu
“Prr0_Reconfig_Enable” và “Prr0_Reconfig_Reset” Trong quá trình PRR0 đang được tái cấu hình, “Prr0_Reconfig Enable” sẽ bằng 0, tín hiệu này được “AND” với
“Prr0_Out” trước khi được đưa vào Module B Chú ý là “Prr0_Out” không được truyền trực tiếp vào “mạch tổ hợp” trong Module B Sau khi tái cấu hình xong, thì
“Prr0_Reconfig_Reset” sẽ được tích cực để reset “Module A” nằm trong PRR0 về trạng thái khởi tạo sau đó “Prr0_Reconf_Enable” sẽ được gắn về giá trị 1 Hình ngay sau đây chi tiết các trạng thái của hai tín hiệu này Cần lưu ý là cổng AND trong hình cần phải được đặt trong vùng tĩnh hoặc trong module B Cổng OR phải nằm trong vùng tĩnh “DFF” ở trong hình là tùy chọn, vì việc thêm cổng AND có thể làm “delay time” giữa Module A và Module B tăng lên, nên việc thêm một tầng “DFF” là điều nên làm
Hình 2-8 Giá trị của tín hiệu Enable và Reset trong quá trình TCHTP PRR0
(1): Là khoảng thời gian trước lúc PRR0 được tái cấu hình
(2): Là khoảng thời gian PRR0 đang được tái cấu hình
(3): Là thời điểm PRR0 đã được tái cấu hình xong, nhưng đang được “Reset” (4): Là thời điểm sau khi toàn bộ quá trình TCHTP và “Reset” đã xong, lúc này PRR0 sẽ có thể chứa một “Module A” mới
Ngoài ra còn có một số ràng buộc khác không được đề cập ở đây Chi tiết hơn
có thể được tìm thấy ở UG702 của Xilinx [8]
Prr0_Reconfig_Enable
Prr0_Reconfig_Reset
Trang 312.3 Chi tiết quá trình tái cấu hình Virtex5 và cấu trúc “bitstream”
Như đã trình bày ở đầu chương, tái cấu hình thiết bị FPGA về bản chất chính là việc lập trình giá trị của vùng nhớ cấu hình cho các LUT Vùng nhớ này được gọi là vùng nhớ cấu hình làm bằng SRAM Bitstream là một chuỗi byte nhị phân dùng để hướng dẫn thiết bị FPGA chuyển dữ liệu lập trình mới xuống vùng nhớ cấu hình Có hai thành phần chính trong bitstream là “lệnh” và “dữ liệu” Về cơ bản lệnh được dùng
để xác định cách thức dữ liệu được đưa vào vùng nhớ cấu hình Ở đây cũng xin nhấn mạnh là vùng nhớ này được tổ chức dưới dạng “32-bit word”, tuy nhiên việc đưa bitstream từ thế giới bên ngoài (máy tính, bộ nhớ ROM, …) có thể được thực hiện bằng các chuẩn giao tiếp khác nhau có thể là chuẩn “serial 1-bit” như JTAG hoặc chuẩn parallel như SelectMap, tuy nhiên độ rộng bit không được quá 32
2.3.1 Các bước cơ bản của quá trình tái cấu hình FPGA
Trước khi đi vào tìm hiểu nội dung của bitstream, tác giả xin trình bày sơ lược về các bước trong một quá trình tái cấu hình được mình họa ở hình dưới đây [9]
Hình 2-9 Các bước lập trình thiết bị FPGA Virtex-5
Như hình vẽ chỉ rõ, có 8 bước lập trình chính, tuy nhiên 3 bước đầu là để khởi tạo thiết bị FPGA và là cần thiết đối với các kỹ sư làm board mạch, nó không liên quan bitstream vì vậy tác giả không chi tiết thêm ở đây
Bước 4 gồm hai bước chính, bước thứ nhất là xác định độ rộng bit của giao tiếp tái cấu hình trong trường hợp giao tiếp song song được sử dụng Xilinx hỗ trợ 8-bit, 16-bit hoặc 32-bit Điều này được xác định dựa vào mẫu nhận dạng bit-width được liệt kê trong bảng sau
Trang 32Cơ chế để thiết bị FPGA nhận dạng bit-width như sau
Lúc đầu nó sẽ kiểm tra xem có 0xBB được ghi vào 7 bit cuối D[0:7] hay không Nếu có và theo sau đó là 0x11 thì nó biết là 8-bit, nếu là 0x22 thì là 16-bit, nếu
là 0x44 thì bit-width là 32 Nếu không phải một trong ba thì nó sẽ quay lại chờ xem chừng nào nhận được 0xBB và lập lại quá trình nhận dạng
Sau khi đã nhận dạng được bit-width thì nó sẽ chờ để nhận “Sync word” Tùy vào bit-width đã đươc nhận dạng mà “Sync word” sẽ được nhận dạng khác nhau như bảng sau
Bảng 2-2: Mẫu nhận dạng “Sync word”
dữ liệu được truyền theo từng “frame”
Trong suốt quá trình nhận bitstream theo từng frame, thiết bị FPGA sẽ tính “CRC” cho chuỗi dữ liệu nhận được Sau khi toàn bộ dữ liệu được truyền xong, dữ liệu trong
Trang 33bitstream sẽ có 32-bit word “CRC check command”, theo sau bởi 32-bit CRC mong muốn Thiết bị FPGA sẽ so sánh giá trị này với giá trị tính toán xem có trùng không, nêu không trùng sẽ báo lỗi Toàn bộ các công việc vừa được trình bày là bước 7 của quá trình cấu hình Tương tự như bước 5, quá trình tái cấu hình sẽ bị dừng lại nếu có lỗi xảy ra
Sau cùng ở bước 8, bitstream sẽ bao gồm các “command” để hướng dẫn thiết bị FPGA khởi động quá trình hoạt động, chẳng hạn như lệnh để chờ cho các các xung clock được ổn định, khởi tạo các I/O
2.3.2 Cấu trúc của bitstream
Tiếp theo, tác giả xin trình bày chi tiết cấu trúc của một “bitstream” Như đã đề cập ở mục 2.3.1, bitstream về cơ bản bao gồm các “lệnh” và theo sau “dữ liệu”, hay nói cách khác là bao gồm tập các “packet” Có hai loại “packet” như sau
Packet loại 1: đây là packet dùng để đọc và ghi các thanh ghi bên trong thiết bị FPGA Cấu trúc một lệnh 32-bit cho packet loại 1 như bảng sau Các bit không được liệt kê là những bit dành sẵn (Reserved)
Bảng 2-3: Cấu trúc “lệnh” cho packet loại 1
Trường Ví trí Ý nghĩa
Header type [31:29] Cố định bằng 001 (Packet loại 1)
Opcode [28:27] 00: Lệnh NOP (không làm gì cả)
01: Lệnh đọc thanh ghi 10: Lệnh ghi thanh ghi
11: Dành sẵn (reserved)
Register address [17:13] Có tất cả 32 thanh ghi
Word count [10:0] Xác định số “data word” trong packet, vì chỉ 11 bit, nên
tối đa là 2048 words Trong trường hợp số word trong một packet lớn hơn 2048 ta sẽ dùng packet loại 2
Packet loại 2: đây là packet đi ngay theo sau packet loại 1, nó không có trường
“Register address” mà sẽ dùng “Register address” của packet loại 1 trước đó
Nó gồm hai trường như bảng sau
Bảng 2-4: Cấu trúc “lệnh” cho packet loại 2
Trường Ví trí Ý nghĩa
Header type [31:29] Cố định bằng 010 (Packet loại 2)
Word count [26:0] Xác định số “data word” trong packet
Trang 34Bảng sau trình bày thứ tự các “word” trong một “bitstream” thông thường Chú ý
là tùy vào những tùy chọn người dùng trong quá trình sinh ra bitstream mà cấu trúc cụ thể có thể có một vài khác biệt nhỏ
Bảng 2-5: Thứ tự các “word” trong một “full bitstream” thông thường
FF FF FF FF Dummy word … Tiếp số thanh ghi khác tục lệnh ghi một
00 00 00 BB Bus width detection word 30 00 20 01 Ghi vào thanh ghi "Frame
Address"
11 22 00 44 Bus width detection word 00 00 00 00 Vị trí frame tái cấu hình
FF FF FF FF Dummy word 30 00 80 01 Ghi vào thanh ghi "Command"
FF FF FF FF Dummy word 00 00 00 01
Đây là command cho phép việc bắt đầu quá trình đưa dữ liệu vào "configuration memory"
AA 99 55 66 Sync words (Kết thúc bước 4) 20 00 00 00 NOP packet
20 00 00 00 NOP Packet 30 00 40 00 Ghi vào thanh ghi FDRI
30 02 00 01 Ghi vào "Warm boot-start" 50 1F 59 C0
Packet loại 2, xác đinh số "word"
là 0x1F59C0 Vì lớn hon 2048 byte nên phải dùng Packet loại 2
00 00 00 00 Giá trị ghi … Ghi word 1
30 00 80 01 Ghi vào thanh ghi "Command" …
20 00 00 00 NOP Packet … Ghi (Kết thúc frame) vào 0x1F59C0
30 00 80 01 Ghi vào thanh ghi "Command" 30 00 00 01 Ghi vào thanh ghi CRC
00 00 00 07 Lệnh "reset" giá trị CRC C4 EC F3 FB Giá trị CRC mong đợi
Các packet để hướng dẫn việc
"start-up" (Bước 7 của quá trình tái cấu hình)
30 01 20 01 Ghi vào thanh ghi "COR0
option"
00 00 35 E5 Cho phép việc kiểm tra CRC 30 00 80 01 Ghi vào thanh ghi "Command"
30 01 C0 01 Ghi vào thanh ghi "BOOST" 00 00 00 0D
DESYNC words Đến đây được hiểu là bitstream kết thúc Kết thúc bước 8
00 00 00 00 Gia trị thanh ghi 20 00 00 00 NOP Packet
30 01 80 01 Ghi vào thanh ghi "Device ID" 20 00 00 00 NOP Packet
Trang 35họa một góc nhìn khác của cấu trúc bitstream bằng cách dùng phầm mềm hiển thị nội dung bitstream dưới dạng mã hex
Hình 2-10 Phần đầu chứa sync-word của bitstream
Hình 2-11 Phần chứa ghi vào thanh ghi FDRI, theo sau là dữ liệu cấu hình
Hình 2-12 Phần chứa lệnh để kiểm tra CRC
Hình 2-13 Phần cuối cùng lệnh để “DESYNC”
Trang 36Chú ý là ở đây không đề cập đến “header” của bitstream Trong thực tế, bitstream
sẽ gồm có header dùng để chỉ tên file, ngày tạo file, … Những phần này sẽ được loại
bỏ bởi phần mềm và không được đưa xuống thiết bị FPGA
2.3.3 Cấu trúc “partial bitstream ”
Về cấu trúc giống “full bitstream”, chỉ trừ ba điểm sau
Một là trong “partial bitstream” sẽ không có nhiều bước để set các thanh ghi chỉ hướng dẫn việc “start-up” hoặc các thanh ghi xác định các tùy chọn, và đặc biệt
là các thanh ghi ở bước thứ 7 của quá trình tái cấu hình từng phần
Hai là “partial bitstream” chỉ gồm dữ liệu cấu hình cho các “frame” nằm trong vùng “PRR” cần được tái cấu hình Hai khác biệt này dẫn đến một điều là độ dài
“partial bitstream” thường nhỏ hơn và thời gian cấu hình sẽ theo đó nhỏ hơn Cụ thể hơn thiết bị FPGA Virtex 5 XC5VTX240T trên board Net-FPGA có tất cả
“50,112” frame cấu hình Mỗi frame có chứa 41 32-bit words Như vậy “full bitstream” sẽ có độ dài là 8218368 byte Giả định rằng số “word” trong “partial bitstream” là “n” và thời gian để nạp “full bitstream” là t(full) thì thời gian để nạp partial bitstream có thể ước lượng theo công thức sau, trong đó t(start-up)
là thời gian để thực hiện bước 7 trong quá trình tái cấu hình toàn bộ
Cuối cùng là trong “full bitstream ” việc kiểm tra CRC sẽ được thực hiện nhiều lần Trong khi đó ở “partial bitstream ” thì chỉ có một lệnh kiểm tra CRC cuối cùng bất chấp độ dài của bitstream Điều này làm giảm khả năng phát hiện lỗi
Về việc nạp xuống thiết bị “FPGA” thì “partial bitstream” có thể được nạp thông qua việc dùng cổng lập trình bên trong ICAP, bên cạnh việc dùng cổng lập trình bên ngoài Việc dùng cổng lập trình bên trong cho phép người dùng có thể nâng cao việc kiểm tra lỗi cho “partial bitstream ” nếu cần thiết bằng cách được minh họa trong hình sau [8]
Trang 37Hình 2-14 Cách kiểm tra lỗi CRC trong quá trình nạp “partial bitstream”
Ý tưởng ở đây là phần mềm sẽ chia “partial bitstream” thành nhiều phần, và tính CRC cho từng phần đó Sau đó phần cứng sẽ nhận và kiểm tra CRC, và gộp lại trước khi truyền vào ICAP Với cách tương tự, chúng ta cũng có thể nâng cao tính bảo mật bằng cách mã hóa “partial bitstream” và giải mã trước khi đưa vào ICAP Đây là những điểm mà chúng ta không thể làm được đối với “full bitstream”
Trang 382.3.4 Chi tiết giao tiếp “ICAP”
ICAP về cơ bản là một khối giao tiếp hiện thực sẵn (còn gọi là primitive) trong các thiết bị FPGA Virtex-4 trở về sau của Xilinx, có giao tiếp tương tự như cổng giao tiếp bên ngoài SelectMap Bảng sau mô tả các tín hiệu vào ra của khối “primitive” này [9]
Bảng 2-6: Đặc tả giao tiếp vào ra (I/O) của ICAP “primitive”
Tín hiệu Độ
rộng
CE 1 Ngõ vào 0: Cho phép đọc ghi
1: Không cho phép đọc ghi
WRITE 1 Ngõ vào 0: Tác vụ ghi (dùng để đưa “command” hoặc dữ
liệu tái cấu hình vào thiết bị FPGA) 1: Tác vụ đọc (dùng để đọc dữ liệu cấu hình từ FPGA, trường hợp này được dùng để “debug”
I 8/16/32 Ngõ vào Dữ liệu ghi vào ICAP Tùy vào tham số đầu vào
mà độ rộng có thể là 8, 16 hoặc là 32
O 8/16/32 Ngõ ra Dữ liệu đọc ra từ ICAP Tùy vào tham số đầu vào
mà độ rộng có thể là 8, 16 hoặc là 32 Ngoài ra bit cuối của ngõ ra này có thể được dùng để theo dõi trạng thái của quá trình TCHTP
8-BUSY 1 Ngõ ra Dùng trong tác vụ đọc
0: Dữ liệu ngõ ra “O” là tích cực (“valid”) 1: Dữ liệu ngõ ra chưa tích cực, cần phải chờ đến khi tin hiệu trở về 0 thì mới có thể đọc dữ liệu xuất
ra
Tuy đặc tả tương đối đơn giản, có một số vấn đề gây khó khăn cho việc thiết kế khối điều khiển để đưa “partial bitstream ” vào ICAP Đầu tiên là việc “constraint timing” cho khối này không thể dùng các phương pháp “constraint” đồng bộ mà phải dùng “MAXDELAY” Người dùng vì vậy thường phải cần có “buffer” ở phần giao tiếp với ICAP để có thể hoạt động ở tốc độ cao
Tuy nhiên khó khăn nhất chính là việc “Xilinx” không có thư viện để mô phỏng khối này vì vậy trong quá trình thiết kế cần phải “debug” trực tiếp trên thiết bị
“FPGA” Xilinx cung cấp một số “IP core” để có thể điều khiển khối này Hiện tại có hai IP core Đầu tiên là “HWICAP”[10] với cấu trúc như hình sau
Trang 39Hình 2-15 Cấu trúc của HWICAP
Một nhận xét là “IP core” này hỗ trợ giao tiếp “PLB” vốn được dùng để giao tiếp với “embedded CPU” chẳng hạn như “Microbalze” cũng của Xilinx Vì vậy “IP core” này phù hợp với các hệ thống FPGA có tích hợp “Microlaze” Xilinx cũng cung cấp một “IP core” khác hổ trợ giao tiếp phổ biến hơn là “AXI-Lite”, đó là AXI_HWICAP Dẫu vậy “IP core” này chỉ hỗ trợ trong các thiết bị FPGA Virtex-6 trở về sau
Trang 402.3.5 Tóm tắt
Sau nhiều hình ảnh và diễn giải, hình dưới đây tóm tắt kiến thức đã được tìm hiểu
Hình 2-16 Tóm tắt bitstream và việc tái cấu hình
Full/Partial Bitstream File
External ConfigurationInterface
Internal configuration interface (ICAP)
Configuration frame 0Configuration frame 1
Command 0 Data 0 … Command m Data m
Partial Bitstream