找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:
7 E+ h0 ~& E, w2 P+ T% _% V: GLIBRARY IEEE;( F  d0 f  ~8 f. w
USE IEEE.STD_LOGIC_1164.ALL;# t0 \  |8 o. |
USE IEEE.STD_LOGIC_ARITH.ALL;
( T6 u( T6 I* w/ r+ d) cUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
& u+ `% v7 f2 {4 A0 L4 dENTITY KEYDECODER IS
" k1 `: K) o6 p3 Q    PORT (3 v. [8 K! q' A# G1 \. ?2 F
       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入* e3 \% T: _+ N9 C0 l
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出# V% C, F0 D/ j: B% E0 z( `
          CLK: IN STD_LOGIC;                --全局时钟
( z- p/ [. i/ c' b& h7 @          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟' }* [" D0 g8 [# X! c& c5 W3 k
    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值, ]& s8 n9 r4 d3 I! B9 z& T
   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志: ]2 W  @5 B4 _9 t
END KEYDECODER;
7 V+ i; T. a* aARCHITECTURE BEHAVIORAL OF KEYDECODER IS
0 ?2 U" C2 Z6 D8 l- q1 o) ?SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
) e' ]' C" A4 u  B# [SIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位; l9 k6 r& G) e, Q
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号3 S/ P" t% U! q) z0 E$ U2 ^
SIGNAL KEY_PRESSED_ASY:STD_LOGIC;
5 W+ p$ R  J3 H6 X9 a/ u. N; Z    BEGIN5 \9 S0 g" Z8 V+ i; e  d! F
TEMP<=KEY_DRV&KEY_IN;5 d' Y& i+ K8 S5 w; i9 H
PROCESS(TEMP); @4 N3 q9 K5 T7 A
   BEGIN
' T& j  i% r/ n8 |  H      CASE TEMP IS0 t  g3 T% N' z3 N2 M: i
      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);: Q& W9 ^$ p" b7 L2 R
     TEMP_PRESEED<='1';  U: n% m; }2 g1 q1 G% W
     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);: Q3 ^0 G" k( z
     TEMP_PRESEED<='1';
: i9 I( ^9 r% R) u     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);
/ X2 C, ?1 c) t  c! [     TEMP_PRESEED<='1';
, x) n7 P! c* z! d6 }/ }     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);$ ~' V8 r! L/ j( o8 e6 m  x
        TEMP_PRESEED<='1';( `2 f5 r3 o, j4 A  _
     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
, x. O5 H( ]3 h$ `% E" G, h        TEMP_PRESEED<='1';8 J% K0 i0 k. l1 n. ]6 b
     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);: X6 f' o+ v; |: I5 K" K5 l
        TEMP_PRESEED<='1';
' {+ e& d5 o+ w$ }( Y5 p     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);
. R' y9 l" ^9 G0 G        TEMP_PRESEED<='1';
% w& M# e  Y/ F( W% X$ F     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);7 j- S1 [7 e6 A5 e2 p
        TEMP_PRESEED<='1';2 o  m3 M* ~( y$ k5 R3 ?: o2 ~* k
     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);
$ s- o, c7 `. o8 j! p7 m* ~     TEMP_PRESEED<='1';  E0 ^9 }$ M6 N6 o5 j4 {& o
     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);8 ?" j& T6 V0 |# [  _% ~
     TEMP_PRESEED<='1';; g% n/ k$ t( T/ B+ P$ j8 T2 e
     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);
1 {& |( W9 i( E0 r5 A" L     TEMP_PRESEED<='1';/ ^+ g) C/ J- a1 f, Y
     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);
4 T2 |: I/ J& N/ V% U# n# j  ?     TEMP_PRESEED<='1';
" ?; }8 B3 l. |+ l2 W! t2 T     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);" e2 Q/ R$ l3 I3 n
     TEMP_PRESEED<='1';+ j. ?( p6 z* b) J/ E+ E
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);) r4 b5 u2 A. `! M" i
        TEMP_PRESEED<='1';: o: d+ |4 ~8 U2 j  |5 X- s
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);6 u2 v. \6 o1 L$ w+ I
     TEMP_PRESEED<='1';
- w& w' l& `. Y, L     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);0 P! F8 e) Z9 G# U0 O
     TEMP_PRESEED<='1';
: V# {3 k" ^. z% ~( H     WHEN OTHERS=>TEMP_PRESEED<='0';
5 j' J" }1 `8 `% a8 C5 o$ _            END CASE;
2 L8 |8 {5 p  X; H$ G END PROCESS;
8 A) T) H7 \" r& E! e        PROCESS(CLK_SCAN)
2 k7 L% G6 J4 M0 i( B         BEGIN
7 H0 ?4 p3 ^' _" f) {   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN
2 M4 h, C: _, J( n8 h   TEMP1<=TEMP_PRESEED;
' P" o# E: V" \# k' s7 y   TEMP2<=TEMP1;; D+ a4 o3 T. b$ P+ l' h. @* F
   TEMP3<=TEMP2;
: \+ g, e/ z& r0 o* [   TEMP4<=TEMP3;  y2 q/ `7 N0 u2 k  o2 F
          END IF;
) e  P$ l, e5 {# C1 }9 _   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;! c% [& b7 K8 b  [# q
        END PROCESS;
7 K- ]1 {/ G+ w+ M        PROCESS(CLK)
# S4 ~: h' J/ W2 I' Y& Q    BEGIN
6 P5 ^- f) u- D% {& T  IF(CLK'EVENT AND CLK='1')THEN. Z- G# [; s$ h6 \
   TEMP5<=KEY_PRESSED_ASY;
! e& _8 o/ c6 P   TEMP6<=TEMP5;) U3 ^2 ~! l6 i/ j) u7 \/ j
  END IF;
1 a3 b& i/ y1 S( V8 ~8 c4 S# d  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
1 a7 B% b) u8 a1 R4 t$ [. u- W END PROCESS;/ e7 \5 \) Q  j0 u6 m
END BEHAVIORAL;+ z: ?/ ]' V* T0 e; ]' L/ T" T
" i' g" b8 h5 Y4 Y/ w

无标题.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, 2025-2-19 06:33 , Processed in 0.063176 second(s), 36 queries , Gzip On.

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

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

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