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]};


