crazy31415926 发表于 2013-8-26 00:33

FPGA实现最高非零位的快速确定问题

对于任意一个16位数据,如何快速确定它的最高非零位的位置。

白丁 发表于 2013-8-26 08:02

我的思路与上1000_0000_0000_0000,结果为1,那左起第一位为最高非零位,如果为0再与0100_0000_0000_0000,以此类推

crazy31415926 发表于 2013-8-26 18:44

感谢2楼,这个行到是行,有没有更省时省事的做法,比如说比较一次就可以判断出来的。

白丁 发表于 2013-8-26 21:56

回复 板凳crazy31415926 的帖子

这个方案还不够省事吗,本身就不是多复杂,干嘛要非常简化?

chenzhufly 发表于 2013-8-27 10:50

精益求精

白丁 发表于 2013-8-27 19:35

回复 5楼chenzhufly 的帖子

想到啥好的办法没?

chenzhufly 发表于 2013-8-29 12:34

<div class='shownolgin' data-isdigest='no'>别忘了 FPGA是并行运算,可以按位取bit的哦</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

chenzhufly 发表于 2013-8-29 12:38

<div class='shownolgin' data-isdigest='no'>reg data;
wire out;
assign out = (data == 0) ?8'd15 :
                        (data == 0) ?8'd14 :
                           ....................................
                        (data == 0) ?8'd1 :8'd0</div><script>showreplylogin();</script>

bzh19940620 发表于 2024-5-30 11:25

<div class='shownolgin' data-isdigest='no'><p>版主还在吗?我这有一套更好的找最高非零的算法,不仅仅可以找16位的,更多位宽的也可以找,我贴一个我自己写的8位的代码。</p>

<pre>
<code>module DetectionSequence8BitFirst1 #(
parameter LATENCY = 1
)(
inputwire         clk,
inputwire         nUsrRst,
inputwire iData,
output logic oFirst1Location,
output logic      oNonZeroFlag
);
logic data;
logic dataTmp0;
logic dataTmp1;
logic dataTmp2;
logic dataTmp3;

always_comb begin
    dataTmp0 = iData - 8'd1;
    dataTmp1 = ~dataTmp0;
    dataTmp2 = iData &amp; dataTmp1;
    dataTmp3 = dataTmp2 - 8'd1;
end

assign oNonZeroFlag = (dataTmp3 == 8'hff) ? 1'b0 : 1'b1;

generate
if(LATENCY == 0) begin
    always_comb begin
      oFirst1Location = dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3;
    end
end
else if(LATENCY == 1) begin
    always_ff @(posedge clk) begin
      oFirst1Location &lt;= dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3 + dataTmp3;
    end
end
endgenerate
endmodule</code></pre>

<p>&nbsp;</p>
</div><script>showreplylogin();</script>
页: [1]
查看完整版本: FPGA实现最高非零位的快速确定问题