找回密码
 注册
关于网站域名变更的通知
查看: 1455|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:- @( B- l$ R5 Q
LIBRARY IEEE;  f0 g/ M2 x% Q1 g0 @  M- H! f( t7 r
USE IEEE.STD_LOGIC_1164.ALL;
! E8 h4 R. s* H7 v$ RUSE IEEE.STD_LOGIC_ARITH.ALL;
4 C# L* I+ ?2 d* R0 IUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
4 [+ C; X1 z. W$ dENTITY KEYDECODER IS0 Z) D* `  h" A) ~- G! U
    PORT (
8 o8 Q/ `, K( \6 A       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入. P3 D* i6 q" U3 A
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出- s9 W+ I: [  ~, T. H
          CLK: IN STD_LOGIC;                --全局时钟" y+ b0 k9 |, k) M
          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟
7 ]2 \: w# u0 q' v& c    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值* t: B) a. \, N$ c$ n
   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志! S: h( U" x- z: O* w
END KEYDECODER;
5 V  B- ]2 v4 a& F9 v6 Q9 ^# s3 h" cARCHITECTURE BEHAVIORAL OF KEYDECODER IS9 {7 ^$ k. Y3 K& {/ i. S
SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
4 m: A, M. {: v: I+ j" s; m! E/ nSIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位& s. k0 l# H+ ^2 t8 U- @8 @- A
SIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号3 h* i- c8 ^& h: N' T
SIGNAL KEY_PRESSED_ASY:STD_LOGIC;
6 S' x* w% c1 l2 f4 @# b5 P    BEGIN1 X! e3 g  a+ ^# l  E
TEMP<=KEY_DRV&KEY_IN;
% @# q: v2 t7 r8 Q6 r! s PROCESS(TEMP)1 Z; q- p7 D9 [6 R* x$ Q
   BEGIN3 |9 H) U5 _: B' \/ J1 r/ q% @3 Z
      CASE TEMP IS
8 M/ l, x/ `3 y+ g      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);* Y/ ^9 ]# f. T$ W9 m
     TEMP_PRESEED<='1';$ C% h+ q% A( S* y# i* Q9 h9 e3 `# o
     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);
2 t4 v  T4 t% h# }* o     TEMP_PRESEED<='1';& Q- R$ s! d' e/ H! K! E, q: I
     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);
2 m' u2 O! s: }% ^! b  C/ V+ ?     TEMP_PRESEED<='1';, ~6 q+ A% v! c  |- b
     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);$ z; B  r, S* R
        TEMP_PRESEED<='1';
% J; |1 N9 _  r! h7 V     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
- c9 r4 P# p5 X6 x' i) @. Z7 x  p        TEMP_PRESEED<='1';
$ x0 ]# y. T2 G     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);  N0 {# I! g5 `6 w: p) ~1 C
        TEMP_PRESEED<='1';
3 e: L" N0 F# z     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);+ M$ _! w. S& ^: S  M
        TEMP_PRESEED<='1';, N  k" O% b) G: d5 _+ K2 d" U
     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);
$ q) y% p" M+ e: D7 S6 O        TEMP_PRESEED<='1';
6 U4 w2 |, h  m" v. z3 t     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);$ M. ~+ {" ?, ]9 f5 I" g0 p
     TEMP_PRESEED<='1';5 u( t/ c0 I2 B+ z$ Y  R
     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);9 I: J4 F" S( U; V6 x) n, x2 c9 O( D
     TEMP_PRESEED<='1';* ^; p3 i( o1 _9 z  ?8 r6 b2 ^+ k
     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);/ r: `$ H4 l7 `' j& ~! L
     TEMP_PRESEED<='1';
' K& k+ \* C  J5 o+ i! n     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);
$ C1 z% P( }# \3 ^8 Z+ h- N( ?& Y% @     TEMP_PRESEED<='1';# S- O; r; u2 _1 ]  n
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);$ X; c* ?$ y7 E) ?, T: d) T
     TEMP_PRESEED<='1';
) H1 K, R" R0 D$ t     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);9 |* Z( f, ?# U, V7 @4 a& B
        TEMP_PRESEED<='1';( m; N8 T5 s" m( |
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);" B, \# n% H5 {. n( C) V0 q
     TEMP_PRESEED<='1';
1 u) G. G' J) Y9 _+ ]9 i     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);6 D2 U% f* |( y) I9 |) I( ]
     TEMP_PRESEED<='1';
8 D9 d9 Y8 f* _+ G     WHEN OTHERS=>TEMP_PRESEED<='0';
5 E# @" a  s2 y" n& @            END CASE;
) M% s% C* T2 Q  T8 _& s END PROCESS;
( s/ o* ~6 }1 G0 n& T% Q        PROCESS(CLK_SCAN)& @0 D2 Y+ Z! i; ]1 d
         BEGIN
# i# {. p0 L1 h+ m% l" f, {5 G. X   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN
) A: k! V/ J+ Y3 A+ S' z6 N   TEMP1<=TEMP_PRESEED;) y# {: N& h' Y- r/ g' ~
   TEMP2<=TEMP1;! R- C, g. H6 f6 c
   TEMP3<=TEMP2;
0 Y/ e, |) @1 z   TEMP4<=TEMP3;
  S# S+ M+ i* y% U. ~# \7 x          END IF;" O6 Y6 i. p3 \. F; G  K2 v! j
   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
7 t# b5 ^. W$ a( }        END PROCESS;: M+ ?4 |4 Q& y; e" n' r8 h( l# r! v
        PROCESS(CLK)
- h3 E; X& s9 ~0 x: r    BEGIN
# h% @# Q$ ]. g' E  IF(CLK'EVENT AND CLK='1')THEN7 [" C( h0 S% U7 X' @! b
   TEMP5<=KEY_PRESSED_ASY;
) a  @# P( g! v. e+ Z- P4 m   TEMP6<=TEMP5;
6 N1 `- N: p: V' ~# M  END IF;% a. S! }) t8 U9 @3 C7 R
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));% r0 _9 \2 h: V3 b8 w6 e4 ?
END PROCESS;
/ ?) l. B. c* ^3 i. GEND BEHAVIORAL;7 s, d' s8 Y- W

$ e1 k$ g! l9 O

无标题.jpg (13.47 KB, 下载次数: 1)

无标题.jpg

该用户从未签到

2#
发表于 2011-8-12 15:24 | 只看该作者
,貌似很难哦

该用户从未签到

3#
发表于 2011-8-14 18:43 | 只看该作者
语法角度上应该没什么问题。但是时钟太乱了,有三个,TEMP,CLK_SCAN 和 CLK,而且信号在三个时钟域之间传输。如果CLK足够快,建议只用CLK作为时钟,CLK_SCAN作为enable信号即可(采CLK_SCAN的上升沿)。而TEMP可以不作为敏感新号,放在CLK时钟域就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-21 11:00 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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