Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
( s. c4 s/ ]7 `) a
" b; q' b. T4 T$ ^) ?Library ieee;& h3 l& g- `7 y; i! R* C
Use ieee.std_logic_1164.all;
0 g5 G! v9 r' z% y# }' b6 H" YUse ieee.std_logic_unsigned.all;
+ X0 M, w. ~% I  F* [% p: c+ s+ C( ~
Entity Keyboard_scanning_2 is
+ r$ Y' ]( u" H. @) X4 fPort(
: U( ], i' X7 v0 e0 S  n3 z* J        clk,c1,c2,p_21 : in std_logic;
4 o5 Z& U* U1 G# p# A1 H& M        kbi : in std_logic_vector(2 downto 0);
2 P( T# ~  z$ J) p        lt,p_20,p_6 : out std_logic;; F$ Y* U% C- |( @# m
        kscano,key : out std_logic_vector(3 downto 0));
: a8 j# Z4 }' b9 Mend Keyboard_scanning_2;" Q( A9 a, [7 }3 w" ~. k9 Q! G
7 e& \' C+ f5 h0 ?# u5 o2 C7 U
Architecture K_S of Keyboard_scanning_2 is! k+ N; [- ]7 ?9 k7 L
signal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;
$ g  a! M% D! Zsignal D : std_logic_vector(1 downto 0);
6 e& n, k- t9 W# K- e3 nsignal ks1,kok : boolean;' R, k2 V* ~6 ~2 g0 F0 [
Begin
2 r& Q- Z% y* K( V. G. rlt<=c1 nor c2;
1 f% u$ U- X- k" r9 M( E3 ^( U
8 {5 N0 F! s, |* S7 R6 Rfreqprocess(clk)                                    8 N8 X' k" q9 w" q) K% q/ W
variable ff : std_logic_vector(16 downto 0);  
( w" I  b9 a( B8 j& P- J% QBegin
& x" G/ Z* ^; _, n* j        if (clk'event and clk='1') then% R' ?. j# C$ j& H
                ff:=ff+1;
* s" {) |4 o% {% w* G) n; S9 u        end if;
3 w2 M8 i& K  h& r9 E6 ]" x9 Q        l_p<=ff(12);                                    
0 ?3 B. P( |1 Z$ N        d_b<=ff(13);                                     3 i, c- u+ M8 C4 Q
        count<=ff(15);                                             ( n. M2 g. A0 N3 F! }- V+ n
end process freqp;
4 @0 H, Y) h' J9 c' |( l" P' I; _
7 A, [% h3 L0 Q- S0 T; Kdebrocess(d_b)
; t% d+ }' W; n4 kvariable c : std_logic_vector(1 downto 0);1 s6 I3 ]! W: T7 z/ Q; O3 M$ D* e
Begin
6 v1 W, c; ^; ]8 }( W        if (d_b'event and d_b='1') then
( J* }, H9 v' }0 _0 ?+ G                if (kbi(2) or kbi(1)or kbi(0))='1' then
2 m' V. A" d9 s0 K; u1 R% ]                        if c="11" then
0 k( T9 W6 f" c( Q. C) x2 Y                                ena<='1';
9 O0 ]" I9 n- G+ U' z                                x2<=kbi(1);
# R. f5 K- A% O% g  a4 h' N                                x3<=kbi(0);
( F* R. I1 D: O                                kok<=false;, d& U# p7 Y* k# `
                        else " {. R0 _% m$ |" Y7 S2 M
                                c:=c+1;+ v: P* f/ V" G
                        end if;
0 F' W6 b2 ^" M3 l9 D: s                elsif (kbi(2) or kbi(1)or kbi(0))='0' then
# x( u  ^9 F, J) ~; u% [" g                        ena<='0';- Y1 p% x& e+ L: b! G; t7 e
                        kok<=true;
9 x! w6 A+ a+ ^7 U" S) e                        c:="00";               
) \& b9 E1 K9 I2 f  q0 {+ J, k                end if;       
) L* H5 H+ q; x+ r# a/ d6 q& S$ R        end if;
/ E& X& i( F; v+ Q- ^end process deb;
$ m7 r# B0 c& }0 W9 ]! e" ]" u  E: o3 x$ S6 {' U, `% n
counter_scanrocess(count)
3 p1 e! m" R+ k. i5 J- kBegin
- O9 M# r: _* H" h, A& Q- `8 k# r        if (count'event and count='1') then! y6 Q* V7 z. j1 A/ {6 e
                if ena='1' then/ R- g+ p3 |; ?% [( {" ^
                        x1<=D(1);/ c% u: R: T8 |
                        x0<=D(0);
; g9 @. L. L0 T                else
( n2 n4 X* W0 a8 l- i3 |7 R) m* |                        if D="11" then
) u- u" q  m$ e) J$ s9 r! G                                D<="00";
7 N  o& b& i' d                        else
& p) X; k8 @0 I+ K& R                                D<=D+1;- g# |/ x, {: f
                        end if;. q8 ]8 B" ]2 \, x3 q8 y
                end if;
1 D8 d+ n. g2 s        end if;
7 t- t5 o8 n" N' w" h7 g. A        case D is, F$ [( j3 g: m) {4 \8 c( `! f
                when "00"=>
  k/ ^/ W" v' F                        kscano<="0001";2 J6 i1 R# |9 A% {0 {9 C
                when "01"=># I- x$ r( B& b2 [: d5 d
                        kscano<="0010";                 
, b& h( r- H9 g                when "10"=>
( p( D. t% j& Y  h3 e6 [4 b                        kscano<="0100";       
; G& L) w' d& `6 Y! R                when "11"=>
& q/ n7 a1 z0 R2 g& O% S                        kscano<="1000";
" S- F: a+ R7 L, D6 t                when others=>null;& k7 V1 S) a5 M# ?6 R& z6 N) B
        end case;                       
! u: I+ T$ e2 gend process counter_scan;& D. A, G( }' o( ?* e

6 E% H! v4 v3 R& kld_plsrocess(l_p)  X8 q2 V* y4 m6 N3 C+ ?$ S: d
Begin: p( v% ~5 `* a7 S( ~
        if (l_p'event and l_p='1') then- S& E% n- R5 w0 s- n8 @, M
                        if ena='1' then3 X4 ^# B4 V7 z
                                if ks1 then+ d: j: P. i# P# P6 v7 E
                                        p_6<='1';+ y$ S) |! r5 o( A3 d
                                        p_20<='0';( u3 I/ n* R2 s! z5 _  ?  |: G
                                        ks1<=false;
& ~  w, \8 d" C$ v* }; R$ n                                elsif ks1=false  then
1 [8 O5 ^1 R% x3 }                                        p_6<='0';                                                                       
  c& t. L7 u2 p8 j                                        if p_21='1' then! c5 Z6 p! z& Q( a( Z9 G5 O
                                                p_20<='1';5 \) ]6 C! I2 `/ }. e9 L
                                                key(3)<=x3;7 ~4 A0 a1 l. N+ R
                                                key(2)<=x2;
/ V1 r4 E" x6 V, }( |                                                key(1)<=x1;& S; q" u( S  o3 a. e. l) F$ i
                                                key(0)<=x0;
5 s6 q" U3 g, m! K+ G0 N                                        else
, X" J5 Q% F/ E- ?& K0 E                                                p_20<='0';; J# Z/ W$ z( ?' j( Z) }
                                        end if;, K5 J+ q1 j  n  j/ O* b4 ?
                                end if;
  s% x% G2 f! X# }                        elsif kok then5 U, X3 T6 t1 b: K1 w
                                ks1<=true;                                3 e7 t. }3 r; b8 ?; }" g
                        end if;
& X0 H- S3 p7 i5 H1 p        end if;  `) R* a: u+ S4 e6 _
end process ld_pls;2 b. P% F. j* i& }+ i. S
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 編輯 / N* ^, P. o+ Q! U: K

1 d7 Q5 S/ Q" n3 Z" e2 i, X* I先請問一下,您所謂的"看書說故事"的寫法是什麼意思?
" k; h. E, R. F  e% z5 P4 [" V不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman
4 G9 S# u0 G# `) b) R% F: f1 y" P( W( u. q
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯 " V! [& l5 W  }/ C, \  C% P

0 u/ H8 x: F- W% Y- o( E/ U我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-4 12:31 AM , Processed in 0.115007 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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