检测序列011011

检测序列011011

module seqdet (
	input clk,
	input rst_n,
	input data,
	output reg en);

parameter
		idle=4'b0000,
		seq1=4'b0001,
		seq2=4'b0010,
		seq3=4'b0011,
		seq4=4'b0100,
		seq5=4'b0101,
		seq6=4'b0110;
reg [3:0] state;		

//一段式状态机
//序列不重用;(按理:序列可重用。 都可)
always@(posedge clk)
	if(!rst_n)
		begin en<=0; state<=idle; end
	else case(state)
		idle: begin if(data==0) state<=seq1; else state<=idle; en<=0; end  //en应该也可写在首
		seq1: begin if(data==1) state<=seq2; else state<=seq1; en<=0; end
		seq2: if(data==1) state<=seq3; else state<=seq1;
		seq3: if(data==0) state<=seq4; else state<=idle;
		seq4: if(data==1) state<=seq5; else state<=seq1;
		seq5: if(data==1) state<=seq6; else state<=seq1;
		seq6: begin en<=1; if(data==0) state<=seq1; else state<=idle; end
		default: begin en<=0; state<=idle; end
		endcase
				
endmodule	

测试代码(sv)

class randdata;
    rand bit data;
endclass

module tb_seqdet( );
logic clk, rst_n, data, en;
seqdet seqdet(clk, rst_n, data, en);

initial
    begin clk=0; forever #5 clk=~clk; end 

randdata rdata;//声明句柄    
initial
    begin
    rdata=new();//分配内存,实例化
    rst_n=0;
    data=0;
    #30
    rst_n=1;
    
    forever@(posedge clk)
    begin
        assert(rdata.randomize());
        data=rdata.data;
    end
    end    
endmodule
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值