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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2401|回复: 2

状态机问题

[复制链接]
发表于 2009-5-4 12:51:04 | 显示全部楼层 |阅读模式

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

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

x
module input_64(A,S,OD,GI,ID,GO,clk);
input clk;
input[9:0] A;
input[5:0] S;
input[7:0] OD;
input[29:0] GI;
output[7:0] ID;
output[29:0] GO;

reg[7:0] ID;
reg[29:0] GO;

wire EN;
reg[2:0] U17R;
reg[2:0] U18R;
reg[2:0] U19R;
reg[2:0] U20R;
reg[2:0] U21R;
reg[2:0] U22R;

reg[11:0] CURRENT_STATE;
reg[11:0] NEXT_STATE;


parameter //A=4'b0000,
   //B=4'b0001,
   C=4'b0010,
   D=4'b0011,
   E=4'b0100,
   F=4'b0101,
   G=4'b0110,
   H=4'b0111,
   I=4'b1000,
   J=4'b1001,
   K=4'b1010,
   L=4'b1011,
   M=4'b1100,
   N=4'b1101;
   //O=4'b1110,
   //P=4'b1111;
   
parameter U22 =12'b000000000001,
   U21 =12'b000000000010,
   U20 =12'b000000000100,
   U19 =12'b000000001000,
   U18 =12'b000000010000,
   U17 =12'b000000100000,
   U12 =12'b000001000000,
   U11 =12'b000010000000,
   U10 =12'b000100000000,
   U9 =12'b001000000000,
   U8 =12'b010000000000,
   U7 =12'b100000000000,
   //START =12'b1000000000000,
   START   =12'b000000000000;
  

assign EN=(A[9:4]==S[5:0])?1'b1:1'b0;

always @(posedge clk )
begin
if(!EN)
  begin
  CURRENT_STATE<=START;
  //CURRENT_STATE1<=START;
  end
else
  begin
  CURRENT_STATE<=NEXT_STATE;
  //CURRENT_STATE1<=NEXT_STATE1;
  end
end

always @(CURRENT_STATE or A[3:0] or EN )
begin
NEXT_STATE=12'bx;
case(CURRENT_STATE)
  START: if(A[3:0]==H) NEXT_STATE=U22;
  U22: if(A[3:0]==G) NEXT_STATE=U21;  
  U21: if(A[3:0]==F) NEXT_STATE=U20;
  U20: if(A[3:0]==E) NEXT_STATE=U19;
  U19: if(A[3:0]==D) NEXT_STATE=U18;
  U18: if(A[3:0]==C) NEXT_STATE=U17;
  U17: if(A[3:0]==I) NEXT_STATE=U12;
  U12: if(A[3:0]==J) NEXT_STATE=U11;
  U11: if(A[3:0]==K)  NEXT_STATE=U10;
  U10: if(A[3:0]==L) NEXT_STATE=U9;
  U9:  if(A[3:0]==M) NEXT_STATE=U8;
  U8:  if(A[3:0]==N) NEXT_STATE=U7;
  default:   NEXT_STATE=START;
  
endcase
end


  
  
  
always @(posedge clk )
begin
if(!EN)
  begin
  ID<=8'bz;
  GO<=30'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
  end
else
  begin
   ID<=8'bz;
   GO<=30'bzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
  case(NEXT_STATE)
   U22: {U22R[2:0],GO[25],GO[19],GO[13],GO[7],GO[1]}<=OD[7:0];  
   U21: {U21R[2:0],GO[26],GO[20],GO[14],GO[8],GO[2]}<=OD[7:0];
   U20: {U20R[2:0],GO[29],GO[23],GO[17],GO[11],GO[5]}<=OD[7:0];
   U19: {U19R[2:0],GO[28],GO[22],GO[16],GO[10],GO[4]}<=OD[7:0];
   U18: {U18R[2:0],GO[27],GO[21],GO[15],GO[9],GO[3]}<=OD[7:0];
   U17: {U17R[2:0],GO[24],GO[18],GO[12],GO[6],GO[0]}<=OD[7:0];
   U12: ID<={U22R[2:0],GI[25],GI[19],GI[13],GI[7],GI[1]};
   U11: ID<={U21R[2:0],GI[26],GI[20],GI[14],GI[8],GI[2]};
   U10: ID<={U20R[2:0],GI[29],GI[23],GI[17],GI[11],GI[5]};
   U9:  ID<={U19R[2:0],GI[28],GI[22],GI[16],GI[10],GI[4]};
   U8:  ID<={U18R[2:0],GI[27],GI[21],GI[15],GI[9],GI[3]};
   U7:  ID<={U17R[2:0],GI[24],GI[18],GI[12],GI[6],GI[0]};
  endcase
   
  end
end


endmodule


编译时,有这样的警告:
Warning: Design contains 4 input pin(s) that do not drive logic
Warning (15610): No output dependent on input pin "A[0]"
Warning (15610): No output dependent on input pin "A[1]"
Warning (15610): No output dependent on input pin "A[2]"
Warning (15610): No output dependent on input pin "A[3]"



而且仿真时,GO输出的波形确实不以A为依据

请教各位,哪里有问题啊 ?
发表于 2009-5-12 17:21:33 | 显示全部楼层
这样写next_state只能等于xxxx

你可以将next_state=xxxx去掉,然后在每个分支的if后面加上else语句
发表于 2009-5-18 09:19:26 | 显示全部楼层
呵呵,有意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-16 22:47 , Processed in 0.014770 second(s), 7 queries , Gzip On, Redis On.

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