Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.% p+ B2 @3 x) f( j2 ^% y( O
5 L! N1 w$ @$ `; \. i) b
Library ieee;3 P2 D3 E% ]# }4 ?
Use ieee.std_logic_1164.all;
: C8 D4 U6 L8 R6 jUse ieee.std_logic_unsigned.all;( j( `8 r" C% l  S9 j* q1 m
0 `7 b$ S- X' _6 _7 r+ C
Entity Keyboard_scanning_2 is
% N& i' V6 _& U" \1 p7 y2 @5 oPort(
0 X. a- g+ P4 G0 j6 W3 z+ c        clk,c1,c2,p_21 : in std_logic;5 j( o. w: Z3 O* ?0 C( Q, Z  u9 }
        kbi : in std_logic_vector(2 downto 0);
+ [  L: ]4 X) }- v. ^" x2 Q# O- C        lt,p_20,p_6 : out std_logic;
3 U; o- S5 Q3 J9 j9 L1 j        kscano,key : out std_logic_vector(3 downto 0));6 D! x1 d. ]# [& D0 T( l" P
end Keyboard_scanning_2;
3 l' C& p+ q* U" ^0 e; |
0 u; I! @# ~. }9 m+ K/ Y1 A: AArchitecture K_S of Keyboard_scanning_2 is
2 l% Y+ ?0 B; K! o4 x0 Zsignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;$ j; O2 O3 u. r# I" p, n2 E
signal D : std_logic_vector(1 downto 0);6 Q  n* A2 T4 P9 K8 H, z  s
signal ks1,kok : boolean;& A; s0 U, _; @! F8 D
Begin
, c7 J* b0 ?# n& q- Elt<=c1 nor c2;5 H5 {% U2 ^7 z5 N# I

( j* F+ s3 Q! w% s( K  J) b$ Rfreqprocess(clk)                                    
/ H0 Q: c5 @6 I% F+ h- _variable ff : std_logic_vector(16 downto 0);  
+ Y+ C# `9 K% E/ K0 iBegin
8 P! z6 c- F( ~8 ~7 Y' [4 l        if (clk'event and clk='1') then
0 F0 H9 w6 }, s                ff:=ff+1;
% f9 ]1 S( Y# H  K6 {, i2 U( A        end if;
5 a/ O- H# }, o# e& K6 I        l_p<=ff(12);                                    
* @( i+ D# w( s( t) s: s( d        d_b<=ff(13);                                    
& H& n$ r9 x4 P: H        count<=ff(15);                                             6 M6 n' V- Q+ i3 e' F% f1 d4 z
end process freqp;9 d) v/ [* V% s) x
# ]: U2 ~; i# }# ~0 b8 X0 C
debrocess(d_b)
7 m# d6 O1 J0 A; n* ]4 \7 _- Mvariable c : std_logic_vector(1 downto 0);
" y( f3 v( S3 f  n/ R6 H( uBegin# w- a' S' [7 h5 b; f. b; h
        if (d_b'event and d_b='1') then+ U& G, [' o1 J! x+ |) Z3 h
                if (kbi(2) or kbi(1)or kbi(0))='1' then
; t7 B2 o: ]% e( D0 ]( b5 n                        if c="11" then
+ ]  }5 `& p' I! T! Q                                ena<='1';
$ a! K& d! G9 N2 C7 p: l/ l4 ?% B! [                                x2<=kbi(1);0 S  \) ^' B1 Z' B+ y! H! a. I
                                x3<=kbi(0);
2 e3 ^4 X+ u7 |5 d; G) n' S3 n                                kok<=false;2 b0 \- {/ _* o
                        else & a" V' d* q! `$ ]& k9 |
                                c:=c+1;
- u9 i$ ]6 O2 A, }9 F& P& l6 x                        end if;# I) `% a' q* U0 f/ s# u) F: h
                elsif (kbi(2) or kbi(1)or kbi(0))='0' then
