Chip123 科技應用創新平台

標題: 0上数到9的VHDL程式,有點小問題 [打印本頁]

作者: oldya811105    時間: 2008-10-19 02:58 PM
標題: 0上数到9的VHDL程式,有點小問題
大家好 我想請問一個問題,我將兩個書上的範例結合在一起想寫成一個0加到9的VHDL程式,
: l# a* U# P: F; y6 ~但現在出現了一個問題,當我程式加上FREE_COUNTER這個block執行模擬時這個block內/ O2 Z) T9 |  z6 J3 I3 i
的        DIN        <=        Q(23 downto 20); 的輸出值卻一直是"0000",變成' F6 ?& n; I' k. @+ |6 y8 i
我只能用cnt的值來控制我的七段顯示器輸出了,我想請問大家可能是什麼出了問題?
& l6 E8 E% z7 i- c/ O+ N: v; O# M. d9 R9 i
另外我想再請問一個問題,我將我模擬的波形放在附件中,seg_output的輸出會有一段一段
, i! H! O& b" {  k2 G很不規則的訊號該怎麼消除呢?  ) Y4 }! b' f: b9 C" m4 n* Y

3 d- _4 y, Q' Z+ T$ A+ @不好意思耽誤各位的時間,麻煩大家了!!
' x: [9 a) U0 x* u. ~  m1 r7 m2 f
**字數太多了,我把宣告省略了**
$ t7 G; g$ |* A2 Ybegin
9 C5 Q/ X- M' z1 p" QSYSTEM_CONNECT        :        block 4 E/ R: t" {% B8 U* x
begin8 c  l  T  `- M  T' l* k: a
        seg_output(6 downto 0) <= seg;' [! V  p' [7 S7 {6 j' F
        seg_set <= seg_s;
3 I6 m6 Q& p1 xend block SYSTEM_CONNECT;
' ^9 @9 }2 w/ _2 o( h; a. l% ]  b# k! t( Q; \9 Y3 y3 u* Z* _
SYSTEM_SET        :        block
* G4 R2 I. [! Zbegin4 O( R5 L9 ?, z; I3 ]" e
        process(CLK)
, d9 C+ x( P+ Z" N" _) z7 u/ k                VARIABLE cnt        :        std_logic_vector(3 downto 0);8 H3 G5 @; _  M" z0 h
        begin% J! n) k9 t9 F
                if CLK'event and CLK = '1' then
7 D4 P! f% x* b) v! S3 D                        if clrn = '0' then( B. f( c; z$ c0 L
                                cnt := "0000";
# y2 s. D8 e  E# v2 ~4 Y: e2 z                        elsif load = '0' then
" Z  l& ~1 c& i4 K# n% ?) }                                cnt := D ;  u8 J8 [* i; X1 G+ \; F9 T
                        elsif (ENP and ENT) = '1' then" }$ j" `& ~. e7 \- b: W. s$ c: ?% l
                                if cnt = "1001" then # @5 E6 V* x$ B6 W7 }% A
                                        cnt := "0000" ;" @, P! |; H/ D0 C4 R7 F
                                else
* A0 n9 X% n  a3 `' K+ Q                                        cnt := cnt + 1;
9 {' A7 ^6 ^3 Z1 \! f                                end if ;
0 P! ?# b( r0 ~3 `6 H                        end if;
4 r! l6 M, z9 x7 f                end if ;- h6 F& V* _' ?3 l( \0 J8 S/ h$ @
                display        <= cnt;
4 {% Y; E$ R2 K* ~; [! v                --DIN <= cnt;
- T: F* c: e( {                Co                <= cnt(3) and cnt(0) and ENT;
; [# {. b5 c8 a$ g        end process;% Q3 v  }' y9 ^- ~4 m, o
end block SYSTEM_SET;        6 Y2 z5 r/ I  L2 L; N4 Z, p: w

5 H9 X0 w8 ~1 y2 ~: t; E, fFREE_COUNTER        :        block0 u1 \7 U6 ?$ s6 }* D: @, p! J" O
        signal Q        :        STD_LOGIC_VECTOR (23 downto 0);" T* W6 S0 ?  {: @
        signal D_FREEC        :        STD_LOGIC_VECTOR ( 1 downto 0);
9 k+ f# n- f. V; e! Y8 y7 e6 A7 z
* D" n3 l% ?. r& d4 N5 Rbegin' G; R1 p  T; u0 E' a) @
        process (CLK); k* E, ?. A6 w2 j: Q
        begin9 M+ F. b' N/ l3 m( s2 Y
                if CLK'event and CLK= '1' then5 e* j: ^2 u* n6 u+ a. e9 ~& P: m
                        Q        <=        Q + 1 ;
; F: A2 k! ]5 T; e6 x                end if ;
7 Z" @6 D6 l# ]7 w, E# q5 D        end process;
# n5 G. a' o3 h3 B3 l! R* ]        DIN        <=        Q(23 downto 20);) W/ }) Z2 [0 `$ I/ ]- k
        D_FREEC        <=        Q(15 downto 14);
" e$ W3 M# z9 W0 O% Y        seg_s        <=        "0001" when D_FREEC=0 else
5 c  U# E4 Z8 {, ~2 K: T                                "0010" when D_FREEC=1 else  X6 ^7 Y' d. _' O
                                "0100" when D_FREEC=2 else, y" V- R7 O, ^9 r
                                "1000" when D_FREEC=3 else8 n. ^( _8 Q7 c1 s$ }7 k: S
                                "0000";
# R. W& a* D9 w" @6 u" x1 Hend block FREE_COUNTER;
# E* {" e3 F: S$ W/ P( T3 N6 iSEVEN_SEGMENT        :        block% y, j$ U1 H  X2 D8 ^5 b6 @1 p# K+ R
begin
0 Z7 ?* x# u% ]# v  t9 e3 j+ m& Z: J
; v: f  J! P0 g, gseg        <=        "0111111" when DIN = "0000" else2 o; l4 H( ]( `, b) j$ D
        "0000110" when DIN = "0001" else
5 ?: ~- }- H7 W6 c- G/ }$ k        "1011011" when DIN = "0010" else8 E- C- P& f, u% f! o0 X
             省略  W' R/ C# V' D/ L' S
        "1110111" ;% c: t" o6 W6 a8 ?
9 G$ B- H( A% Z
end block SEVEN_SEGMENT;          9 M! H  ~1 h5 X; D. [6 |8 [
end zeroto_9_type2_arch;
作者: spring69393    時間: 2008-11-1 10:00 AM
Q        <=        Q + 1 ; 你沒給q初值吧。他不知從那加起。
* E& b$ a# a3 ~& R9 G  DIN        <=        Q(23 downto 20); din 看名字應該是輸入為什還能給信號,不懂??
作者: masonchung    時間: 2008-11-1 09:00 PM
如同spring69393大大所言, 的確是怪怪的
8 V$ `, g$ S' }1 i. tDIN        <=        Q(23 downto 20); 的輸出值卻一直是"0000"  應該原因在此




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