本文首發於個人部落格設計基於單口sram的轉置型fir,半並行實現,要求滿足: 名稱
預設值說明
pall_pam
4並行階數
pall_pam_log
2並行階數log值
seri_pam
4序列階數
seri_pam_log
2序列階數log值
data_width
16資料位寬
名稱型別
位寬說明
clkinput
1系統時鐘
rst_n
input
1系統復位訊號,低有效
名稱型別
位寬說明
cfg_valid
input
1配置有效訊號
cfg_addr
input
pall_pam_log*seri_pam_log
配置位址
cfg_data
input
data_width
配置資料
名稱型別
位寬說明
din_valid
input
1輸入有效訊號
din_busy
output
1輸入忙訊號
din_data
input
data_width
輸入資料
dout_valid
output
1輸出有效訊號
dout_busy
input
1輸出忙訊號
dout_data
output
data_width
輸出資料
該fir共分為四個部分:
以乙個六階的fir為例,並行度為2,序列度為3(每個序列處理單元序列處理3個乘加操作),整體有以下資料流:
可以發現,對於:
而言,前一部分的部分和在pe0的第0~2cycle中計算,後一部分的部分和在pe1的3~5cycle中計算,同時,pe0在第3~5個週期中計算的部分和。因此對於階的fir(並行度為m,序列度為n),每個序列單元負責乙個fir結果的n個乘法的計算。對於第i個序列單元,負責和對應輸入資料的乘法。現在考慮第k個輸出,相關偽**如下所示:
k_result = 0;
for(int i = 0;i < m;i++) else
}k_result = this_result;
}
對於第i個pe(pe的標號計算從1開始),在第j個週期(週期標號從0開始),輸出的權值為,每個pe的標號i是固定的,因此rom對應的位址僅與當前序列週期數有關。對於第z個週期的輸入(z計數從0開始,輸出的週期為第0週期),對應的輸入資料應為,因此對於資料ram取資料的位址除了與週期數z有關外,還與k有關。
輸入模組包括輸入資料暫存器和資料ram,需要實現以下功能:
名稱型別
位寬說明
clkinput
1系統時鐘
rst_n
input
1系統復位訊號,低有效
din_valid
input
1輸入p2p介面有效訊號
din_busy
input
1輸入p2p介面忙訊號,控制器生成
din_data
input
data_width
輸入p2p資料訊號
control_ram_addr
input
serl_pram_log+pall_pram_log
讀寫資料ram的位址
control_ram_write
input
1寫ram請求訊號
unit_din
output
data_width
ram輸出資料
該部分設計如上圖,共兩個部分,如下所示:
該部分不包括控制流部分,僅實現輸入的資料流,控制流由控制器生成。輸出埠的資料**為ram或輸入暫存器。當執行ram寫入操作時,內部輸出資料**於輸入暫存器,否則**於資料ram。
序列處理單元,實現串並行處理的序列部分,多個序列處理單元並行實現並行部分,單個單元的需求為:
名稱型別
位寬說明
clkinput
1系統時鐘
rst_n
input
1系統復位訊號,低有效
cfg_valid
input
1配置有效訊號,高有效
cfg_addr
input
pall_pam_log+seri_pam_log
配置目標位址
cfg_data
input
data_width
配置資料
unit_din
input
data_width
乘法運算元,來自輸入模組
unit_partsum_din
input
data_width*2
部分和累加運算元,來自上乙個序列單元
unit_partsum_dout
output
data_width*2
部分和,輸出到下乙個序列單元
control_rom_addr
input
seri_pam_log
引數rom位址,產生rom的乘法運算元
control_mux_controller
input
2控制訊號,控制累加器功能
序列處理單元如上圖所示,該部分僅包括資料流,控制流由控制器統一產生。分為以下幾個部分:
乘法器:帶符號數乘法器,將rom的資料輸出和資料輸入unit_din
進行相乘
累加部分:包括累加暫存器、加法器和mux,可選擇不執行操作、乘法結果與部分和輸入相加和乘法結果累加三種操作
對於一次操作,資料輸入和rom位址對應的資料輸出到乘法器完成乘法,根據控制訊號加法器將乘法結果與部分和輸入或累加結果進行相加,累加暫存器的值輸出到部分和輸出埠。其中的reg用於保證資料對齊。
該設計使用**控制的方式進行控制,所有控制訊號均由控制器生成,包括:
名稱型別
位寬說明
clkinput
1系統時鐘
rst_n
input
1系統復位,低有效
din_valid
input
1輸入資料p2p埠有效訊號
din_busy
output
1輸入資料p2p埠忙訊號
control_ram_addr
output
serl_pram_log+pall_pram_log
讀寫資料ram的位址
control_ram_write
output
1寫資料ram請求訊號
control_rom_addr
output
seri_pam_log
引數rom位址,產生rom的乘法運算元
control_mux_controller
output
2控制訊號,控制累加器功能
dout_busy
input
1輸出資料p2p埠忙訊號
dout_valid
output
1輸出資料p2p埠有效訊號
該部分的核心是乙個狀態機,該狀態機控制所有部件的執行,狀態機的流程圖如下所示:
該狀態機有四個狀態:
5.3.3.1.輸入埠控制實現
輸入p2p埠需要控制的訊號是din_busy
訊號,該訊號僅在狀態機狀態為init時為低,否則為高。
輸入部分ram寫請求訊號在comp的最後乙個週期拉高,將資料寫入ram,同時將輸入暫存器的值作為資料輸出
5.3.3.2.序列處理單元控制實現
序列處理單元的rom位址訊號在comp狀態從seri_pam-1到0遞減,每時鐘週期減1
序列處理單元的mux控制訊號如下所示:
5.3.3.3.輸出埠控制實現
輸出部分控制訊號為dout_valid
,在進入write狀態3個時鐘週期後將該訊號拉高,退出write狀態時拉低
稀疏矩陣的轉置(矩陣轉置和快速轉置)
實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...
fir 視窗設計法
加窗的原因。對於理想的低通濾波器h exp jw 其h n 是無限長序列。這是可以證明的。因此為了得到有限長的h n 就需要截斷,而這個過程就是加窗。由於h n 截斷即其頻率響應就和理想的低通濾波器有差別。從感性上分析,h n 越長,hw exp jw 也就越接近理想低通濾波器,這就對應確定序列的長...
稀疏矩陣的轉置與快速轉置
假設在m n的矩陣中,有t個元素不為0。令稀疏因子s t m n 通常認為s 0.05時稱為稀疏矩陣。有時為了節省儲存空間,可以對這類矩陣進行壓縮儲存。所謂的壓縮儲存就是,為多個相同的值分配儲存在乙個空間,對零元不分配空間。而稀疏矩陣是只儲存有效值,無效值只分配乙個空間。在這裡我們用乙個順序表vec...