Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 15345|回復: 6
打印 上一主題 下一主題

[經驗交流] 請教各位先進們VHDL鍵盤掃描寫法^^

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.( p( g. {* E& G# N
# }  m; K; f' ]) Z9 R
Library ieee;. E* H6 l: f) K3 ^9 r1 d, X
Use ieee.std_logic_1164.all;
" C2 C4 S, w3 @% o1 `2 Z. S8 mUse ieee.std_logic_unsigned.all;* c& q2 W% S" Y

) b  c4 G& P! v! \, D6 J1 |Entity Keyboard_scanning_2 is
2 H6 `8 x# U! m- K. ~1 x$ V2 a3 \Port(, n7 Y8 @, h+ t9 t) k
        clk,c1,c2,p_21 : in std_logic;
( p6 }6 K6 q% Q. c4 r        kbi : in std_logic_vector(2 downto 0);9 n4 D6 Q& u7 g* E! K
        lt,p_20,p_6 : out std_logic;4 p" T1 s9 j# o. j+ b
        kscano,key : out std_logic_vector(3 downto 0));
4 D+ {0 L& U- n$ [end Keyboard_scanning_2;$ \4 X" i3 t1 Y* ]1 V2 W

9 {, T# P* z8 ~2 s& G8 V% GArchitecture K_S of Keyboard_scanning_2 is
1 o, I* A5 B9 W. U) ^! c3 Wsignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;5 D8 o& ^* F9 @
signal D : std_logic_vector(1 downto 0);
/ I2 o4 n  D) V4 r. R! L) csignal ks1,kok : boolean;
6 A4 O  o3 y: w9 L4 q, m4 y3 NBegin. X  x) g; Z8 U3 r5 @
lt<=c1 nor c2;
& G2 I3 ~) y$ X1 I0 |& T
4 J+ i/ ^8 v* h+ O( o0 `freqprocess(clk)                                    : k5 {2 Q$ ^$ d" y. W( m7 f, e$ ^* T
variable ff : std_logic_vector(16 downto 0);  , f  E. E1 ]9 M: R! P
Begin
9 a1 g+ }3 L9 m# @4 `        if (clk'event and clk='1') then0 C# C% K4 z8 u
                ff:=ff+1;
/ s' K3 z7 _3 ^, j        end if;0 Y4 j/ W3 T, t
        l_p<=ff(12);                                     9 Y. L  s! z) ?* A+ L. s
        d_b<=ff(13);                                     5 `! D) w$ Y, {2 Y4 \
        count<=ff(15);                                             " e8 B4 ?6 B1 {0 s7 [
end process freqp;
$ s. [1 x4 A5 c8 J
9 b9 R% d7 F1 m& t% \" V0 I9 Wdebrocess(d_b)
* s- O9 `8 p1 ^variable c : std_logic_vector(1 downto 0);; x+ _( l" ]5 \1 @  F
Begin
- i; v# i# d3 J4 |+ C        if (d_b'event and d_b='1') then- ~/ {; ]) Z  x; h# O+ W
                if (kbi(2) or kbi(1)or kbi(0))='1' then' B# @7 ~* o4 g: C5 [/ }" j3 @
                        if c="11" then
9 ~9 B5 k6 E$ U                                ena<='1';8 w7 e/ ~8 P$ p& e
                                x2<=kbi(1);" Q$ ]6 x( F- u
                                x3<=kbi(0);
3 d! i' r- \2 N) b+ ^                                kok<=false;
  ]- D! V3 ]$ Q7 V; @4 w, |3 @4 {% T1 }                        else
7 B1 E- @* Q! ^  F' g* c4 A                                c:=c+1;$ V( ?2 M& y5 p8 |3 j% Y2 U1 H
                        end if;
# O$ G3 H: |( Q/ p                elsif (kbi(2) or kbi(1)or kbi(0))='0' then
0 t/ A6 P& ^# @$ p  R/ R  J                        ena<='0';8 R: ?; s. j  o! {! g' g+ C
                        kok<=true;
3 }2 V' F1 R+ e                        c:="00";                ) q/ l1 h+ q" r; ?. L8 a
                end if;        ' V. k8 `& Y. i5 V- Q- E" R
        end if;
) J! O3 D% E; |5 K6 `end process deb;0 M1 F3 Z# a/ }5 @* R$ \

; R- [  K6 D/ X0 }( m* f, a  e3 Rcounter_scanrocess(count)) I# e* ?  D, V+ _
Begin
7 g: O2 O9 m) g; ~+ w; E! v        if (count'event and count='1') then
! c' k8 Y& M4 H# X% Q4 a+ T) n                if ena='1' then
, D# s; T7 ?: j% l; v7 T                        x1<=D(1);
$ j# K1 [7 F: P4 _4 h7 a# g0 K5 `. o                        x0<=D(0);, E. R) @0 F9 x
                else
