找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1006|回复: 2
打印 上一主题 下一主题

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:% p$ s. t& ?/ e8 \5 j
LIBRARY IEEE;+ D: X% `4 r2 q
USE IEEE.STD_LOGIC_1164.ALL;
, f8 h% u  k) o2 ]USE IEEE.STD_LOGIC_ARITH.ALL;4 e0 |3 ^  O* M% ?2 M) F
USE IEEE.STD_LOGIC_UNSIGNED.ALL;5 X0 T" Z/ U9 t' n, m0 e& }
ENTITY KEYDECODER IS/ r. g; r0 W5 m- Q# N0 }
    PORT (
1 B1 _5 ]4 v9 D9 h6 {5 `( r0 a       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入. Z" v( z6 q: n" O7 ?1 V1 R
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
9 D( |  @( A3 s  G. @          CLK: IN STD_LOGIC;                --全局时钟
# l! u1 V+ |5 _* V# n) j; G          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟
/ ]8 g3 G6 l+ ]    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值
. B# ]5 e3 j( R1 B" w3 I+ {   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志
- {# U6 s  k* c7 uEND KEYDECODER;
% N( P( X' U3 j- T" Q7 H0 PARCHITECTURE BEHAVIORAL OF KEYDECODER IS
! t! E& b' H" M9 I3 R, ?) PSIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号' g8 r; C, V( @* i: E4 z- T
SIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位
% ]2 T# L  V  S- dSIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号& m) N+ G: A( P9 s$ V6 a4 G
SIGNAL KEY_PRESSED_ASY:STD_LOGIC;) h5 [# S3 v$ X( B; {* q4 [
    BEGIN, D5 A. ~, {( W0 ~- l# ~( {
TEMP<=KEY_DRV&KEY_IN;
+ |7 j+ X( O. h# r6 ]5 q PROCESS(TEMP)  E6 E7 {, E/ ?' H, r* v- g! Q
   BEGIN
3 i; g  {5 e$ L( v8 ~      CASE TEMP IS
  U- k5 d$ t$ k( O9 e      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);7 y0 u$ q# h! i* `; G
     TEMP_PRESEED<='1';
6 D" ?& G/ `8 S+ m0 u     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);1 b" h/ x- g$ I" r' g
     TEMP_PRESEED<='1';- T, \+ M9 J; T/ F; ]) w
     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);) W- q1 m5 j( C3 ^1 z% d4 p  c
     TEMP_PRESEED<='1';
7 v5 o7 z7 Y! b     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);
) `7 _0 z, e6 y2 J0 S. y        TEMP_PRESEED<='1';0 y" a5 r% t: x( c. S, v
     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);8 n( }6 |2 ]  O# U0 @) h  e4 r6 [
        TEMP_PRESEED<='1';( U* y# t4 }9 M" g& O
     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);
) C  `2 l" b& C# M9 l) Q3 ?4 F+ |        TEMP_PRESEED<='1';
) q3 x- ~/ J% s& a" `6 {     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);
" a  P* J/ S3 h# m' I% [' \        TEMP_PRESEED<='1';& A4 E/ i6 `/ F' X+ }9 v
     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);
; Y- q* |! C) r        TEMP_PRESEED<='1';' F% ?3 x, _8 Q
     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);
0 ]  S4 m! N  @7 }     TEMP_PRESEED<='1';) a. k! C( J  g+ W: ^$ w- A0 |
     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);
2 @4 @" _% e$ I" f! A     TEMP_PRESEED<='1';5 S7 {, \$ f* w: H
     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);
- B9 q1 W% `2 o- v     TEMP_PRESEED<='1';
1 I: k3 `! g$ K8 P- V2 M     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);
. ^8 |( A. O% \! J1 ~2 t2 W     TEMP_PRESEED<='1';
6 d! ~, I% V, I# ]7 X6 c9 U     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);
1 s$ P' N/ p5 c7 {  m     TEMP_PRESEED<='1';. ~0 k9 b& c' j9 v2 |
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);- E3 K/ O' c1 _3 k! L  `1 R5 j
        TEMP_PRESEED<='1';
! _! f2 k+ A8 T; F     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);  q5 F3 e3 v' w* u3 ]
     TEMP_PRESEED<='1';  n8 ]- j% }$ r5 o* |5 b
     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);
5 Y4 E- r0 r3 j) r- J     TEMP_PRESEED<='1';
. n6 v! c, P8 E1 ^     WHEN OTHERS=>TEMP_PRESEED<='0';, d5 y9 j1 q2 x! S8 |0 z
            END CASE;4 x/ J  Y6 u$ J- @
END PROCESS;' a; T$ ?3 e) d- \$ C" n# f& g
        PROCESS(CLK_SCAN)
+ U, B1 }1 {. D& F" P0 E         BEGIN
1 K6 n: B8 h/ m: g) y   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN 9 N: Q+ `' |- q* ^4 D
   TEMP1<=TEMP_PRESEED;
* l* D! p& {" f, h   TEMP2<=TEMP1;! G& v' n4 m* G- [+ y  Z
   TEMP3<=TEMP2;
& A$ s0 _8 Q* X' t% R  `+ _4 t   TEMP4<=TEMP3;: A" b% o3 s( O4 @4 l
          END IF;
( W! o1 ?0 `5 X8 X. @   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
- }) I! u7 v1 w+ m" w# r6 w        END PROCESS;- v; K) @( @6 A7 x2 L
        PROCESS(CLK)
. o( @3 p% l- c# B7 W    BEGIN) @' U- d8 g$ D& H, L
  IF(CLK'EVENT AND CLK='1')THEN' v% G! F% N; u3 x9 V' j
   TEMP5<=KEY_PRESSED_ASY;( J" [6 M( L. r" [2 f2 @" Z7 f+ `
   TEMP6<=TEMP5;
! h* U/ L, ]3 r5 ~! K- n  END IF;
/ `  i4 L9 _" G  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));0 V4 y% f, F# l. f2 c- {& I3 Q
END PROCESS;, z+ f* ^  p0 P0 n& a8 K! K
END BEHAVIORAL;! L$ d. K4 Y- L
6 m3 o) P" s: r+ k* m

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

无标题.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

0

主题

14

帖子

-8952

积分

未知游客(0)

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

1

主题

21

帖子

-8983

积分

未知游客(0)

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

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-24 14:26 , Processed in 0.063419 second(s), 36 queries , Gzip On.

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

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

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