找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:3 k) U" _2 c2 e) d9 I2 \4 t
LIBRARY IEEE;
! S2 p) f! W6 _7 M' |  qUSE IEEE.STD_LOGIC_1164.ALL;
8 R  A3 O  j2 y$ x  J6 wUSE IEEE.STD_LOGIC_ARITH.ALL;
; P& A) {. @! dUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
: r7 L. M1 H6 f: Y; P5 `$ e! qENTITY KEYDECODER IS8 p& P" i. F: h$ T0 M# o
    PORT (5 m( Y& }9 s* E8 K% j0 v) M: h7 i
       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入1 ~2 j& ~5 Q1 n0 ]( Q0 x
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
5 `3 M1 f. G: j5 ~) D" k          CLK: IN STD_LOGIC;                --全局时钟
; l- ~+ g* Z6 j' C9 l# J          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟9 C2 t) t' U8 _3 R' @$ M9 G/ m
    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值
4 ?! }$ a9 @, u2 U/ _   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志
1 ^( V. c& M) W2 J4 |/ LEND KEYDECODER;9 B& y7 e6 x6 D: X6 {/ x6 G7 R2 M+ T
ARCHITECTURE BEHAVIORAL OF KEYDECODER IS
" V# ]4 s5 q* SSIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
! j8 \2 [9 G! SSIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位, U6 ~$ P. N( F9 j% D6 t2 Z
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号
$ P8 t6 j1 A( c% N( j: J1 dSIGNAL KEY_PRESSED_ASY:STD_LOGIC;
2 S5 x9 R' [. q) f0 `    BEGIN3 r1 o2 f) P2 I# Y# u" h6 |: ^; C
TEMP<=KEY_DRV&KEY_IN;% S% W4 i( ]3 T3 }! _: n1 D
PROCESS(TEMP)& F% w6 E8 t% F2 V( p/ E
   BEGIN5 i- h: e) P. a  v
      CASE TEMP IS
! g# H( k$ W& s# P+ @      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);% G5 ^' F" X0 U" Z6 u" ?
     TEMP_PRESEED<='1';
" I* ~) f+ ^3 |, D  S5 a     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);( o; H4 ^4 ^, z' y' H  C
     TEMP_PRESEED<='1';; r, _' s) A- f! w
     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);
+ C/ Q. t# }# D' w$ Q  E& A! \     TEMP_PRESEED<='1';
" H; T" T2 g7 ^6 C* C3 H     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);7 @! _& k+ i7 O: I) S
        TEMP_PRESEED<='1';
1 Y+ ^( |% E. n0 k) y     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
& A- N1 q# |' Q4 w# r. s* Q9 f        TEMP_PRESEED<='1';  `$ s: y5 e& ]5 Z& X7 V& k* m
     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);
! D6 A# n7 Q) j: G        TEMP_PRESEED<='1';
) R4 S$ m$ ]5 k% M1 I     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);+ m7 G$ ?7 X) N5 m/ F7 L3 O$ T
        TEMP_PRESEED<='1';
, [' G$ L  ?) Q) ?% n* U  [6 Y, `) }. }     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);
% w$ E. d% w5 Q7 ^9 g" V/ c        TEMP_PRESEED<='1';
* |% k$ y$ a7 J; w  s8 W     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);0 M0 a) P2 h' k5 }9 T  e
     TEMP_PRESEED<='1';
7 }" G* G5 ?. B, k4 z9 S     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);
- u! c; h1 x7 g, Y: q# @     TEMP_PRESEED<='1';6 y8 X5 g+ m! |5 u: H
     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);- q4 c' R: I: z6 D3 L8 Y6 v; u
     TEMP_PRESEED<='1';
) Y4 z- b: i; Z4 M     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);6 j/ d% F" u$ y2 V
     TEMP_PRESEED<='1';! j. R- n# p+ s  c8 D
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);( s0 i  c7 \& H5 ^, `& E: e6 I
     TEMP_PRESEED<='1';' `4 Q; Z# _+ J" V+ {
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);' F/ `7 o* J6 x; L1 H
        TEMP_PRESEED<='1';  E4 B' G& @+ y9 l
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);
9 x1 K- M0 |" u7 P) v, j  [7 x     TEMP_PRESEED<='1';
& x% c7 U- c4 `; J4 K     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);
) C, ?- [4 K" d+ r" j1 A     TEMP_PRESEED<='1';4 Q: R' J/ s3 M* _+ I
     WHEN OTHERS=>TEMP_PRESEED<='0';; p/ y3 S( `- t8 W, K
            END CASE;
: c8 X$ U: {: {: Y4 s6 N" l END PROCESS;8 i0 b# Q, S! ^& u7 U! N
        PROCESS(CLK_SCAN)( H( m" Q. B( u
         BEGIN
: u6 D0 O0 {* i. |   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN # T! f! [: @8 M$ Z
   TEMP1<=TEMP_PRESEED;
5 y6 L% k8 ?7 V" ~' k( B, I. T1 M   TEMP2<=TEMP1;+ u' b3 ?! Y: h# y9 A. W
   TEMP3<=TEMP2;
# ?7 Z8 k1 ~/ i+ n   TEMP4<=TEMP3;+ f5 g- G6 `. j$ {# g, _) z' {
          END IF;
3 l/ T8 p1 T4 l! p- W/ @) Y6 F7 L- [   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
) r& m0 P% q, K        END PROCESS;" O* t' ~9 ~8 n( ^# ?, z
        PROCESS(CLK)
9 n+ n( \# o! \" `+ q3 t( w7 |4 C    BEGIN
; E5 o4 R. L% V0 j: I  IF(CLK'EVENT AND CLK='1')THEN
+ S9 i' f( `. x9 [- a   TEMP5<=KEY_PRESSED_ASY;
/ |( r; Q7 F4 }: J6 X& a   TEMP6<=TEMP5;1 h/ b9 v9 m( k  R) A
  END IF;; ^6 E# Q$ @; m  ?( g1 h
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
, e( B. }" b8 G END PROCESS;6 ?; s4 j0 @7 J. C
END BEHAVIORAL;9 a5 ^& @' C1 ]$ s
7 {# b1 H/ u% X! P" F( s" 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:22 , Processed in 0.057641 second(s), 35 queries , Gzip On.

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

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

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