-
Notifications
You must be signed in to change notification settings - Fork 31
Bloom filter Extern
yoannd edited this page Nov 19, 2018
·
1 revision
Home || Extern Function Library
Description - Query or set an entry of a Bloom filter.
Instantiation:
#define BLOOM_OP_READ 2w0
#define BLOOM_OP_SET 2w1
#define BLOOM_OP_CLEAR 2w2
@BloomFilterHashWidth(hash_width)
@BloomFilterHashCount(hash_count)
@Xilinx_ControlWidth(0)
@Xilinx_MaxLatency(hash_width+3)
extern void <filter_name>_bloom_filter<T>(in bit<2> opcode, in T key, out bit<1> result);
-
BloomFilterHashWidth: The log2 of the desired size of the Bloom filter. Note that ifhash_width >= 22, you are trying to allocate more than 4 Mbits of BRAM, and will likely encounter timing issues and/or BRAM depletion issues. -
BloomFilterHashCount: The number of hash functions to be applied to each key. This parameter controls the latency and throughput of the extern, as the memory must be probedhash_counttimes in series for each read or set operation. -
index: The key to query the bloom filter (which will be fed to the hash functions). -
result: The result of the query (1 if the element was present, 0 otherwise). In case of a SET operation, the result will indicate presence of the element in the filter prior to insertion -- the SET operation is essentially an atomic read&set. -
opcode: EitherBLOOM_OP_READ, to query the filter for presence of the key specified inindex; orBLOOM_OP_SET, to insert the key specified inindexinto the filter while querying the filter for previous presence of the element; orBLOOM_OP_CLEAR, for resetting the filter (removing all elements). The later operation will block the filter during2^hash_widthcycles, during which any query will return 0.
Remarks: The extern has a throughput of 1 read or set operation every hash_count+3 cycles, i.e. it can handle 200/(hash_count+3) Mpps, with a maximum throughput of 50 Mpps if hash_count==1. Therefore, the filter will drop packets if run at 4*10 Gbit/s line-rate (~60 Mpps). It can, however, handle packets at 10 Gbit/s line-rate from a single interface provided that hash_count <= 10.