Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-10-21 20:30:05 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
各位先進們,老師最近派了一個鍵盤掃描題目給我們寫,硬體架構和老師發的一些資料都在附件中,我有寫出來兩個程式,一個是用Mealy狀態機防彈跳和看書說故事的寫法,不過我很討厭Mealy狀態機和看書說故事,所以我又寫了第二個寫法,用旗標交握以及計數器防彈跳,因為班上沒人寫出來,所以才在這裡發帖,主要想看先進們的邏輯寫法,以下是我的程式,寫的邏輯很爛可以噹我沒關係,呵呵...因為小弟弟剛升會員,所以只有1RDB,希望先進們見諒.
# N' A) c3 F' D* \: A$ [- X6 @! I  z
Library ieee;4 m' ^. ]; A* _& B
Use ieee.std_logic_1164.all;
" a% m$ j# y; C, y$ k7 b( z! oUse ieee.std_logic_unsigned.all;! z% R5 G6 _0 ~

+ V# C  s. R& s, s# Q9 aEntity Keyboard_scanning_2 is
/ L, N1 ?$ l4 n1 {* fPort(
) t6 `  `9 P9 S5 E8 ^  M        clk,c1,c2,p_21 : in std_logic;5 B* K; j5 g3 ^
        kbi : in std_logic_vector(2 downto 0);( m' D' J, Y, V$ ]9 B0 e
        lt,p_20,p_6 : out std_logic;6 S# o8 z% N  q$ ]: [5 l1 }
        kscano,key : out std_logic_vector(3 downto 0));
) W$ l3 f. V1 Z  `end Keyboard_scanning_2;5 u  |1 Y) n$ z  }. t! ~8 v

: {8 p  C5 Z2 eArchitecture K_S of Keyboard_scanning_2 is
" D, z8 Z: M9 |# x' Psignal x0,x1,x2,x3,ena,l_p,d_b,count : std_logic;; Y9 P8 O2 w( Q0 H1 w) F9 `8 B
signal D : std_logic_vector(1 downto 0);6 \: C+ ~! d! I/ O& G
signal ks1,kok : boolean;5 ]$ `: x" H7 d) D
Begin  S: @( X1 N* _- b, ?9 v4 X6 }5 P
lt<=c1 nor c2;. R. j" \! F$ S  [

0 u7 T6 n8 k$ f1 R% H; l. [freqprocess(clk)                                    
; Z$ F" [( N# c9 ?" avariable ff : std_logic_vector(16 downto 0);  $ D5 s1 q1 v# I" G
Begin
: I' m5 c4 J# v        if (clk'event and clk='1') then
7 I( j9 T1 y$ I3 I' M1 w) L$ c* Y                ff:=ff+1;
$ j; X" R0 k5 P( u# L        end if;, x2 k" l0 F1 Y) r* c; F
        l_p<=ff(12);                                     / \" l. ~8 c+ L1 A( ], d8 G; I
        d_b<=ff(13);                                     / |5 d# u1 B4 F7 ]0 r1 h0 u
        count<=ff(15);                                             9 H5 X/ D+ \( r7 w
end process freqp;/ K) U/ ]: z0 \/ H! }3 B& L2 k

  `9 ~2 K3 P& p. kdebrocess(d_b)
1 Z- u+ A6 @, Yvariable c : std_logic_vector(1 downto 0);" ?, {1 x* `# S& u
Begin
! N0 c( h5 w' c4 Y        if (d_b'event and d_b='1') then+ X( ?/ Z2 Q$ q% w9 i6 Y% c
                if (kbi(2) or kbi(1)or kbi(0))='1' then1 C* o2 M6 b9 c  G+ ?8 ?
                        if c="11" then5 g, X0 p; B, e1 ]
                                ena<='1';/ }9 M/ a/ X) L6 H! G% B
                                x2<=kbi(1);# k. _$ u4 e/ X* k- t6 c
                                x3<=kbi(0);
6 i8 \1 p% f0 h: q  R; S" D                                kok<=false;/ |9 a0 z% p: {' D
                        else ; a. v7 b  n6 U" E) x
                                c:=c+1;$ e& o3 v2 D2 Y1 a
                        end if;
. Z- A2 [8 f+ N4 ]                elsif (kbi(2) or kbi(1)or kbi(0))='0' then2 A2 F% q& k( f% P  C
                        ena<='0';
9 f5 @0 `  b0 D6 K2 |1 n% p; M                        kok<=true;* {; D. C  E4 E% Z0 W/ d* Z
                        c:="00";               
, e! @6 R9 R6 z1 {; r                end if;       
! O: q8 O- c6 i1 s" G3 D        end if;
* s2 T% t) S& T- A- z3 L! s: @9 jend process deb;: ]- X  U" B$ v# u0 ]$ P7 p
8 c& ]% v. V$ ~4 Z3 E/ r% T, v) d
counter_scanrocess(count)
' `8 ?) w0 M3 E* gBegin
5 y; r  a6 p- @8 x! x        if (count'event and count='1') then6 H4 c# [+ ?2 r' Q* }# R
                if ena='1' then
