Python 脚本确定 buffer 位宽,以及输出
非整数倍数据位宽转换24to128
https://www.nowcoder.com/practice/6312169e30a645bba5d832c7313c64cc
import math src_w = 24 tgt_w = 128 buf_name = "wdata_buf" src_name = "wdata_i" tgt_name = "data_o" max_cnt = math.lcm(src_w, tgt_w) // src_w max_cnt_w = math.ceil(math.log2(max_cnt)) n = src_w g = tgt_w t = [] for cnt in range(max_cnt): q, r = divmod(n, g) t.append((q, r)) n = r + src_w buf_w = max([r for _, r in t]) print(f"reg [{max_cnt_w-1}:0] cnt;") print(f"reg [{buf_w - 1}:0] {buf_name};") for cnt in range(len(t)): q, r = t[cnt] if q == 1: _, ro = t[cnt-1] print(f"{max_cnt_w}'d{cnt}: ", end="") print(f"{tgt_name} <= " + "{" + f"{buf_name}[{ro-1:0}:0], {src_name}[{tgt_w-ro-1}:0]" + "};")
结果
reg [3:0] cnt; reg [119:0] wdata_buf; 4'd5: data_o <= {wdata_buf[119:0], wdata_i[7:0]}; 4'd10: data_o <= {wdata_buf[111:0], wdata_i[15:0]}; 4'd15: data_o <= {wdata_buf[103:0], wdata_i[23:0]};