在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1723|回复: 0

[求助] 关于检测五位二进制序列10010的状态机设计问题

[复制链接]
发表于 2015-8-18 08:51:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
时钟上升沿到来时,data左移,同时data最高位赋给x,同样在该上升沿到来时,进入状态判断,第一个x=1时应该进入状态A(001),为什么modelsim仿真波形图显示x=1下一周期才变为状态A,感觉状态(state)的输出滞后一个周期,希望大神帮忙看看哪里出了问题,或者解释一下是什么原因?谢谢(附代码和仿真结果图)



  1. //模块代码a
  2. module seqdet(clk,rst,x,state,z);
  3.     input clk,rst,x;
  4.     output [2:0] state;
  5.     output z;
  6.          reg [2:0] state;
  7.          wire z;
  8.          
  9.          parameter IDLE='d0,A='d1,B='d2,C='d3,D='d4,E='d5,F='d6,G='d7;
  10.          
  11.          assign z=(state==E&&x==0)?1:0;
  12.          
  13.          always @(posedge clk)
  14.          if(!rst)
  15.                 begin
  16.                 state<=IDLE;
  17.                 end
  18.         else
  19.                 casex(state)
  20.                         IDLE:if(x==1)
  21.                                                 begin
  22.                                                         state<=A;
  23.                                                 end
  24.                         A:   if(x==0)
  25.                                                 begin
  26.                                                         state<=B;
  27.                                                 end
  28.                         B:   if(x==0)
  29.                                                 begin
  30.                                                         state<=C;
  31.                                                 end
  32.                                   else
  33.                                                 begin
  34.                                                         state<=F;
  35.                                                 end
  36.                         C:   if(x==1)
  37.                                                 begin
  38.                                                         state<=D;
  39.                                                 end
  40.                                         else
  41.                                                 begin
  42.                                                         state<=G;
  43.                                                 end
  44.                         D:    if(x==0)
  45.                                                 begin
  46.                                                         state<=E;
  47.                                                 end
  48.                                         else
  49.                                                 begin
  50.                                                         state<=A;
  51.                                                 end
  52.                         E:    if(x==0)
  53.                                                 begin
  54.                                                         state<=C;
  55.                                                 end
  56.                                         else
  57.                                                 begin
  58.                                                         state<=A;
  59.                                                 end
  60.                         F:    if(x==1)
  61.                                                 begin
  62.                                                         state<=A;
  63.                                                 end
  64.                                         else
  65.                                                 begin
  66.                                                         state<=B;
  67.                                                 end
  68.                         G:    if(x==1)
  69.                                                 begin
  70.                                                         state<=F;
  71.                                                 end
  72.                         default:                state<=IDLE;
  73.                 endcase
  74.                                 
  75.    


  76. endmodule


  77. module seqdet_test;

  78.         // Inputs
  79.         reg clk;
  80.         reg rst;
  81.         reg [23:0] data;

  82.         // Outputs
  83.         wire [2:0] state;
  84.         wire z,x;
  85.         
  86.         always #10 clk=~clk;
  87.         
  88.         always @(posedge clk)
  89.                 data={data[22:0],data[23]};
  90.         
  91.         assign x=data[23];

  92.         // Instantiate the Unit Under Test (UUT)
  93.         seqdet uut (
  94.                 .clk(clk),
  95.                 .rst(rst),
  96.                 .x(x),
  97.                 .state(state),
  98.                 .z(z)
  99.         );

  100.         initial begin
  101.                
  102.                 clk = 0;
  103.                 rst = 1;
  104.                 #2 rst=0;
  105.                 #30 rst=1;
  106.                 data='b11001001000010010100;
  107.                 #500 $stop;
  108.         end
  109.       
  110. endmodule




复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 01:29 , Processed in 0.018630 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表