【问题标题】:grouping of bits in square root division平方根除法中的位分组
【发布时间】:2013-12-12 03:41:50
【问题描述】:

我已经为参数化数字的平方根编写了verilog代码。如果位数是偶数,则代码有效。

如果位数是奇数,则代码从右 (LSB) 开始将位数分成两组。第一次迭代将选择从最左边开始有 1 位的组。

我正在使用计数器来完成所需的周期数。我不明白我应该如何为第一次迭代选择 1 位组,为其余迭代选择 2 位组。

【问题讨论】:

    标签: verilog root square-root


    【解决方案1】:

    可变数量的位选择似乎在硬件中并不实用。如果你展示了一些代码答案可能会更相关或更实用。

    解决这个问题的两种方法:

    1. 检测奇数时补上,MSB加0。

    2. 在迭代中有一个if else,它选择 1 或 2 位选择性地填充 LSB。

    1.

    的代码示例
    parameter DATA_W = 11;
    parameter odd    = DATA_W % 2;
    input [DATA_W-1:0] data;
    reg   [DATA_W-1+odd:0] data_int;
    
    always @* begin
      if (odd)
        data_int = {1'b0, data};
      else 
        data_int = data;
    end
    

    代码示例 2.

    // Iteration for( loop=0; loop<max; loop=loop+1) begin
      if ((loop == 0) && (odd)) begin
        sel = {data[0], 1'b0};
      end 
      else begin
        sel = data[loop*2+1:loop*2]; 
      end
    // end
    

    这应该能够静态展开,因为odd 是基于一个参数并且循环具有固定的迭代次数。如果一个循环可以静态展开,那么它就是可合成的。

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多