對于DSP48E1硬核的功能和結(jié)構(gòu),尤其是預(yù)加器、乘法器和累加器(ALU)的使用很多人都比較清楚,但
算法需求如下:輸入數(shù)據(jù)位寬為16bits,從這個數(shù)據(jù)流中匹配32’Hf6F62828,一旦匹配成功,給出匹配指示信
對于此算法的DSP48應(yīng)用如下:
1. 首先,由于算法主要是判斷輸入的數(shù)據(jù)是否等于32位常數(shù)OxF6F62828, 然后給出判斷結(jié)果指示信號。考慮到資源最優(yōu)化,如果并行同時處理16路數(shù)據(jù),需要消耗16個DSP48 slices,如果使用時分復(fù)用的方式,則每個clock cycle完成一個case數(shù)據(jù)的比較,輸入數(shù)據(jù)采用移位寄存器,每個時鐘周期移動1位,構(gòu)成一種case數(shù)據(jù),送入DSP48 slice 做Pattern detector比較,同時輸出是否匹配的指示信號。16個clock cycle完成16種case的比較操作。
2. DSP48E1一次操作可以完成48bits數(shù)據(jù)的匹配運(yùn)算,因此我們同時做32bits數(shù)據(jù)的pattern detector操作,輸入兩個16bits數(shù)據(jù)(32bits)后開始移位操作,構(gòu)成32種case數(shù)據(jù)依次同常數(shù)OxF6F62828匹配,32個clock cycle完成匹配檢測。
3. DSP48E1的pattern detector結(jié)構(gòu)框圖如下:
Figure 1: Pattern Detection logic
由于要匹配的pattern為常數(shù),我們選擇設(shè)置固定的OxF6F62828為圖中的PATTERN值,使用MASK設(shè)置屏蔽掉高16位的比較,MASK設(shè)置為48’hFFFF00000000。輸出PATTERNDETECT為高時,表示找到匹配的pattern。
4. 上面Figure1中僅描述了Pattern的邏輯電路,DSP48E1的完整結(jié)構(gòu)如下圖2所示:
Pattern Detection的功能在ALU之后,所以,要將輸入數(shù)據(jù)送入ALU后才能進(jìn)行匹配操作。將32bits數(shù)據(jù)從C端口輸入,高位擴(kuò)展到48位(C要求48bits), ALU設(shè)置為C+0的加法功能,即將C的結(jié)果輸出做比較。
為保證時序要求,打開C寄存器和PatternDetect寄存器,整個匹配鏈路的latency為2,這樣經(jīng)過32個clock cycle,所有32個case的匹配結(jié)果依次由PatternDetect輸出為高可以確定是哪個case匹配。
5. 算法總結(jié):
1)32bits移位數(shù)據(jù)從C端口輸入到ALU單元,DSP48E1的OPmode設(shè)置為C+0功能。
2)在DSP48E1的屬性中配置C打開1級寄存器,PatternDetect寄存器打開,整個計算通路2個clock cycle延遲。
3)在DSP48E1的屬性配置中設(shè)置Pattern值為固定值0xF6F62828,并配置Pattern選擇為固定寄存器值輸入,設(shè)置MASK的值屏蔽高有效比特,低32bits用于匹配運(yùn)算。
4)PatternDetect輸出值為高時,對應(yīng)的case即為找到的匹配數(shù)據(jù)。