Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
/ O4 ~. k0 z# z
% x4 P) J1 j2 _! w: `+ zLibrary ieee;3 l; `9 y- a- ], P( C0 K8 f
Use ieee.std_logic_1164.all;* U" g0 r' j3 t1 T; R+ I
Use ieee.std_logic_unsigned.all;$ J" |  t3 B1 W5 E& i
+ K6 ^! _+ U" ]; k
Entity Keyboard_scanning_2 is
$ w1 ]# v! J( b7 \Port(
- x" T) G! c2 r" x$ H7 q" C        clk,c1,c2,p_21 : in std_logic;
. d& A0 {7 S7 X# D1 T* v5 c        kbi : in std_logic_vector(2 downto 0);
/ x$ v# e3 Y+ H0 D5 H: c/ C4 q        lt,p_20,p_6 : out std_logic;
$ f; ~% \, h, k& y- D- w8 g        kscano,key : out std_logic_vector(3 downto 0));. r  D% v7 b& Z2 P$ }# F
end Keyboard_scanning_2;
5 n* r% K6 T: D% e. R$ f- Q# z; C" C
3 w3 h1 d  R7 n9 g5 \9 i# {Architecture K_S of Keyboard_scanning_2 is
0 Z, i8 I9 ~1 p" S& W7 y; a+ vsignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;
! s1 [; {+ a8 r8 w& ]5 q2 tsignal D : std_logic_vector(1 downto 0);
* Y, J8 B$ X* O% x  Isignal ks1,kok : boolean;
- I' ]8 M3 t: S1 P+ v% PBegin0 M; {: c  r$ c1 B1 S
lt<=c1 nor c2;9 f1 U. s! |  A# k% L1 F! ?& O
5 V" A& T) Q; F4 P2 G
freqprocess(clk)                                    2 n$ y* M7 S' E  Q- Y
variable ff : std_logic_vector(16 downto 0);  3 K- w1 A- _& U' |
Begin
; V$ `# r) W2 M" R        if (clk'event and clk='1') then
. i, W" G1 y$ v( _' D                ff:=ff+1;
) Y' x4 z7 j3 l$ R        end if;: P" A1 z! M. `8 q- y$ |; f
        l_p<=ff(12);                                     ; [9 w+ V* [- Z4 p
        d_b<=ff(13);                                    
9 p+ R8 f6 b  ]        count<=ff(15);                                             ( ~- \# a8 B) e8 P0 d  X2 H7 T
end process freqp;. {$ R0 I# Y, I& r

1 n/ {# I2 B# W8 udebrocess(d_b)
$ `; t6 P- e) h4 d* @" nvariable c : std_logic_vector(1 downto 0);
2 S3 ^) U& C( H8 J: j$ @) eBegin
) i+ @& N% u/ O2 e+ q4 G# J        if (d_b'event and d_b='1') then0 a  X0 r# z2 X
                if (kbi(2) or kbi(1)or kbi(0))='1' then! C! A3 ^/ O, B
                        if c="11" then( r' B$ m5 _/ T( T3 ~3 F
                                ena<='1';4 |7 f: T" {4 I
                                x2<=kbi(1);
& z9 y  A5 A. \9 P6 Q- m6 i9 }, F                                x3<=kbi(0);/ O' [: |- B2 ~5 [
                                kok<=false;
1 ?/ f7 q# G- p  s                        else # M* Z7 t- M+ [" R! @2 `
                                c:=c+1;6 O" t+ Y1 Z4 Q" g
                        end if;: @0 `6 l6 s) p6 k! Y
                elsif (kbi(2) or kbi(1)or kbi(0))='0' then# [- J- m$ g3 v$ h* o" k
                        ena<='0';5 D1 B0 t/ {/ X' M
                        kok<=true;5 [' a7 Y3 w$ J  `6 N! }6 G5 T  q
                        c:="00";                1 a# G" O" K. A3 u& {0 v
                end if;       
  H& Q4 [7 A& }) Z6 X/ j; s        end if;
4 j- q. [. P% t" ~* q, aend process deb;, w9 b  S2 ~* x6 }
+ u8 V; C( s7 D" K, U2 w
counter_scanrocess(count)
  @$ j: ^) R6 e' {5 K1 `Begin. D+ B/ [* [4 _8 y8 W# p8 p
        if (count'event and count='1') then
2 |+ f+ Y; d5 g3 O0 @& T: x5 b( C1 X7 v- C                if ena='1' then6 r0 P. x& S+ ~1 n: r( Z# y
                        x1<=D(1);# f5 }( \: K( R8 W' i- c  d7 c% n% h
                        x0<=D(0);5 h8 s8 X# {) H" @' w
                else- _# |/ ^# i  v
                        if D="11" then
' D# ~$ B4 ?2 N2 X4 g# y2 k                                D<="00";% |' O0 M/ w; ^0 I2 F
                        else - {, O& ~% P. o  e4 d' B3 u2 k
                                D<=D+1;
' K) A& x; n4 T$ f1 Q                        end if;
  J) J$ E1 A+ o- o: i( d5 D4 x                end if;
  \' i1 A) _+ D9 K" [& d- I9 ~2 v1 m        end if;
$ U( Q5 U  [- l- m4 _        case D is1 e2 L0 s: h' I5 v
                when "00"=>
. y8 K* q% Z2 N1 B                        kscano<="0001";
. O! R+ N3 b; R* Z( s                when "01"=>
' y* H* Y/ g3 l$ q6 q* h                        kscano<="0010";                 9 B0 w8 P0 D' \( Q) c2 I5 s
                when "10"=>
; N5 C, @; }6 \# z& l                        kscano<="0100";       
* v' p1 A' Y7 j9 M                when "11"=>/ R  F* T) H2 S* j3 A
                        kscano<="1000";
& H# y" q# ^2 b, ]+ E                when others=>null;9 D! V5 U- N& a  [8 a
        end case;                       
# o. H1 a2 n% k: a1 Z  Z5 u+ ]. _end process counter_scan;$ k. a5 y0 r( l: K4 Z% ?

7 a" H; N1 r! |% H7 Q" P" u6 t# ?ld_plsrocess(l_p)
: ]0 J; M  Z5 v8 o  F+ M; Q+ kBegin. i5 i9 a0 p) U: [+ N) q: J
        if (l_p'event and l_p='1') then
' h% l% Y# f% f! ?2 k: [5 v6 \                        if ena='1' then
; u- k# G9 U' x* x' X0 q% \, x                                if ks1 then
0 }* m3 \4 Q) D2 o                                        p_6<='1';
6 T8 T, u8 u9 C7 i! M* R' o7 J$ p                                        p_20<='0';
- n8 K* C8 C5 _4 X                                        ks1<=false;
/ E/ V: k. i' k                                elsif ks1=false  then
9 q. s6 V, [* d" _                                        p_6<='0';                                                                          u% L: O+ R2 b; T/ c  |0 U* f
                                        if p_21='1' then2 E( j/ [, ~7 M$ }
                                                p_20<='1';; V( E/ V% O. b5 O' `2 J
                                                key(3)<=x3;) B, Q5 `* ]" U0 }6 }/ m% `4 M
                                                key(2)<=x2;
# w9 \$ ~0 ^$ s! Q2 U% V% X* k0 L                                                key(1)<=x1;
, X5 i+ v) n2 u9 D' T! [                                                key(0)<=x0;
( Q! a2 Y' A7 k/ R9 N2 P                                        else
8 b: A  C. b  R" _                                                p_20<='0';
$ h' y8 n8 z- S& e: c) K- `' m9 j                                        end if;
2 J6 _" w/ u* y/ Y                                end if;4 H6 z/ T4 N* C6 O3 ]8 S" u/ c5 P
                        elsif kok then# u7 f/ P3 I1 g4 `7 b8 q- k
                                ks1<=true;                                / f* j) @+ G0 L, N5 y
                        end if;3 A/ y+ l0 G0 Y( I; ?
        end if;( O6 W# D/ Q* D# n, n5 T7 r
end process ld_pls;
- e: ^  t; y0 Y5 x" A( @7 ?/ ]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 編輯
) i+ }9 P, O- _6 w# v9 L/ M3 _& L$ d# J2 p
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?' E% l' Q: `  Z; |  @$ f
不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman * x; I+ o7 [4 G9 W
  X2 N! B' e1 P6 o
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯 ; Y, F. Q0 L; ]# x2 w2 x
2 W4 q& O/ X' y
我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-8 06:05 AM , Processed in 0.115007 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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