Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
# Q5 d- U/ w6 z; B5 p, J& I
$ ]6 o/ N/ o. ?/ T8 }# Y: k& a5 |' ALibrary ieee;4 \. {2 i; ]) O: e2 A- y
Use ieee.std_logic_1164.all;: d# n& u3 H5 b+ _" R8 E' E9 ~' F
Use ieee.std_logic_unsigned.all;4 j( d* N3 T; ]0 P8 i) A
+ h; @5 c: f" w% u5 b5 t5 L- {. {: d1 E
Entity Keyboard_scanning_2 is
2 ~, [! `! V" v# i: ?! o/ UPort(
2 o# G; w3 ?5 u  T        clk,c1,c2,p_21 : in std_logic;: N+ L$ g; ?5 g
        kbi : in std_logic_vector(2 downto 0);' W+ B7 h# v# B+ A# C- G
        lt,p_20,p_6 : out std_logic;
% e* h# `2 d4 F0 C        kscano,key : out std_logic_vector(3 downto 0));
* Y0 z8 w% y( I+ S9 {  Qend Keyboard_scanning_2;4 h7 l( M9 L; O# r- [

$ w  e$ i2 ^  `/ s% hArchitecture K_S of Keyboard_scanning_2 is' |& C3 R& f2 K! B" C$ I
signal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;* \: |0 Z: K' C; |0 t* b3 m! K
signal D : std_logic_vector(1 downto 0);
( m& T6 J( G' p. _signal ks1,kok : boolean;4 F4 T5 B7 \8 a8 R9 u# O
Begin
9 K! ?- {/ u0 B% a$ U( Xlt<=c1 nor c2;2 i; @3 v- j' B, E& ?) l

$ o1 V; V3 q$ K8 i3 e1 x0 c, Dfreqprocess(clk)                                    : ^3 k0 B, \' i
variable ff : std_logic_vector(16 downto 0);  
* V* Z1 B/ U4 [2 _Begin
( Q% l- N1 j* \        if (clk'event and clk='1') then7 F& W/ O8 J) s7 k& s3 C
                ff:=ff+1;; Y# q2 M$ P9 v* B, a, ?/ B
        end if;
5 ]+ T% \; M* ^- t        l_p<=ff(12);                                     , V3 m4 b3 H8 F5 e# _9 k
        d_b<=ff(13);                                    
1 y: F) h- B: u1 X2 [' w. L        count<=ff(15);                                             6 I& f& _: d5 \; G1 k, K3 F. h) }9 F1 r
end process freqp;  E% R% U6 Y# I. w2 u9 {

+ H9 B% Q2 M" Y; Jdebrocess(d_b)
# z( N0 A" S. O( D7 V# `variable c : std_logic_vector(1 downto 0);* U" I. N( O- L% g6 C
Begin
; t- P* H) C( {$ C        if (d_b'event and d_b='1') then$ T* }4 y% O: B% U
                if (kbi(2) or kbi(1)or kbi(0))='1' then
( x$ V' R6 I' m5 c! J! U8 O                        if c="11" then; Q) }" S7 H; P8 X( L5 v& ~" R+ q
                                ena<='1';
3 x( m2 l' M0 {% A                                x2<=kbi(1);, u# T& J/ A5 m3 M* z
                                x3<=kbi(0);
7 H+ ^$ h0 y. x. a                                kok<=false;
' {! o% Z% r- `# V$ J7 H2 _                        else
; p% Z1 W2 N$ G  _! I3 g/ O# C                                c:=c+1;
0 ?6 M4 J7 `+ u                        end if;9 V9 l( G5 X5 g! s
                elsif (kbi(2) or kbi(1)or kbi(0))='0' then  Z) a4 L$ K+ h4 \, h0 d* c
                        ena<='0';! A# ^8 i6 _& H$ p6 c+ q# i' p: v
                        kok<=true;
4 f8 x9 z! _* f0 H+ N                        c:="00";               
2 i" b, j- o) j: R0 g" b                end if;        5 |7 d  f0 T' {* i  A
        end if;/ q( G$ Q5 w; T! j0 T& V
end process deb;
6 g: F( T7 h( U4 ^5 `: A- |6 q& |( W5 \7 D* o7 e4 m4 e
counter_scanrocess(count)
! _4 z8 W3 N2 }2 e! n, [Begin% q  ^, V0 x; S1 H5 X  Z
        if (count'event and count='1') then9 N: b) @4 Q4 Q" X7 A* o
                if ena='1' then& L0 F! U0 }9 }2 Z
                        x1<=D(1);  ]" L$ [- G. ]: W  g
                        x0<=D(0);
' e, n# E+ |( n( R                else
5 b& W* Q0 Q2 l% i. Y6 p! C: k                        if D="11" then
4 f* V2 n: b3 h1 e9 j/ T/ c( w5 o  ~+ v                                D<="00";- W# V+ l5 {. u7 y7 T$ w3 m) t& D
                        else ( Y) x; n, \; {* y# N5 d4 n7 T
                                D<=D+1;2 F+ @9 \: P' c) R# V5 E
                        end if;
/ [2 x/ E& V2 @  q& J9 O, N                end if;. |4 W  {5 k5 D- D" u7 n; m5 P
        end if;
: k" ^) V# M3 \1 w: Q$ N, G        case D is% E9 Z' ]. G+ @$ }
                when "00"=>
) ?$ p9 D8 y; p/ J                        kscano<="0001";" n: M1 K- a6 S5 H0 g
                when "01"=>6 c, }3 ~! f+ L# F! n/ v
                        kscano<="0010";                 " f3 [7 |; Z8 ]
                when "10"=>
! j8 j" m( C' e/ o8 N3 c                        kscano<="0100";        3 z# W- g* `$ x4 }6 F/ _& p
                when "11"=>/ H5 ?) m( J; K7 k
                        kscano<="1000";
0 k8 G& v% T' U5 {* `& Y                when others=>null;+ F% C8 g" t% W7 l
        end case;                       
& R" `; y  Z) _+ B" C8 [end process counter_scan;  o1 _/ c+ k( P3 x: b
2 y% ?5 O6 S% h% K8 C
ld_plsrocess(l_p)
+ q) k- R$ F) z! SBegin
7 D5 G5 u$ U; ^- H        if (l_p'event and l_p='1') then
( h2 b- \: l. Q) F8 E2 V5 I2 ?& S0 @                        if ena='1' then
' B: j6 v4 ]3 W! f4 X                                if ks1 then! y- m& C) |- V, B1 _5 |
                                        p_6<='1';
$ e$ \, M' H3 q( f! \) o6 J                                        p_20<='0';1 B# q! g  c, m* y: p5 `& O
                                        ks1<=false;
- r8 M% b! [: Y( F' O9 _                                elsif ks1=false  then0 U7 H1 o7 s. ^8 H
                                        p_6<='0';                                                                        . T) L! ^1 u1 Z$ ?
                                        if p_21='1' then5 i: I9 I+ `% q. t5 A$ E! s/ m, @
                                                p_20<='1';. Y" z' _) M, \! m: R1 R
                                                key(3)<=x3;
8 D1 h1 \' C- f( ]# S0 _% ]                                                key(2)<=x2;# p8 a  E% _8 {- D9 _& l8 ^
                                                key(1)<=x1;# B! p! B& S& z. g9 g
                                                key(0)<=x0;
% a  E8 a. p+ V1 H% @" m& v- {1 E1 i                                        else
- B% G- w7 U. w2 T                                                p_20<='0';
' D- u8 D, l, E! W7 e2 M9 m1 P                                        end if;
; B; H& l- P) e/ N                                end if;
( k7 `( H+ |% O                        elsif kok then3 ?0 d" g" k! e7 b
                                ks1<=true;                                8 x4 T/ G1 ~( d5 E
                        end if;9 ^3 Q% |1 t5 |, _( j. E% f* W
        end if;+ u, S' u7 b  e* W
end process ld_pls;7 ]+ O; W5 }( k. l: C5 o5 J
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 編輯 6 c& R& Z5 p4 E1 U) t
  @. U. q+ n$ w1 B
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?) F! I- I# Y7 y- n1 Z/ C& ]
不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman
2 C1 {, ?8 U( d5 J  z6 M" K$ j* U) I
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
! g% e; O/ g* ]# H0 ?. |/ W7 P. B, |1 G5 B7 ?+ |
我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2025-2-12 09:39 AM , Processed in 0.171600 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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