Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
+ Y, v: G' I: q) y: g- O: [+ N
Library ieee;
+ \" Q' o! f4 N( k& D" h/ hUse ieee.std_logic_1164.all;
$ D! i& r5 D$ }! {3 j7 n5 tUse ieee.std_logic_unsigned.all;
6 G( a; D2 |& Q2 b9 v
6 {5 g3 X0 L3 h6 D( `: _, D  [Entity Keyboard_scanning_2 is
7 H& W$ Y$ S% p" D+ L; BPort(( L/ l1 }9 f' f+ x  l
        clk,c1,c2,p_21 : in std_logic;
$ u! M* Y( d9 s5 M: n% m        kbi : in std_logic_vector(2 downto 0);
1 U& n2 G3 A; `( q0 Y& d4 u/ D( V        lt,p_20,p_6 : out std_logic;! y* T. g+ i3 I  x$ `" H
        kscano,key : out std_logic_vector(3 downto 0));% g( ]/ Z7 @' W3 F/ Y$ K
end Keyboard_scanning_2;7 ?8 c% K& _' `; J: @" Y( Y2 l# K
7 @$ T! W, S7 I
Architecture K_S of Keyboard_scanning_2 is
+ i' A& L+ U3 [& ?& \" Xsignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;
  B- H1 s; F0 Usignal D : std_logic_vector(1 downto 0);
/ Q7 J' Z. N  w0 ~$ @signal ks1,kok : boolean;
2 T2 X5 X2 b# G2 j* z7 f: SBegin
) `, Y) ]) H8 d  @$ u" @  t5 wlt<=c1 nor c2;; @1 e" Z) N2 d$ Z9 V+ f
! E$ k. C3 @5 j9 B; g& s0 I
freqprocess(clk)                                    6 h: N& G: K2 o7 {! G
variable ff : std_logic_vector(16 downto 0);  
: e9 T% h9 y# gBegin
6 \5 F8 x9 [/ y' s* Z6 ?        if (clk'event and clk='1') then3 i3 I% Z+ T$ `3 v6 z; n
                ff:=ff+1;- q& B- s9 s/ d$ t6 M3 t: z
        end if;
- ?5 `6 g, L7 ]: ~  k        l_p<=ff(12);                                     1 p+ ?4 o$ U8 k7 b1 G3 k
        d_b<=ff(13);                                     3 N' c! j  s/ G) x& s& D
        count<=ff(15);                                             ! m1 M  c! F' t" R7 r
end process freqp;6 _& t6 N8 u- b1 i/ ^

! g0 G% }+ r8 D4 odebrocess(d_b)
% @7 X4 C. j, q! F- }7 A. Tvariable c : std_logic_vector(1 downto 0);
' d* S  l( K4 j. Z0 PBegin
: M; A; a5 _. K) b- c        if (d_b'event and d_b='1') then0 y; t/ A& U( z0 H
                if (kbi(2) or kbi(1)or kbi(0))='1' then( [1 @' Y- f& S
                        if c="11" then$ X. f5 S, j( O
                                ena<='1';
3 w! t7 p2 U6 f1 e                                x2<=kbi(1);) ~/ T; O* |' {& d
                                x3<=kbi(0);8 S6 F3 e; h3 Z; k+ g0 n/ Q: p
                                kok<=false;
# S+ f# F4 Z4 ]5 b+ v$ w' \                        else
$ |& q1 ~; ^  G* H7 X                                c:=c+1;
( G' N" I% T) a, K+ u                        end if;
& I0 P5 x7 b$ r4 I                elsif (kbi(2) or kbi(1)or kbi(0))='0' then. f& H! V4 W( h# H+ Y" K" E
                        ena<='0';
/ C$ t$ {' a% ^9 ?  e4 w                        kok<=true;2 Q. U, y+ k/ r+ h3 K
                        c:="00";               
( Q; R9 X, ~; W                end if;       
" R0 P. g9 A4 p        end if;9 ^3 o$ Z9 B+ C
end process deb;
1 o1 `7 n7 r8 e' @2 ~- E" {, s! ^- L5 E1 A4 G) r: `
counter_scanrocess(count)
* {+ `6 _" Z2 F7 y! i' yBegin+ O: ]* Q% e. f6 r, h
        if (count'event and count='1') then7 K" u% n6 A- q8 S* T9 R+ x
                if ena='1' then
& n5 O3 [$ E% `. U; L# F& ?                        x1<=D(1);* S5 g( u, \7 g2 ~$ j# T
                        x0<=D(0);
* [' `, r+ l- g  d; s; S  c" H                else
7 ?) q) P- C% Z- v7 _                        if D="11" then
7 q+ M4 j; {# {0 f3 R8 `0 O                                D<="00";
6 ^" ?' P$ s; h# P( O0 n                        else % i! y/ |4 Z1 S* u9 {' r/ O9 r
                                D<=D+1;
! k+ F# x; j# ^                        end if;4 R) c9 q3 `2 K
                end if;
! ^0 s8 ?, R  D9 C        end if;1 \* d+ z6 l$ K* ~( H# G
        case D is3 ^" x* d" ^( w4 \
                when "00"=>
! a0 D$ @( P' s- V                        kscano<="0001";
, b$ y1 A/ Y1 ~" l% R, a) M7 t8 N                when "01"=>2 L2 ^( n' ~# c* S, D
                        kscano<="0010";                 
# W; s: f, ^4 z# w2 i; t                when "10"=>
. U! R& \# l7 d8 o" t8 X                        kscano<="0100";       
+ H" U9 @, n+ Y6 W, ]/ r                when "11"=>
; F  b4 p* C" d6 t                        kscano<="1000";, h  V. n* K3 j: g1 c/ R: a
                when others=>null;
# s- O. d: [8 I        end case;                       
) q0 }2 }% @- R  t$ t8 s  A* Wend process counter_scan;' c' o( s% R7 F; T
7 U% K$ L; w: g+ @
ld_plsrocess(l_p)- W3 [5 g& L5 k% M% t- y9 K: N1 y
Begin
: w' e  c) D- D6 p: |( p6 T( x- x$ a        if (l_p'event and l_p='1') then
, B3 ^2 t' E9 ?3 H                        if ena='1' then
7 d- w& X1 n0 z; T! b1 [2 b. X% u, W                                if ks1 then
- |# L) h, H5 ]: ?% E+ Q                                        p_6<='1';! f, A+ u5 @* g9 G% S/ R1 F
                                        p_20<='0';7 D/ M/ ?+ `& w6 {
                                        ks1<=false;1 p8 J0 U0 K6 @' z4 c& |
                                elsif ks1=false  then  w, G0 \$ l$ A, U
                                        p_6<='0';                                                                       
& C, w; v. {% d& c                                        if p_21='1' then; a' A3 T0 t( R" P1 h# O0 B( |
                                                p_20<='1';* n4 l1 O* P# }0 N9 F- `" U
                                                key(3)<=x3;
1 L1 @9 k, l- `# n( X! k" A                                                key(2)<=x2;% t* |5 W" w7 f
                                                key(1)<=x1;3 C- @! q1 V& V. v% s! q/ x
                                                key(0)<=x0;  j1 p9 h+ e- b" c2 |
                                        else
. Y" V  s/ \, k; M8 G: L& y                                                p_20<='0';
9 l/ ^) K7 M  C1 b3 ^/ ?. k/ q                                        end if;4 Z1 @2 X& t6 H: H3 b" }& F
                                end if;  V& ?) A8 L, M' `/ Z: N; T
                        elsif kok then+ N4 s5 C. x3 w  j7 D1 o0 O: x
                                ks1<=true;                               
& [% ~: q" {7 `! g                        end if;
; i4 e: _# P. H' G2 E1 m        end if;
1 g" c; m& @8 _) J# Z6 wend process ld_pls;4 t6 S( {4 e. C! |
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 編輯
. w3 S0 ?! p7 e/ @5 E+ ~7 ~
. w8 a; m. a3 `' s# p( L先請問一下,您所謂的"看書說故事"的寫法是什麼意思?
; p, r% X6 X" i, o' A不好意思,個人才疏學淺...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman
0 u" E2 c. @7 o! ~4 g. H) u1 N
3 s/ ~; Q# e/ t; l5 q就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯
' b% F+ o/ x  @$ ]! @0 G0 d
. r( C! k; V( s8 v2 E4 u8 g我在附件一次.看的到嗎??

本帖子中包含更多資源

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

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

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-9-27 10:42 PM , Processed in 0.184011 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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