|
請教各位前輩一下:
) B9 ~4 C6 |9 ?# I5 T' M小弟目前要在 t5 的狀態機下做六次的話,2 Y. K+ T" ]# z9 d" v6 }7 X0 O+ j
讓它在t6 的地方判斷,如果大於六就做 t7,
# _' C$ F. a. a1 a5 w% N+ ~不然就一直跳回 t5,這種寫法是否有誤呀?: G" q# M" ^9 V0 t. q! e, W
因為他一直狂讀n筆資料進來,不受我的t6控制?+ d v: C# E5 a+ e" b
+ _; o4 S2 N5 z" {麻請前輩們不吝指導一下,這個問題困擾小弟好久了,
4 U( v' \% l5 m8 _3 l" H" s試了好多天,都是一樣的結果,感謝再感謝。
" d0 y4 ?6 Y5 W. U; I' f3 D/ d3 G H& {6 P& z, B
when t5 => -- read LSB (lo-byte), send acknowledge, sent stop
- h4 A6 n1 r. I6 Z+ a/ [ if (cmd_ack = '1') then) O. H, w# v& Y1 Q' F6 t/ c
nxt_state :=t6;
& o4 w h& T5 p9 Y if (lack = '1') then) M% D- F$ h ?0 z4 h
ierr := '1'; -- no acknowledge received from last command, expected ACK
0 e( d5 G) `" ^- p5 K I! f l5 Q: U end if;
. O6 H, t" a5 n0 B. k istart := '0';' ~" V2 r2 l# Y+ Q- ]( b
iread := '1';
( S, \, P+ Z8 O) B iwrite := '0';3 E) T* G5 l. Z% n' g1 T. }
iack := '0'; --NACK2 q. w5 H. H2 J; V# v+ o* Z, |: {
istop := '0';
; A1 a0 K9 w& V6 _ END IF;
% k( f& n# n8 P: T when t6 =>
8 N2 _* M P: N: E if (counter_i >= 6) then/ u) L& [4 M$ H4 ~/ D% Z: w, n" C: u
counter_i <= 0; + a" ]( b- I8 }9 C6 c2 d& J
nxt_state :=t7;
' R5 M; `# i' F) L2 X1 H* O else 1 Y; ]) C! y; k1 u* s0 C
counter_i <= counter_i + 1 ; ) W/ f+ [4 U; `4 u1 F+ @
end if;
$ [* R0 R7 p+ M if (counter_i < 6 ) then * O8 Q& @; P# ?
nxt_state := t5;
% I- |; e0 [6 T( R end if;& ~) T6 U, p2 b( H5 ?5 u( x
) I1 F: j- l' X+ c" f, ]; \* f+ _ when t7 => -- read LSB (lo-byte), send acknowledge, sent stop% \, V6 w. g. z7 D+ Z
istart := '0';
" h/ z& L, |( k4 R3 m iread := '1';
0 E2 q! Q; Z* c! B1 i/ n# ]7 m" W4 r iwrite := '0';
2 H- f% h2 l3 L$ N3 ^5 u6 J iack := '1'; --NACK
# z; n x8 i/ z: @ istop := '1'; 5 R3 H5 W# \8 p6 J) f, R
istore_dout := '1'; |
|