假设我有一个寄存器reg [15:0] my_reg
,其中包含一个16位signed sample:
如何找到第一位变化的位置?
意思是,如果假设my_reg = 16'b0001011011010111
,我怎么知道第一个变化是0
to 1
is at my_reg [12]
?对于以以下开头的数字也是如此1
,负数,例如my_reg = 16'b1111011011010111
对第一个出现的位置感兴趣0
(这是11
在这种情况下)。
最终目标(添加一点上下文)是实现数字 FPGA 内置自动增益控制 (AGC)。
与上述相同的技术,但已参数化。使用 XOR 移位一位来确定位变化的位置,然后使用降序优先级编码器输出第一个
换地点。我塞满了my_reg[0]
所以第一位不会创建增量。
localparam width=16;
reg [width-1:0] my_reg;
wire [width:0] delta;
reg [$clog2(width)-1:0] index; // Note: $clog2 was added in IEEE1364-2005
integer i;
assign delta = my_reg ^ { my_reg, my_reg[0] };
always @* begin
index = 0;
for (i=0; i<width; i=i+1)
if (delta[i])
index = i;
end
以上代码位于 EDA 游乐场(顺便说一句,感谢您对此的提醒)http://www.edaplayground.com/x/3uP
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)