以前看到二进制序列检测一般都使用状态机实现,今天突然想到可以使用移位寄存器实现,移位寄存器就好像一个窗口,把从窗口里截取的数据接到一个比较器上,这样比较不同序列时只要换一下比较器另一个输入端的数据就可以实现,需要改变的只是寄存器和比较器的位宽。
选cyclone在ModelSim中仿真,延迟为9ns多一点。
附上源码:
// sequence detect by shift_register
module seq_det(iBit,CLK,RSTn,iKEY,Q);
input iBit;
input[4:0] iKEY;
input CLK;
input RSTn;
output Q;
reg[4:0] shift_reg;
always@(posedge CLK or negedge RSTn)
begin
if(RSTn==0)
shift_reg <= 0;
else
shift_reg <= {shift_reg[3:0],iBit};
end
assign Q =(shift_reg==iKEY)?1:0;
endmodule
用户1569463 2009-2-9 21:49