Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
  G9 U) c$ u' f2 T; _& w. t& f6 I7 ?5 A% C$ {- B# ?- A2 H; t
Library ieee;
: A$ {, s  a, H: v9 QUse ieee.std_logic_1164.all;
- M& V' x5 S. a/ P8 J1 l6 G  R3 `Use ieee.std_logic_unsigned.all;
5 b! ^" ]! V: P; m% @' K+ @! F+ F+ f" G$ z- `4 a* R
Entity Keyboard_scanning_2 is8 K5 M  b9 ~9 [8 R: {, \4 o
Port(
% G5 L% I* L3 [; K3 }        clk,c1,c2,p_21 : in std_logic;9 s% ?4 S' q1 f8 U8 L+ x) Q7 Y( j
        kbi : in std_logic_vector(2 downto 0);
8 p2 H; T* i- r; l% K/ }& F5 U6 T        lt,p_20,p_6 : out std_logic;9 R* k  j6 a4 m& ]4 F" d4 e
        kscano,key : out std_logic_vector(3 downto 0));
0 w2 l+ @8 X5 h' _! m9 iend Keyboard_scanning_2;- S8 V9 a  V  W1 i
, B( {5 ^; I7 [$ W
Architecture K_S of Keyboard_scanning_2 is
3 q' E8 h# P# R  [9 Psignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;
0 R. D- M4 B7 F7 \signal D : std_logic_vector(1 downto 0);% x/ O' ]$ R4 J1 W* [
signal ks1,kok : boolean;
: H0 k( x* T. V# jBegin6 J5 X+ d3 D6 r
lt<=c1 nor c2;1 _8 Q% [& j3 P9 j) O# _% X
$ }4 [2 H! k2 t- [% ^
freqprocess(clk)                                    3 L) ^0 e2 s  V% h' U
variable ff : std_logic_vector(16 downto 0);  - r' x' |/ [' {
Begin
" m' Z% ]# h1 z8 s8 Z        if (clk'event and clk='1') then. B( T% |, h2 ?
                ff:=ff+1;' u, z$ }: Q: L* o/ V& m
        end if;
& L" ~) J5 W+ B) G  L        l_p<=ff(12);                                     : w" R+ m9 h, [8 T
        d_b<=ff(13);                                     . |. @$ k! t* O; q  @
        count<=ff(15);                                             . E" n6 X* M2 P, ]% p0 i
end process freqp;3 B$ ]5 }3 P1 K! n5 ?

" U, \+ f8 d* _& h9 G/ E1 Pdebrocess(d_b)& n) l6 K5 p  x0 V$ ^9 ~. m
variable c : std_logic_vector(1 downto 0);) |: x! a% o0 V+ V. K5 T
Begin4 c5 I# ^  Z' k4 z6 g8 h6 b6 u
        if (d_b'event and d_b='1') then1 v' @. f# i2 I# [
                if (kbi(2) or kbi(1)or kbi(0))='1' then! H. e! n  k, O& e' U
                        if c="11" then$ g) K3 F% o6 V5 K9 J- V/ F
                                ena<='1';9 @2 p! _$ \4 C/ X3 `2 H  r& B3 _
                                x2<=kbi(1);
. r1 t( v; l% K4 j5 F3 S  l7 \                                x3<=kbi(0);
& c/ ]+ F5 ]) P+ }" L- x                                kok<=false;2 X+ w+ |* {7 J9 ~
                        else
& Q" V1 a7 q. w7 V                                c:=c+1;+ j; f8 h0 k/ U
                        end if;4 l) b' v1 n; M- m. v: Y) j
                elsif (kbi(2) or kbi(1)or kbi(0))='0' then: {7 J+ h3 W! p1 O
                        ena<='0';
' ]5 @" w/ e9 s$ _' B5 ~                        kok<=true;
% R8 n% c) C0 ^2 f' `! u                        c:="00";                ( I1 C. i! t8 P0 {9 \
                end if;       
; |+ m  N7 g7 @" @0 j4 p        end if;( G0 m; W/ o- N" s# F
end process deb;
! a8 G" l7 D: a8 W) \
  x/ J# O' G. v6 r1 w, c2 ucounter_scanrocess(count)
