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