Chip123 科技應用創新平台

標題: VHDL程式計數器懇請高手幫助! [打印本頁]

作者: ysjkomo    時間: 2008-6-2 08:14 PM
標題: VHDL程式計數器懇請高手幫助!
各位高手安安∼% {9 k7 Y" m: a- e/ r6 W. M/ K3 Z
想請問一下5 D9 s$ D/ {* t4 G1 C
目前小弟要做一個VHDL程式
; \' W( Z% ?  s. A動作是∼0∼9在7段顯示器顯示出來
" R5 p& C( I% j: l4 Q3 e剛開始數字顯示在9並有1顆LED燈會亮∼
4 q* v* Y' V4 `" I- W% u' i之後∼再按下SW1。數字會變成8,再按一次變成7,依序遞減到0(9變8時LED燈會熄滅)
8 x1 |- ]% W# c% [5 o* m3 [/ j然後再按下SW2數字由0變成1依序遞增上去至9,到9時LED燈號會亮起。* A6 c! z) l" j5 w) x
請各位高手大大可以交交小弟阿∼∼ 小弟已經認真學習了∼但真的苦手
+ A. }6 k7 ]3 @* X: w7段顯示器是共陰
作者: mclaren_18    時間: 2008-7-14 04:21 PM
% i; m2 A- U' H( k& j, O. a8 H, ?9 o
vhdl  的書本 及 網頁 都可以找到類似的......" V% ~3 Z/ u3 T) ?
只要自己參考一下  做個變化 應該就可以達到你的要求....! C% [( U8 J) V; e. {
題目不難 ...   用心就OK!!8 e0 ~+ N- ^. Q" ~2 Z8 |7 Y- h* \

7 }9 B% K7 \9 _2 Q加油
作者: tommywgt    時間: 2008-7-14 08:44 PM
標題: 給你參考一下
隨便寫一寫沒檢查語法* p. n; D8 w8 D! H
前面的部分請自己加入宣告, n( c% W7 d  [" o& T, M4 A
基本上這個code應該會動,如有小細節有問題自己改一下好了% c3 h  A$ d; z
另外這個code假設開關沒有彈跳且電路有額外提供一個clock source/ b& G8 j" k" ]  Z9 J7 d. w

& p" k, `* u, b2 yconstant dig_0 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號* r. K& p0 t" S: l) O
constant dig_1 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號1 S$ x: T# N# o3 P+ c3 C" {
constant dig_2 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號
- c1 Z$ x) g( U5 S! B3 K. Jconstant dig_3 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號
- F4 f! m" i, Y: Q! K/ U6 Tconstant dig_4 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號5 ~" i7 c9 T7 u. _6 d- g
constant dig_5 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號8 g' w5 C5 H! M( e" l. P
constant dig_6 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號
0 K% z; X5 I' yconstant dig_7 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號2 \- V* r; P8 x( z, t9 V0 n/ _9 N
constant dig_8 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號) ?. ~% F: O3 K2 N# F& @
constant dig_9 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號
4 p. k( t; F) T8 Asignal cnt : std_logic_vector(3 downto 0);. G" ^7 w* x5 I+ v) m0 k: d' k
signal sw1D, sw1Q : std_logic;4 j2 o  V2 ^5 t5 h' T
signal sw2D, sw2Q : std_logic;
( P* p, M# Q1 n7 I  l4 gbegin: Y" M5 d' _: W; m, ^7 w- ?

: l2 N5 D) h, gprocess(rst, clk, sw1)
1 W! j2 N, M$ ]6 z7 p: Fbegin3 k4 g0 B2 M) g( A0 F- u# p- Q
    if clk'event and clk='1' then
$ v# u6 [( g) M5 n  |$ \6 D' h        if rst='1' then
" [; Q- b2 |% l! A: @            sw1D <= '0';7 E$ h, S& ?5 ?* C* `  ?; H
            sw1Q <= '0';6 Q" A- G( d, ]9 J
        else% A( v( p. H& p! g9 J; D0 @/ `
            sw1D <= sw1;9 [9 D2 y! J( }$ @; K0 q
            sw1Q <= not sw1D and sw1;
. M5 R' O: p8 c4 l* ]. k, m) Z. A        end if;' L3 C) \9 o# ]' M6 X) j/ n; F
    end if;; g/ r- `8 @6 `' l9 G3 r! G$ Z
end process;
1 F- F2 Q* T$ H" H) N4 G6 q2 v) F3 S/ g0 I% p( C! S  A( n
process(rst, clk, sw2)9 n0 E3 L" {$ g8 g8 _8 P
begin
5 T) P; O7 @; O" Y" ^( r7 R    if clk'event and clk='1' then
( G7 T, a7 ^" H7 A( t+ c        if rst='1' then
6 @7 W2 ^5 G# J& s            sw2D <= '0';7 `" X- c. J8 [0 O
            sw2Q <= '0';0 |! i$ j3 p% u0 V( V$ t
        else
/ d+ A0 M& Z" a. \* G2 c1 m5 \            sw2D <= sw2;) R# Z' k8 g5 e8 ?
            sw2Q <= not sw2D and sw2;
7 u9 }; d! E4 I  R5 o9 }) I/ m        end if;- {+ r7 _6 R$ ^, I& B
    end if;! K; Q: n1 R& g2 a  q
end process;
* F, `! Z0 v, X5 D5 E% b/ C
  O, w6 f' y% X9 dprocess(rst, clk, sw1Q, sw2Q)/ W' t- p- y& B) ?2 S
begin, N' Y3 I3 {5 H; t9 h6 e
    if clk'event and clk='1' then
$ u! N) ~. }+ }& W4 U% b2 t' G        if rst='1' then
- a* H3 T7 o! P" ~" N4 z% F            cnt <= "1001";             --initialize to 9 when reset
% B5 V0 Y  {2 K        else
3 l; \/ n; c+ C8 s* R% Z4 k            if sw1Q='1' then! B4 b2 d/ T- [0 ?  Y" D
                if cnt/="0000" then cnt <= cnt - '1';  --下數時下限為0( M! p! T: ^9 v
            elsif sw2Q='1' then  s3 S: r0 q8 F' ^0 V/ z# u
                if cnt /="1001" then cnt <= cnt + '1';  --上數時上限為9' ?3 X0 }# }# ~1 Q
            end if;5 B1 E, s% M- v" I! w& I
        end if;
! |+ d. r% Q  Z' _  ~9 I    end if;" ?; U+ e  N8 n% A" H
end process;
4 z$ t* `: S* h) {6 v" o7 p8 u) a- I
2 R5 n0 }1 y" _' n) |# f2 Bled <= '1' when cnt="1001" else '0';
  i/ c4 u! Q0 f% {) Bwith cnt select led_dig <= ! G; L, ^# ]* n, F9 _+ ^
    dig_0 when "0000",
5 r' V$ B& o3 `, }' _% g5 Y, g    dig_1 when "0001",
" Q+ w9 v' S. @    dig_2 when "0010",* N, Z: M9 y1 r% n( A. }/ N
    dig_3 when "0011",
( }" O5 Y* h) Z0 f9 w6 K    dig_4 when "0100",. r/ a, K9 a7 W# Q* i8 ~
    dig_5 when "0101",5 a1 c; {' Z" q. z1 q
    dig_6 when "0110",3 G5 k4 [- v. [7 a
    dig_7 when "0111",+ P6 r. l+ Y3 S5 j3 t1 T6 b
    dig_8 when "1000",! }* z- l4 q% z1 \$ [) k* [3 \; N, `
    dig_9 when others;7 J8 d+ M6 ]! D" F" T8 `

5 U5 N! T! [* R  x, H4 W: send behavior;
作者: tommywgt    時間: 2008-7-14 08:47 PM
在我的電腦看那個
" p  x! ]( G" d/ j8 x<=, ^9 T4 M. x* J' X" P( i& @
會變成 1 w0 E/ @8 Q% P0 S
&It;=$ V3 Z3 Z8 k2 l7 M9 R
也,好怪,有人看到不一樣的嗎?




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