在Verilog中检测三个连续的设置位

时间:2014-04-18 13:55:36

标签: verilog

我的代码出错了。我有一个给定的32b输入和一个6b输出,每当输入连续输入3b时,它应该增加。例如,如果输入为000...111,则输出应为000001

我试过这段代码:

input [31:0] in,
output reg [5:0] out,
input clock

assign n=0;
always @ (posedge clock) begin
**out <= in[n]?in[n+1]?in[n+2]? out+1 : out;**
n++;
end

没有成功。有任何想法吗 ?

1 个答案:

答案 0 :(得分:1)

这可以使用here发布的优雅解决方案来解决:

if  (in & (in >>1) & (in>>2)  != '0 )
 out <= out+1;

基本上,如果数字的按位AND与自身向右移位1位三次非零,则递增。