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

请教一个关于modelsim仿真的问题,路过大神进来帮帮小弟,谢谢!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-7-21 00:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
我在用modelsim仿真按键去抖动的时候,仿真图形出现1ns的未知状态,下面上图,谁解释一下,谢谢

QQ图片20130721000424.jpg (67.77 KB, 下载次数: 5)

QQ图片20130721000424.jpg

该用户从未签到

2#
 楼主| 发表于 2013-7-21 00:06 | 只看该作者
下面贴上源代码!
! X; z# s5 P4 k6 ?& s; C`define        UD            #18 G& |) k2 p2 _* J  V' I3 n8 T

, f; B  _( T4 b7 n. G/ n- ]module KEY_TEST
% ]3 o$ [0 e# ]5 f        (
" W4 g4 t( V" N( C, s, u        //Input ports.
3 q" k; I$ e$ G% k        SYSCLK,      
9 g7 m5 [4 U, x5 E4 P# ^3 }        RST_B,  {" S8 @+ ?  G
        KEY_B,
7 k$ ]1 E$ C# @- m% l" s9 a% z8 a& ]& T7 a8 Z
        //Output ports.
4 Q: ?7 b; q3 ~% z5 y% Y        LED_B
$ T  m( X+ R' F9 K2 s        );  f1 E* Z0 e  r
+ U1 ~9 B4 S1 d) O- m3 Z
//===========================================================================. e( v: i3 p: K8 S$ }7 Z+ A
//Input and output declaration
2 Q$ f  e/ g/ l$ K$ f& ?, F//===========================================================================9 ~4 b! s2 z- R1 u8 z# |) }) J' V
  v" }! N' s4 p2 ?8 p# m' u3 Z
input           SYSCLK;                //System clock, 50MHz.) V2 ?7 t, q2 F5 J& Z- p/ s
input           RST_B;                //Global reset, low active.
. v2 P" l6 {$ Iinput                  KEY_B;                //Key input, low active.8 r* @; C; J, a5 E- i2 [) y: U
3 B2 a; |3 B2 `
output          LED_B;                //Led output, low active.& M, e& X, y( B' u7 ~8 J1 x
3 M: [4 a- L1 Y0 J; s
//===========================================================================# g" Q; |: V# `& P3 t. ], b! p
//Wire and reg declaration; a* |9 E: u7 F' V: T
//===========================================================================
1 J7 j' |! a7 q
% i3 u! g" C  rwire                   SYSCLK;. h$ T' P' L) Q2 c
wire                   RST_B;5 w6 D* i& L# J* u+ c
wire                  KEY_B;
4 S1 H, R3 k1 a
, q2 @2 R: a2 b  @. `9 w& J# \reg                  LED_B;
4 V/ h( U( C% \# Y/ Q2 o3 _, e1 L
( S2 X4 E8 J+ d7 u//===========================================================================5 c" U" h! J; x  \, D$ r  N
//Wire and reg in the module
1 E. F1 ^' n& C* f0 a//===========================================================================
; Q- q6 A  C9 ?  c2 ^" V
2 H4 ~6 z8 ?# Yreg        [19:0]        TIME_CNT;        //Counter, count press key time.. u; y4 w3 t2 b4 u$ Z) b
reg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.
. i$ c0 z  @8 E* X+ d: Xreg                LED_B_N;        //Next value of LED_B.8 W$ z% @1 S+ Z4 i  n

( U6 I) l& E! h- s5 N$ u% uwire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.9 R0 e  L) }! ^( }- x0 K
reg        [1:0]        KEY_REG_N;        //Next value of KEY_REG.
. \  r; a2 l+ G6 j4 m0 L# ]5 _- E7 e
9 ^- [- J# {4 {% x# I//===========================================================================8 F) U+ V0 x' x2 u( q+ Q
//Logic
4 z- ^4 {8 ~. E  ^) c/ _0 O# y% y//===========================================================================
, |$ }) ^% E* l/ w0 a
, v/ ^: A1 t% Q1 J6 ?* Y& f3 |1 y//Count the time the key is pressed, free running.
, [& x" _1 t1 X4 J: Malways @ (posedge SYSCLK  or negedge RST_B)! N, S' n% e* z6 y
begin
: i, m$ |7 {8 X7 X  L# X  if(!RST_B)
9 T  p0 @1 z, O. X) d% t! `    TIME_CNT  <= `UD 20'h0;
# }, `0 D% V- T4 V$ Y8 G0 @2 C  else
+ t* t1 y6 p. ~( |    TIME_CNT  <= `UD TIME_CNT_N;
8 H0 X3 j- k& bend
$ A5 x1 H3 d7 h3 G( O3 T* k+ _3 U' I! c+ [% V
//Count cycle 20ms
6 _) g1 M% {1 Z; i2 O" Hassign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;% ^% L3 R8 s1 w5 P' w
6 |# r4 k7 m* C5 Y
//Save the key value when some key is press.% a* C4 W! l+ ~5 u
always @ (posedge SYSCLK  or negedge RST_B)3 P% O: h* {: {4 }
begin
% q3 N2 r2 j2 w& ], L. v. R  if(!RST_B)
; T/ l9 L0 b3 R$ K. n    KEY_REG   <= `UD 2'h3;( [# x" S$ ~+ k0 F
  else % G3 P/ y; I8 `& T" I
    KEY_REG   <= `UD KEY_REG_N;8 y  a6 J1 x) x
end
& x2 p3 B8 U7 y6 W- }, e( @6 c
3 ?+ _$ E6 i, E) j% `' ralways @ (*)" o4 w. b. Z. D9 i- `6 W8 Z
begin5 D) t3 g9 T: ?+ A# h; r; u
  if(TIME_CNT == 20'h0)6 ~7 r* e  F5 l  D0 @
    KEY_REG_N        = {KEY_REG[0] , KEY_B};
" u6 ?. O; d' K& O3 |9 D  else0 G; m9 [' [; @' u* f
    KEY_REG_N   = KEY_REG;
5 s' j6 b1 E# i% Z8 D! Vend7 ]' B  z' Y: Y2 k5 M' G
. [- w% |, t5 V% c! V8 K# _" g/ x( A$ n
//Output control.
5 ?6 S2 \5 o. }1 ?- Q/ Valways @ (posedge SYSCLK or negedge RST_B)
5 u+ A/ O$ E: v3 g8 Q0 Ybegin
- A" r' T& ?8 o) z6 e  if(!RST_B)
" a+ R: p1 Z8 Q$ m$ Z( C; S    LED_B     <= `UD 1'h1;
7 j4 R5 s( ]; M6 J# e4 V; u- e  else$ ]/ j8 w7 R4 E7 v! ?2 g2 O- d+ o
    LED_B     <= `UD LED_B_N;8 u' z( @- J8 C% i0 O& O& i) _2 `4 W
end/ b% S# j( O! z0 [8 B, F. w

5 B5 M4 ^# l; s" `3 ualways @ (*)
9 [/ G5 e$ I3 ?& g2 Rbegin2 L' Z( L7 [1 `2 z2 O# _7 Z
  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))5 r# d8 m+ y. s8 @
    LED_B_N        = ~LED_B;* Y/ p! e# @: H8 o
  else
