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

在Verilog中检测三个连续的设置位,verilog,Verilog,我的代码有一个错误。我有一个给定的32b输入和一个6b输出,当输入连续有3b的1时,每次都应该递增。例如,如果输入为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 在中输入[31

我的代码有一个错误。我有一个给定的32b输入和一个6b输出,当输入连续有3b的1时,每次都应该递增。例如,如果输入为
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
在中输入[31:0],
输出寄存器[5:0]输出,
输入时钟
分配n=0;
始终@(posedge时钟)开始

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

if(in&(in>>1)&(in>>2)!='0)

事实上,这在语法上似乎并不正确。尝试使用一些括号。如果你想在这里得到帮助,你需要自己做出一些努力。但是像那样使用n可能不会综合,我会给你一个提示。创建一个单独的带有for循环的组合逻辑块,它可以告诉您何时递增。
if  (in & (in >>1) & (in>>2)  != '0 )
 out <= out+1;