找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:1 q8 B& v1 J" N% l" E9 O
LIBRARY IEEE;" m1 S$ a6 O% v: [! q
USE IEEE.STD_LOGIC_1164.ALL;
; x5 \4 y4 Q4 L. ^- |USE IEEE.STD_LOGIC_ARITH.ALL;
5 G% F! |/ {& DUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
$ f" D/ z# B, m$ P5 K5 m$ x) \% YENTITY KEYDECODER IS
! {- A7 V, I8 g: }    PORT (( o8 g! s: m: P! }4 K+ X- Y; y
       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入
6 A# J+ N. V! P1 K- |0 T: [    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
, ?, A8 D$ G, E: `          CLK: IN STD_LOGIC;                --全局时钟; U0 d8 S5 h" i' X
          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟8 A6 o# h6 F. J* n- o
    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值
- Z( b/ G4 z: v# {2 x# p# L   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志
/ E3 }: J, `7 L6 G5 m2 yEND KEYDECODER;
; S* I, R6 X) e% BARCHITECTURE BEHAVIORAL OF KEYDECODER IS4 Q$ y1 e/ D0 Z" W3 [
SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号8 g  m: ?% J9 W7 |
SIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位# [  B) m& w8 D# Y" Q, ]! y8 `. N
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号
8 A$ C/ k0 `  c* b7 ESIGNAL KEY_PRESSED_ASY:STD_LOGIC;
. z' {% r6 g2 a& `# R7 }; |4 B/ ?( D2 A# l    BEGIN
0 {" C. j; z7 Z3 e. A TEMP<=KEY_DRV&KEY_IN;
" s; H6 A: w$ N8 R! r: y, ?3 j PROCESS(TEMP)3 H& B8 T/ o- d4 r2 U& [
   BEGIN
: P7 R, F& Y$ c( E      CASE TEMP IS
- K5 A; L& [' `$ c( M* B0 `( ]) g      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);
7 V6 z: V" O! I+ H5 H  x/ w9 h     TEMP_PRESEED<='1';
& e# C# r. H0 s9 C+ w  `' Q     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);& c$ U) B$ f3 L0 }: b4 E4 L% n
     TEMP_PRESEED<='1';
+ Q* G8 a$ H4 M& [6 R% D     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);0 }9 J8 y0 v% }9 \2 }, Z8 w4 `
     TEMP_PRESEED<='1';5 V8 ~8 z/ V: _5 Z
     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);. E+ k5 y8 j2 S
        TEMP_PRESEED<='1';
  S0 g% W' q9 U, n) {/ d6 G8 F- |     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
+ T! w! |7 S% ]  `& Q5 m% ^        TEMP_PRESEED<='1';' K* M4 `* K! `% @5 x$ c
     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);
" u4 S; s* m' p' x$ J: a) ]1 B        TEMP_PRESEED<='1';/ Q5 F# a+ d4 S
     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);3 J$ b. v% ?' [) R
        TEMP_PRESEED<='1';: ~$ A  Z; ]7 w2 z7 G, q0 I
     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);
3 i) k9 w  G( I! v! t/ K        TEMP_PRESEED<='1';
8 y9 E3 [7 s/ p8 H6 H     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);4 C& t' u8 o7 G5 d, x
     TEMP_PRESEED<='1';
, W" ]( e3 ~3 Y+ W. m     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);
& N6 |0 \! Q! q# |, F. m     TEMP_PRESEED<='1';
5 I) ?5 t/ F: M9 n1 @4 J4 T8 V     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);" t6 b: T0 C. J3 p5 l4 ^
     TEMP_PRESEED<='1';7 }( s, J* f+ y3 X
     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);
6 D" o8 T8 x* y2 x4 e     TEMP_PRESEED<='1';1 w, C7 `' ^$ m+ P0 O6 M; ~+ Z0 _' n
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);. O5 q: H4 E$ D" D
     TEMP_PRESEED<='1';5 F# x# i( P. R/ S- U" t
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);
, l. y, A/ F0 s+ Y; z  a( r7 H        TEMP_PRESEED<='1';
/ {; n8 r  `! K, J     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);
: T" k( x) x$ `! b& e! I     TEMP_PRESEED<='1';
' W& k5 V  f' `' N9 [     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);, y4 k" [$ Y- A, [
     TEMP_PRESEED<='1';
7 K! H3 j" s6 Z* q1 a     WHEN OTHERS=>TEMP_PRESEED<='0';
! j  V' _$ r! P5 ~            END CASE;! H/ P3 }0 f" l1 `  V' a
END PROCESS;( L  p& r/ e# Q, s/ z0 j7 M% s' H
        PROCESS(CLK_SCAN)7 v; V, C2 |9 r( e' c# R5 Z0 i' t
         BEGIN
" |# b7 l: n1 q/ G. o) A9 K9 i   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN   ~1 c7 I5 K, w7 `' o8 g# J
   TEMP1<=TEMP_PRESEED;! q( Z4 R/ G5 q# Z) _
   TEMP2<=TEMP1;
' v: X1 `% D0 A5 Z' }   TEMP3<=TEMP2;' ], w4 o' U  s& h# o# I' b
   TEMP4<=TEMP3;
* d% z. x( }4 F) Q3 W9 \1 w          END IF;9 K' t; T6 D; O7 Q, `
   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
$ G2 p( d* {# z( V0 X        END PROCESS;
7 |5 ?0 O& q, |2 g) b( T1 ~* k        PROCESS(CLK)( v5 ?7 ]3 j% A3 _* S" \% ~
    BEGIN- W9 |1 G( |6 O1 U+ b: y8 u
  IF(CLK'EVENT AND CLK='1')THEN9 j  @3 X+ S. A) A4 ~! v
   TEMP5<=KEY_PRESSED_ASY;4 Y9 l1 L: y' Z! n3 `
   TEMP6<=TEMP5;% c# o+ T7 {8 ]: U. N! e; f& K# N3 c- J
  END IF;4 J1 I! Y. R, ~# T  t
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
, m# |8 s# O5 [4 K6 u END PROCESS;
* X8 l) k4 H  p4 M  }END BEHAVIORAL;
; R. M. t3 Y' B: `/ Z& _0 F6 d5 K, a: m3 D+ c' I1 ?* z, T) o5 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:11 , Processed in 0.064497 second(s), 36 queries , Gzip On.

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

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

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