找回密码
 注册
关于网站域名变更的通知
查看: 1476|回复: 2
打印 上一主题 下一主题

求高手帮我看下这个键盘编码模块到底哪有问题?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-4-9 17:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
为什么我的max plus ||一编译就出现一个错误?代码如下:
( k$ h$ ?  J2 P0 R0 f3 h$ m9 K/ RLIBRARY IEEE;
" u. V& P- x9 B' L. z5 b% oUSE IEEE.STD_LOGIC_1164.ALL;
) e1 w/ e+ \% s" U# ?8 wUSE IEEE.STD_LOGIC_ARITH.ALL;: \! s5 c1 Y5 ^: p* S: @8 Z- X
USE IEEE.STD_LOGIC_UNSIGNED.ALL;+ B3 s$ F! i0 L. g0 I! }3 d% O
ENTITY KEYDECODER IS4 N7 ^, Y4 i& ~# X9 L
    PORT (
  x7 @$ Z7 P( Q+ T. S       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入
$ u( L- j& r* ]' l, x2 `    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
+ Z3 V; C$ V/ u6 v7 h1 T1 T6 H# e          CLK: IN STD_LOGIC;                --全局时钟# r% @) b; ~! t: y/ ~% s
          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟
: M4 p4 H  ~! A% o4 [" t& |+ n& z    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值
3 U5 ]) a! Y5 @( e' l   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志& S- d, c+ m+ I: B6 ~
END KEYDECODER;
6 C  V8 [; j9 S# H5 i0 t( F3 N0 G0 wARCHITECTURE BEHAVIORAL OF KEYDECODER IS' `, |5 q. N, W# R" o. q. B" c7 n8 i
SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
8 J- a  @1 Y( f( {SIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位
: }% x8 n6 e8 i4 U8 @& e+ FSIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号
5 M5 `$ L7 j; ?) q# G# M8 QSIGNAL KEY_PRESSED_ASY:STD_LOGIC;
. N4 a0 q: k" l# ]% C( b+ _    BEGIN
3 Z5 L( P% ^* T+ U6 Q. i1 p" _) M TEMP<=KEY_DRV&KEY_IN;
6 S  Y8 J$ ~8 U) A3 `, @ PROCESS(TEMP)
/ B" b  F# Q, O   BEGIN& k* }; `- a1 E1 g: o1 J. ~& J" U2 [
      CASE TEMP IS
2 v& ]* B) ^4 D' W* ~* W: B      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);7 U9 K0 T" C1 ^, \  i
     TEMP_PRESEED<='1';
2 x* r4 @6 r( Y% e3 n( G' y& q     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);. s3 }; d% K) F: r  X
     TEMP_PRESEED<='1';2 K) I) r3 _, h9 }9 d/ e
     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);: C# w# Z9 C0 l, x0 }6 a: M
     TEMP_PRESEED<='1';) u+ X5 B1 F/ p3 \- M/ c* C: i. y
     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);4 s& R# u' ^) V% T
        TEMP_PRESEED<='1';
+ q4 z  f8 P  B( s2 I     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
$ U7 |0 [7 \; r) B        TEMP_PRESEED<='1';! d1 ~' L2 E: m% j' Z$ }! R
     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);( r' d2 }. P. j: O" n$ P
        TEMP_PRESEED<='1';& J3 @( c! |" V
     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);
/ [* l& `. T0 v( A; D        TEMP_PRESEED<='1';
, M, o3 `* q: o2 j# l8 [- y     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);, T( z6 O7 |# q6 r
        TEMP_PRESEED<='1';4 l6 t$ t" G6 r
     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);
7 x/ D& ]( P4 K     TEMP_PRESEED<='1';
2 i( t) o  j9 N" K* ]4 C     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);7 z) V7 B/ k4 A. X$ T  N* B
     TEMP_PRESEED<='1';
1 i! t: J8 R% B+ E3 T, Y& e     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);
* u6 G) S0 J8 A6 f: b+ q" K     TEMP_PRESEED<='1';5 c& w5 |) X, s$ K1 x; y3 d
     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);1 R9 a* y0 u( x
     TEMP_PRESEED<='1';
( I, T, S) E8 c% x0 Y+ B     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);
0 f% `; N% @+ \0 q     TEMP_PRESEED<='1';) I/ U! B* W$ ~& d. c  o% f$ X1 a
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);
+ _: V1 A" L. {: L; j        TEMP_PRESEED<='1';! E" w2 E& c: I, o
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);% T0 r8 c0 ?$ e
     TEMP_PRESEED<='1';
  g' H- i; n7 ]& o     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);, A. y0 ?6 A: C; g! y# G+ L
     TEMP_PRESEED<='1';
7 j. T# S2 P8 v4 @     WHEN OTHERS=>TEMP_PRESEED<='0';) X9 j, ]3 [7 q9 }- L" ~
            END CASE;7 ]% b4 b5 e  t
END PROCESS;
2 T0 }3 R" p; F        PROCESS(CLK_SCAN)# W: U' M. p: j' _; z
         BEGIN7 c9 x) c) c5 `  F6 K) R
   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN 5 t7 e: x# k/ ?8 Y" g) M* e3 d) U
   TEMP1<=TEMP_PRESEED;5 {2 f+ v; F% z- U
   TEMP2<=TEMP1;
7 K( r: z# ?( I' p8 [  _   TEMP3<=TEMP2;4 i9 N5 X. J; I' \  \
   TEMP4<=TEMP3;1 _$ \. ^/ O7 |+ r/ Q. E
          END IF;
. u& e; A  T1 _* Y7 `   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;# v- }9 w3 s0 k
        END PROCESS;# a' q3 Y$ `3 D) z
        PROCESS(CLK)
3 I7 S; t; P* _1 l" O+ ?. c    BEGIN8 j5 y7 D3 }! k  o$ J0 o( W8 m2 d
  IF(CLK'EVENT AND CLK='1')THEN; Z7 t( m& }2 W% h( r0 [' e
   TEMP5<=KEY_PRESSED_ASY;& h5 |2 P# ?, [! C
   TEMP6<=TEMP5;
0 Z  E% N" V& ?# X  \) F  END IF;: G* \4 f, K' x* D6 C+ ?
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));# `* l) ]  G3 F
END PROCESS;
+ @6 u' s* O# V) D2 q2 OEND BEHAVIORAL;6 k5 l; _! ]6 f0 W( }

. t, r3 ]( n; E1 i/ `5 r2 c

无标题.jpg (13.47 KB, 下载次数: 3)

无标题.jpg

该用户从未签到

2#
发表于 2011-8-12 15:24 | 只看该作者
,貌似很难哦

该用户从未签到

3#
发表于 2011-8-14 18:43 | 只看该作者
语法角度上应该没什么问题。但是时钟太乱了,有三个,TEMP,CLK_SCAN 和 CLK,而且信号在三个时钟域之间传输。如果CLK足够快,建议只用CLK作为时钟,CLK_SCAN作为enable信号即可(采CLK_SCAN的上升沿)。而TEMP可以不作为敏感新号,放在CLK时钟域就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-29 15:54 , Processed in 0.156250 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表