* o8 \( g" }9 V1 |                        x1<=D(1);
- ]% x  [& f3 b7 q                        x0<=D(0);: n+ x. b+ C1 O1 ?; o
                else
, N8 S8 t3 H0 o, ?6 i                        if D="11" then+ L; a: _( D  y/ K$ l: m
                                D<="00";
8 m5 Q5 C0 l2 R9 ]( I! A* x                        else
6 p' H4 ]8 Q# r! ~( B8 w, A                                D<=D+1;
) l" F& T& J% q, h. b3 e3 X+ g                        end if;, P$ J) ?+ \. b# y' H& h
                end if;2 j/ @7 \7 m  k1 E; b) s
        end if;) }+ W. e1 B- i- J! ?/ e
        case D is: k' n' w$ A+ |
                when "00"=>
1 B# U8 n8 J. j3 u2 e, W% o                        kscano<="0001";
  K$ C5 e0 f4 D/ @) j- |                when "01"=>
) O4 U  ~! B5 ~" B& ~                        kscano<="0010";                 # ]6 F' e" e- V
                when "10"=>
6 ^8 w2 d* U8 |7 U* ?                        kscano<="0100";        2 B1 H- Y) e5 z  ]+ K& @* {
                when "11"=>
& h2 ]) Q6 b2 u- O                        kscano<="1000";0 D+ C2 \' i$ W7 \
                when others=>null;  M2 _1 x0 m0 k
        end case;                       
6 i( b6 N9 d  Q3 n7 }9 send process counter_scan;
% T, a1 G5 k' ?2 X& R1 \% B$ @# ^8 N; Y# c
ld_plsrocess(l_p)
, h/ v. ~7 l- i0 G3 G- \* Z9 yBegin
9 S* S/ e: u4 {9 {: }6 `        if (l_p'event and l_p='1') then0 S8 T1 o4 K7 \& H
                        if ena='1' then
1 ?2 ]9 m& M- k, j* V8 b- b+ y" n                                if ks1 then
9 N  r% O; U( r  b- E% {                                        p_6<='1';& u7 ^7 }& w$ D2 s. _7 n
                                        p_20<='0';
' E' B( K: i4 g; i; D7 E% p                                        ks1<=false;0 N& ^/ g: {$ N- E5 w
                                elsif ks1=false  then
3 S, x) D% X. ^% F                                        p_6<='0';                                                                        ) W: a( X6 F! O4 s0 E9 p
                                        if p_21='1' then# G8 M' {& Q, @8 B
                                                p_20<='1';
8 Q; h- M+ `) ?. a3 v                                                key(3)<=x3;
6 \6 O% d8 A, o4 c/ a                                                key(2)<=x2;
9 D7 G4 U* ~% K$ R                                                key(1)<=x1;
; K# e0 p9 H3 J                                                key(0)<=x0;
; a: M8 M) j1 }" M0 X1 A                                        else
! B2 w* Z( c% M1 O" B                                                p_20<='0';# s$ g7 j$ j) m/ t# q
                                        end if;# p" H  O$ Y4 w; E
                                end if;" U) s7 e4 Q7 a' H, ^
                        elsif kok then
) |, a- Z3 r8 h) W! q( n                                ks1<=true;                               
/ p" V: W# v6 }2 d8 ]                        end if;) S3 P: M+ g* j
        end if;+ t: Z: S/ o* S7 O. {
end process ld_pls;
/ A) b1 T' N$ x2 m4 i3 pend K_S;

評分

參與人數 1Chipcoin +3 收起 理由
mister_liu + 3 8RDB了!看來學生們都沒問題,還是老師問題出 ...

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
7#
發表於 2011-11-22 21:30:19 | 只看該作者
灌水~~~~ 哈哈 沒rmb了

評分

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

查看全部評分

6#
 樓主| 發表於 2011-10-31 18:49:22 | 只看該作者
本帖最後由 ultraman 於 2011-10-31 06:51 PM 編輯 % C8 d* x7 s& z

6 `$ h7 L  P: v. ^6 N我在附件一次.看的到嗎??

本帖子中包含更多資源

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

x
5#
發表於 2011-10-31 14:52:57 | 只看該作者
附件????  abcdefghijklmnopq...
4#
 樓主| 發表於 2011-10-25 21:45:12 | 只看該作者
回復 1# ultraman " y* R% R  |" v
' J7 a7 B+ M8 r% I
就是照著既有的流程圖去寫程式,^^謝謝你的回覆呦!!
3#
發表於 2011-10-25 14:55:08 | 只看該作者
本帖最後由 winslow 於 2011-10-25 02:56 PM 編輯 / c% ~, x% S* c  A
5 ~+ P% W2 A1 m6 [2 h5 A
先請問一下,您所謂的"看書說故事"的寫法是什麼意思?: ]9 Y$ `& A3 Y3 ?% S  R( i& W& u! \
不好意思,個人才疏學淺...
2#
 樓主| 發表於 2011-10-22 11:06:13 | 只看該作者
如果有Verilog的寫法也可以喔^^,最近也正在學ing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-12 05:28 AM , Processed in 0.171601 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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