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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
为什么我的max plus ||一编译就出现一个错误?代码如下:4 V, @2 e2 i4 V- L' M' `' P
LIBRARY IEEE;
5 K& ^% T7 ?7 N9 |8 iUSE IEEE.STD_LOGIC_1164.ALL;6 m* w3 g. }' ^* V' Q7 T7 {6 Q
USE IEEE.STD_LOGIC_ARITH.ALL;2 }  f/ ]6 v3 N' R8 u8 c
USE IEEE.STD_LOGIC_UNSIGNED.ALL;# ^; q5 ]! w) {
ENTITY KEYDECODER IS
/ W7 U  r% t2 C( S) ^2 q    PORT (' \: g& X7 F0 K! y# A
       KEY_IN: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --键盘输入3 @( A8 n& U1 q" T
    KEY_DRV: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘输出
% O/ L, O9 t  Q          CLK: IN STD_LOGIC;                --全局时钟  ]: N4 k/ W8 d
          CLK_SCAN: IN STD_LOGIC;                 --扫描时钟
5 `. _* H' _( x! d! _1 B    KEYVALUE: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--键盘的键值% U. j3 @+ m1 X" H7 d/ n0 q
   KEY_PRESSED: OUT STD_LOGIC); --有键盘按下去的标志
0 i# l4 H& e6 Z( u* @END KEYDECODER;7 t2 i9 U: _- H
ARCHITECTURE BEHAVIORAL OF KEYDECODER IS% E1 Q( ^9 V% u4 c' x" I
SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘的输入信号
( \$ A+ u" w1 g3 T% Q1 c: I3 HSIGNAL TEMP_PRESEED:STD_LOGIC;--键盘按下标志位
' G+ Q$ a2 |- ]9 E3 |( L( x# zSIGNAL TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,TEMP6:STD_LOGIC; --同步化信号
* H& i8 a: g! ?SIGNAL KEY_PRESSED_ASY:STD_LOGIC;/ ?; f, a' A2 j. m  a6 I$ |  Z
    BEGIN( k5 t7 W3 q7 e
TEMP<=KEY_DRV&KEY_IN;; E2 d: V7 E+ I' j& B) J& ]
PROCESS(TEMP)  U; Y' a5 ?- L+ }4 ^! ^3 Z
   BEGIN! H1 S0 O2 H" D' q% O6 f2 P; U
      CASE TEMP IS
# m# j+ n9 S; n' S      WHEN "11101110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(1,4);( P4 I+ @* L/ \) {: @
     TEMP_PRESEED<='1';) V, t( Q" g- i1 f
     WHEN "11101101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(2,4);
, |7 K0 @0 U8 \+ G0 L7 m     TEMP_PRESEED<='1';
, ]8 L0 I) j& U; s$ ^     WHEN "11101011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(3,4);
7 f. F3 I7 j6 N     TEMP_PRESEED<='1';
8 r+ S3 c! ]- H; x     WHEN "11100111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(4,4);
0 O! X% x3 @: P! Q( H4 N        TEMP_PRESEED<='1';
' f: L# ~! g$ d3 j1 E     WHEN "11011110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(5,4);
' {' \& E: b0 I5 {        TEMP_PRESEED<='1';
! n) \+ L; G0 P# H2 Z- V/ s     WHEN "11011101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(6,4);; Z. j5 i) u% N2 \( \0 a
        TEMP_PRESEED<='1';
+ {) Y( {" ?7 ^. i     WHEN "11011011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(7,4);7 e3 {5 a9 _/ ]# j9 P, T- `
        TEMP_PRESEED<='1';
( h& u) f6 k; y- c8 J     WHEN "11010111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(8,4);
& E3 }" y+ X, x; i4 Q1 t        TEMP_PRESEED<='1';
% y; v$ q" b2 c* w# |) B, y) y5 S2 ~     WHEN "10111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(9,4);
! U$ A8 L$ l  A, Z( J     TEMP_PRESEED<='1';
" O# N( E0 I6 m; c     WHEN "10111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(10,4);+ O* Y: K8 f% {; R3 Z+ t9 Q
     TEMP_PRESEED<='1';
  I" i" p* w& f! O+ P! Y     WHEN "10111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(11,4);
6 G$ X( T- u! U5 k; M. D     TEMP_PRESEED<='1';
5 J5 a  ]  ^2 ^/ u9 d     WHEN "10110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(12,4);% K! ]3 u; f, c" E/ [
     TEMP_PRESEED<='1';
: E0 W2 V9 g* s* j0 t' g     WHEN "01111110"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(13,4);
/ _1 h' P- }  N! f) u     TEMP_PRESEED<='1';9 ], I8 `' h% o* O
     WHEN "01111101"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(14,4);
5 R6 A, [7 _/ s) s: x        TEMP_PRESEED<='1';
; J4 F* ?. M1 Q, L# M     WHEN "01111011"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(15,4);5 q; _: Z; S5 f+ B* j
     TEMP_PRESEED<='1';
" ~( M  h9 i4 z4 Y5 w- s5 g5 o     WHEN "01110111"=>KEYVALUE<=CONV_STD_LOGIC_VECTOR(16,4);
$ d5 U1 T5 ]4 w- S% Z: v) d     TEMP_PRESEED<='1';
4 H3 Z9 g; i5 V6 `; ?     WHEN OTHERS=>TEMP_PRESEED<='0';
4 D$ X5 c7 m. Z; y/ z; j6 J            END CASE;
- N8 C4 w; P: H, F4 G7 r END PROCESS;
. \1 W1 a' o+ ]& W+ R' ]: S  v  U, c        PROCESS(CLK_SCAN)) M2 P( H- M0 j' F3 Y5 ?: H/ l
         BEGIN
7 `) ]' p8 [' `0 x$ y0 U  @/ v   IF(CLK_SCAN'EVENT AND CLK_SCAN='1') THEN   Z) o0 [9 F# X2 p. Y, L7 z
   TEMP1<=TEMP_PRESEED;
: P/ I  r- R# u9 C  @$ f+ p   TEMP2<=TEMP1;
0 K9 E$ ?: W) f% R   TEMP3<=TEMP2;
. X+ }+ ~, l& ]" d6 o# Y   TEMP4<=TEMP3;, S4 v1 L+ u8 X* P, |; W
          END IF;
7 }8 X. P* ^  ~+ |8 K2 A   KEY_PRESSED_ASY<=TEMP1 OR TEMP2 OR TEMP3 OR TEMP4;! l4 H4 y( O& K! F* R5 c  X0 t
        END PROCESS;
7 M0 }% _- Q! D& }! O! F: t' I        PROCESS(CLK)' S% J. v2 O; ]& @3 g
    BEGIN8 |. F& f4 ~0 x
  IF(CLK'EVENT AND CLK='1')THEN
5 o" V9 O; k# }! H% L! j5 S. V   TEMP5<=KEY_PRESSED_ASY;* q: x* ~- p' A" P
   TEMP6<=TEMP5;( w" y  F8 t: F. {/ G
  END IF;7 `$ D% O1 U" Y. z# P, E% A
  KEY_PRESSED<=TEMP5 AND (NOT(TEMP6));
0 S7 ^/ }4 S) n" a0 |. B& B END PROCESS;5 R: h4 p' {& g3 r9 E, X4 }
END BEHAVIORAL;' t$ C1 k7 x# d8 J$ N4 `

8 u* D4 s% L& ?

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

无标题.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-10-5 14:15 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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