找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:& X$ P7 U9 b. o' W) r8 b7 {
LIBRARY IEEE;$ b2 Z. x0 n; a6 S# f% C
USE IEEE.STD_LOGIC_1164.ALL;( K7 y6 Q1 l% ~' U, z
USE IEEE.STD_LOGIC_ARITH.ALL;* s, D: g9 @" E% G' }
USE IEEE.STD_LOGIC_UNSIGNED.ALL;" i7 \' ~) ~: ]+ l
ENTITY KEYDECODER IS% r$ n0 v+ i) Z8 N8 H2 E7 \
    PORT (7 h: M" [8 G8 o7 d3 \0 q
       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入
& z# `' f  |0 k) m/ {    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
% [" s( g  Q6 o- j" b( D' {          CLK: IN STD_LOGIC;                --全局时钟& H6 N+ _( H9 X% y% i# G6 o; j
          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟
  Z9 J8 z1 T* E$ [$ f    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值
5 U$ B3 o0 ]& l1 u   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志  t' H) M; H1 s$ x
END KEYDECODER;
# @" u9 I* n3 W5 r% m- m+ zARCHITECTURE BEHAVIORAL OF KEYDECODER IS
' [6 @& N9 l* \; {7 F4 RSIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号" E  S2 H) a8 _: B" @
SIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位- u" }; d7 z, m5 @) ~: ?5 K
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号
) B/ X4 j& |) x% C: G8 b+ u1 \SIGNAL KEY_PRESSED_ASY:STD_LOGIC;+ j+ O# J& H- h7 r6 L
    BEGIN8 y" S, G4 l! L/ ]
TEMP<=KEY_DRV&KEY_IN;  K& H! G2 a, C6 a+ N( j) I
PROCESS(TEMP)
* U) t2 |) L7 J: I3 ?# p  [   BEGIN$ W% l" ]* F- i! s; o2 K
      CASE TEMP IS
( b. z1 v/ K% q! ^& T% F& E      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);
7 O9 [8 r. `. u3 m4 Z" k     TEMP_PRESEED<='1';1 T9 `, I6 I( T6 H0 k  d5 R
     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);
7 q( Z. M+ w+ A6 k7 L     TEMP_PRESEED<='1';
# z' {) U  j: U! U     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);3 T. L8 s' I+ [' S$ E
     TEMP_PRESEED<='1';  t" G0 v# w$ u9 v& B
     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);8 |3 F  E1 |0 w3 W9 d
        TEMP_PRESEED<='1';
4 z  \# V+ |2 j$ f0 {     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);7 j  i0 D$ h, i; c" x. Z
        TEMP_PRESEED<='1';
/ Z9 R- e$ N5 C# r. y     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);$ z. h1 W( e9 _0 ^. f8 V- a. ?/ ~: t
        TEMP_PRESEED<='1';8 C/ M1 [& v8 _+ v/ B7 X
     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);
1 ]& C+ U* [3 g/ S$ M8 P# ?, [        TEMP_PRESEED<='1';
: m) n0 t- X. P; v0 [9 a  }1 y     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);. J( x! s: E+ e$ ^
        TEMP_PRESEED<='1';
* ?% u/ ?$ o' |( X$ G     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);0 ^% m* G; D( w% s
     TEMP_PRESEED<='1';
- M1 T/ J4 O9 U7 f- o& N     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);
/ E" e* {; G7 U* `. Z  X* @0 l3 ?     TEMP_PRESEED<='1';
. [. D; v7 q2 {% R+ t     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);
+ C; P% n) D/ S, s: \$ w; Y     TEMP_PRESEED<='1';
  t2 H. G( U/ ]% \, h& {, u     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);
( P' r+ b7 C- S+ z2 Q1 o+ B# V' n     TEMP_PRESEED<='1';" m; z9 K* r+ L, I1 @
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);- ?- n% y8 Z0 n! y! Z6 F
     TEMP_PRESEED<='1';
2 Z! x2 j# [- U0 O% K     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);
2 J2 R( K8 Q# P        TEMP_PRESEED<='1';- X/ O9 ?4 L* k4 a( P
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);
& y/ d3 P( x4 W1 @5 L     TEMP_PRESEED<='1';3 W& N' c: k* Q! E
     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);
. F8 L  c8 N. f6 c+ q; Q     TEMP_PRESEED<='1';
" `1 O! I. I0 R9 E     WHEN OTHERS=>TEMP_PRESEED<='0';
: h+ B% s+ `; n1 U7 l& y3 ^            END CASE;3 D* _  ^3 l3 U9 M  K7 Y* l
END PROCESS;
) f1 D: B' b$ z/ N, q( s        PROCESS(CLK_SCAN)$ Y# e2 T. j5 x. I
         BEGIN
$ ?! N& ]& s4 c% I   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN & I9 w0 o( Y5 Y' f
   TEMP1<=TEMP_PRESEED;
% J+ F: _0 q# [) h  s% h* o3 x   TEMP2<=TEMP1;
7 y2 I$ F& T1 n/ _   TEMP3<=TEMP2;
5 I- H- Z7 t0 b& O   TEMP4<=TEMP3;( Q3 F- I8 @% E6 N- z+ D
          END IF;
) m+ N; m( Z/ z, X4 X" C, X  x* _   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
0 X, P: N- B9 g( P        END PROCESS;
) K' ^1 D  V& r2 y        PROCESS(CLK)+ Z9 S( |. U" K& ?8 n
    BEGIN
" @; P; U2 q! b, w, D  IF(CLK'EVENT AND CLK='1')THEN( h5 L5 ]& s9 `4 Z. _
   TEMP5<=KEY_PRESSED_ASY;0 I9 p3 K0 A9 C2 R+ J9 F
   TEMP6<=TEMP5;
0 \7 \6 {' n+ R% D: G6 |  END IF;  F: b( _9 B& n. i4 R  Y7 \# o
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));2 S$ z6 V- z! Z8 L2 {' t
END PROCESS;, L3 v' f) m$ Q3 }. P* B2 \2 b
END BEHAVIORAL;
' q* X6 b. M4 l" F/ |1 e5 t6 M+ W# A: J: o" |% d  u

无标题.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:53 , Processed in 0.059236 second(s), 35 queries , Gzip On.

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

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

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