Verilog 平方根除法中的位分组
我已经为参数化的数字的平方根编写了verilog代码。如果位数为偶数,则代码可以工作 如果位数为奇数,则代码将位数从右LSB开始分成两组。第一次迭代将选择从最左边的位开始有1位的组Verilog 平方根除法中的位分组,verilog,root,square-root,Verilog,Root,Square Root,我已经为参数化的数字的平方根编写了verilog代码。如果位数为偶数,则代码可以工作 如果位数为奇数,则代码将位数从右LSB开始分成两组。第一次迭代将选择从最左边的位开始有1位的组 我正在使用计数器进行所需的循环次数。我不明白我应该如何为第一次迭代选择1位的组,为其余的迭代选择2位的组 可变位数的位选择在硬件中似乎并不实用。如果您展示了一些代码,那么答案可能更相关或更实用 解决此问题的两种方法: 在检测到奇数时填充该数字,并将MSB添加为0 在迭代中有一个if-else,它选择1或2位选择性地填
我正在使用计数器进行所需的循环次数。我不明白我应该如何为第一次迭代选择1位的组,为其余的迭代选择2位的组 可变位数的位选择在硬件中似乎并不实用。如果您展示了一些代码,那么答案可能更相关或更实用 解决此问题的两种方法: 在检测到奇数时填充该数字,并将MSB添加为0 在迭代中有一个if-else,它选择1或2位选择性地填充LSB 1的代码示例 代码示例2 这应该能够静态展开,因为奇数是基于参数的,循环有固定的迭代次数。如果循环可以静态展开,那么它是可合成的
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
// 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