logo资料库

序列检测器verilog实现.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
序列检测器的 Verilog 实现 1. 摩尔型电路 (1)状态转移图 (2)Verilog 代码 //////////////////////////////////////////////////////////////////////////////// //模块功能:检测到序列"10010"时立即输出 1,这是个摩尔型电路 //QQ:787671932 2012-9-25 //////////////////////////////////////////////////////////////////////////////// module seqdet(x,z,clk,rst); input x,clk,rst; //x 为输入序列 output z; reg[2:0]state,nstate; //state 为当前状态,nstate 为下一状态 parameter IDLE=3'd0, //初始状态 A=3'd1, //状态序列 1 B=3'd2, //状态序列 10 C=3'd3, //状态序列 100 D=3'd4, //状态序列 1001 E=3'd5; //状态序列 10010 //////////////////////////////////////////////////////////////////////////////// always@(x,state) case(state) IDLE:if(x==1) nstate=A; else nstate=IDLE; A: if(x==0) nstate=B; else nstate=A; B: if(x==0) nstate=C;
else nstate=A; C: if(x==1) nstate=D; else nstate=IDLE; D: if(x==0) nstate=E; else nstate=A; E: if(x==0) nstate=C; else nstate=A; default: nstate<=IDLE; endcase /////////////////////////////////////////////////////////////////////////////// always@(posedge clk,negedge rst) if(!rst) state<=IDLE; else state<=nstate; ////////////////////////////////////////////////////////////////////////////// assign z=(state==E); //z 输出为 1 的条件,z 只和状态有关,所以为摩尔型 ///////////////////////////////////////////////////////////////////////////// endmodule (3)仿真结果 2. 米利型电路 (1)状态转移图
(2)Verilog 代码 //////////////////////////////////////////////////////////////////////////////// //模块功能:检测到序列"10010"时立即输出 1,这是个米利型电路 //QQ:787671932 2012-9-24 //////////////////////////////////////////////////////////////////////////////// module seqdet(x,z,clk,rst); input x,clk,rst; //x 为输入序列 output z; reg[2:0]state,nstate; //state 为当前状态,nstate 为下一状态 parameter IDLE=3'd0, //初始状态 A=3'd1, //状态序列 1 B=3'd2, //状态序列 10 C=3'd3, //状态序列 100 D=3'd4, //状态序列 1001 E=3'd5; //状态序列 10010 //////////////////////////////////////////////////////////////////////////////// always@(x,state) case(state) IDLE:if(x==1) nstate=A; else nstate=IDLE; A: if(x==0) nstate=B; else nstate=A; B: if(x==0) nstate=C; else nstate=A; C: if(x==1) nstate=D; else nstate=IDLE; D: if(x==0) nstate=E; else nstate=A; E: if(x==0) nstate=C; else nstate=A; default: nstate<=IDLE; endcase /////////////////////////////////////////////////////////////////////////////// always@(posedge clk,negedge rst) if(!rst) state<=IDLE; else state<=nstate; ////////////////////////////////////////////////////////////////////////////// assign z=(state==D) && (x==0); // z 既和状态有关又和输入有关,所以为米利型 ///////////////////////////////////////////////////////////////////////////// endmodule
(3)仿真结果
分享到:
收藏