|
請教各位前輩一下:
A6 J( G* X$ |* D7 w, _小弟目前要在 t5 的狀態機下做六次的話,% U: n" G$ v9 `7 [& j* q! E9 T
讓它在t6 的地方判斷,如果大於六就做 t7,9 b) x" M9 J0 `8 h
不然就一直跳回 t5,這種寫法是否有誤呀?
. l1 `! ]2 z7 @' o5 {因為他一直狂讀n筆資料進來,不受我的t6控制?1 V# c$ [1 s, ~0 Q7 ^. T
$ T# a0 n# z4 S( `" x# u
麻請前輩們不吝指導一下,這個問題困擾小弟好久了,
. [* q$ q6 h% T1 V* j/ T& ?: z試了好多天,都是一樣的結果,感謝再感謝。+ |' L5 _9 i o% h) m) Z# n
$ ], V6 O, t6 t7 `2 g, ]when t5 => -- read LSB (lo-byte), send acknowledge, sent stop
( i" v) U: _5 H( g if (cmd_ack = '1') then
+ ]# H* k8 v6 r" p- T" Q3 ^" D nxt_state :=t6;5 q( q8 v" v# e9 H i
if (lack = '1') then
7 ^$ i; m) k' c" f+ {4 f8 _ ierr := '1'; -- no acknowledge received from last command, expected ACK4 I7 V' g9 W# q2 O+ C0 R3 v( Q
end if;' q5 V* S( M, h6 _% U+ C* h
istart := '0';, \. E2 Z2 F: w# |0 w. k, a6 s
iread := '1';) k$ q* d, W: p. v b
iwrite := '0';) B. j4 K" T- h1 D
iack := '0'; --NACK
8 S( g; Y+ r' C istop := '0';) J: T0 o; W0 G* I. I3 e
END IF;
( f; v" r8 Z! \1 j" C when t6 =>
4 h# l' J! E; r6 m- S2 Q if (counter_i >= 6) then
( o- D8 d2 `+ v2 E, w% e: J0 | counter_i <= 0;
! \7 Y& L U: x7 w/ j6 z nxt_state :=t7;
" O2 J/ C3 x1 e8 S, C else - A5 p3 ?3 _* B8 p% Z
counter_i <= counter_i + 1 ; 1 s% L- n- f, @ h6 s
end if;
- P6 M/ G' n! G4 J- I if (counter_i < 6 ) then
. q. Y, m' ?1 m8 X# H# T& B nxt_state := t5;
, F2 l# m, F# A- Z: o end if;$ u; D* G" T9 X
" b* R+ D: e. V; Z) D0 u when t7 => -- read LSB (lo-byte), send acknowledge, sent stop
; n+ t& ]7 k+ l8 d$ z$ ] istart := '0';0 n/ [8 I9 K1 L, A
iread := '1';1 _9 ?8 V# r( h) H$ q9 `
iwrite := '0';
( |: ^: A) u) Y3 r" `3 W7 ~ iack := '1'; --NACK- Y3 k. v# a2 J0 M) [7 Q% Y6 e) o
istop := '1'; 6 Y7 o* N/ \9 W9 L6 Z
istore_dout := '1'; |
|