- 总体架构
- 模块描述
循环移位网络模块(模块名: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 |