verilog状态机检测110序列,急救!!!!!!!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog状态机检测110序列,急救!!!!!!!!!相关的知识,希望对你有一定的参考价值。
参考技术A 状态机,把状态图做出来就简单了。110序列检测器,状态转换方法很多。最简单的是串行检测,来一个检测一个。设置初始状态为 S0, 来1的时候进入状态S1,表示检测到第一个1,来0的时候保持S0。
S1状态下,来1的时候进S2,表示检测到前两个1,来0的时候返回S0
S2状态下,来1的时候进S2,这时共有3个1,所以还是进入S2,表示检测到两个1,来0的时候进入S3,表示检测到110。 S3状态下输出1,表示检测到序列。
S3状态下,来1时进入S1,表示检测到一个1,来0时进入S0初始状态。
代码:
module Detec_110(clk,reset,data_in,bingo)
parameter S0=4'b0001;
parameter S1=4'b0010;
parameter S2=4'b0100;
parameter S3=4'b1000;
input clk,reset;
input data_in;
output bingo;
wire bingo;
reg state;
always@(posedge clk or negedge reset)
if (!reset)
state<=S0;
else case(state)
S0: if(data_in==1'b1) state<=S1; else state<=S0;
S1: if(data_in==1'b1) state<=S2; else state<=S0;
S2: if(data_in==1'b1) state<=S2; else state<=S3;
S3: if(data_in==1'b1) state<=S1; else state<=S0;
default: state<=S0;
endcase
assign bingo=(state==S3)?1'b1:1'b0;
endmodule
verilog状态机中的一个状态执行时间问题
我在三段式状态机的verilog中又加入了一个always块;仿真后发现一个状态的执行之间变成了2个clk(原来是1个clk)。这是什么原因?求大虾指导!
你在always中的触发条件是clk吧,然后在设计中有字段currentstate <= nextstate;吧,这样相当于插入一个触发器,故要再延迟一个clk。 参考技术A 听不懂 看看你代码以上是关于verilog状态机检测110序列,急救!!!!!!!!!的主要内容,如果未能解决你的问题,请参考以下文章
序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)