, q' v# m% X) e/ o3 Z" y$ w2 g1 W    LED_B_N        = LED_B;
. _- ?1 z" r2 C) f( O* ?end0 t+ \% u+ Z: s' z
$ f1 X7 ]. m8 `2 R
endmodule( F. T6 ]6 {7 U6 e* G; Z

该用户从未签到

3#
 楼主| 发表于 2013-7-21 00:12 | 只看该作者
另外,此程序是利用延时20ms的方法实现按键去抖动的,它是每隔20ms采样一次键值,我的疑问就是,它会不会刚好在20ms的时候,按键正在抖动,恰好把抖动的键值给采样了?

该用户从未签到

4#
 楼主| 发表于 2013-7-21 10:48 | 只看该作者
来人啊!怎么没人哦!/ k: J- u! V9 O4 ?3 D* C" `

该用户从未签到

5#
发表于 2013-7-27 08:55 | 只看该作者
always @ (posedge SYSCLK or negedge RST_B)3 X' W$ R- S' a1 f; k  N3 E
begin
: x) ~& K% ?! Q3 b% O" m& Z+ v" [  if(!RST_B)) S1 f4 x3 G! b
     ***********************************5 l- y: R* Z! ^% W# f1 F! L/ u( S
# C  f' e  Q& T
应该是和这个有关系

该用户从未签到

6#
发表于 2013-11-19 09:17 | 只看该作者
你检查一下always或者是initial这里面的敏感参数列表,如果一开始不能有触发状态可能导致未知状态出现

该用户从未签到

7#
发表于 2014-1-22 09:58 | 只看该作者
你的设计是不是可以改成这样?
) U6 B* D6 F% u4 i6 s2 valways @ (posedge SYSCLK  or negedge RST_B)' x* ?5 f7 T/ }3 g8 H" U4 }
begin8 |& P+ o, U& G# N! _
  if(!RST_B)
6 K2 g% t3 n" E3 ]    TIME_CNT  <= `UD 20'h0;
8 c" E5 s- W* c8 x* R7 R" melse if(TIME_CNT == 20'hf4240)
: O, T, F0 Y' D3 c# R7 _    TIME_CNT  <= `UD 20'h0;
( G" b9 q5 D$ d$ k4 B  z/ jelse 8 B; {/ N9 c) S" T7 Y
    TIME_CNT  <= `UD TIME_CNT +1'h1;0 J& G8 h* m* O3 N8 }1 `/ M
end. b" a! R: d; F- X5 c( |+ y

6 H1 {' T/ b; d% x5 s! F6 k+ a//Save the key value when some key is press
& q7 R8 J: Z- {+ |: N0 q- x6 Ealways @ (posedge SYSCLK  or negedge RST_B)
. w  c# K. E3 L$ g/ B5 v% J( Vbegin( g, l' G- V5 w6 a) ~8 d
  if(!RST_B)
: ]6 S4 C5 o' u& Z    KEY_REG   <= `UD 2'h3;
  A- \7 d) c- N- Z, B  else if(TIME_CNT == 20'h0)1 }, f; U( p: ]; u% m1 R0 V) \1 \
    KEY_REG   <= {KEY_REG[0] , KEY_B};
1 N: C: |5 z: s: f! Z/ bend9 c5 x9 L9 J: U% O9 W

8 E3 c6 y* r. P1 z3 D8 s2 n' F  ]* X5 _8 n  C
" z* _" L5 o9 i0 ?
//Output control.# L) P5 l1 w  Q9 |
always @ (posedge SYSCLK or negedge RST_B)
0 U' w5 c6 W6 gbegin. P4 o) t3 j; x- V' r
  if(!RST_B)
  J2 c3 b- H! m. s) n* p4 c; u5 P    LED_B     <= `UD 1'h1;
. B2 |9 F2 j8 M/ b  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
  n' U5 r& r$ A' R9 T   LED_B     <= `UD ~LED_B;
) c! ^, i5 f% _/ p. Zend
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 04:27 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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