- 總體架構
- 模塊描述
循環移位網絡模塊(模塊名:VAL_CS_PROC),對輸入數據(in_data)做循環移位處理,兩個cycle即可輸出數據。
Fig 1 循環移位模塊頂層
-
-
- 設計要求
-
- 00】 支持對data_num個有效數據做循環移位處理,每個數據位寬為10bit(1<=data_num<=384);移位值shift_val滿足0<=shift_val<=data_num,shift_val表示循環移位的數據個數(每個數據10bit)。
- 01】 輸入和輸出數據位寬為384*10bit,當有效數據個數data_num小于等于192時,輸入數據中包含2組data_num個數據,支持同時對2組data_num個數據做循環移位處理,且兩組處理相互獨立,可以不同步。
- 02】 有效數據個數data_num大于192時,data_num個有效數據放在輸入輸出數據的低位([data_num*10-1 : 0]);有效數據個數data_num小于等于192時,有效數據分別在2組數據的低位([data_num*10-1 : 0]和[data_num *10+1920-1 : 1920])。
- 03】 支持根據輸入指示信號判斷數據左移或是右移。
- 04】 移位值、有效數據個數、移位方向以in_vld為隨路有效信號,in_vld為1表示參數有效,輸入數據固定在參數下一拍到來。
- 05】 支持輸出循環移位后數據以out_vld作為隨路有效信號,out_vld為1表示數據有效,data_num大于192時,兩組out_vld同時拉高表示數據有效。
- 06】 輸出時,無效位需要全部為零。
-
- 整體架構
-
Fig 2 循環移位網絡模塊架構框圖
-
-
- 端口信號
-
Table 1 端口信號表
端口 | 方向 | 位寬/bit | 說明 |
rst_n | 輸入 | 1 | 復位信號,低有效 |
clk | 輸入 | 1 | 輸入時鐘 |
in_vld_0 | 輸入 | 1 | 第一組輸入參數隨路有效指示 |
in_vld_1 | 輸入 | 1 | 第二組輸入參數隨路有效指示 |
data_num_0[8:0] | 輸入 | 9 | 第一組有效數據個數,in_vld_0=1時有效 |
data_num_1[8:0] | 輸入 | 9 | 第二組有效數據個數,in_vld_1=1時有效 |
val_r_l_ind_0 | 輸入 | 1 | 第一組左移右移指示,為1時表示左移(即向高位移位),為0時表示右移(即向低位移位),in_vld_0=1時有效 |
val_r_l_ind_1 | 輸入 | 1 | 第二組左移右移指示,為1時表示左移(即向高位移位),為0時表示右移(即向低位移位),in_vld_1=1時有效 |
shift_value_0[8:0] | 輸入 | 9 | 第一組循環移位數據個數 |
shift_value_1 [8:0] | 輸入 | 9 | 第二組循環移位數據個數 |
in_data[384*10-1:0] | 輸入 | 3840 | 輸入數據,in_vld下一拍有效 |
out_vld_0 | 輸出 | 1 | 第一組輸出數據隨路有效指示, |
out_vld_1 | 輸出 | 1 | 第二組輸出數據隨路有效指示 |
out_data[384*10-1:0] | 輸出 | 3840 | 輸出數據,out_vld當拍有效 |
由Fig3可見,框圖中參與移位的輸入信號都是寄存后使用。
Fig 3 寄存時序圖
-
-
- 輸出時序圖
-
Fig 4可以得到(in_vld 到 out_vld,含regin/regout)性能為2 cycle。
Fig 4 輸出時序圖
這個架構實現了高效的對數移位結構,通過多級移位器實現任意位移量,同時保持O(log n)的時間復雜度。參數化設計使其能適應不同數據規模和位寬需求。
- 對數移位架構:
- 將大位移分解為$clog2(MAX_NUM)級(log?384 ≈ 8.6 → 9級);
- 每級處理2的冪次方位移(1, 2, 4...256個數據項);
- 每級僅需1個MUX選擇器,大幅降低邏輯深度;
- 并行處理:
- 左移和右移操作獨立并行處理;
- 每級內所有數據通道并行計算;
- 關鍵路徑:$clog2(MAX_NUM)級MUX + 1級OR + 1級AND(遠遠小于30級邏輯);
Fig 5 barrel_shifter架構圖
- 功能仿真
Table 2 功能仿真測試表
測試案例 | 方案描述 | 是否通過 |
TEST1 | data_num = 8,數據通道0,左移2位 | 通過 |
TEST2 | data_num = 8,數據通道0,右移2位 | 通過 |
TEST3 | data_num = 8,數據通道1,左移2位 | 通過 |
TEST4 | data_num = 8,數據通道1,右移2位 | 通過 |
TEST5 | data_num = 8,數據通道0和1同時獨立輸入,通道0:右移3位,通道1:左移2位 | 通過 |
TEST6 | data_num = 200,數據通道1,2約束一致,左移50位 | 通過 |
TEST7 | 邊界測試:data_num = 1,數據通道1,左移2位 | 通過 |
- PPA優化
Table 3 180nm工藝庫PPA測試表
類別 | Ax(um^2) | 數據延遲 |
最小面積 | 6083924.000000 | 2 cycle |