Các tiền tố phân tắch ra từ bảng lọc sẽ được đưa lên trên cây nhị phân. Một nút là tiền tốđược biểu diễn bằng màu đen. Ngược lại, các nút không phải tiền tốđược biểu diễn bằng màu trắng. Vì dữ liệu cổng là dữ liệu 16 bit nên độ sâu của cây tối đa là 16.
Trong thuật toán Tree Bitmap, cây nhị phân được chia thành các node (vắ dụ như
trong hình mỗi node có chiều sâu là S = 4). Trong cả phần này, để mô tả thuật toán Tree Bitmap, ta thống nhất sử dụng node có chiều sâu là 4.
Hình 2.1: Mô hình Tree Bitmap
Thuật toán Tree Bitmap dựa trên 2 ý chắnh là:
Ờ Thứ nhất, tất cả các dữ liệu về các node con của một node cho trước được lưu trữ
liên tiếp nhau. Như vậy, chỉ cần một con trỏ tham chiếu cho các node con, là con trỏ 0 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0
Học viên: Trần Trường Phan 37
trỏ tới node con đầu tiên trong khối dữ liệu các node con liên tiếp này. Nhờ đó mà giảm số lượng con trỏđể kiểm soát các node. Một điều duy nhất không thuận lợi trong ý tưởng này đó là yêu cầu dữ liệu của các node con lưu trữ trong bộ nhớ phải liên tiếp nhau, gây khó khăn khi ta muốn chèn thêm một node mới hay xóa một node đi.
Ờ Thứ hai, mỗi node gồm 2 phần thông tin: thông tin về các tiền tố bên trong node và thông tin về sự tồn tại các node con của node này. Hai thành phần này được biểu diễn dưới dạng các bitmap tương ứng gọi là Internal Prefix Bitmap và Extending Paths Bitmap.
Hình 2.2: Chuyển một node thành bitmap
Internal Prefix Bitmap
Trong một node, một nút là tiền tốđược mã hóa bằng bit 1, một nút không phải tiền tốđược mã hóa bằng bit 0. Như vậy 4 mức trong node sẽđược biểu diễn lại như trong hình vẽ 2.3. Nếu sắp xếp các mức đã mã hóa này theo chiều ngang từ trái sang phải, ta sẽđược 15 bit mã hóa thông tin về các tiền tố bên trong node.
Học viên: Trần Trường Phan 38
Hình 2.3: Xây dựng Internal PrefixBitmap của node trong hình 2.2
Extending Paths Bitmap
Ứng với mỗi node, có tối đa 16 node con. Thuật toán Tree Bitmap sử dụng 16 bit để
mã hóa thông tin về các node con này. Ở đầu ra của node, ứng với các vị trắ có node con, vị trắ tương ứng trong bitmap được mã hóa bằng bit 1. Nếu không, vị trắ tương
ứng trong bitmap được mã hóa bằng bit 0.
Tắnh toán các thông số
Giả sử ta chia cây nhị phân thành các node có độ sâu là S (S là ước của 16, chẳng hạn S = 4).
Bảng 2.1: Số bit để mã hóa một node
Internal Bitmap External Bitmap
BitvectorArrayPtr 16 bit
Internal Prefix Bitmap 2S Ờ 1 bit
ChildNodeArrayPtr 16 bit
Extending Paths Bitmap 2S bit
Với mỗi node, ngoài 2 bitmap ta cần có 2 con trỏ để lưu giữđịa chỉ của node con
đầu tiên của node hiện hành và địa chỉ của tiền tốđầu tiên trong node. Giả sử 2 con trỏ
là 16 bit (có nghĩa là ta quản lý được tới 216 = 65536 = 64K tiền tố và 64K node). Suy ra số bit để mã hóa một node là:
b = 16 + 2S Ờ 1 + 16 + 2S = 31 + 2 x 2S 1 Mức 0 0 0 Mức 1 0 1 1 0 Mức 2 0 0 0 0 0 0 0 0 Mức 3 1 00 0110 00000000 Mức 0 Mức 1 Mức 2 Mức 3 1 00 0110 0000000
Học viên: Trần Trường Phan 39
Tắnh toán số node tối đa trên cây
Vì cây có chiều sâu là 16, mỗi node có chiều sâu là S, suy ra có r = 16/S mức node. Mỗi node có a = 2S node con. Vậy số node tối đa trên cây tắnh theo k là:
N = 1 + a + a2 + Ầ + arỜ1 = (ar Ờ 1)/(aỜ1) = (216 Ờ 1)/(2S Ờ 1)
Hình 2.4: Cây có chiều sâu 16
Chú ý: Các nút ở vị trắ sâu nhất trên cây (mức 16) sẽ nằm độc lập, không dùng node
để mã hóa. Thông tin BitVector của nó được xác định từ Extending Paths Bitmap của node cha tương ứng.
Dung lượng bộ nhớ cần thiết để mã hóa hết tất cả các node là: m = N x b (bit)
Tắnh toán số tiền tố tối đa trên cây
Học viên: Trần Trường Phan 40
P = 1+ 21 + 22 +Ầ + 215 + 216 = 217 Ờ 1 = 131071
Suy ra muốn quản lý hết số tiền tố này, cần sử dụng 17 bit để mã hóa địa chỉ. Ta có bảng thống kê của các thông số thay đổi theo S như sau:
Bảng 2.2: Thống kê các thông số thay đổi theo S
S r a N = node_max b m (bit)
1 16 2 65,535 35 2,293,725 2 8 4 21,845 39 851,955 4 4 16 4,369 63 275,247
8 2 256 257 543 139,551
Tùy thuộc vào dung lượng bộ nhớ có trên từng loại FPGA, ta có thể chọn S khác nhau. Nhưng S càng lớn thì số lần truy cập bộ nhớ càng ắt. Trong thiết kế của này, chúng ta chọn S = 4 với 2 lý do:
Ờ Tuy rằng RAM của FPGA có thể tạo được với độ rộng bus dữ liệu là bất kỳ (≤ 256, không cần là bội của 8), nhưng để thuận tiện cho việc cập nhật dữ liệu vào RAM dưới dạng byte thì cần chọn b là bội của 8. Giá trị 63 là phù hợp vì nó không quá lớn và số bit dư thừa là tối thiểu (chọn b = 64 thì chỉ dư thừa 1 bit).
Ờ Vì số tiền tố tối đa trên cây là P = 217 Ờ 1, do đó cần con trỏ 17 bit để quản lý hết số tiền tố này. Ở trên ta đã giả thiết sử dụng con trỏ 16 bit, vậy có thể sử dụng 1 bit dư thừa này để có thểđánh địa chỉ toàn bộ số tiền tố P.