gpt4 book ai didi

assembly - 计算单周期数据路径中的前导零

转载 作者:行者123 更新时间:2023-12-03 06:22:41 24 4
gpt4 key购买 nike

众所周知,MIPS 指令集支持 clz(计数前导零),如下所示:

clz $t0,$t1 count leading zeros t0 = # of leading zeros in t1

我正在用 verilog 编写一个单周期数据路径,只是想知道 ALU 需要支持什么才能做到这一点......有什么想法吗?

最佳答案

这是一种可能的方法(我忽略输入 0 的情况,这可能最好被视为特殊情况):

  • 32 位数字中前导零的数量为:
    • 前 16 位中前导零的数量(如果前 16 位中有任何非零);或
    • 16,如果高 16 位全为零,则加上低 16 位中前导零的数量
  • 这给出了 5 位结果的最高位(忽略输入 0 的特殊情况...)。
  • 现在您需要找到 16 位数字中前导零的数量,因此再次应用相同的原理。
  • 等等

在 Verilog 中,它可能看起来像这样:

result[4] = (value[31:16] == 16'b0);
val16 = result[4] ? value[15:0] : value[31:16];
result[3] = (val16[15:8] == 8'b0);
val8 = result[3] ? val16[7:0] : val16[15:8];
result[2] = (val8[7:4] == 4'b0);
val4 = result[2] ? val8[3:0] : val8[7:4];
result[1] = (val4[3:2] == 2'b0);
result[0] = result[1] ? ~val4[1] : ~val4[3];

关于assembly - 计算单周期数据路径中的前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2368680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com