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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
8 i6 F3 B% E+ w1 Z9 i: m  x9 s
     先说一下小弟遇到的情况吧,用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不用考虑,遇到的问题和它们无关。     # }, w: p2 L5 n" B9 `
          对于写的程序,在线的语法,仿真都没问题,可是什么我下载到Acte的A3P250-IFG144芯片上时,程序经常会莫名奇妙的死循环在状态机“DELAY_2>DELAY_3>DELAY_3>DELAY_3”,中间直接跳过CYC_3,而且一直不停的在“DELAY_2>DELAY_3>DELAY_3>DELAY_3”循环。
* v% ~0 t6 b  i0 e; n      FPGA的资源我只用了13%,在线仿真的逻辑和时序都是没问题的,到时为什么会一直在状态机“DELAY_2>DELAY_3>DELAY_3>DELAY_3”死循环呢??想尽了办法,困扰了几天,实在不知道小弟的程序哪里有问题,请各位大神帮我看看,指点一下,小弟万分感谢!!程序如下:
7 y' ^) ^3 o9 s8 S+ d' ~5 K/ H2 ?( Q( C
0 d4 L6 F- w* w! Y
SPI_ctrl(clk,    //15.36MHZ. F* _; D4 p6 y' I
            rst,
7 K: c, e" e4 ~; O- S) t            mode,
: t/ |+ t; O2 M7 \; R            EN_SPI,/ v# e+ N% P/ p2 a: A
            radd_ROM,
+ i* ]2 O% h  \# L8 |; k            SPI_Dout,
3 l* {+ ?, }: F. ]+ W         
: G8 _( N* V+ }- [/ _+ B5 }: c5 u            SPI_CS," ~5 w- ]0 o- d6 }  t
            SPI_SCLK,! Y1 k9 |5 X6 T
            op_code,
6 c: Y4 K( X1 V: x. U- A6 }4 u$ M             D_fromROM,
; v" J5 [4 _8 r5 i; L$ }; K             D_fromROM_ready) [/ B9 k& g7 J0 ?& _& L
         );
, `/ V- y) n: D3 m/ o- R: [2 S/ H) M, c% J
input  clk,rst;
% h6 b+ [% a/ Z5 |9 _, ]input  mode;9 Z# K7 B* q/ H( N" z! j+ F
input  EN_SPI;3 U; L9 ]2 O7 U4 X; H
input[15:0]  radd_ROM;
1 o6 u8 B% G4 d( ^% Kinput[7:0]  SPI_Dout;
8 U; @0 Y) `6 W! {" z  p8 r5 r
& J# G9 O, j# Joutput  SPI_SCLK;
! v9 v/ r5 w& `& i6 g6 E4 v% Soutput  SPI_CS;
, w$ Q- G4 |2 o8 H3 o/ {+ G4 A( loutput[23:0]  op_code;0 X* W- `! Y/ s( ?  y/ Q- V
output[7:0]  D_fromROM;
8 [* ^% o$ _7 O! m  uoutput  D_fromROM_ready;
( `. g+ |" f0 L  L% g8 I* ?# E7 n, W5 X" h% _2 t( K% ]+ l
parameter  READ_CNT=8’d32;
/ |5 I5 A+ p* h9 p; ?  ~3 L
+ q* A$ S+ a/ L) |parameter  SPI_READ=8’b0000_0011;/ }8 L. D* L4 t" A5 q+ h$ Y

9 S: ~6 ?3 T3 w; i. nparameter   IDLE=4’b0000,: A' i4 h/ }: M" w% [% ?
                     Initial_1=4’b0001,
  m& J6 K  w+ a5 o: y                     CYC_1=4’b0010,( _1 o" c7 s# W8 P0 c2 {% q* t3 D
                    DELAY_1=4’b0011,& L  [8 ^! O6 }; U; p& ^. [
                    CYC_2=4’b0100,; p1 j& U& `8 \" Q
                    DELAY_2=4’b0101,
% ]2 m8 S( o  T% x: B$ V1 D                   CYC_3=4’b0110,
6 z9 S; m; h, n2 k8 a                   DELAY_3=4’b0111,8 y2 |& n* R% i+ \, i# v
                   JUDGE_1=4’b1000,$ K, O! A9 w" f, f2 x* P
                   SPI_rdBack=4’b1001;
+ y7 V  n% N  Y) P
1 p# l" f3 _, M8 \reg[3:0]  state;3 U$ L  a% O" |2 I& \" b( A; d( I" M! Y% m
reg[7:0]  SCLK_cnt;
. g( C' R' ^1 r( A4 F& U7 @Always@( posedge  rst  or  posedge  clk) begin
* t; ]5 v6 M1 K     if (rst)  begin
( w; p/ t+ d' L           SPI_SCLK<=1’b0;( T- p, T9 X/ U
           SPI_CS<=1’b1;* n4 o" `0 e% d% e! m/ n: `( E" g
           op_code<=24’b0;% E' H1 j- v4 A. g! n) K6 Q% s( l
           D_fromROM<=8’b0;9 Z7 i7 o2 z. f, E3 P6 @
           D_fromROM_ready<=1’b0;
& `2 T% E$ n2 ^; ^1 @1 v4 C           SCLK_cnt<=8’d0;
+ }( w+ v+ j3 x  |( _4 _           state<=IDLE;
  B& `3 x0 T" H1 {$ N0 m: ?     end  t" Y/ C; }) y9 `( P
     else  if ( EN_SPI==1‘b1’)  begin
: N0 V9 D6 y, D            case(state)
( U% X! l/ L# U/ v6 o) J" j5 z- Q                   IDLE: begin, y# o+ e- L% P
                                 if(mode==1’b0) begin3 Z, G4 H! c, E. q7 C$ x' _. B
                                        state<=Initial_1;
2 J, M! W) u4 M9 T$ d) {6 o) o& W                                 end; C0 Y8 ]3 t7 m* c% a/ b% i5 k; F
                                 else begin
. l1 S: k3 S1 j+ _1 d- v                                        state<=IDLE;$ e) Z$ s/ g' [6 a  j
                                 end
/ r0 q$ a+ [4 `$ b! Q. w, f& @3 U  o                  end
- \' g( @* a( Z- Z                  Initial_1:begin1 v+ c% N; _9 ^/ p) G+ {
                                   op_code<={SPI_READ,radd_ROM};
5 ~8 _& o/ ^) e; U                                   SCLK_cnt<=READ_CNT;- j8 ^) m/ ~* i
                                   state<=CYC_1;& k9 Q) K: n+ y6 E( ]9 G' C
                  end1 K! z9 `* e6 O# Q
                  CYC_1:begin$ U- o( o- R3 c  a4 ^
                                   SPI_CS<=1’b0;
7 q" x! }3 E* H3 {; F4 y7 t# `* T7 E                                   state<=DELAY_1;
& t/ ]" N0 O, G* X0 Z9 _                   end
! F! G- {/ A& \0 U4 w                   DELAY_1:begin2 V5 C9 U' K0 \
                                   SPI_CS<=1’b0;6 s0 N6 W8 m( x# F" p( X/ l; z
                                   state<=CYC_2;8 J3 L( T% Y; x7 |: Z! x6 J
                   end
* o2 t1 J) [- f7 Z0 }2 I                  CYC_2:begin
8 ?% Z; y) d( C' @                                   SPI_SCLK<=1’b1;2 |2 g5 K/ ]! f* ]7 C
                                   state<=DELAY_2;. \2 y4 ^& \* f1 j2 Y' _
                  end
% s# O: p2 U6 e0 Q: p                  DELAY_2:begin
3 f4 b3 T. S% Z6 l- c$ M                                  SPI_SCLK<=1’b1;
! }7 c# E3 J$ _$ @5 C                                  SCLK_cnt<=SCLK_cnt-8’d1;
( m& I% T+ A, ?                                  state<=CYC_3;1 U# Z0 U2 Q- [4 M7 A0 v
                  end8 v- G* X: d) }# ^& n( ^
                  CYC_3:begin2 J, X8 \* K0 i+ [' u
                                  SPI_SCLK<=1’b0;
" S. n# V: |4 u4 `                                  state<=DELAY_3;- ~; o; Z" ]9 M+ n! E
                  end
