Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
- {4 ^, e  {% E' b# l1 U3 g
) ~' D; a7 g) G) V) B: X% RLibrary ieee;
' k- k. |! N. K6 I: q, d& `Use ieee.std_logic_1164.all;; M8 J/ P; f5 ^) ?; b3 y9 Q0 M4 y
Use ieee.std_logic_unsigned.all;  d0 m3 o1 A% v+ o9 F$ K7 f

! a- {" W; i+ u# D. m) EEntity Keyboard_scanning_2 is1 m+ c; O! T8 \; i2 z; Z
Port(: P1 V1 B/ s+ q6 e
        clk,c1,c2,p_21 : in std_logic;3 P1 U) J! z# \( L. y
        kbi : in std_logic_vector(2 downto 0);4 j5 w1 j: V( [! u
        lt,p_20,p_6 : out std_logic;& C8 I6 B' D5 j& w$ G6 j. ~
        kscano,key : out std_logic_vector(3 downto 0));
1 H# g2 n" @8 K; xend Keyboard_scanning_2;: Q" A2 D5 E$ V7 @; t
% @. ~% G8 F9 W& z& {  X" X* ~- B4 F
Architecture K_S of Keyboard_scanning_2 is
- R" Q8 y3 H2 z) D. Osignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;
6 O! {0 R, j$ ~1 Dsignal D : std_logic_vector(1 downto 0);& q4 i: I& l! n. s
signal ks1,kok : boolean;
, m) X3 P5 ^& Y: w1 U6 kBegin' U# j8 A$ l2 o0 G
lt<=c1 nor c2;
* d9 s( K5 d4 [9 I2 Q  M: E7 W- x0 d3 Z
freqprocess(clk)                                    
# H4 |1 f5 k3 d; K% pvariable ff : std_logic_vector(16 downto 0);  
+ Y" l' L2 U- tBegin; \, c- L; Z. r# o& T) e8 h
        if (clk'event and clk='1') then8 ^: |, _) O5 k" _; g
                ff:=ff+1;
+ v# z, C8 X& c8 ^- l3 H        end if;
1 `3 G8 A* u+ @        l_p<=ff(12);                                     ! M0 q" y1 U+ M9 h/ \5 Y: |$ k
        d_b<=ff(13);                                    
% r/ z0 R6 R7 R- {2 s7 G        count<=ff(15);                                             9 N$ v; i8 Z2 _. [8 @
end process freqp;: s* o% Y2 u2 \" o& \$ `, p

" M0 j2 E2 z4 F) M; G) a7 q6 M0 w& Sdebrocess(d_b)
% Z0 ]! t- m! m& q3 N# Nvariable c : std_logic_vector(1 downto 0);
1 n( R  P0 \& E7 L: X( V7 H5 |3 V  rBegin
' z0 o* {4 j( h# H- l% w        if (d_b'event and d_b='1') then
1 w0 @8 H. Y+ K' p+ ?( O                if (kbi(2) or kbi(1)or kbi(0))='1' then
9 h1 o6 B7 k/ t3 v5 ]" `2 u6 u2 D) \                        if c="11" then
. c$ `4 U. S& g" v  Z' H9 Q                                ena<='1';
4 m1 H0 k. H5 ~. X                                x2<=kbi(1);
+ h, |" x0 x  U8 X, j4 G8 p1 l                                x3<=kbi(0);
  r7 g+ U; m" I4 d6 ?; }. a. W                                kok<=false;
& z- y; ]4 |3 K! L7 H3 P                        else
' O$ t7 q; e* S! R- {                                c:=c+1;
' ?) t  r' l' |                        end if;
  g+ k, n( ?5 W& n, Z! P                elsif (kbi(2) or kbi(1)or kbi(0))='0' then% @- ?$ m; i+ I" c
                        ena<='0';
* c$ q* Q* ?; _) S' v0 w                        kok<=true;
( v8 \' O* }1 A; g) W. [1 U& P9 D                        c:="00";                2 h/ T- R" ]3 z. G2 L% R9 L) B6 ?
                end if;        6 ~1 r* \( h" C8 ]( l$ q$ a
        end if;# r+ {3 e$ X# G8 k+ n
end process deb;2 T% ~! l' R. i8 O0 h

" I6 M7 b! r% C1 A% t: X) scounter_scanrocess(count)
! y' ^2 P0 `0 |& h2 K: C( V  l8 kBegin
. t- j6 W2 D6 a: O! C5 Y        if (count'event and count='1') then4 ?5 s% I2 H* O# b8 z( _+ Q
                if ena='1' then
4 u2 ]8 @0 p: L) k' ~: Q                        x1<=D(1);- F8 f- L& K5 N' q5 C6 T9 f
                        x0<=D(0);
* o+ Q/ ]: s- {- ~7 Y% z! A% F                else
) f. y. T& _7 o                        if D="11" then& Z1 o) h0 ^2 J7 x4 d, i. Z2 f. _
                                D<="00";
. R  U* n* y: R# C8 g% P                        else
; {  H: ^3 E1 }1 G                                D<=D+1;- f3 S7 ~4 L0 h  j2 K8 ]
                        end if;- j' D8 S# w/ f2 E& I1 H2 S: k8 y
                end if;
6 K% W) R' W$ L" p; I        end if;' l! S7 a5 }/ j4 H6 v; v
        case D is8 C% {* j8 \5 x! D2 F9 m
                when "00"=>
' E8 U8 V4 i9 N" A5 ~                        kscano<="0001";
/ A+ J2 J3 [. t8 [* |5 l8 h! U7 {. h                when "01"=>
# L* x/ E+ W: u. Z$ o7 y* x# J& B                        kscano<="0010";                 ! V4 K6 X7 K/ U" c0 y( m
                when "10"=>
/ m) G  t0 K) r  I& u; R1 C# B                        kscano<="0100";       
8 c0 T- `2 {6 c8 F& H) ~                when "11"=>8 _* a0 h* U  Z2 l' e) _) C
                        kscano<="1000";
3 _% |; S5 i, {7 W5 g& s7 Z4 b  u/ B                when others=>null;+ R7 k  R" W  v# h2 W7 A2 s
        end case;                        9 u' u7 R+ f1 G) @% L: J" I
end process counter_scan;
- O9 w- [: k$ j/ {8 [) m2 B6 L. _* G2 i+ M5 n, x" T9 z- s. g; k2 c  h
ld_plsrocess(l_p)
8 c, c9 I* h3 NBegin0 d3 N0 M* Y: q% O. V2 s7 m3 b
        if (l_p'event and l_p='1') then  a) A: \/ ?+ Y$ U5 Y( f
                        if ena='1' then5 R& i* w# u: m" v9 s7 D/ H+ i, J
                                if ks1 then
+ w& G' H& b1 }3 a1 o/ Y                                        p_6<='1';$ O7 G% k" J- z  T
                                        p_20<='0';
* }( m( u7 ^" ?! s# W* m                                        ks1<=false;6 [3 n( V7 }, U" e! P3 h
                                elsif ks1=false  then4 C3 R( T+ a5 J8 U! H  W) e
                                        p_6<='0';                                                                        + b: t" |- v3 |& [2 U* A& P( U% F. i
                                        if p_21='1' then5 r9 z& Y$ [: ~8 j$ M# a
                                                p_20<='1';; }8 I5 x7 k. p( f
                                                key(3)<=x3;4 A/ S7 ^2 U8 w, i8 u; r
                                                key(2)<=x2;- y: T  Y5 ~( n) e
                                                key(1)<=x1;
" s! l, W' {9 j& P! J) L                                                key(0)<=x0;$ e$ A, T% Z1 t) e# W6 e8 z
                                        else5 [% F  k  l# k5 @
                                                p_20<='0';* q6 G3 ?3 t' ^0 d4 i* I
                                        end if;9 U) @8 N' C0 f% ^4 U+ I% ^4 P" z( B
                                end if;' j! Q  P- ~4 p9 l' v' c
                        elsif kok then6 B4 C8 Q' M% z" z
                                ks1<=true;                               
6 b. B2 I1 @8 o: P" t                        end if;
7 U6 B8 ?, B- _0 |* a% n        end if;
3 H5 T3 `- V, \end process ld_pls;
9 F/ \& e8 o# ]. rend 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 編輯
. j# _: y/ w# `8 L& k$ H# A
) T4 T+ ]2 Y* C$ H5 y) ]先請問一下,您所謂的"看書說故事"的寫法是什麼意思?
3 O8 M7 y# n+ \. W, C( h不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman 7 r  |7 [3 M1 z  B) M- a
* s) b$ G$ h) r" @; M" }" t, E+ |
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
8 V6 X5 s! d# E/ J8 m; w9 _; I/ r% \1 ~7 T6 F" A/ w4 F0 i, |
我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-30 08:16 AM , Processed in 0.116515 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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