2013-12-12 50 views
-2

我已经编写了参数化数字的平方根的verilog代码。如果位数甚至是代码工作。平方根分区中的位分组

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

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

回答

0

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

两种解决这一方式:

  1. 垫上检测奇数的数量,加入的0

  2. MSB具有其中选择1或2位有选择地填充所述迭代的if else 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是基于参数并且循环具有固定数量的迭代。如果一个循环可以静态展开,那么它是可综合的。