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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:
4 H& o! T3 Z, M; J8 D/ }LIBRARY IEEE;! U+ }( O  s8 |- U$ O
USE IEEE.STD_LOGIC_1164.ALL;
8 v9 T8 y9 m7 p! C" f8 S3 Y; hUSE IEEE.STD_LOGIC_ARITH.ALL;
/ |9 i7 W  F- A$ R7 ?* N. rUSE IEEE.STD_LOGIC_UNSIGNED.ALL;
" d+ e* z" f2 }ENTITY KEYDECODER IS
: _; x8 O1 P& O$ G! N; n7 K    PORT (
% Q; g" D: F/ X7 c( M- N2 I6 J% z       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入) W) P  Z  f, e6 }* ^) _: H& I
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
* J+ S0 l" i) Y1 }; Q6 q          CLK: IN STD_LOGIC;                --全局时钟
6 p# A# B- k# l# |5 @          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟( C$ D" F& c, r3 b. M; `6 S1 c
    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值  x' d- z- Z0 {. Z& h
   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志4 G, z- I& M& ~  K! L5 q
END KEYDECODER;
9 d% X8 P1 ^1 u) U) A& bARCHITECTURE BEHAVIORAL OF KEYDECODER IS
; }3 p4 [& J0 U, iSIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
5 @+ s  z: s: V8 e3 bSIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位
+ W6 y7 O, Y/ o! L7 I! ySIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号
  m$ f2 _  o8 w- h( CSIGNAL KEY_PRESSED_ASY:STD_LOGIC;
) f- p& A) ~3 A+ V+ Z    BEGIN/ J) w9 Q7 \0 K9 h
TEMP<=KEY_DRV&KEY_IN;; H+ T# h0 X# w; y6 }5 r4 H/ b
PROCESS(TEMP)
- Q* j7 ~! O4 f7 y8 G$ v$ c8 D   BEGIN
$ k# n* D+ `) u; j      CASE TEMP IS
; `; j  i& W! W' P, s      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);( K* f/ ~; p( K( v" g! M
     TEMP_PRESEED<='1';
) |9 ?- ?6 N: n     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);3 h; Y& R$ g, l' F3 _3 O
     TEMP_PRESEED<='1';
$ T! Z) a6 W# Y+ }& s3 u' \: I, G5 K     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);" Y7 z+ O+ }( A- Q. f' W: W* P
     TEMP_PRESEED<='1';
+ X- [/ ?) t1 E     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);: p- t: g- d% `. I. k: l4 j- x
        TEMP_PRESEED<='1';
6 W- f, `# S/ Y( l' L     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
2 ?5 ~2 p9 k. e3 ^/ b        TEMP_PRESEED<='1';
/ {0 y$ @7 P! N     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);
% T/ ?* v+ `+ c4 w: e        TEMP_PRESEED<='1';
1 d: N% f1 T$ o( `% j     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);# E  C8 c% i" v; G) ~  d# x
        TEMP_PRESEED<='1';
* y; I$ N0 [& a7 \6 P     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);
0 h+ _+ y) s$ O        TEMP_PRESEED<='1';
2 n3 C( J/ l+ f. M     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);( u& t: |* v+ _$ W6 i
     TEMP_PRESEED<='1';8 H( M/ o+ {4 T
     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);
% Z% u' _% I! U6 A- r8 c     TEMP_PRESEED<='1';
( I1 [% c  V, r% g     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);7 A. |# e4 e& I& _: ^& f3 P
     TEMP_PRESEED<='1';' _5 J# X/ p; E
     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);1 q0 |  ?* G- S) H, N" `
     TEMP_PRESEED<='1';+ |6 Q* ]4 B! V) z$ E
     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);
7 C! x! F  Q0 j9 z- t9 v. E     TEMP_PRESEED<='1';* D* M. W, S: V" ~+ {5 I8 a
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);, |5 l4 n; [* H& a! |; Q8 y" F# S
        TEMP_PRESEED<='1';9 r" \* G. z! B/ |4 P( v
     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);9 A2 e5 z7 ]7 c
     TEMP_PRESEED<='1';
7 w3 C  G* b; S     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);+ ]* V- S4 I: w% |5 s( @# K
     TEMP_PRESEED<='1';6 z" n5 W# l# U3 p
     WHEN OTHERS=>TEMP_PRESEED<='0';6 x3 k) B; u# n3 H+ `4 h$ G
            END CASE;
$ E; w0 H' |. ^! k END PROCESS;6 }/ X2 I5 I$ [. I
        PROCESS(CLK_SCAN)  O# x" m9 b1 @  `
         BEGIN0 Y' E3 W1 `4 S; b' e! L' N
   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN . q! k( m6 |& s" k( U
   TEMP1<=TEMP_PRESEED;' U& n( V5 f* G, B2 [: l8 U# H
   TEMP2<=TEMP1;
& z9 s' S% z0 ^6 R  T   TEMP3<=TEMP2;
6 n* l; j+ z2 R( k   TEMP4<=TEMP3;
: H) l9 w" ?) q4 O          END IF;
# g- I1 ]- X2 R6 m$ {# R   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;
9 m6 M; o$ ^4 j: L        END PROCESS;
- x& Q. }& T- D6 l        PROCESS(CLK). ?0 I  ]- v7 r" q
    BEGIN. |; C) S$ a0 Q' W5 o2 q
  IF(CLK'EVENT AND CLK='1')THEN. f1 Q+ }# J& O1 V
   TEMP5<=KEY_PRESSED_ASY;
( q4 v/ ], R0 R( C! C   TEMP6<=TEMP5;
: {  q0 o7 n1 H  END IF;9 C! r3 p6 w$ q
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
& @! a2 Y9 z) R END PROCESS;
9 S9 F5 K. Z. I2 e$ ?) ~END BEHAVIORAL;
  V1 ?: e2 ?' i* K1 Q8 O3 M
& U* u3 d/ w: C

无标题.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-20 06:49 , Processed in 0.125977 second(s), 27 queries , Gzip On.

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

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

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