微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于状态机编码

关于状态机编码

时间:10-02 整理:3721RD 点击:
晚辈最近在看前辈的一段Verilog语言编写的FSM,但是总觉得这个状态机编写的有问题,可以前辈不屑的总是说:这个代码都测试通过了,不会有问题的。所以晚辈就自己照的编写了一段类似的代码,请论坛里的老师们帮忙给指导一下,代码如下:module fsm (Clock,Reset,A,K2,K1);
input Clock,Reset,A;
output K2,K1;
reg K2,K1;
reg [2:0] state,nextstate;
parameter
    Idle=3'b000,
    Start=3'b001,
    Stop=3'b010,
    Clear=3'b011,
    Duoyu=3'b100;
always @(posedge Clock)
   if(! Reset)
     state <=Idle;
   else
     state<=nextstate;
always @(state or A)
   case (state)
   Idle: if(A) nextstate =Start;
         else nextstate = Idle;
   Start:if(!A) nextstate =Stop;
         else nextstate = Start;
   Stop: if(A) nextstate =Clear;
         else nextstate =Stop;
   Clear: if(!A) nextstate = Idle;
          else nextstate = Duoyu;
   default: nextstate = 2'bxx;
  endcase
always @(state or Reset or A)
if (! Reset) K1 = 0;
else
  if (state == Clear && !A)
       K1=1;
  else K1=0;
always @(state or Reset or A)
if(! Reset) K2 =0;
else
  if (state == Stop && A)
         K2 = 1;
    else K2 = 0;
endmodule
代码中红色标注的这个状态貌似不会达到,并且在综合之后的网表中找不到对应的寄存器。
这样的代码会不会存在安全问题,健壮性怎么样呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top