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: w
7段顯示器是共陰
作者:
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 y
constant 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. J
constant dig_3 : std_logic_vector(7 downto 0) :="xxxxxxxx"; --請自己定義共陰的信號
- F4 f! m" i, Y: Q! K/ U6 T
constant 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' y
constant 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 A
signal 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 g
begin
: Y" M5 d' _: W; m, ^7 w- ?
: l2 N5 D) h, g
process(rst, clk, sw1)
1 W! j2 N, M$ ]6 z7 p: F
begin
3 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) F
3 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 d
process(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 B
led <= '1' when cnt="1001" else '0';
i/ c4 u! Q0 f% {) B
with 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: s
end 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