( o: v5 P) n. d4 w& e: m8 p6 @                        if D="11" then' I: Z/ i4 Z3 ?) |1 f/ {
                                D<="00";9 Z6 U6 H2 ~7 R& @
                        else
( {* H, \8 L2 r5 C9 d+ C, i                                D<=D+1;
+ m) z  ]( ~5 q' x7 `1 k; {* ?5 n                        end if;
; f- E& P1 v+ R+ H; l                end if;
( c4 T5 z4 }7 l" Z8 ^8 m7 u3 S        end if;5 i* Z6 X3 g+ S& v. z3 a. A, M7 j
        case D is" f0 m6 W+ I+ @: i8 C5 Q, N
                when "00"=>
$ S+ g" y1 e* ?& ?& c! C- r                        kscano<="0001";
) f! |! {2 i) K* J1 G5 T6 l- C, `! y6 i                when "01"=>
- W) O" I" J4 B                        kscano<="0010";                 
* j0 t- \' b& z+ Q6 [4 h                when "10"=>2 C) G  }/ X- P
                        kscano<="0100";       
' G" h0 o* y6 I4 @: j' i3 t$ k2 _                when "11"=>
, X- S  a/ h* x6 N                        kscano<="1000";, k, Q0 Y  b$ X5 x& n& w9 ?: {
                when others=>null;
1 q2 e9 ^6 }+ J5 g        end case;                        % }( K0 F: x+ Q: \! ]8 _* P
end process counter_scan;
& v; H( o' n; {. I; f0 E/ w& X( ]# y! K, v% \- c5 Z  Y5 T
ld_plsrocess(l_p)- g! L$ m# v6 f( x
Begin
: f0 _: r9 P6 p; G  ?        if (l_p'event and l_p='1') then
# L1 L3 K$ G! F- D3 C0 @0 N) \4 x- v                        if ena='1' then- z: \# g3 n8 H
                                if ks1 then
) M: g/ l  c( D$ ~9 u                                        p_6<='1';
. k) q; }$ q2 p* a5 c* V: U                                        p_20<='0';+ C" l" M! }; U) p" c: G$ h
                                        ks1<=false;+ h' ^" k$ B% e' b. I  T( z
                                elsif ks1=false  then
+ l" n3 X  S. u9 ~                                        p_6<='0';                                                                       
/ `- \% F# w8 W  d* N% }                                        if p_21='1' then
5 i2 ]# Q) W) x                                                p_20<='1';
& O6 p/ @) F; z1 M/ D. D                                                key(3)<=x3;
7 ~( q+ i! C- B2 @- W7 I( t                                                key(2)<=x2;( h: @# K# b# Y9 p. z9 i
                                                key(1)<=x1;# f/ d% n. D. C8 Q4 S$ z
                                                key(0)<=x0;. k$ D$ t3 h( @6 f
                                        else
; u9 ]9 G4 C& `8 \* A                                                p_20<='0';
1 d0 j  b+ t( X  O3 |0 |( D$ M                                        end if;
" S  ?% E) E0 Z* k4 e* j7 D                                end if;1 H# U% d# U7 w: D
                        elsif kok then
0 ]3 x" D: ]+ c6 B( Z! K  T1 ?                                ks1<=true;                               
/ T  h- {/ s7 H' i                        end if;! e/ E* Z, _$ X6 ?4 _
        end if;5 r1 D1 s& H! g6 F
end process ld_pls;9 b+ o6 l: r( |& y5 _
end K_S;

評分

參與人數 1Chipcoin +3 收起 理由
mister_liu + 3 8RDB了!看來學生們都沒問題,還是老師問題出 ...

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2011-10-22 11:06:13 | 只看該作者
如果有Verilog的寫法也可以喔^^,最近也正在學ing.
3#
發表於 2011-10-25 14:55:08 | 只看該作者
本帖最後由 winslow 於 2011-10-25 02:56 PM 編輯
  ~0 {% J4 J( j7 ]' b
- m: x; m# K/ b先請問一下,您所謂的"看書說故事"的寫法是什麼意思?1 _7 _& F+ f* \0 ^
不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman " e+ k3 x4 ?$ h* c# ]

9 W+ Y1 k0 H- |" J就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
  d+ r5 R# h& g8 ?" T, H+ k) c) \, U2 [- M* }6 S3 I* p3 [( h) r
我在附件一次.看的到嗎??

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
7#
發表於 2011-11-22 21:30:19 | 只看該作者
灌水~~~~ 哈哈 沒rmb了

評分

參與人數 1Chipcoin -5 收起 理由
amatom -5 灌錯地方!是RDB!真這麼忙...下載? ...

查看全部評分

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-6 04:44 AM , Processed in 0.108006 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表