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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务