|
大家好 我想請問一個問題,我將兩個書上的範例結合在一起想寫成一個0加到9的VHDL程式,, X7 {3 p9 e7 v* N2 W6 q+ V" A1 r1 V5 v5 ]1 L
但現在出現了一個問題,當我程式加上FREE_COUNTER這個block執行模擬時這個block內, W( Z f" ?* s' |/ ^
的 DIN <= Q(23 downto 20); 的輸出值卻一直是"0000",變成1 h* B3 `4 z( {* \
我只能用cnt的值來控制我的七段顯示器輸出了,我想請問大家可能是什麼出了問題? 8 J% | E/ j) I/ K! e5 w8 W
6 x& Q4 |7 z. u4 V
另外我想再請問一個問題,我將我模擬的波形放在附件中,seg_output的輸出會有一段一段
2 A! k+ }4 j$ D/ b6 ^很不規則的訊號該怎麼消除呢?
. v2 ?8 p8 l# ], u, i5 r6 H% m
6 {! E, q6 H' k# _2 E' d不好意思耽誤各位的時間,麻煩大家了!!8 p; e. L/ N6 r5 q) O% o. k
9 v; n5 W' B7 D( m**字數太多了,我把宣告省略了*** A1 m5 X& l" X9 s% W* R
begin
' E- V: ]0 P4 W! b, }4 t: y$ wSYSTEM_CONNECT : block 0 X, Y8 ^; B9 S3 |6 X4 v
begin
, K% O) z; Z. u N: _0 r seg_output(6 downto 0) <= seg;+ _' R @9 ^& b% D3 Y3 G: U
seg_set <= seg_s;
5 a* q; B! l. R9 V0 Oend block SYSTEM_CONNECT;1 x% z W# L- _. H
0 b7 }- e f4 ~' T. f d6 M WSYSTEM_SET : block
4 s7 u+ I( E" W. }! F# W* Z" N) s+ w& kbegin
& V, t$ L* S: N$ f9 z; O/ A process(CLK)
1 r; T% A9 [; g3 H# E2 p VARIABLE cnt : std_logic_vector(3 downto 0);& ?; q/ N2 E7 y& x( K
begin
/ q3 ^7 n" J0 y' i$ a1 _ if CLK'event and CLK = '1' then
5 h1 p# [. X% S4 Z b% E. B( t& {+ b if clrn = '0' then
5 Y. W5 K A3 O$ H# l6 ^ cnt := "0000";0 I( ]& v* J) v z" b$ n
elsif load = '0' then
* | e B- \+ H4 x+ T cnt := D ;0 U; ^% [1 }2 [5 q5 h
elsif (ENP and ENT) = '1' then
9 z; ~0 ^% d4 A% V if cnt = "1001" then
+ w7 i6 c5 t8 u. z0 q% T cnt := "0000" ;6 X- V) V1 j# `0 s# s
else4 k ?/ j# l, P" n$ M9 b! b4 D
cnt := cnt + 1;
4 ?0 w P* D5 c9 g7 w; q end if ;1 R3 h3 `8 p5 ?0 L s, v
end if;
' V- k- K6 r a end if ;
$ p7 f& x) U O display <= cnt;
# C. r, c1 \" R --DIN <= cnt;
; H# P! G, G: T& A Co <= cnt(3) and cnt(0) and ENT;
" O! G4 n: z( t5 ~1 e6 Q/ O; d end process;5 s2 l7 U6 U# S: q
end block SYSTEM_SET; * t# [( l9 Q4 F0 V8 s' @5 M3 q* W
1 u# \( U$ k3 F
FREE_COUNTER : block
% I- f' `, |" ]1 c. u signal Q : STD_LOGIC_VECTOR (23 downto 0);2 w4 n/ g. B1 g# T
signal D_FREEC : STD_LOGIC_VECTOR ( 1 downto 0);
5 p, y- D A$ L$ [; h
# |! S D; @% S1 {begin% Y0 K- P/ Y* q
process (CLK)
8 R+ V. X) v3 o: s4 L begin
5 z0 ?; u# l8 L. ? if CLK'event and CLK= '1' then* o6 `" @8 {# E% s, I! f+ N
Q <= Q + 1 ;) P; W- K9 N/ `. w: j/ ]) h
end if ;( T' C/ m( I$ u+ b/ p; E* M1 L
end process;7 u" e [' h8 Z. ?5 p. \+ i% O& f) f
DIN <= Q(23 downto 20);1 |( v z* b& j! Y9 x8 w
D_FREEC <= Q(15 downto 14);3 ]' f# q4 v" ^$ N, Z
seg_s <= "0001" when D_FREEC=0 else
7 @* |6 |' \( ~( M; F. i "0010" when D_FREEC=1 else
) j: ^7 I9 w7 }1 S+ p5 e7 Z "0100" when D_FREEC=2 else
( }' X* b9 v7 a/ n( _& R5 i "1000" when D_FREEC=3 else. R5 A+ H: U' l( g
"0000";" w4 t/ [% V$ g2 s" p
end block FREE_COUNTER;
1 o( I# P8 Y3 h' [2 j+ T5 ~SEVEN_SEGMENT : block& B7 P4 ^4 }9 L Z( J. ]# X: w
begin
! p3 j" s/ i; t' T1 R; o$ F9 J6 J/ M
seg <= "0111111" when DIN = "0000" else
4 d) o: E" N3 r& i$ m1 l "0000110" when DIN = "0001" else' h2 e- ~% @/ w
"1011011" when DIN = "0010" else2 `; ^# x$ Y- N. R( w# J% j
省略
9 X: L: Z/ V" y "1110111" ;* F) m4 `( I/ _9 Z4 Z1 B+ K8 T
7 w) m7 Z5 C" q; J1 ]end block SEVEN_SEGMENT;
6 u5 d5 Y, H9 z# T: ]% S: h1 _end zeroto_9_type2_arch; |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
|