找回密码
 注册
关于网站域名变更的通知
查看: 302|回复: 1
打印 上一主题 下一主题

请教大神!!读EEROM,程序会经常死在无法理解的状态机怎么办?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-22 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
# o" e9 D( Y- ~/ v- @
     先说一下小弟遇到的情况吧,用ACTEL的A3P250-1FG144芯片,在Libero11.1编译环境中编译的,其实是很简单的一个读取外置EEROM的SPI程序,每次上电时外部会恒定的给出mode=0(读模式)信号,芯片工作使能信号恒有效(EN_SPI=1),然后利用15.36MHZ的时钟,产生3.84MHZ的SCLK时钟,送给外部EEROM,片选信号SPI_CS每次低电平信号选片,并串转换的模块p2s、s2p没有写在帖子里(主要是和我遇到的问题没关系,就没写进来),即SPI_SI,SPI_SO不用考虑,遇到的问题和它们无关。     : B4 G1 r( r" d" h: @  F6 P
          对于写的程序,在线的语法,仿真都没问题,可是什么我下载到Acte的A3P250-IFG144芯片上时,程序经常会莫名奇妙的死循环在状态机“DELAY_2>DELAY_3>DELAY_3>DELAY_3”,中间直接跳过CYC_3,而且一直不停的在“DELAY_2>DELAY_3>DELAY_3>DELAY_3”循环。
# m, n2 C2 W; E) n" \9 Z      FPGA的资源我只用了13%,在线仿真的逻辑和时序都是没问题的,到时为什么会一直在状态机“DELAY_2>DELAY_3>DELAY_3>DELAY_3”死循环呢??想尽了办法,困扰了几天,实在不知道小弟的程序哪里有问题,请各位大神帮我看看,指点一下,小弟万分感谢!!程序如下:7 g) J$ j! Y, ]6 }  H

  |3 O' e5 w/ `( G+ ^: ^& g* x. n. \! L& A
SPI_ctrl(clk,    //15.36MHZ: _! j+ d% t0 d
            rst,
& N! P3 S9 [5 V            mode,
& ^* l: c; Y, ^  t8 r            EN_SPI,( S6 a0 x0 k9 }2 D( c7 C! B8 n/ n
            radd_ROM,
# U* @% g3 o1 N+ v            SPI_Dout,7 c: @: b+ N( K
         
$ U# c8 F( H- y% |! f            SPI_CS,
# f  j; s! r/ S! u            SPI_SCLK,7 L1 x2 G8 u' q+ O2 l- |
            op_code,
  \& x( e. @6 z' M, m! J' m             D_fromROM,
1 S1 n: r( T. g             D_fromROM_ready
0 R! u5 s6 C2 e! M# A% w0 B         );
, x$ T5 L+ L* Z
5 L; u* v* }. D1 sinput  clk,rst;  ]0 c/ s6 N3 Y+ x  n  n% k. a
input  mode;* m5 V6 S, x9 e' {% R! d. N6 j9 {
input  EN_SPI;
* n, }; p/ x4 u6 R$ Sinput[15:0]  radd_ROM;
* [  N, B1 F9 Vinput[7:0]  SPI_Dout;
/ s$ H6 w: j, B8 L, x
2 H/ _! y+ b! h" @: L- _output  SPI_SCLK;) u+ k0 a9 n" ?8 R
output  SPI_CS;/ E4 @; Q. [7 }# Z' q* l
output[23:0]  op_code;
* {) r' Q4 d0 p$ c% soutput[7:0]  D_fromROM;$ {3 l( u: u6 c% X
output  D_fromROM_ready;
+ v, s' s3 U6 @5 m+ ~) n  F" o' k# l7 `$ b9 w3 i' }( b
parameter  READ_CNT=8’d32;
6 W/ X. X3 a2 \2 ?0 f$ C8 m1 d  \7 c: ?, t: D& c
parameter  SPI_READ=8’b0000_0011;
& h; N/ ~3 G! Z: _
4 g+ y& j3 A/ }parameter   IDLE=4’b0000,
6 W5 ?; A! x4 I3 ~) E, [0 C                     Initial_1=4’b0001,
( v* P% C3 D7 {                     CYC_1=4’b0010,6 K  x6 J+ h, K! v
                    DELAY_1=4’b0011,
. n5 @) v+ M- Q, A3 y$ x" }/ F$ S( G1 ]                    CYC_2=4’b0100,
  K# l, F! S. i  ^1 r2 ]4 o+ u                    DELAY_2=4’b0101,: `2 c' K+ @) t1 ?$ f
                   CYC_3=4’b0110,
3 p1 e) @6 C3 M: e3 Z                   DELAY_3=4’b0111,
  i4 {  J; }8 d9 a+ Y/ r7 z                   JUDGE_1=4’b1000,
3 I- ~( c6 b5 A7 O" F# E/ o                   SPI_rdBack=4’b1001;
6 _7 Z8 e# o0 h* Q2 x% E. S" Q8 G$ d0 v: h, r2 w
reg[3:0]  state;
+ P. v1 R' L/ T! Q( Y/ treg[7:0]  SCLK_cnt;
" K$ v: E6 {, V& T8 u% S; hAlways@( posedge  rst  or  posedge  clk) begin
( c# H% O. D9 q& K" P     if (rst)  begin( r( [6 p, Q& W( M# R! ?& J9 y
           SPI_SCLK<=1’b0;+ o* C8 v" a! u' B
           SPI_CS<=1’b1;
. q' \. c7 R6 H1 z7 |1 E) T           op_code<=24’b0;8 D2 d: g: D- r6 H1 @' x  P2 h
           D_fromROM<=8’b0;( ]7 M2 o- O+ j' Q! |; V/ `
           D_fromROM_ready<=1’b0;; P0 _4 }1 Y4 o/ V7 p
           SCLK_cnt<=8’d0;9 t2 K1 g" A! B
           state<=IDLE;. D- O4 G! n& q. j) y  R
     end3 J8 A- B/ b, {* M- ~2 q# ^# M7 r( @
     else  if ( EN_SPI==1‘b1’)  begin( e, v) B$ h* A. y
            case(state)
& f, x8 P( `$ C/ {                   IDLE: begin
# j" s: ?2 [( E' u                                 if(mode==1’b0) begin
* Q+ e* F4 Q- D$ Y0 _                                        state<=Initial_1;
. {8 D9 |" D" R1 A! z( j( ]9 Q) L, o- t                                 end/ p: l# x8 ]/ p. |2 G- O9 {6 A
                                 else begin: f. u  u/ F# g. f; f. m
                                        state<=IDLE;
! {  o3 v9 L9 @% J5 E. _                                 end7 F  r7 L$ M- m$ w2 m: L# }+ I" L
                  end
, _$ U1 [- g+ z6 F                  Initial_1:begin  |1 {5 s/ ?- q  o
                                   op_code<={SPI_READ,radd_ROM};
+ B6 f" Z* j  x" }# c" Q! Y: u2 U                                   SCLK_cnt<=READ_CNT;" O/ r9 l* {2 Y) r+ h
                                   state<=CYC_1;
+ h* A/ {( j5 m8 K# j9 o                  end
. J1 R' x; o' x                  CYC_1:begin6 R' E9 x+ y- e9 R2 J. M
                                   SPI_CS<=1’b0;& P/ U6 h# [9 ^6 }* @) }
                                   state<=DELAY_1; ) {$ c, B$ A* b. ^$ q
                   end
! P4 N! k5 M3 q                   DELAY_1:begin
$ d0 l7 ^6 F; H/ c/ @  C                                   SPI_CS<=1’b0;
: _: h9 {5 S/ Q- E- K7 ]1 V                                   state<=CYC_2;
; _/ Y& [; c. M$ @3 e1 j5 Y/ m                   end) y* h2 O) }; M
                  CYC_2:begin
- n& W" ^9 d( G                                   SPI_SCLK<=1’b1;
! P: N. m; A  T                                   state<=DELAY_2;
5 J) r; K& t0 ^# t4 f1 n. E% d                  end$ }+ V3 ?1 S. |/ D
                  DELAY_2:begin: F$ g' C% ~) z$ w0 X7 K1 Y
                                  SPI_SCLK<=1’b1;
! H  w  E/ K! t0 `5 V                                  SCLK_cnt<=SCLK_cnt-8’d1;( S  ~, X0 Q+ G+ t! G3 g( c
                                  state<=CYC_3;3 d% F6 }3 k* u
                  end
8 m5 B6 H: E5 u8 ?' g% d' A/ d5 W                  CYC_3:begin9 m' `0 F: L- d- a3 d8 u1 i, W
                                  SPI_SCLK<=1’b0;
. e. l8 t8 t9 s) p! k& Q                                  state<=DELAY_3;
2 S; q5 N; t2 |$ G                  end
! Y- O0 r& s' ^* Q) i% n! X                  DELAY_3:begin7 R) Q) v1 Q+ |& q/ k
                                  SPI_SCLK<=1’b0;0 w) o$ G5 a6 N' U% i# d
                                  if(SCLK_cnt==8’d0)  begin
/ E+ _2 F3 R9 J0 c2 L9 Q1 x                                           D_fromROM<=SPI_Dout;
* c) R, U5 j5 y( C' ]$ ?                                           state<=JUDGE_1;) }6 Z( U# u( C$ E  a. k
                                  end5 F: K1 f2 Q9 v7 q. s" L1 d
                                  else  begin7 ~& ]/ T- {$ K+ P5 l
                                           state<=CYC_2;; K8 j: z3 D& X$ y# P9 D0 g
                                  end! W' t  v1 i3 k; J
                  end
% M$ W% ]7 \- E% D2 a' n5 o                  JUDGE_1:begin
% i6 y& C( {6 ]+ e, ^3 K. B                                    SPI_CS<=1’b1;
/ ?, S1 [% d1 y                                     if(op_code[23:16]==SPI_READ)  begin
" a8 [3 O& m$ e4 |% Z- `+ q                                              D_fromROM_ready<=1’b1;
, S( T  O: X; z                                              state<=SPI_rdBack;
- E& p( p- a0 v/ |8 ]1 P                                    end" c3 M5 R; M/ R7 K. }
                                    else  begin
% W$ D, c3 @2 j& ^3 B- p) D                                              state<=IDLE;
( b4 L0 x: r. u; Z                                    end
+ q' ]) @; h) r" W" b  o                   end8 r0 E  B  O0 w. S0 a' X8 u
                   SPI_rdBack:begin  p- U+ H4 h5 I% g" k) i1 x2 w7 F7 x) R
                                         D_fromROM_ready<=1’b0;6 @) _! |  ^( d2 G& G2 ]3 R
                                         state<=IDLE;5 F. d0 d1 ^2 p7 s+ ^6 j  `
                   end6 n9 M$ Q! F0 ?% w) o; U" t' e' v
                   default:begin
+ R% l, _* m0 D, b0 v! u" S                                  state<=IDLE;
# e# e4 t2 W; C0 W% j                   end
, N2 k5 r  L. _$ `" J              endcase+ r5 n' K- L6 K
       end  H0 j* \7 O5 i2 v* p
       else  begin
% I% e+ t: |/ n1 p3 M                  SPI_SCLK<=1’b0;; G% g, S2 g; o% t! E9 E0 _- \% e7 g
                  SPI_CS<=1’b1;# T/ l" B! F$ M- w3 I
                  op_code<=24’b0;* g* d" G0 j3 l' D% }9 O
                  D_fromROM<=8’b0;
/ Z; T  N3 ?4 n+ h& |9 }2 k4 C                  D_fromROM_ready<=1’b0;# T  N2 _, @) p  O2 U$ O- k
                  SCLK_cnt<=8’d0;+ r6 s- }4 Y: \( \& S
                  state<=IDLE;& L: }3 s# N, w4 x) b2 ]
       end+ i1 ?, h" x* O
end

该用户从未签到

2#
发表于 2019-5-22 10:37 | 只看该作者
else  if ( EN_SPI==1‘b1’)  begin ,可能问题在那个地方
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 13:48 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表