Chip123 科技應用創新平台

標題: 請問vhdl 的case中能否加入計數器? [打印本頁]

作者: spring69393    時間: 2008-11-17 03:15 PM
標題: 請問vhdl 的case中能否加入計數器?
請教各位前輩一下:* F8 u4 V8 o1 r: z
小弟目前要在 t5  的狀態機下做六次的話,* g: C5 _, x/ K8 }: C
讓它在t6 的地方判斷,如果大於六就做 t7,
7 V% c' X8 u- W9 u" U0 r4 X不然就一直跳回 t5,這種寫法是否有誤呀?8 p9 d2 v4 ?+ j- G7 \% z2 ~8 C
因為他一直狂讀n筆資料進來,不受我的t6控制?
9 v9 ~# D* I$ A* _5 g
( N/ A) V. f9 [0 Y  X7 y/ @麻請前輩們不吝指導一下,這個問題困擾小弟好久了,
7 ]  V! \) M1 Y  S4 C1 l* }5 R4 }' w" K試了好多天,都是一樣的結果,感謝再感謝。
6 \/ I, |' t' V' c4 L8 P( a: ]" [1 P
: M1 _; {2 R5 Uwhen t5 => -- read LSB (lo-byte), send acknowledge, sent stop
3 ]$ ]8 f* T, s+ B# E; I# f  o      if (cmd_ack = '1') then2 b, H  A$ ^0 f! x- _: Z
        nxt_state :=t6;
' ]3 r0 [& l( `7 K4 b3 k- U( |! z4 {      if (lack = '1') then
5 I& [5 N; Z/ B4 V; h6 Z! G        ierr := '1'; -- no acknowledge received from last command, expected ACK
" S- j7 b& Z% ]7 B3 n' S      end if;. b+ M3 j1 X7 l1 W1 r) M
        istart := '0';
% f3 G: i  ?0 O$ S5 O        iread := '1';6 ?; o# U, q! [. h
        iwrite := '0';
$ `) o0 D( P; T  I/ [        iack := '0'; --NACK
; o( \# _) K' T. B0 L5 k        istop := '0';8 w( G4 [/ @( ^% G6 ~: E( E
     END IF;
* z8 Y1 E% j' Q. V) G9 m% p0 D    when t6 =>        
! W6 ?% Z$ C! A' n* O      if (counter_i >= 6) then# e( h- Y6 c  r' `9 X
         counter_i <= 0;   2 j) Y4 U, d$ S
          nxt_state :=t7;   R0 i2 r! T; f/ A, D% B
      else    # H" y" U& V) X, E% S
          counter_i <= counter_i + 1 ; & L9 f- W: b% i# g" V4 ?+ V6 k
      end if;
/ y) q8 j8 d- d# d      if (counter_i < 6 ) then   
3 F% Q! Z$ A3 p5 ?+ N         nxt_state := t5;8 V: C( s1 {/ Q8 M8 Z
      end if;
$ K' w2 ]) Z/ K
            
7 p( J9 }# D; n6 m    when t7 => -- read LSB (lo-byte), send acknowledge, sent stop) U% d9 q" p3 n
      istart := '0';
0 E" e/ |1 `5 y1 I9 u+ J. _      iread := '1';0 T9 k) Z2 P; O3 [5 {7 d/ A2 g
      iwrite := '0';, R" B& h2 \2 n. Q: e# W5 O
      iack := '1'; --NACK: Z% }" V- R  ~/ U
      istop := '1';  
+ ?( ?3 l; F$ n! J* m9 g4 ]$ j# z' {  q      istore_dout := '1';
作者: spring69393    時間: 2008-11-18 11:22 AM
有前輩能抽空指教一下嗎 >"< ,困擾好久想不出解決方法呢。
作者: tommywgt    時間: 2008-12-15 04:36 PM
標題: 改成這樣如何?
when t6 =>        1 R( W0 U  x  ], R: S* q
     if (counter_i >= 6) then
) B2 F6 e7 H6 v6 m3 C' c         counter_i <= 0;   - N* _6 E9 j: Z7 g
          nxt_state :=t7; / v/ v. ]# [0 Q" s, t
      else   
; a8 P7 U, b' u6 S# R          counter_i <= counter_i + 1 ; . f6 I2 Z9 ?! k3 @) z! M
           nxt_state := t5;
: E/ [# s/ D5 K9 P( d      end if;
作者: spring69393    時間: 2008-12-21 12:51 PM
感謝板大指導^^,似乎寫了有點多餘的部份
) V) _0 p; g# b6 n
5 `- ]" x8 k% i4 J- T5 i# T2 q
4 N3 Z/ w/ F9 v- b- p$ K' Z. `5 Z) y  J1 K( y* n





歡迎光臨 Chip123 科技應用創新平台 (http://www.chip123.com/) Powered by Discuz! X3.2