110序列检测

  • 格式:docx
  • 大小:17.48 KB
  • 文档页数:2

module mealy (seq, cp, cr, det);

input seq, cp, cr;

output det;

reg det;

reg [1:0] current_state, next_state;

parameter s0=2'b00, s1=2'b01, s2=2'b11;

always @ (negedge cp or negedge cr)

begin

if (~cr)

current_state<=s0;

else

current_state<=next_state;

end

always @ (current_state or seq)

begin

case (current_state)

s0:begin det<=0;next_state<=(seq==1)?s1:s0;end

s1:begin det<=0;next_state<=(seq==1)?s2:s0;end

s2:if (seq==1)

begin det<=0;next_state<=s2;end

else

begin det<=1;next_state<=s0;end

default:begin det<=0;next_state<=s0;end

endcase

end

endmodule

module test_counter (); reg cp, cr;

wire det;

reg [4:0] cnt;

reg [19:0]data = 20'b0011_1001_0101_1011_0000;

wire seq=data[cnt];

integer i;

initial

begin

cp=1'b0;

cr=1'b0;

cnt=5'b0;

#20 cr=1;

end

always #10 cp=~cp;

always@(posedge cp) begin

if(cnt < 5'd19) cnt <= cnt + 1'b1;

else $stop();

end

mealy mealy_inst(.seq(data[cnt]), .cp(cp), .cr(cr), .det(det));

endmodule