找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

1

帖子

-8990

积分

未知游客(0)

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

EDA365欢迎您!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:- K$ C8 B, y0 u/ k8 f4 B* I
LIBRARY IEEE;; D2 Y' R: D5 g* o: o( l4 q. @, ]6 W
USE IEEE.STD_LOGIC_1164.ALL;
3 R, V  a% `9 Q! f5 UUSE IEEE.STD_LOGIC_ARITH.ALL;& z$ `; [! z" q
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
6 n! s& O, G6 d$ w# z0 R0 `0 BENTITY KEYDECODER IS
0 R( D8 d' |; L$ n6 J    PORT (
3 b, s5 {  @+ Z       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入( X- v# t4 l3 v0 o% g
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出5 z5 U3 O8 h; F  f' o" e" Y/ G
          CLK: IN STD_LOGIC;                --全局时钟
3 S5 e& u  e8 C# z- k5 e! w          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟: \5 t5 w9 t7 h7 ]' y
    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值3 c9 |* D' l  q1 `
   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志
, h" w$ Q1 l3 [, e9 LEND KEYDECODER;
' w+ L9 A; P% ~5 QARCHITECTURE BEHAVIORAL OF KEYDECODER IS
% ~6 `: H0 F( g1 BSIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
! A) _$ E$ \, N6 R) K. wSIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位- t9 S  Q+ |5 [: d
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号/ {+ d$ ^2 `/ u
SIGNAL KEY_PRESSED_ASY:STD_LOGIC;5 ?. _/ f! U$ i  i9 Z  t& a
    BEGIN
  t0 {! T0 I' N TEMP<=KEY_DRV&KEY_IN;& M  A( X5 r5 O4 `
PROCESS(TEMP)
( R. I! R3 E; R" Q, G/ i; D   BEGIN
3 O1 i* a' }4 Y6 M  Z      CASE TEMP IS7 N: e8 f" F7 x- k- c5 y( n- x3 _
      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);
4 P/ Q( f' l, I; ]     TEMP_PRESEED<='1';$ k& T1 ^7 V' k6 w
     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);
4 m3 v5 t* K: B+ b) r     TEMP_PRESEED<='1';
5 _; a* H- h5 q5 a     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);! ~% C4 w# X- O9 x  S
     TEMP_PRESEED<='1';
$ e$ r; p* f/ F! g     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);3 S4 E; e2 K3 ?% K# J5 R7 [# f; e- x: R
        TEMP_PRESEED<='1';
3 }: G4 N$ B# ~% \     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);# Z& K; z& T: R* l
        TEMP_PRESEED<='1';
  n; w, e/ ], c& j( j& P. h     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);# f( j( @! a# C% r' k+ t
        TEMP_PRESEED<='1';5 d( Y5 R2 h$ y; o
     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);
+ s" e: G, f6 V( e! T$ U1 \( s. M' W        TEMP_PRESEED<='1';4 R; \3 l5 H, K+ g" F3 y4 a1 g
     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);; {  [6 N+ |% W
        TEMP_PRESEED<='1';
* }: t/ ^9 Y4 o2 A3 t3 G# O3 d     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);
" ~0 |9 z1 F# V     TEMP_PRESEED<='1';8 {7 v4 v& }; t. u
     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);5 T- H9 d  y5 \, O& K
     TEMP_PRESEED<='1';
" d* K7 t9 T; V! b& z  x     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);
, _% n: p% a: Z     TEMP_PRESEED<='1';
  F% C: E# {# C9 x/ p8 {3 [7 k     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);
) x6 _& T3 C/ u! D; x     TEMP_PRESEED<='1';) r$ r6 Z1 x9 B* ?- p0 Z
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);; i, M6 O. r- Z1 u/ m
     TEMP_PRESEED<='1';* H( c* i) j- d: t5 r( t5 l9 n3 j; u
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);
  y9 H4 W9 }% R* [  {5 V        TEMP_PRESEED<='1';4 X8 g: R4 f5 e  k' f* g( S3 R
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);
: K/ [8 \" C+ f0 A1 c     TEMP_PRESEED<='1';
6 K2 ?  x/ \3 u; N7 O     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);
0 q( l3 h2 @: X; L( z% l     TEMP_PRESEED<='1';; v4 z8 U1 A- z0 Z
     WHEN OTHERS=>TEMP_PRESEED<='0';; c3 g4 K  Y9 M6 x: z+ _
            END CASE;
% V3 g' r9 h$ t5 o END PROCESS;$ N7 N8 C' L, D! l9 Y
        PROCESS(CLK_SCAN)
" Y6 d0 J2 A. M         BEGIN5 J* u  I0 ^  }( I6 [6 F
   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN . q7 @* a) u% x- S4 h+ q1 C: k
   TEMP1<=TEMP_PRESEED;
4 N7 n6 S; R- U0 R7 V   TEMP2<=TEMP1;' K+ [- G; ^+ \' e/ S1 R+ h
   TEMP3<=TEMP2;
9 V9 G% h; _- s" [5 z0 j5 x   TEMP4<=TEMP3;
& |! y$ S$ Y. b& Y          END IF;
0 y7 d) G& Q) C$ c   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
: o3 S3 R* j+ Z2 s* H        END PROCESS;
2 p9 N9 |& J! y        PROCESS(CLK)8 i# [1 B6 l  H+ l) M" L
    BEGIN- Z4 [& R, {- R4 Y0 K
  IF(CLK'EVENT AND CLK='1')THEN! N3 R5 B& Y! v: C: V3 W9 i
   TEMP5<=KEY_PRESSED_ASY;
  y; n  D# T# H! L& S0 W   TEMP6<=TEMP5;
1 ]( _+ ]# U1 H( L2 E, W  END IF;/ V3 g6 }7 I& c& X7 G$ l/ q/ J
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
4 h. e" ~) F* w* P5 ?  d/ ~ END PROCESS;
$ N( c" _" p5 `9 y! \END BEHAVIORAL;8 m/ G( K' s& ^) e* ^' V: S

' A) S: [' ?; H. E( [1 R% g' k7 N

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

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

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

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