Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.9 D' L3 a/ F1 H( a. }
: q% z6 N+ C5 _
Library ieee;
, P& `1 Z# q/ ?4 |# }7 M& D/ J$ U4 fUse ieee.std_logic_1164.all;; K$ m" }  C( s" A
Use ieee.std_logic_unsigned.all;+ @: M4 p3 z  }+ Y! C2 ?

5 z# p3 Z2 I" _- x& l( DEntity Keyboard_scanning_2 is
8 p. o9 h7 Q8 V  H: R! j1 IPort(
- @4 h7 z' W& W2 M5 D! c        clk,c1,c2,p_21 : in std_logic;
6 A6 z$ D* Q8 G* q( |* O        kbi : in std_logic_vector(2 downto 0);# C' j5 J4 P1 b3 i6 r
        lt,p_20,p_6 : out std_logic;) U2 ]: L3 Z/ V# @6 D, p
        kscano,key : out std_logic_vector(3 downto 0));
; ~, o4 _( |- ~* Q7 ^. xend Keyboard_scanning_2;
) g/ \, v4 {) s$ u5 a9 a/ A+ A! Y$ l5 U8 \6 e
Architecture K_S of Keyboard_scanning_2 is
! l; E8 Q1 R2 S0 {5 dsignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;+ W9 T; A1 ^0 X) J# U0 {
signal D : std_logic_vector(1 downto 0);
- T5 Y5 F8 ]" F0 }) u: c" h1 Z$ o* E- Ksignal ks1,kok : boolean;
6 J- G: R# S0 h/ N- V! k- nBegin! S5 m! D4 W1 S5 z( G  e
lt<=c1 nor c2;7 ?  i" L/ k6 Y# K5 }' y3 y
4 g; d3 M8 N, W# K% }& A
freqprocess(clk)                                    
. p2 }7 ]: [: G4 f  J( S' Tvariable ff : std_logic_vector(16 downto 0);  
1 D4 F4 j1 S) j( K1 f, F, N6 ~# aBegin
% M! J6 Z" C9 S) m: `/ _4 D- B        if (clk'event and clk='1') then! u" }5 l8 s3 \0 s; Y* P8 d
                ff:=ff+1;7 Q  s; Z; k: [9 s. T$ j. b- f
        end if;
+ t5 L2 @% c* l        l_p<=ff(12);                                     8 g& @8 z$ }5 V; X# X  R' s7 Q; C) i
        d_b<=ff(13);                                     8 v  ~8 D: R4 t- X* j& K: S
        count<=ff(15);                                             ' y6 \7 Y% P! S3 P8 L6 o% I3 a
end process freqp;7 P/ [$ n% E: P: z/ R4 ^/ p

) {9 p: v, f2 _  o" P9 Sdebrocess(d_b)* p$ D5 w. R8 l  ]# L
variable c : std_logic_vector(1 downto 0);
5 n: ^' \' r* q& T9 Q% p, zBegin
& v/ }' [5 G0 a9 l# ^+ E+ ~: S' ?( D        if (d_b'event and d_b='1') then
1 L! R6 [9 U" r$ f7 E                if (kbi(2) or kbi(1)or kbi(0))='1' then
. H3 m+ H' t. i8 o. ^) s                        if c="11" then
% F( _3 ^1 W8 F: e$ j% x" t                                ena<='1';
2 Q% M6 J5 D' i9 a6 P# [8 A                                x2<=kbi(1);3 @* d- x! m1 A6 y. Z
                                x3<=kbi(0);! b9 }; B( G6 y
                                kok<=false;: u* U7 W& a8 N9 B9 p8 t
                        else & I2 t, e: i$ w3 ^  Y
                                c:=c+1;
/ ^# ~7 P/ j7 ^2 L9 H                        end if;
7 q' H3 y! ~$ E* u# C# N. k8 i3 ]& [                elsif (kbi(2) or kbi(1)or kbi(0))='0' then' V& r( A' v' i. g5 J' C' z! D
                        ena<='0';
' p" V' K( F" p6 u0 }7 T                        kok<=true;
7 I1 ?% ]3 j; M: o$ `) D) |                        c:="00";               
# X( Y$ |( [: Y9 y$ i( y$ L9 Q                end if;          ^6 y8 I# n4 y) \  S, K; ~
        end if;8 m# t( G2 f9 k; _! s% Z
end process deb;' I8 b# U! \+ O- Y. {7 E$ K

/ u: L  a  T. m( C5 V& @% ~counter_scanrocess(count)
+ e  c3 G  A9 W, ~; K! |5 qBegin. y; d' z. u* i0 B+ M
        if (count'event and count='1') then, W- H$ d6 O1 k
                if ena='1' then
: r. B. w$ _% x+ G7 B                        x1<=D(1);; G0 o4 O# z9 j/ q, x
                        x0<=D(0);
! n8 _: y' Z* p* _% a6 R/ f% m                else  u2 p% y. _8 U$ Y
                        if D="11" then
1 E6 L& k. m$ }1 I0 _3 r% x- u& H                                D<="00";
2 Q( i& B2 J& d0 T# F  c8 v                        else
& p7 o! {- S4 M                                D<=D+1;
/ k6 t' K; y* n' M! D4 _% w                        end if;7 a( c  J: k8 w" W* h  J
                end if;
, R- g+ {- W9 d; N9 W; N        end if;
9 E" }) f# p1 l        case D is! \' A: i9 {  L: x% p
                when "00"=>
! [: l+ Y3 ]" {2 }$ q. y2 r8 p                        kscano<="0001";
! o. o- d' \9 n. z4 \                when "01"=>
' Q8 [5 |& R; v                        kscano<="0010";                 
1 d7 b: y' X6 S' i! o5 O- `+ l                when "10"=>
) f$ j& q# o! C3 b* \                        kscano<="0100";        3 q$ m9 o' c0 l& l$ @
                when "11"=>
+ ]! i6 O7 U+ r9 C                        kscano<="1000";! v  x, M1 s6 |/ u; ]
                when others=>null;/ _9 x; \, P) c4 C  k; N
        end case;                        # W3 O  Y7 n3 s7 v7 |0 S5 x
end process counter_scan;
9 Q7 R/ T  s* L4 ~5 u
4 V; w" g" N  c' Q2 t; y: Vld_plsrocess(l_p)' d2 N% y+ @5 j2 L- D8 k. W3 G
Begin# p9 j4 x2 ~; h$ c; r& f* T' \
        if (l_p'event and l_p='1') then9 G0 M8 _5 y, u5 U+ j  Z
                        if ena='1' then
# _1 @" ^! j* ?' k+ L1 d                                if ks1 then$ O1 m) U' q0 O
                                        p_6<='1';
- t5 m; @5 K; A                                        p_20<='0';
2 O3 O" y' v4 Y3 w! O( f                                        ks1<=false;; f3 ~) Z, Z+ T  n- Q, N
                                elsif ks1=false  then
4 q) V' a$ M+ o( Q( J                                        p_6<='0';                                                                       
( X! v9 h4 z) a5 t                                        if p_21='1' then
0 H+ S* k" B, C: Q! y/ Q                                                p_20<='1';
! h1 U& q- v$ q) h                                                key(3)<=x3;4 }: s* c% h% T* f: k# I
                                                key(2)<=x2;" p5 r7 g/ s( f$ m8 @& b! ?
                                                key(1)<=x1;
1 y0 z+ X+ r8 j7 d                                                key(0)<=x0;' O7 M* U9 p2 Z
                                        else. A  X; d! [7 f5 B' e/ k
                                                p_20<='0';
; D; \! w# N2 f                                        end if;
( Q5 @5 o$ H$ b/ @5 T3 [                                end if;9 S7 |' i, b; Q" z
                        elsif kok then
8 |, q. w% @' b- I2 V                                ks1<=true;                                0 }: w+ _4 c& y$ u
                        end if;
6 o( e# ~7 v- p, l7 _, H2 D        end if;
; g* X) m& ^9 }9 c4 H4 pend process ld_pls;
( w$ r# I6 M" K; s& n5 rend 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 編輯 % F) X8 i$ x- W- [5 i
0 H& [5 x! `+ Q. |0 P( ^
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?! w4 v4 T0 V  f; Q: f" y. p
不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman / Z- t7 J- s& h5 ^* ^1 K* n! n

9 E+ I' `9 v" W! c# N# O7 r就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
8 }" S' i4 W7 E/ v3 d) s! A
4 _" O/ {3 G' x6 F$ @# }我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2025-2-12 05:10 AM , Processed in 0.156001 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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