3 N9 L; f8 w. {; N4 B7 V+ z                        ena<='0';
6 g' [7 u, Z5 n+ g, ^7 P                        kok<=true;3 S  E9 W! Q; F0 [. B8 H/ I
                        c:="00";                8 A6 o+ T" @2 [8 V/ e. |7 H
                end if;        0 C. E9 I$ v7 L
        end if;
8 ]% v+ Z# `" b" i, {. N7 fend process deb;/ ?- O7 Z4 h# W" P
1 z( s3 N7 |& P7 t2 z! a4 J
counter_scanrocess(count)
, F# r6 _$ e/ u! @Begin- g1 Z' ^) K' M3 ~
        if (count'event and count='1') then
2 @& B; m) j* K4 E* l                if ena='1' then
/ u' `  g& z1 O% a8 b; Y                        x1<=D(1);
$ f8 l% @3 J, L: Z9 l5 ~9 L                        x0<=D(0);3 y3 @4 X3 Q: c  G: |1 H& O! g
                else) \1 O; _  h5 S/ ~7 x5 Z/ {
                        if D="11" then
8 N1 _( a" E7 y& {! c                                D<="00";* A" U, O' V/ ?& Z3 k
                        else 2 A# d; ?# P) I2 z+ ^. p6 N
                                D<=D+1;- D5 Q/ X  m' S. {, m4 f( @
                        end if;( K$ q4 l# A+ d! |* d8 X8 w3 j
                end if;
% N9 B0 c4 z% S2 X        end if;
- I  A, S( ^' ^0 [        case D is- F( |) `. u* O8 }/ j7 u  T) K+ P
                when "00"=>
# s8 f5 s. L& ?' @5 r                        kscano<="0001";7 H: \+ ?8 A. P3 E. m4 `
                when "01"=>
0 P  G5 p# k* J9 U" Q3 M; ]6 T% n                        kscano<="0010";                 
9 L+ l* D3 B; s9 `! Q1 c                when "10"=>& s) @1 X0 F* m+ P/ h, S
                        kscano<="0100";        9 N# c! c1 H- C# }0 S
                when "11"=>
, i1 B8 |# G- j5 O* }6 W                        kscano<="1000";
, l/ C( I# i0 T2 G9 ?8 `                when others=>null;
9 m4 g) b$ Z6 X: d; H) u; N        end case;                        * l7 S% ^/ p: V  u
end process counter_scan;4 `0 I. w8 P/ k, F$ [) r

9 i1 G1 d; R4 O/ i" Eld_plsrocess(l_p)( q6 `% I% n* `6 w; l0 |- @  w
Begin
* k) A2 C) _) ~, c. f( E        if (l_p'event and l_p='1') then$ F6 Y" c+ M5 h2 o
                        if ena='1' then$ _$ X0 @/ ~8 c
                                if ks1 then. J8 q7 K( k: E9 T
                                        p_6<='1';3 R: z$ a- W8 y# S" f" U
                                        p_20<='0';
/ H* B: {* E; ~. i                                        ks1<=false;
. P" P' l+ B% o; s  X7 K+ ~                                elsif ks1=false  then
- d1 a- q! P8 ~! K4 `                                        p_6<='0';                                                                       
/ X2 ^; \9 b9 A                                        if p_21='1' then1 G; ~3 R. `+ T' q
                                                p_20<='1';
3 `1 T; j/ X$ c! R  @8 v, J                                                key(3)<=x3;* W/ S) r( Q! p5 B( {
                                                key(2)<=x2;- w: a0 X) T. z( l
                                                key(1)<=x1;6 l8 n% c# l$ ^. W1 |5 A9 j
                                                key(0)<=x0;
" g8 v5 c- F8 D2 i! Y+ E                                        else
) W# X# _; d8 W                                                p_20<='0';7 Q( C7 o9 C& y- C/ Y9 H' Y
                                        end if;1 J( V2 S. h  A2 n4 U4 c# b
                                end if;
; a' H, N1 g* k                        elsif kok then
8 x7 Y. E7 x' u) a                                ks1<=true;                               
- p8 L* y  T' I                        end if;0 `: Q. C  ]% n" V" q5 Y7 |4 m
        end if;
  ~1 z. o* F  a1 S' `" a- e- p* rend process ld_pls;
( L( F4 ^! ~3 Z0 @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 編輯 . Q7 E! Y' O& J+ S/ }4 o
: e6 t- m# W* t! N) z: h
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?
* Y+ Q- {1 v% [5 C+ _, B不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman * g8 ~* F' e, }# F. S5 {
( z! a9 `' f6 F& [+ |) X; O7 h6 ~( t
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯 ; f& p. ?( f$ k' M

, P4 _3 k1 @( L, Z. E我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-6 10:49 PM , Processed in 0.107006 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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