|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
用以下代码实现对输入信号中连续三个1的检测,当检测到连续的三个1后输出一个高电平。要求用状态机实现,代码如下。
问题:
代码在仿真是工作正常,但是在状态机视图中没有显示出完整的状态转换图,请问是代码有问题吗?比如存在一些隐含的错误?
另外,如果把状态机中S1,S2,S3中的任何一个状态不让其返回S0,那么可以得到一个相对完整的转换图,但是,一旦S1,S2,S3均有一条路径返回S0时,S1,S2,S3返回S0的路径就会同时消失掉,这是为什么呢?
- module mypro(
- clk,
- rst_n,
- din,
- dout
- ); input clk;
- input rst_n;
- input din;
- output reg dout; parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;
-
- reg [1:0] currentstate,nextstate;
-
- always @ (posedge clk or negedge rst_n)
- begin
- if (!rst_n)
- begin
- currentstate<=S0;
- end
- else
- currentstate<=nextstate;
- end always @ (currentstate or din)
- begin
- case (currentstate)
- S0:
- begin
- dout=1'b0;
- if(din)nextstate=S1;
- else nextstate=S0;
- end
- S1:
- begin
- dout=1'b0;
- if(din)nextstate=S2;
- else nextstate=S0;
- end
- S2:
- begin
- dout=1'b0;
- if(din)nextstate=S3;
- else nextstate=S0;
- end
- S3:
- begin
- dout=1'b1;
- if(din)nextstate=S3;
- else nextstate=S0;
- end
- endcase
- end
- endmodule
复制代码 |
|