+ A4 r! r4 {' m                  DELAY_3:begin
- w2 m3 y; H/ N- O3 ]1 @8 ]! q                                  SPI_SCLK<=1’b0;
7 \2 {! j2 P) G6 q9 J5 @3 ?                                  if(SCLK_cnt==8’d0)  begin  y8 W2 {/ j3 r2 B$ O0 D/ F7 K& ^
                                           D_fromROM<=SPI_Dout;1 ~2 Z" S4 p9 s) `
                                           state<=JUDGE_1;9 S, R$ ~2 p. }: ]8 ]/ ?( S. p
                                  end& _" J# C) d" S* j# `
                                  else  begin+ z2 X4 ?2 b1 c- F$ F  t: o6 A
                                           state<=CYC_2;  v/ F" ^  h2 N9 W' F3 E$ K2 v6 N
                                  end0 M/ S5 ~, m3 V/ N. e5 w( a
                  end
; {6 b. E$ W# R, i                  JUDGE_1:begin
- L/ b* R' m3 q" l0 ^9 h" Y3 r                                    SPI_CS<=1’b1;. m2 E0 ?9 g; y  U! ]% b7 n
                                     if(op_code[23:16]==SPI_READ)  begin* j" a& |0 K& g
                                              D_fromROM_ready<=1’b1;
4 ~# Q2 h; `* T% c' g                                              state<=SPI_rdBack;0 @9 v: \. r: k
                                    end, E+ w! `% c0 [- b  v' c5 n
                                    else  begin
: _! |; C' L( F  M3 @                                              state<=IDLE;
; d. h; t1 n; e: S) H6 `: N                                    end+ h: H; T0 [8 v& T* t) [3 c
                   end
9 H# \7 i7 {2 u5 d                   SPI_rdBack:begin
* J* X5 l( A. f0 F! B" q: l                                         D_fromROM_ready<=1’b0;
! n( R" t/ w' ~- o# l                                         state<=IDLE;
. M2 U9 ]1 A# i3 }) g                   end6 N% [7 E- k# i
                   default:begin) i& _) h# F4 K  p/ e
                                  state<=IDLE;
& y2 A3 J$ u. p" f# i: u9 [                   end$ T$ F! f7 X5 Y( [+ X9 r2 z
              endcase) ]4 j5 ~$ ^& j" O$ K2 t: N  p
       end# u: A# {6 [5 x) H6 T2 m, {* ?
       else  begin3 h/ v/ C& c9 X
                  SPI_SCLK<=1’b0;
6 K* I9 J$ m1 B, t9 R                  SPI_CS<=1’b1;, m  G5 {9 m5 m7 I# w( X' W
                  op_code<=24’b0;
  ]4 ~0 m, _. i! m2 C" k+ ?                  D_fromROM<=8’b0;
) D! J- [0 r' f) U* C+ i                  D_fromROM_ready<=1’b0;
2 G: k  ?. Z- E( g" D3 x                  SCLK_cnt<=8’d0;# `0 t1 k+ y9 W+ D% M
                  state<=IDLE;
  T- v7 g5 F6 ~! l% p' B" J       end
( f" t: I+ V3 T2 ]end

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 15:52 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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