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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

  v% ]# S- U& s% ?' O, |     先说一下小弟遇到的情况吧,用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不用考虑,遇到的问题和它们无关。     
2 J: y7 l- t& A4 J          对于写的程序,在线的语法,仿真都没问题,可是什么我下载到Acte的A3P250-IFG144芯片上时,程序经常会莫名奇妙的死循环在状态机“DELAY_2>DELAY_3>DELAY_3>DELAY_3”,中间直接跳过CYC_3,而且一直不停的在“DELAY_2>DELAY_3>DELAY_3>DELAY_3”循环。
% |  T! j9 @# X- S) b      FPGA的资源我只用了13%,在线仿真的逻辑和时序都是没问题的,到时为什么会一直在状态机“DELAY_2>DELAY_3>DELAY_3>DELAY_3”死循环呢??想尽了办法,困扰了几天,实在不知道小弟的程序哪里有问题,请各位大神帮我看看,指点一下,小弟万分感谢!!程序如下:. \5 \, g2 M0 a1 c

" c& z/ q( E2 t) ^2 v+ T0 U0 J2 \) W* `8 m" T
SPI_ctrl(clk,    //15.36MHZ
) s0 P3 w- H/ \! _$ g" I            rst,2 O; a" C0 o4 R( s1 l
            mode,/ s! f! k, P9 ]5 F; ?
            EN_SPI,
1 V+ Q1 A# d, G4 h! T# a7 z            radd_ROM,
. ]- w4 @! b- L; e4 P: _$ P            SPI_Dout,( q: v+ W5 }% K6 I4 s8 r1 n2 y$ q
         & M' s" `, P: N, k0 ^
            SPI_CS,; `* Z) j& t$ g3 k) d! Z
            SPI_SCLK,: `# W; M1 [8 r' S  J" j$ Y
            op_code,
4 ]$ U( I! h, ^$ Q& \4 |             D_fromROM,
" K6 M7 j# I7 q2 |, h4 U             D_fromROM_ready' K# ?  D5 j# h0 C& |+ L
         );" U$ W3 S- T: v
( E1 _1 b7 M9 j' X2 @% ]3 q
input  clk,rst;& X. _- U: d' }& @' T
input  mode;/ H+ P# G) C& t& ^
input  EN_SPI;
& L3 `7 R5 V% F/ F0 m' X  Q0 r3 \input[15:0]  radd_ROM; 7 T$ n  y. [) f( o: T' E
input[7:0]  SPI_Dout;) F6 h+ L  X8 W  b

7 U& V# V. O, U( \- C' [) v7 Uoutput  SPI_SCLK;
3 u) y6 M7 M6 Q% S* a, m5 Zoutput  SPI_CS;
4 E" ?$ t1 ^0 m0 e: F( Z9 m2 z' boutput[23:0]  op_code;
; z- G5 q& a9 b0 r3 f- Doutput[7:0]  D_fromROM;- B6 \: d5 X2 s8 {6 w; U9 R! m
output  D_fromROM_ready;4 {" w0 f( z) k( c. j1 \1 c/ D, j
4 R; Q& k8 \2 }3 @* Z2 ~( l( o
parameter  READ_CNT=8’d32;
4 G& f/ d5 }+ V: `0 G* U- ?" I. x: j1 O5 j6 P
parameter  SPI_READ=8’b0000_0011;) s9 H0 e. h$ S+ A
# }" {) @' v% e* O
parameter   IDLE=4’b0000,% \, B- N1 q! \+ z
                     Initial_1=4’b0001,
' h9 O$ B/ D4 w  Y& J. A( r                     CYC_1=4’b0010," o$ G* C5 @) p: N
                    DELAY_1=4’b0011,5 b  G* I. ]9 A$ i; L
                    CYC_2=4’b0100,! X+ v7 ]4 C+ D
                    DELAY_2=4’b0101," w% W0 Z8 I. v6 P8 ~' n; Z& }
                   CYC_3=4’b0110,* N' p. s+ q& z# S
                   DELAY_3=4’b0111,2 A7 M/ y- C4 a
                   JUDGE_1=4’b1000,
+ i$ }& a4 Y4 n  ~" h0 W' H4 {& ~                   SPI_rdBack=4’b1001;
4 R% E1 ^* c0 r( l; ?1 q: }9 G4 O1 R! K
reg[3:0]  state;
- Y% }/ ?2 _7 W4 Hreg[7:0]  SCLK_cnt;4 T: U. U; y0 {8 d9 ?) t* g
Always@( posedge  rst  or  posedge  clk) begin, j9 m) j5 N8 l0 s& Q. J" w. s
     if (rst)  begin
- x& ]3 E/ o8 g% e           SPI_SCLK<=1’b0;
8 d6 E# T6 h* E3 q           SPI_CS<=1’b1;4 a# @, b& R5 v3 G, a
           op_code<=24’b0;
; F  N* h0 D; w6 A4 d& U1 }( B           D_fromROM<=8’b0;) @0 I0 h( i3 w2 D5 ]# }8 i
           D_fromROM_ready<=1’b0;
$ t2 @2 m0 \- s3 L" o# ~           SCLK_cnt<=8’d0;
1 Y7 P4 }8 }+ h           state<=IDLE;
+ X, E% K9 u% f1 S, C/ a     end* X* w2 y7 m) J0 S/ R9 G# P. w0 S
     else  if ( EN_SPI==1‘b1’)  begin
