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

FPGA 三段式状态机的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

% L" I; [- Q0 o //第一部分说明初始状态,和current_state<=next_state, ~* H4 J5 [4 c; J6 A
        //每一个时钟沿产生一次可能的状态变化
9 L: d" V0 g# U+ B7 t        always@(posedge clk or negedge rst_n)
3 s( F. s$ p0 a+ @; u                if(!rst_n)7 I' s  ~3 b  G- C) C$ i! U
                        cstate <= INIT;        //复位态
$ `' u9 _3 D/ A* w8 V6 d                else
( m! L& d/ j, X                        cstate <= nstate;- u4 v8 q( s: P
       ' d9 _$ F( s7 z! T) h

: D6 a. C/ c6 M* l# N        //第二部分,状态转移,产生下一状态的整合逻辑! j# f; H$ f9 F6 q; U& e
        //状态的跳转0 p. x$ O% Y8 t& `8 d, Z
        always@(cstate or time_ones or pdh_ok or locked)4 b7 X4 {$ ?4 {  ^* `/ F
                begin& N3 o6 P: U# W
                       
  R, j; o) W$ |                        case (cstate)      
) [: {7 d+ d" b) F4 x$ ^* r                                IF_PDH_OK:        //PDH OK判断
: Y* F( }6 p$ N; _; v! q& s" c9 h                                        begin
* f& b7 G3 r& U4 k7 @, ?               
1 f% t: s( f0 f. \3 u                                                if(time_ones == T2S)        //2s
; Z0 V0 D6 U# b' a                                                        begin
8 X# G& A2 y7 X                                                               6 X: I1 V5 @, X1 U
                                                                if(pdh_ok_count >= PDH_OK_COUNT_N)        //真信号- m3 E( K- }9 s4 n; K$ ^
                                                                                nstate <= SEARCH_PDH_OK;        //搜索到pdh
4 m  Q( P, C( P/ T  n- U6 \                                                                `else
% v" e( M! B' C% t/ C0 K! }                                                                                nstate <= WAIT;        //重新扫描
2 I' u2 G! V& N" |: E                                                                                       
0 a  k0 O; `8 z( H  m                                                        end      
! }0 o' L  i: s& w                                                else
3 V, R8 n3 l  ?5 e/ d+ r                                                        nstate <= IF_PDH_OK;! t) ?/ n) b: @" U! \
                                                               
& v- M2 I' y$ g' l6 C  e9 p                                        end; r3 h0 v3 |- p9 {$ b3 E/ O
1 L& L: N7 o  [( \) j3 x
9 y8 p6 Z. z+ A# B9 a8 D* [# ]- X8 |
        //第三段,产生输出2 }6 }0 K- B  P7 o7 R7 n
        always@(posedge clk or negedge rst_n)
4 G" C; T* t/ ~) S! R/ K                if(!rst_n)0 P! R2 M2 K3 w7 m4 o. y) B
                        begin
4 I+ |+ ]4 A* O8 [; a6 R) _                       
/ F7 h6 d" N- v, I) _6 L* C5 b, k& h                        end4 l+ p3 q. o9 X% y
                else4 [6 k! Q( }0 E2 v
                        begin% z' W4 i, f$ u
                                case(nstate), O* q5 ~+ T. a+ r: \$ g

! Y6 `& @5 m9 \; H9 t) F+ ~                                IF_PDH_OK:        //PDH OK判断7 m" Y9 a  w/ J% U- w2 y2 u+ l
                                        begin
2 q, m# ~$ X$ ]7 i# ~) w( |                                       
  x! {" K, N$ M8 ^7 U% C% e- z( J                                                //锯齿波扫描延长2S
, N+ `4 t: E, R                                                if(time_count == T1S)        //1s
1 }# O0 h( T% _8 p' p* p* K                                                        begin0 u3 X  ], t  R8 `9 T- E
                                                                time_ones <= time_ones + 1'b1;% R, k/ r, M5 O" \, o
                                                                time_count <= 32'd0;' b9 I% e9 Y7 e( M+ D
                                                        end: F: C! R7 q$ d  u0 N
                                                else, c0 a8 g; f0 }% e4 p
                                                        time_count <= time_count + 1'b1;/ s0 `! Y1 N  ^$ u; w  L0 H
                                               
8 V2 @/ i3 z' q+ s; N* f+ O                                                //清寄存器                                               - @+ q& i' l' [) ^! x) Q  p. u
                                                if(time_ones == T2S)        //2s
* L+ R5 C6 L: X% `0 U/ s  ]                                                        begin
" u1 r  Y( X8 e% e                                                                time_ones <= 0;
- m% c+ E# U5 g; v& g% k4 M                                                                pdh_ok_count <= 0;       " }# F6 \, d4 u$ y; m
                                                               
4 u) N& b6 q0 r7 D7 L" ?  {! t                                                        end      
9 U7 q) N0 Z" v' ?* s4 p7 T                       ; x) ?; K' Q2 K( [
                                       
( k0 E) x4 [3 ~                                                //pdh误触发处理5 z2 R9 k) x! h, p
                                                //开始延时; y' L( S2 j$ f9 X
                                                if(pdh_ok_delay_flag == START)
$ e0 w  B6 `" i; O5 M9 C3 J                                                        begin& y! |* \/ G6 M
                                                                if(pdh_time_count == T10MS)        //ms
! ]/ J: o5 z% I                                                                        begin
; E# P" ^' T2 V' w4 U7 D! H9 M* E  v                                                                                pdh_ok_delay_flag <= END;
8 [. Z. A! c1 Z9 ~                                                                                pdh_time_count <= 32'd0;      
  Q/ s$ e. d: C                                                                        end
+ U  J- s5 Q3 J$ V( u; r' R- |                                                                else
5 G1 v  `- M* G; c: A                                                                        pdh_time_count <= pdh_time_count + 1'b1;
! e) }0 c1 Y4 U& J                                                        end+ z6 S! N% j, I4 x0 [
                                                else- R" ^& ?& z- U& v0 t5 L. C$ _
                                                        begin
* @- l% u3 x0 Q, `                                                                if(pdh_ok == LOCK)) }9 b0 K5 {5 `
                                                                        begin
* J2 K0 J+ s; L% {  q9 V( r0 ?6 Q                                                                                pdh_ok_count <= pdh_ok_count + 1'b1;- @; B9 w4 k# N- D) c# J
                                                                                pdh_ok_delay_flag <= START;                                                                       
  Z' {( B' F  U1 k2 T                                                                        end; ]- l1 `# f; |! M. c  U- a9 S
                                                        end# Y$ ]& k( K& a" i$ d
                                                               
+ h  H' V9 ?5 ]1 u7 |                                        end
2 ~2 C- p0 o' w
0 |9 V9 u3 H5 Q& j请教大神 ,
! o2 E9 R; }2 ^8 B" o我在第二部分,状态转移,产生下一状态的整合逻辑 IF_PDH_OK:        //PDH OK判断1 D% q$ |6 U0 W" X2 i6 R

5 J3 X! W  g9 E3 `% I8 H- `time_ones == T2S        同时 pdh_ok_count >= PDH_OK_COUNT_N 时将状态改变成nstate <= SEARCH_PDH_OK;        //搜索到pdh. H% w& N8 }" y- ~- m
: g  u2 Q% c" K) }
但有时并没有被进行状态跳转 还是 在IF_PDH_OK 里 if(pdh_ok == LOCK) 时pdh_ok_count  还在计数; o1 I3 _% d3 L$ E8 S
这是是为什么啊?
7 Q- u" d0 b$ b! W& V( t/ P6 A/ n4 |- Q/ k
同时我在第三段,产生输出的 IF_PDH_OK: 状态里对pdh_ok_count清零,但pdh_ok_count并没有被清零,这是什么原因啊/非常感谢!
& d  P( U' O. U' C# N. S$ `                                                //清寄存器                                               ' `5 l/ L. P8 d5 j. d, m1 k
                                                if(time_ones == T2S)        //2s( u) G+ J3 h: E" V
                                                        begin
% Z! A; F# v6 A3 H1 H                                                                time_ones <= 0;( F- s5 R" y$ q( Y0 t' |
                                                                pdh_ok_count <= 0;      
- ^4 ]8 ~5 I% ]& h9 w  N                                                               
& U: a+ d2 `, \- ^' `& ~                                                        end       + `+ @1 v4 o- {' R3 v+ b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 13:27 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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