Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
( N7 i8 }% B. M1 G  z5 f1 n" B: [/ l+ O3 y' H
Library ieee;
$ a1 j7 k" b. Z- \/ yUse ieee.std_logic_1164.all;* l% W% Z1 r, Y3 F! S! z
Use ieee.std_logic_unsigned.all;
8 G: x7 o( N8 c) O9 A- V' W  V* U+ Z) N* J! u  e: [3 U& w
Entity Keyboard_scanning_2 is
' b# |' A0 @1 X! p; GPort(0 R8 b6 p9 s7 D/ j, _: i
        clk,c1,c2,p_21 : in std_logic;
  ?% [0 k; A2 h$ ~4 g: Z  B+ G% @' H        kbi : in std_logic_vector(2 downto 0);* M: {: t+ k9 {. H. E. `. i
        lt,p_20,p_6 : out std_logic;
0 V" [8 F7 t2 _% ?' l        kscano,key : out std_logic_vector(3 downto 0));
  a/ m- I6 l& y) M8 ^end Keyboard_scanning_2;  k5 h; _+ l( A4 I

0 b* j2 @! O# L7 H. uArchitecture K_S of Keyboard_scanning_2 is- t( G' o# I! Y' \" W7 h
signal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;
) g" A: P) ~  A; c/ Fsignal D : std_logic_vector(1 downto 0);
0 k3 b# y7 ~- ?  y4 @  d1 nsignal ks1,kok : boolean;
5 u! b, D1 E2 o" j+ vBegin
7 [# M% P) K8 \/ T! G3 ~lt<=c1 nor c2;
4 b. j' U5 ~* L1 J
* ?! P6 y# k4 ^freqprocess(clk)                                    8 z) d. \3 p1 a5 ^" u8 H) b
variable ff : std_logic_vector(16 downto 0);  
: B3 F4 g# c3 B# z4 {7 SBegin' m" X% |6 P3 `# ?$ G! Y! j
        if (clk'event and clk='1') then# d. D( [, U% A: V+ y" p% F
                ff:=ff+1;
1 V9 r+ Z! M; ^        end if;3 v* i# p" [  x. e  I
        l_p<=ff(12);                                    
5 n& r& g6 \( b9 U" e        d_b<=ff(13);                                    
' L9 i  Q4 A" W2 Y5 T) l( F        count<=ff(15);                                             3 Y/ v' _* L7 w- P& Y1 E
end process freqp;- [0 g: t: a) I: ]7 a1 Y( \

% `5 M5 o8 b( g% ]debrocess(d_b)
: U8 Z! ?+ r$ D( b! l' `variable c : std_logic_vector(1 downto 0);
9 q! W: g- H+ RBegin
+ A' t8 B0 N/ s5 G& z- Q        if (d_b'event and d_b='1') then
2 l5 ~9 E2 o2 f. I) O" y; A9 |  f1 b                if (kbi(2) or kbi(1)or kbi(0))='1' then  S/ i. z! D, u* ^: l9 i' \9 v
                        if c="11" then
; M( R4 S( D8 Q( @) i# v- N0 T                                ena<='1';# @, @. {" I+ z( X/ M, p8 o% L
                                x2<=kbi(1);
  X9 @3 M( x9 A4 m& s  G                                x3<=kbi(0);
% S; W6 O3 t; o; x% a, L2 O' b                                kok<=false;/ C3 g$ k" X0 [+ g+ V
                        else 9 S" j# s: L/ r* H
                                c:=c+1;, H7 B) m) L% [7 O/ K/ r/ k
                        end if;
; f! }+ v4 Y2 i( e# H% d# r1 R, g9 q                elsif (kbi(2) or kbi(1)or kbi(0))='0' then& H, Z0 n2 l+ M3 j8 c- g( M
                        ena<='0';# ^+ H! _0 L$ o5 G
                        kok<=true;# V# c- q4 `$ R2 E5 I' R0 e$ s
                        c:="00";                0 P' o2 L, ^) R- M. z$ F
                end if;          h1 ], r, ~5 ^( Q
        end if;/ U; E- ~3 N. P! U( X0 k7 h
end process deb;
4 K7 m( }/ j' V: Z8 S3 [/ d; ~7 Q+ x& c( k
counter_scanrocess(count)
/ c$ F$ `) |; c7 ?" Q) v5 {Begin' {9 y! M; _) l  R) }, s
        if (count'event and count='1') then3 C7 i3 H5 w$ Y
                if ena='1' then
2 l4 b  n8 x& |" R3 r) f+ r0 k                        x1<=D(1);
; S% A9 J6 s) {                        x0<=D(0);
6 A: K* b- z6 T/ T" p                else* @- w, O- B9 Z( m
                        if D="11" then
# h3 b; B+ ~$ P1 N7 d2 r, m                                D<="00";
( U- P& R$ A- X3 U& p                        else
, ], h. z! _2 O/ ?1 S/ l* Y% N                                D<=D+1;
' L" J. Z6 v/ I7 ]9 e8 ^0 ]                        end if;) p: E; m  V# M! T
                end if;
" e& s+ }/ T8 f0 z/ M* _        end if;
( A8 Z4 |5 K3 _9 I+ ~8 Q        case D is
4 V$ c% D& P8 r/ }+ M                when "00"=>
' U6 |) k/ ~& |% B                        kscano<="0001";
6 r+ h) x; X9 r+ ?                when "01"=>1 j* K. O& t. c8 T/ p2 \" l
                        kscano<="0010";                 1 Y" r+ Z. V) s+ m
                when "10"=>
$ L8 d% L+ k# M6 K1 y/ A                        kscano<="0100";        8 V) H+ {6 q. D; y1 b; O
                when "11"=>
0 l3 E& P: s" M                        kscano<="1000";
8 {; x4 ]  Q* [: d! {- M                when others=>null;! ]$ p8 P* n9 q8 m' z
        end case;                       
9 |  O0 x1 v) y- ^; J. N+ u5 gend process counter_scan;
& m' }& j2 h( d; c4 O6 R$ f# h# i: k9 P7 W
ld_plsrocess(l_p)+ ^' k. `1 [7 y, M/ \* x
Begin, f# F  F" G7 n
        if (l_p'event and l_p='1') then" p% ~8 N/ e/ F' ^2 k0 f3 e# d! o
                        if ena='1' then' ^0 t" }- C0 ]5 i- M, N/ k# S* t
                                if ks1 then
  x( Q  T# d) ^4 Z( O7 v                                        p_6<='1';
& W7 T* U, \3 s" n9 j, R7 q( y  C                                        p_20<='0';6 E( I& Y) I. |% P: L/ }9 ^
                                        ks1<=false;! U' t' C' T2 S7 b5 I! \9 g  F
                                elsif ks1=false  then2 q5 S$ o, X: g
                                        p_6<='0';                                                                        ) A  T( g* I% d3 o% C  \
                                        if p_21='1' then% ]+ S, x! e& R6 N
                                                p_20<='1';
7 C9 S) s+ }. c( o                                                key(3)<=x3;4 C) Q5 R+ {/ P6 o+ ]' J: e- q
                                                key(2)<=x2;5 E; A) O- B& x. b, M
                                                key(1)<=x1;
5 |7 M8 q& B/ y. i( f, F                                                key(0)<=x0;* Z  {7 S0 `3 _; A6 u$ Z) B2 `
                                        else% G6 c, l& E4 n% o9 g
                                                p_20<='0';
* o/ G* P9 q( @+ ~& r! t4 S                                        end if;
! X9 j, j0 D. L                                end if;
* b/ [# z0 _: |/ k5 h7 q                        elsif kok then
9 h* r6 ?0 p1 d0 T$ r( k) C                                ks1<=true;                                , \- q' N2 ~6 P+ ^7 I- @
                        end if;
. }$ e8 Q+ G, `7 }        end if;
, {2 |$ d+ F0 W4 [end process ld_pls;
6 i" P; [6 Q7 O& [# A( ^" y6 M3 S/ ]) yend 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 編輯 " p0 ?4 A5 F1 x5 q' P
) `/ @$ Y% L" a
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?2 Q# u% v! _8 D& V
不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman
/ C3 u$ Z3 z' D$ l$ c
( l/ _2 x$ A- @/ m" _就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
3 u+ W% E# B' U
3 j3 P" ?* f# B) O& n: }: q! n7 t我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-6-2 04:21 PM , Processed in 0.122016 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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