|
請教各位前輩一下:
( K4 d ~1 D+ U. J: T1 Q# @) p小弟目前要在 t5 的狀態機下做六次的話,) i7 t* c3 u: |/ h
讓它在t6 的地方判斷,如果大於六就做 t7,
+ Z) c" H4 c! w# W; h- r不然就一直跳回 t5,這種寫法是否有誤呀?' m* X9 c/ l3 T3 X
因為他一直狂讀n筆資料進來,不受我的t6控制?
" E+ H: W) Q0 C V5 D7 a# h l4 E( R) c
麻請前輩們不吝指導一下,這個問題困擾小弟好久了,
# {" N" Y) Z' L. ?- B試了好多天,都是一樣的結果,感謝再感謝。2 ]* C+ K$ X# ^7 F7 T
4 q# t- ~1 R( b/ G, [, m6 V: D
when t5 => -- read LSB (lo-byte), send acknowledge, sent stop+ u7 P& y, I' {2 m
if (cmd_ack = '1') then
' T3 P3 G6 a q5 |0 o. r0 E3 o nxt_state :=t6;
4 X X( |0 b2 q" }1 X/ q8 } if (lack = '1') then& Y' P6 m* Y2 d! Y8 H, e
ierr := '1'; -- no acknowledge received from last command, expected ACK
; h0 b4 L3 h9 p' t end if;
1 P3 N5 G8 t9 {/ k2 i6 M istart := '0';" a2 \# l. d% l7 K
iread := '1';( n+ f8 I. `. I. m
iwrite := '0';
9 ]' `; L9 I1 h% E* I* V iack := '0'; --NACK: E2 Q' v6 J# ~
istop := '0';
9 @/ s" k8 p7 a; F- }2 b5 ^ END IF;
2 \, C# ]2 L8 f& b0 m# f. B) K when t6 => 2 E& L4 Z0 t8 ~7 z% C- c* v' @
if (counter_i >= 6) then* X; R# C) F% n$ i( h. B, n* T" N) i
counter_i <= 0; + u' }! S/ v$ Q1 V; k1 u7 | p
nxt_state :=t7; $ _$ l& T3 e0 \1 H$ M
else 8 w6 G6 A2 ?$ }9 O9 v6 k
counter_i <= counter_i + 1 ; ( o( C9 o1 x- T6 N* o& f3 g+ N, V2 ^
end if;
& M' Q" f5 Z% \8 U' G if (counter_i < 6 ) then ; O% x! I( y! j! I. S9 ]4 P, O
nxt_state := t5;9 ?5 ?3 M; g; l$ {* q; d+ {( {/ L
end if;0 o( p' ]5 z& L; {- p* B7 j
" m. R1 k( `2 ~7 c$ ~& M when t7 => -- read LSB (lo-byte), send acknowledge, sent stop
+ [. j2 M1 t" D istart := '0';; h6 W/ w* I# s
iread := '1';
3 Q' ?8 i: }0 S iwrite := '0';
" Y9 m' Z# n" `2 t1 M q& B9 {% F iack := '1'; --NACK$ h2 ~ Y; N( d& c0 Q: Z& d
istop := '1'; & y4 \7 \$ v' {7 R. w+ D
istore_dout := '1'; |
|