微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求教verilog综合问题

求教verilog综合问题

时间:10-02 整理:3721RD 点击:
RT.  遇到一个棘手的Problem,书中给的verilog源码用Quatus II 不能综合得到FSM,而自己修改了之后能够综合出FSM,而我却找不出二者的本质差别,希望高人指点,谢谢!
书中源码如下:
module mealyfsm2(a,clkc,reset,z);
input a,clkc,reset;
output z;
reg z;

parameter st0=2'd0,st1=2'd1,st2=2'd2;
reg [0:2] nextstate,mealystate;
//timing sequential logic
always @(posedge reset or posedge clkc)
  if(reset)
   begin
    mealystate<=0;
    mealystate[st0]<=1'b1;
   end
  else
   mealystate<=nextstate;
   
//combinational logic
always @(mealystate or a)
  begin
   nextstate=3'b0;
   z=1'b0;
   
   case (1'b1)
    mealystate[st0]:
     if(a)
     begin
      z=1'b1;
      nextstate[st2]=1'b1;
     end
     else
      nextstate[st0]=1'b1;
     
    mealystate[st1]:
     if(a)
     begin
      z=1'b1;
      nextstate[st0]=1'b1;
     end
     else
      nextstate[st1]=1'b1;
     
    mealystate[st2]:
     if(a)
      nextstate[st1]=1'b1;
     else
      nextstate[st2]=1'b1;
   endcase
  end
endmodule

  自己修改后改的代码如下:
module mealyfsm2_2(a,clkc,reset,z);
input a,clkc,reset;
output z;
reg z;
reg [0:2] nextstate,mealystate;

parameter st0=3'b100,st1=3'b010,st2=3'b001;

//timing sequential logic
always @(posedge reset or posedge clkc)
  if(reset)
   mealystate<=st0;
  else
   mealystate<=nextstate;
   
//combinational logic
always @(mealystate or a)
  
   case (mealystate)
    st0:
      begin
       z=(a)?1:0;
       nextstate=(a)?st2:st0;
      end  
    st1:
     begin
       z=(a)?1:0;
       nextstate=(a)?st0:st1;
      end
    st2:
     begin
       z=0;
       nextstate=(a)?st1:st2;
      end
    default:
     begin
      z=0;
      nextstate=st0;
     end
   endcase
endmodule

个人觉得应该是 st0=2'd0; mealystate[st0]<=1'b1;有问题。one-hot状态机,这样写。头一回见到。

那个是初始化,没问题啊。

问题已解决,谢谢关注!

小编第一个代码中的case(1'b1) 从哪里来的, case 应该是一个信号哦

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

网站地图

Top