( X1 a  v4 x9 b* [# I            case(state)
) T$ l8 |/ U2 m1 e, u" W                   IDLE: begin
: D, g+ w4 M! j2 Z& U' c                                 if(mode==1’b0) begin
8 A0 h! Q6 E1 C* Y# D* d7 T& d                                        state<=Initial_1;7 }4 Y* k6 ^# w7 F; k
                                 end# G% W( l3 D: C
                                 else begin2 a0 m* w' d/ R( c& @
                                        state<=IDLE;9 i  Q# Q  a. _8 o$ o
                                 end) F. t$ Z% ~, U" ], Z
                  end
6 H) |' @/ W+ P' L' K6 j2 i                  Initial_1:begin
4 c- _& H- e/ P                                   op_code<={SPI_READ,radd_ROM};
4 Y6 _, a7 a  Y+ H                                   SCLK_cnt<=READ_CNT;
) i( ?0 S9 {/ c                                   state<=CYC_1;
* J3 n& G( z4 x5 g$ r                  end# I  y/ t# k, g* `; o( w4 J
                  CYC_1:begin+ `& d7 h8 R, m
                                   SPI_CS<=1’b0;% C$ S3 f. H! _2 w' P6 a
                                   state<=DELAY_1;
5 x* j' s: {3 g; r$ I3 E& A3 t                   end  e& C4 g% i; Q) h
                   DELAY_1:begin) j% @/ L  \9 x* K* ^
                                   SPI_CS<=1’b0;
' F8 ~/ C5 M! ~6 _9 F                                   state<=CYC_2;
* R) @* Z; s8 W2 Y                   end
  s: ~! }' j6 x1 n, ]  f* u                  CYC_2:begin! `0 x: a3 A/ V+ M8 M+ }% w
                                   SPI_SCLK<=1’b1;9 B( B7 s6 ?: B6 y. S
                                   state<=DELAY_2;
2 k% f+ h2 s6 Z! @! T1 _                  end
! q2 X2 |+ L. |, y6 z                  DELAY_2:begin  _8 V$ X; v0 o7 ~0 L' G
                                  SPI_SCLK<=1’b1;5 z! P6 x2 Y3 L. a, A. k4 c
                                  SCLK_cnt<=SCLK_cnt-8’d1;
' C  a, N% l5 R/ f7 z# q                                  state<=CYC_3;
: X2 ~# c; `8 K                  end
# z6 h& g1 b9 ]/ B, x- E, \                  CYC_3:begin' x5 r0 }: Z% \7 a5 f  ?5 m
                                  SPI_SCLK<=1’b0;* R6 b- f  q3 s, \! ^3 t% s
                                  state<=DELAY_3;: Z4 n. E# Z2 C% \! R5 g/ M$ i1 C
                  end
: R! C$ w/ c" g  q                  DELAY_3:begin
/ Z0 _/ N' {9 ^! H                                  SPI_SCLK<=1’b0;1 k* H6 Q: _0 J4 f, b
                                  if(SCLK_cnt==8’d0)  begin
9 U+ j/ x" p+ f/ T                                           D_fromROM<=SPI_Dout;
: n2 }( M% P7 g+ ~+ L7 e                                           state<=JUDGE_1;
) ?) E' W+ b5 \3 F0 T' p                                  end- {$ i% Y* n) w
                                  else  begin
5 N# ^: f8 s( G9 `* d, e                                           state<=CYC_2;
! P1 q8 P: h" a/ v3 T( }; J! h( m                                  end- }" i. P% m) [0 ?
                  end
+ t* w( m- _: \' V                  JUDGE_1:begin- ^9 p6 Y( d4 O: `+ D, g4 I5 q
                                    SPI_CS<=1’b1;. ]% ^, \% i) E) m8 F' h, b7 V
                                     if(op_code[23:16]==SPI_READ)  begin
+ f9 X* C& B7 n                                              D_fromROM_ready<=1’b1;
! v, f# ~4 n1 S6 f) ~# a                                              state<=SPI_rdBack;
5 f4 K9 T3 }; y" K" `6 c                                    end
/ z9 m, L2 M$ s& T* g4 M% V! ]                                    else  begin' q$ h7 d* X) Z9 Y4 [( i, i+ Q# _
                                              state<=IDLE;% w0 A$ Q  D  z0 ^$ s+ S1 b
                                    end
$ G( \3 I2 b0 o* p% H' \7 A                   end
7 b2 H$ h) K5 z" T* ?: N1 z! [8 u$ T                   SPI_rdBack:begin
& v  p9 Y" K8 G3 C3 R% i& }1 t                                         D_fromROM_ready<=1’b0;
2 h0 [/ u9 d) S8 v" S2 G4 p5 i                                         state<=IDLE;
& R- f, I- P3 m                   end
7 h9 ^: e0 ~$ e- @8 `                   default:begin
* Q/ @0 G2 b1 j; _* X                                  state<=IDLE;, u) b- C/ {, V
                   end' O' g' ?6 H1 c6 s  V" z
              endcase% C& j0 l  ~% E
       end
9 c! ?8 y$ _$ |4 i$ B       else  begin
2 T( l8 b1 F- }/ r+ G                  SPI_SCLK<=1’b0;
* j+ _, d2 U5 Q                  SPI_CS<=1’b1;, p% h4 S- }: y' S! A- w. F) R
                  op_code<=24’b0;5 \9 Z7 Q9 C, n* U$ C
                  D_fromROM<=8’b0;5 \. f4 k4 }! R% G9 Y: e
                  D_fromROM_ready<=1’b0;
9 B- v* |9 [$ d' i7 X                  SCLK_cnt<=8’d0;  s5 d! l- @5 M! B$ w
                  state<=IDLE;, N/ o3 W. ]+ F- ?% d
       end
8 `0 |& y! k8 _end

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 12:14 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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