-2
我已经编写了参数化数字的平方根的verilog代码。如果位数甚至是代码工作。平方根分区中的位分组
如果位数是奇数,则代码将位数从右边开始分成两组(两个LSB)。第一次迭代将选择从最左侧开始具有1位的组。
我正在使用计数器来检查所需的周期数。我不明白我应该如何选择第一次迭代的1位组,以及2次迭代的其余部分。
我已经编写了参数化数字的平方根的verilog代码。如果位数甚至是代码工作。平方根分区中的位分组
如果位数是奇数,则代码将位数从右边开始分成两组(两个LSB)。第一次迭代将选择从最左侧开始具有1位的组。
我正在使用计数器来检查所需的周期数。我不明白我应该如何选择第一次迭代的1位组,以及2次迭代的其余部分。
可变数量的位选择在硬件中看起来并不实际。如果你展示了一些代码,答案可能会更相关或更实用。
两种解决这一方式:
垫上检测奇数的数量,加入的0
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
是基于参数并且循环具有固定数量的迭代。如果一个循环可以静态展开,那么它是可综合的。