轉置型FIR設計

2021-09-21 06:01:52 字數 4529 閱讀 7707

本文首發於個人部落格

設計基於單口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...