找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:# y7 e% g$ o$ y$ c5 Z, }" L' E
LIBRARY IEEE;; z# y' j: {5 |' P( ]3 a
USE IEEE.STD_LOGIC_1164.ALL;* K# K0 @7 ^2 K  ^9 g6 r
USE IEEE.STD_LOGIC_ARITH.ALL;
3 U5 ?, i" N; c& g  B  QUSE IEEE.STD_LOGIC_UNSIGNED.ALL;9 Q: h0 `* y. ^
ENTITY KEYDECODER IS# H; ~2 I1 m# g3 C1 a0 @3 x) F
    PORT (
6 I- |/ e- r: p) Y0 V9 ]! P       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入
4 ^1 g5 F  @% L6 O- H( F* w. r- x    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出* a% s4 }# |+ z9 D
          CLK: IN STD_LOGIC;                --全局时钟
4 X; R/ {+ r8 i  W          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟
) |9 G0 ?0 R; Z# s    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值
6 N1 \  l- C5 l+ V# a8 M   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志
3 s" Y) U5 Y' h  J' O$ b/ KEND KEYDECODER;
7 a& r; w6 ?6 F8 _( U/ bARCHITECTURE BEHAVIORAL OF KEYDECODER IS. S1 Q7 P: H+ ?+ C! d% i! j
SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号$ m4 J: k0 q* D8 J, _( l
SIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位2 m# Y0 e) ?4 Q# @# i
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号" U3 a0 g6 u- Z) z. c! t0 b/ p
SIGNAL KEY_PRESSED_ASY:STD_LOGIC;. q( z) Y, x4 G0 Q
    BEGIN
* a) V; x0 h+ ^6 ^2 H TEMP<=KEY_DRV&KEY_IN;
* V0 g5 R- y" N: G' n PROCESS(TEMP)# v( f7 {+ W0 E* k" g
   BEGIN
: U% @* {( u, m+ Z! p4 ]      CASE TEMP IS
! K0 @. |! }/ ~' I% j: D  R8 n      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);
( k: f4 s  k  a' ]     TEMP_PRESEED<='1';& {! G2 l; M- G  @" v) V% r: t
     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);
( e: o$ y) n6 R/ R, h6 Y     TEMP_PRESEED<='1';
8 l2 ~  |7 o/ @( _3 U2 k     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);; |6 N: t, c- l7 i
     TEMP_PRESEED<='1';
  a* C7 f' T7 [' a! t8 Z. P: I     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);
2 N# q. ?1 H& Y        TEMP_PRESEED<='1';* f6 o, B. Q3 ^7 \4 T" F
     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
7 _& l0 C3 p% F8 t( r" M; f        TEMP_PRESEED<='1';6 }' G5 @; y5 K5 A) T$ y
     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);
4 u2 _% |% Z$ s% Z6 Y) h- ?& m  n        TEMP_PRESEED<='1';
- ]6 {4 J7 C$ a     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);9 ?& t/ g1 N1 y6 ]& U
        TEMP_PRESEED<='1';) p  K7 M3 y2 C9 @
     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);4 y2 i$ a+ c% s. F! f( d1 w$ w
        TEMP_PRESEED<='1';
6 e' i6 o1 X: d/ n     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);  X3 W- O  B. n+ s6 ^
     TEMP_PRESEED<='1';
& I) U8 ]& n3 p6 |* h     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);
, q* H* A, F% c' S     TEMP_PRESEED<='1';+ a2 G0 I. k4 n: e- Z
     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);& E$ A* `; b& v$ b
     TEMP_PRESEED<='1';5 U$ i! w) Q# G3 {: u- h- b
     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);% D' Q' N- Y  m+ `  l4 T
     TEMP_PRESEED<='1';5 v+ b/ A/ G# E: G. d
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);
2 M: N. \+ K' F6 s* Y" ]     TEMP_PRESEED<='1';6 @1 [: l8 D8 U
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);
  I/ q) b7 _6 I9 W        TEMP_PRESEED<='1';' S& Q! Q$ k' J# E: d3 |  N
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);- K0 B) [) [8 Y/ A: {6 {* `. _
     TEMP_PRESEED<='1';7 R0 C  S) J) ~1 c" b, l
     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);) E! Y* ]7 X: `( h# \( F3 G  g
     TEMP_PRESEED<='1';( c9 J; Q+ f  S' T+ X! ]
     WHEN OTHERS=>TEMP_PRESEED<='0';9 j/ O, L% b' {8 n
            END CASE;/ u$ e& T2 ?. J5 B% i/ ~
END PROCESS;) B3 ^( M+ q3 l( B: D9 I
        PROCESS(CLK_SCAN)2 Q2 H* ], c9 @% a% ~1 `0 X+ ]8 V4 M
         BEGIN; J* \* G. M; v! Z7 C
   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN
. s- h# |2 g1 V   TEMP1<=TEMP_PRESEED;4 K2 X+ W7 v" H! Y. O% N; C
   TEMP2<=TEMP1;8 o% E- A- Q  U& A
   TEMP3<=TEMP2;
7 y) X0 B2 n1 `7 y0 M8 {# J   TEMP4<=TEMP3;' f& ~0 l  F* O, q5 h# a4 g1 k
          END IF;
% b. |- M" G# ]- j% T3 T" B   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
( r! E9 {/ N% h+ S/ A        END PROCESS;& z. n( u3 x4 X1 |. d' V6 Q& x
        PROCESS(CLK)" |0 X4 j- i5 [5 e- v: ]6 N& X
    BEGIN
- [- S) M( ~* X/ p( u5 f( A  B  IF(CLK'EVENT AND CLK='1')THEN+ s9 y4 @' U5 r7 K' c
   TEMP5<=KEY_PRESSED_ASY;% n2 y* s6 E! F
   TEMP6<=TEMP5;! t5 `1 b# O: C4 g5 ^* a
  END IF;
- F5 O; P4 a- p. c+ }+ y( V3 z* w  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
1 n6 n% `6 j9 z' T END PROCESS;* |" j# a1 C# E1 U
END BEHAVIORAL;8 ~& z4 x& X9 o  r+ s
( P' Y$ v+ z9 Z& j

无标题.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 11:47 , Processed in 0.068532 second(s), 36 queries , Gzip On.

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

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

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