SCD: TCAM Library Fred Kuhns Applied Research Laboratory fredk@arl.wustl.edu Applied Research Laboratory Washington University in St. Louis
Assumptions, Constants TCAM located on SRAM0 (SRAM, channel ID 0) Base address 0x80000000; Select 0 and burst size 1. Each NPU (A/B) has own LA-1 interface SPP version 1 and 2 do not use the second LA-1 interface set IsPort1Used to 0 (i.e. false) NPUA must perform initial configuration Both NPUA/B can use LA-1 interface for lookups All TCAM control implemented on XScale A its not clear that we can use the IDT libraries to control from both NPUA and NPUB. All databases are IDT type exact match. Maximum of 16 databases; Must start on segment boundary User specified DB entry widths: Max: 576-bits; Min: 32-bits; Allowed sizes: n*32, n in (1, 18); 36; 74 and 144. Actual Core sizes: 36, 72, 144, 288 and 576 bits Segment size: 8K x 72-bit 256K x 72-bit core entries Database must start on a segment boundary. Max segments: 32 ZBT Associated SRAM 512K x 36 bit ZBT SRAM (18Mb) Allocated as 0, 32, 64 or 128-bit result data Index and size are number of 32-bit words Command context Available: 128 (0,...,127) Control uses context 120 through 127
Search Machine Class Class SearchMachine {...} May use callbacks with interrupt handlers for ARP aging. Constructor accepts a set of key value pairs specify the configurable parameters. typedef multimap<string, valTable> confTable; Internal state: next database id, starts at 0. segment allocation state (for the 32 available segments): Just need current address of available block. associated memory allocation state: Just need current address of available block. current set of database objects (stl set object). Operations: The Database object is of type Handle<T,P> with the RefCntPolicy (reference counted smart pointer). Or can use pointers by then the SearchMachine class “owns” the DB object and is the only one allowed to destroy it. typedef handle<Database,RefCntPolicy> DB; DB create_database(key_bits, res_bits, max_cnt); void destroy_database(DB); get_dbs() // returns an iterable object, say an stl set.
Configuring a DataBase class DataBase {...} The user is expected to keep track of entry indices. State: id_; // returns ID assigned by SearchMachine class handle_; // assigned by IDT software when DB is created key_width(); // in bits core_width(); // in bits result_width(); // in bits entry_count(); // max number of entries core_start_addr_; assoc_data_addr_; Operations: fltr {key[N]; mask[N]; result[M]} write_fltr(index, fltr); update_result(index,result); fltr get_fltr(key); fltr get_fltr(index) result lookup_fltr(key) rem_fltr(fid); rem_fltr(key)
Configuration File [SearchMachine] useLAPort1 = 0 [database] name = name_db1 id = num_db1 numEntries = X keyWidth = W # bits resultWidth = Y # bits ...
Substrate Configuration tables on NPE Search machine TCAM NPUA NPUB Entries masks keys results ... 1 2 NA-1 NA NA+1 N-1 NA+2