一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3497|回复: 5

三段状态机的云图表

[复制链接]
发表于 2013-9-9 09:44 | 显示全部楼层 |阅读模式
先给出代码
* ~" V1 J2 w0 R2 ~5 d  _! n- z, Y/ \9 s# i9 Q& ^+ b7 R3 a
module fsm (  R1 e8 A, c8 j" x5 h- V5 J
  clk,
$ ]( R9 c0 y4 A% Z* C9 ]  rst_n,
. W' i# X7 i9 c; R! i/ M  w_i,* \! B0 R# b7 q0 F
  z_o
2 j; J; e0 y  d; Q9 J. Y' C- N);" @; ]; T9 i" }% ~% a  l! ~7 u9 {. R

2 [( G# I1 @$ P4 E; `( [- vinput  clk;
0 V& V. \6 k; `. winput  rst_n;; d' @2 S; O( i
input  w_i;
7 }6 o6 h% Y: K  F0 F$ Z" ioutput z_o;
& b+ E4 f& _) Z6 G# F7 w0 C8 r, c3 i5 ], ]7 s$ H# e
parameter IDLE = 2'b00;
5 ?+ F$ x1 c  T9 X1 tparameter S0   = 2'b01;6 `) ]% d. N, i' W
parameter S1   = 2'b10;
" r3 R) m6 a2 }" L: c" W4 T/ ~" ^9 B' r7 W3 R5 R& R
reg [1:0] curr_state;
/ a1 [- V" R6 U. g- Freg [1:0] next_state;+ M5 \( j- i3 c" _$ u# z  R% g
reg z_o;
& S; _/ K' x. j& ^+ w
' G* \+ |5 w/ a3 w- ^// state reg
  S2 A* l, x5 T# oalways@(posedge clk or negedge rst_n)6 X9 J9 C& O1 J+ P
  if (~rst_n) curr_state <= IDLE;# P( h! g& g) G2 N( U
  else        curr_state <= next_state;5 Y. L# ?$ J9 N

, H; V3 ~2 W7 N% p- h// next state logic    , B& |: |. {. i( `6 @5 q
always@(*): I. \7 \& e  C
  case (curr_state)
( k& N7 ]# i( D( n9 v  U    IDLE    : if (w_i) next_state = S0;: Y# T0 p2 j: E$ H# m# `
              else     next_state = IDLE;
/ t/ @3 t" l# N9 _9 S0 s4 I    S0      : if (w_i) next_state = S1;
2 k( j& o+ n) Z              else     next_state = IDLE;& O3 r9 W$ Z- `- A. J2 p- w  d
    S1      : if (w_i) next_state = S1;, i( o6 B; g4 m3 _/ b2 l
              else     next_state = IDLE;8 h/ A8 W' _; _2 n* Y. Q0 ~
    default :          next_state = IDLE;
% F& Z3 p3 Z+ U; Q; H* G  endcase    + I! ~* Y% j& ^5 o2 ~
8 K6 Q, a9 O. @2 ~+ }8 r
// output logic
4 N7 f$ g* G. _7 i, Ealways@(*)1 T6 h' u; M3 R/ d0 n/ p( Y
  case (curr_state)
4 T2 N( @# s$ r5 B  B9 j- f    IDLE    : z_o = 1'b0;- C8 j# i4 ]+ V3 v4 X: ~! A2 y
    S0      : z_o = 1'b0;
* J/ g' B; h. r7 O4 U    S1      : z_o = 1'b1;, j( h- ^3 B5 Y4 A* N7 k( Z
    default : z_o = 1'b0;8 V8 w$ ]$ ~; D( ^9 J
  endcase
# `; z8 X' [. \3 a9 F
" B( C, I, K6 l6 I. W; t' y7 Tendmodule
, T) e" {; m: o9 k
: b0 }2 Y; o7 l- g$ A0 G
. d% z* \9 v9 R: q5 Z( M# l% A
- ~8 P9 p1 {5 M然后是状态机的结构图:) i/ k- W% a, |: z
状态机1.jpg
: V: y( c1 x7 b
* _2 M  o7 V. f' z7 K7 H
+ \: v) v+ Y; g* G然后再来一个时序图:
9 k5 B% ^! q: j 时序图.jpg 2 I. u$ Z$ B& r
8 F  r7 I' H) r* G% ]

/ l, ^+ W$ `3 v7 N可以发现状态机S0已被综合掉了。
& q+ h- d( k. t; q4 I( }
 楼主| 发表于 2013-9-9 09:46 | 显示全部楼层
本帖最后由 kenson 于 2013-9-9 09:54 编辑
' y' \5 ~  K% N+ W: e
8 {; J+ W) t% D2 q# _/ d这是一个很简单功能单一的程序,能给展示出状态机的结构非常的明白简单。还有这个只用了两个宏相当的少。
6 @, T1 R$ r% H* U0 E/ P  o 图1.jpg 4 {& Q. H5 h' a6 m7 c$ c

  S' ~% ]' I0 C  A. ~5 [
回复

使用道具 举报

 楼主| 发表于 2013-9-9 09:51 | 显示全部楼层
本帖最后由 kenson 于 2013-9-9 16:00 编辑 + B* q- f. K: x7 E
  \( J8 n6 ]( ^6 j
好这次是我自己写的状态机代码:* I2 S* ^1 l% V& Z: d, ]

% h- h9 @4 ]1 Q8 W  M///////////////////////// 马达速率比例转换  /////////////////////////( A9 j# }3 q2 j; u0 k8 f

6 ]0 a( E9 E2 E: ]5 ~  ]+ }' talways @(negedge McuRst or posedge pulse4x)   //第一状态现态转换
- C' Z  H( x8 C+ K2 o4 H begin
' I' P) e- \" s8 v% V9 }" t   if(!McuRst)CS<=START;
2 P3 r$ [! M3 H! J' l8 g/ N. K7 a' o     else CS<=NS;* X9 Q6 }/ t8 v! m8 z  p" G; X
end
! g- m' P; z1 v" Z. e
: E3 {, a3 l- c' L( B( J2 |( A1 T! r/ U
always @(*)                                   //第二状态逻辑组合% N6 S. _9 f5 ?7 I
begin% S; D1 t- V: f% D3 ]7 p' m
   case(CS)% T  R! c5 _; ?8 M$ s
     START: if(!ZDelayDone)NS = START;
! A/ T! D$ V, o; W- H! K              else   o4 l# R# R8 q8 n* ~6 [: f
                case({SChangeSw,MDirSw})
: x2 b$ z$ c; I8 i! C& y                 2'b00:NS = SA;% ]; D! U. B0 n8 T
                 2'b01:NS = SB;* I' j: B' I! m  F6 V) v: p
                 2'b10:NS = SC;
& K5 @6 r  G# W& G' e                 2'b11:NS = SD; % X2 u- n1 D$ y* S, F( C) N
                endcase) v/ l$ x' ?4 Y' k

7 z+ M  `, ]( S; u     SA   : if((SChangeSw || MDirSw)==0)NS = SA;   //速率1 正转   (如果检测到反转立即转到SB反转状态)
  N9 \3 Y5 F. C0 B) @( y% Z3 Z              else NS = START;
1 d" H8 X# v7 [0 U8 p
$ v2 e3 s9 b* u1 t/ [& O
# P+ p) {9 e* R" a8 |. K5 x$ W     SB   : if(SChangeSw < MDirSw)NS = SB;        //速率1 反转   (如果检测到正转立即转到SA正转状态)
5 g2 O. `" I, W  M8 v2 D# E              else NS = START;! e5 ^$ b& v+ X! e: M; f* K

1 m4 f5 V/ G) p! k$ c! x- j% S
( L! ^* C) e7 v$ v; t5 D' R     SC   : if(SChangeSw > MDirSw)NS = SC;        //速率2 正转   (如果检测到正转立即转到SA正转状态)
/ a0 Q6 q# V* J) |0 f2 |2 ~: O              else NS = START;
4 ]  f4 ~6 j# Q1 k3 G1 k, Y
# p% _$ h1 t! i. i" O3 l* V  E- Z     SD   : if((SChangeSw == MDirSw)== 1)NS = SD; //速率2 反转   (如果检测到正转立即转到SA正转状态)
8 [: Y5 V. K4 _/ U              else NS = START;; F% t; m* Y* m. A! J
     endcase
* K& K# k; Q( c
2 \8 g( |$ V' Y end
  I& e2 T5 A% Q+ Z" H! i9 _
3 Y# U; `' _. v, P8 a+ F$ S1 G+ l4 F! e8 q$ V, ]# m& v; ^* r- T

. q: _( o8 d; F. `* f- ~( K
% n2 {6 O( W* {: D2 h$ Qalways @(*)                                   //第三状态输出赋值
2 I! ~% k$ T8 Q9 J& o! E# K begin
- w$ n# a8 y- Q( N  case(CS)                                    //马达输出状态
$ o0 b' a7 g& ]& V( C    START:  MStatus = 4'b0000;                //START 空状态
6 {8 O: c' Q9 s% z- B* K# d( |9 n" D    SA   :  MStatus = 4'b0001;                //SA    速率1 正转
, ?" p" U! t% r) E# c( ~$ F2 `    SB   :  MStatus = 4'b0010;                //SB    速率1 反转 2 T- P: }/ k* x; a  d  n
    SC   :  MStatus = 4'b0100;                //SC    速率2 正转 ' Z/ A. v) l, G0 G7 z6 b& @" s- C
    SD   :  MStatus = 4'b1000;                //SD    速率2 反转
! i3 k1 l& m+ z7 v$ k/ g5 {  w5 ]9 ^1 O    default MStatus = 4'b0000;' ]9 e3 ~: y/ ^
  endcase
# _( B; v0 X! O9 J end
% W/ Q: M  Y0 [& p4 q9 k8 k; H2 D7 [2 V) G* }' ^6 i

, q1 y" Y# B* x" B5 C( J状态机结构图和传送结构图:9 b5 U$ g# g" t. o! U/ Y
状态机2.jpg
$ N( }( {3 d& s) H% H% m: B, C# A) G- g9 r8 ]" k) T
传送图.jpg
0 [$ w8 L, _/ G9 h
" M  p+ V9 d  U8 G
3 C+ D( [& q* [# o
回复

使用道具 举报

发表于 2013-9-9 10:12 | 显示全部楼层
S1和Idle信号相同
回复

使用道具 举报

 楼主| 发表于 2013-9-9 10:22 | 显示全部楼层
S0和Idle信号相同
回复

使用道具 举报

 楼主| 发表于 2013-9-9 15:57 | 显示全部楼层
本帖最后由 kenson 于 2013-9-9 15:58 编辑
+ ?/ R: S+ x5 s5 |" t# H8 H! {6 N6 b' W. g  ?& {
再补一个时序图仿真一个时序图真慢整个文件要用我的半个小时有多
  B% Q' _) r4 V( Q* H- u1 \
+ z* c# X1 t& X7 [0 m timing.jpg 1 M1 E4 a# f9 ]- i9 ?
2 d, n* G; D9 m( m) a
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-29 00:39 , Processed in 0.034143 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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