7 b) T8 f* Q0 M3 ~. BBegin
1 B+ O  K3 p& u7 z/ j. R        if (count'event and count='1') then
0 C7 b" y* z; c1 f9 ~5 Q. O                if ena='1' then
' p6 s' H, a: {) E4 h( x! I                        x1<=D(1);
6 l9 m% F. N) f+ p% b( K                        x0<=D(0);5 S7 E5 u+ {- c/ z& e
                else
2 Z$ c' ?& A+ F! T# G% {* |                        if D="11" then
1 G9 R+ A) e! z! z; O/ Z                                D<="00";: A3 w$ ~" p% D& g5 S
                        else
5 Z( b) U& a- X4 f* F" c% V& f; v0 F                                D<=D+1;
/ F4 p7 a1 a" C3 S                        end if;
& m0 Z( z/ n& o; c                end if;
  h6 S7 j8 {1 g8 `, ]; I# y% f2 F% v        end if;" Z5 E! a9 H% P5 t! w
        case D is
' o8 N0 P% H) }- |                when "00"=>
6 k. N' S, w" a4 r; \) r                        kscano<="0001";# t5 X. E( C3 j" B
                when "01"=>
: |" e$ \/ Q- _1 p4 c( W                        kscano<="0010";                 # V6 T7 d* p4 ~4 J
                when "10"=>
9 Z- y) f0 ]" K1 q) ?# v/ C8 Z                        kscano<="0100";       
/ |: m0 w: Z: s                when "11"=>, M* J4 u% [1 S" t! X
                        kscano<="1000";- G7 j6 M; s8 z9 C7 S
                when others=>null;
7 O4 z# S. b) I& z# x3 h; F        end case;                        ; m1 Q  Z2 j" ]' P9 K, n4 O
end process counter_scan;4 c; A4 O8 e. Q7 g$ N: M$ O

& e4 m# X/ t# e3 v% \* X& Old_plsrocess(l_p)8 X2 Z4 \+ v- K  j. H
Begin
5 s  ?% L4 l6 d0 D/ _& f3 H        if (l_p'event and l_p='1') then
6 t9 G$ b* o/ b& l* E5 ^0 @                        if ena='1' then+ a: {1 M9 n7 l8 E8 k# B
                                if ks1 then
4 u; ^/ i3 ]6 k% Y- q                                        p_6<='1';8 Q# S4 r( |1 R
                                        p_20<='0';" r/ K, J* u8 g, [+ C$ W7 q
                                        ks1<=false;
0 @1 U; k% s$ _. a                                elsif ks1=false  then& I; |- P* l) J
                                        p_6<='0';                                                                        & G$ J  y: t( p; S
                                        if p_21='1' then
) B8 N* f; t. C+ `- x3 ~* J                                                p_20<='1';
) M. _8 E- d/ O- `( w+ B3 h2 K                                                key(3)<=x3;9 D4 w  j/ E' o5 D: E
                                                key(2)<=x2;
, {. t) v7 w4 R, g- G3 X                                                key(1)<=x1;, y' _4 a- t) J( S
                                                key(0)<=x0;% s8 G5 y- @6 J7 j6 r3 V# w+ _
                                        else
% E# q; l, O( }1 i# v! b                                                p_20<='0';# W4 o0 W, I! ?6 ?
                                        end if;/ x( R: Y+ K$ N* S8 y' I
                                end if;
8 h0 L# J4 A3 i' W. X9 r' S                        elsif kok then
4 E' b. P8 A8 Q% a3 i0 Z2 c0 O                                ks1<=true;                                / J: x: v, y/ D' v
                        end if;
" A. J2 S4 r( E& s        end if;( H% a; P2 K' @( X: E1 Z
end process ld_pls;2 O/ ]5 B5 [8 {: l# U# D. 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 編輯 2 t# |: g- ?9 A9 `6 a# r
' C5 M) y, P. k
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?
; P4 G0 D( G& }% b. E, l5 P/ I不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman ; y$ l8 ~3 I& v, f. ]& C8 ]
: X8 T3 o9 {" \
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
/ x2 o: v$ B# z) O, Y* _: W5 l, v" V( c- |5 I& N9 E# ?0 T
我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-6 11:10 AM , Processed in 0.111007 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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