问题:
为状态机编写Verilog行为程序,在输入行X上对连续的同步数据流进行采样。状态机在序列….0110…
出现时始终到输出Z.考虑序列可能是
重叠。例如,
X = 0011001101100110
Z = 0000100010010001
module find_data(in,out);
parameter check=4'b0110;
input [15:0]in;
output [15:0]out;
reg [15:0]x;
reg [15:0]z;
reg [3:0]maxfourchar_x,an;
always begin
x=in;
z=out;
maxfourchar_x=x[15:12];
repeat(12) begin
x=x<<1;
z=z<<1;
an= maxfourchar_x - check;
if (an==0)
z=z+1;
else
z=0;
end
end
endmodule
module test_find_data();
reg [15:0]in;
wire [15:0]out;
initial $display("z=%b%b%b%b%b%b%b%b%b%b%b%b%b%b%b%b",out[15],out[14],out[13],out[12],out[11],out[10],out[9],out[8],out[7],out[6],out[5],out[4],out[3],out[2],out[1],out[0]);
initial in=16'b0011001101100110;
find_data d1(in,out);
endmodule