|
請教各位前輩一下:& Y4 J+ M; x. [- `7 Z1 J( A
小弟目前要在 t5 的狀態機下做六次的話,7 D# r6 ~- c: V# [0 j
讓它在t6 的地方判斷,如果大於六就做 t7,
( \5 `4 M3 h4 f; J+ t不然就一直跳回 t5,這種寫法是否有誤呀?
/ o" h$ q3 Y5 u4 x$ g' {因為他一直狂讀n筆資料進來,不受我的t6控制?
" m* S5 M. u) A
2 ]% d! z; b" d+ C6 U麻請前輩們不吝指導一下,這個問題困擾小弟好久了,5 S, @" f1 \ f$ M y7 z" q
試了好多天,都是一樣的結果,感謝再感謝。
# L4 D3 K1 ^- d+ v# Q
& a. J! \& r* ?/ C; m) Pwhen t5 => -- read LSB (lo-byte), send acknowledge, sent stop
4 w |2 K* o# d1 S; M if (cmd_ack = '1') then
- c7 J0 A5 t# ] nxt_state :=t6;
& v% g2 y, l3 A if (lack = '1') then$ K8 c1 o9 v. @! S5 W9 |
ierr := '1'; -- no acknowledge received from last command, expected ACK
w9 j- g8 G; s6 m end if;- E7 \: K2 g0 g) U% ~! R
istart := '0';, ^4 x: Z( X# | }3 ?- j! e' q
iread := '1'; T* ?' K# y! S) L0 n) n) }. S
iwrite := '0';
( g- Z" u5 w9 ] g; @; s iack := '0'; --NACK
; m7 Y% u, k! z3 U7 y/ l* S istop := '0';
- q4 M A! e. {8 I& B# \: y END IF; , a" {4 K# ~6 Z) {7 I
when t6 =>
3 e3 x& g2 J0 s8 Z if (counter_i >= 6) then; ], `- F3 u7 ~- K
counter_i <= 0;
4 B# ]5 A, o* \* | nxt_state :=t7;
/ M% X: q! j( U6 O2 a. ` else / ~, G4 P0 n3 y9 Q! N- w6 L
counter_i <= counter_i + 1 ;
r" [5 T9 U5 D end if;+ |& o3 ~; T4 L
if (counter_i < 6 ) then 8 [- f9 k, ]1 N% T
nxt_state := t5;' C2 w G3 F( p; R J" c
end if;3 ?% S2 K# _* ^4 F
* Q/ A4 i$ I8 u when t7 => -- read LSB (lo-byte), send acknowledge, sent stop
9 C4 _. `4 `: \/ m- I/ ` istart := '0';
, ]0 b! S- }% Q/ i9 Z4 \* m! } iread := '1';8 u# V( v2 N; a
iwrite := '0';. F: ]/ j2 ~, F0 X) B: `
iack := '1'; --NACK' }0 M: U4 d" d% J
istop := '1';
! t1 ] ]2 `9 e8 A+ y/ I istore_dout := '1'; |
|