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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

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

QQ图片20130721000424.jpg

该用户从未签到

2#
 楼主| 发表于 2013-7-21 00:06 | 只看该作者
下面贴上源代码!8 @' w" x/ v/ K0 W+ t# V( J0 {
`define        UD            #1) S( T1 x$ p& m' H$ Y! \  W

+ D( ~. Y/ h% ]2 Y' [& S% |module KEY_TEST
/ a. V2 x3 O* q* q6 i4 }        (- Y: y/ I* n7 Q
        //Input ports.
: @9 J6 V5 S7 q; m$ [% ^        SYSCLK,       * v" Q' l5 T6 q# ~5 [
        RST_B,
6 E8 k: \$ z# \' E9 Z  ~6 y        KEY_B,
% o, X7 j! u: c) m2 {( b+ f( I* k$ \( A3 S+ I' t. r" A
        //Output ports.1 i: N$ o/ O4 c5 W) e) k5 ?, N1 p
        LED_B
4 w. v. Y7 A& \* o        );$ J! {7 _5 X- x/ g
" }3 l/ G+ ~! i- e0 @/ E
//===========================================================================# n# l! C$ E) T% P7 x7 p3 D: ~
//Input and output declaration
5 a  x6 ?  C: y* U( [. V//===========================================================================9 U2 C$ J5 F( \! i- v
$ G& l  T4 B! F
input           SYSCLK;                //System clock, 50MHz.
9 s7 y7 y0 h# g. ]$ ^1 V9 @$ sinput           RST_B;                //Global reset, low active.; t6 G9 ?) ~0 ^9 n( U
input                  KEY_B;                //Key input, low active.
/ B4 V; m) y3 |8 G) a6 h) o( L: G7 h
output          LED_B;                //Led output, low active.; ?0 b" z/ z5 u
8 x& a2 |) |- H9 L9 O8 s" R! U; k& W
//===========================================================================! F' `" O$ J5 n8 e( K) O% M# ^
//Wire and reg declaration
) O# o$ t: o6 \- \, j& c//===========================================================================' k1 K5 c7 |# p- b& Q! }  _
. w- s% Y3 H) q# q: A3 F, {
wire                   SYSCLK;
  h! k! w; y, }) i; Owire                   RST_B;. R; L* f8 W9 {( c; r
wire                  KEY_B;2 P7 A: l/ D; o+ G' P  _" o8 a4 t
! ^# ]4 F4 G. u. J, L8 V
reg                  LED_B;
( f" s: S) W, p4 _
/ u/ l" ~3 U: k6 p  @' l7 b+ a//===========================================================================
  t( `8 S# b$ \) k" r, j//Wire and reg in the module ) c2 l$ |8 a. o% o" x/ i, I' K) A" z
//===========================================================================5 o2 \% k' r# X5 N6 ]: b3 x
/ s  i# H6 m2 k' B4 O
reg        [19:0]        TIME_CNT;        //Counter, count press key time.$ ^( `% a; }2 {& W9 h
reg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.2 D, v* f$ z3 v) M* _! R  ^" M, a
reg                LED_B_N;        //Next value of LED_B.
! r1 Z1 b9 C( [$ q. Q. t# _& b  ^' `- a# _& S7 }. m3 l
wire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.
, [( }! e6 n9 Z7 O* |7 Nreg        [1:0]        KEY_REG_N;        //Next value of KEY_REG.
: Q) ?! K& F+ i
) \" l: E7 k" G; {& U$ |* b//===========================================================================4 g: P; T  P- l
//Logic
* Q4 h- ~2 w0 V( |# D8 y/ g" G//===========================================================================
. s& J( D2 T2 D+ A' k6 y: W, _% T1 U
& e2 W4 J' y' l3 x9 p# \//Count the time the key is pressed, free running.4 |+ m# ^: M3 k$ I
always @ (posedge SYSCLK  or negedge RST_B)6 q" H3 G& }% p0 D/ b
begin$ }; Q8 C; j8 K6 @2 i5 a$ A6 F. c& S
  if(!RST_B)
3 _. L+ j' B: z; f% M; V$ {    TIME_CNT  <= `UD 20'h0;$ m4 M& L- M2 n% [& ?( J
  else
- e6 K- W6 ]# S1 O1 E# Q. {    TIME_CNT  <= `UD TIME_CNT_N;. n, y. h, [/ e: H; W
end$ K' w7 g" J0 t5 M' l

: ?7 f0 S6 {0 J& q. G//Count cycle 20ms
8 ?; Z* g) q; E4 B4 B% p: v* kassign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;
# m+ W/ j: D3 N- K: e# E, E4 _
3 {4 }. k$ P6 t" ]8 G) l, l//Save the key value when some key is press./ k1 G3 r' Y( ]% u/ k& Z/ Y
always @ (posedge SYSCLK  or negedge RST_B)/ R1 ^. U, d$ B7 v2 c/ z6 q
begin  B" X' {: j% s$ {; ?8 j( R
  if(!RST_B)
; X& E& Z8 E% d    KEY_REG   <= `UD 2'h3;
! D; M- K" ~3 P9 l2 r- q+ @$ i" w8 h  else
- m# U% e) \/ A+ t" m  E* c    KEY_REG   <= `UD KEY_REG_N;/ a( w# t4 r9 U% D
end9 K; ]1 c' ]; p* y6 k2 [4 C

4 j! P: _2 ~6 g! v* galways @ (*)
: |4 C+ ~% V4 Hbegin" L' J) g! ?, h# m. r6 U
  if(TIME_CNT == 20'h0)
7 t6 V" F( w  p' L# G" c    KEY_REG_N        = {KEY_REG[0] , KEY_B};
, e3 ?; S! u7 ?6 i) A5 r' H; g  else9 [0 s! F+ G" ]3 k) b
    KEY_REG_N   = KEY_REG;
2 B4 R9 Q( Y- t& U/ p( K4 U0 \end. `9 z! @% q; |
5 E2 @6 O- B- t3 q
//Output control.
' L; x: a2 }2 C. [- xalways @ (posedge SYSCLK or negedge RST_B)
. \2 ]4 f. N9 a! M$ Ebegin0 ?* o& U3 W" z
  if(!RST_B), ^4 N& J1 C( U1 T4 R0 U  r* I
    LED_B     <= `UD 1'h1;6 X: V* q& q4 k& R: |' C
  else. k( R" V0 F  o  J- Z
    LED_B     <= `UD LED_B_N;
4 x- I9 W* l9 v0 aend
5 p# n$ O. i& e4 O, C3 i5 f3 q: ?6 W( v4 {' Q" X% c' }$ \
always @ (*)
- O4 F9 n! j8 a( i! l0 O- Tbegin0 d$ _) q  V, L* S5 \
  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))8 V+ b) u# h2 r2 g& _
    LED_B_N        = ~LED_B;, m3 Q/ f/ ?$ X" P
  else
. c$ `4 Y& G- L    LED_B_N        = LED_B;
% j; ~- P. m0 o# ]4 N4 |4 @end
0 {8 H5 I+ j& k( P6 I" [' a- u" I
endmodule+ \3 B3 A3 y; a9 N

该用户从未签到

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

该用户从未签到

4#
 楼主| 发表于 2013-7-21 10:48 | 只看该作者
来人啊!怎么没人哦!" W' v5 c7 B+ K$ a

该用户从未签到

5#
发表于 2013-7-27 08:55 | 只看该作者
always @ (posedge SYSCLK or negedge RST_B)
1 d) C7 H7 L8 ^6 M3 y: o; F- n4 obegin
- U6 J) V) v1 |  if(!RST_B)
- A) g0 b7 u. Z- s     ***********************************
0 j! A, t' J( N# a6 ~5 e5 \+ H3 [; b/ C
应该是和这个有关系

该用户从未签到

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

该用户从未签到

7#
发表于 2014-1-22 09:58 | 只看该作者
你的设计是不是可以改成这样?* k1 s8 o8 m3 t, u! w
always @ (posedge SYSCLK  or negedge RST_B)* b+ B2 q' R0 q6 b% B
begin
8 K+ Q1 A* \1 x: ?1 r2 A5 [  if(!RST_B)
% x3 M; ?8 h$ }1 z) H0 Z    TIME_CNT  <= `UD 20'h0;( {$ f$ F% t& {3 a: `
else if(TIME_CNT == 20'hf4240)1 j/ ]3 ?+ ?% W9 ^" r/ T8 {
    TIME_CNT  <= `UD 20'h0;
$ o# b' F3 q; q& W& ?else
: {9 I+ b. D  d6 w    TIME_CNT  <= `UD TIME_CNT +1'h1;1 t2 a$ C: u1 v  o4 B  b1 t
end% t  n9 D1 t7 a: {, k0 [4 ~

0 e% ^) ?* \( t1 k//Save the key value when some key is press7 z/ D. m: {2 ?/ A
always @ (posedge SYSCLK  or negedge RST_B)
( U+ @2 R8 w) W! ^7 Q& Y2 M# Sbegin$ P3 Z+ Y8 W0 P7 ]& L& Z$ Q
  if(!RST_B)# L, A; t" K8 W7 H( m
    KEY_REG   <= `UD 2'h3;
1 d. t6 q6 c' ?" O$ Z2 }( Y  else if(TIME_CNT == 20'h0)3 P7 M* K6 U- A  x
    KEY_REG   <= {KEY_REG[0] , KEY_B};
- S6 p4 {# {6 `3 m4 U" kend
+ m1 Q+ o3 S+ `! y
' f- {( d, c% J$ Q" {& ]2 X+ l! v' \* Q2 o1 N* a

8 y. ^& U, Q0 J//Output control.
# J  Q- I9 C  M3 z+ C& T9 Oalways @ (posedge SYSCLK or negedge RST_B)
$ }& _) Z3 n5 D: ^1 r2 Zbegin
( c, m8 T9 f% v1 c# t  if(!RST_B)
1 V6 n" L9 I( }( X4 y    LED_B     <= `UD 1'h1;3 l# f1 @  s+ p6 G7 o. O! c* q
  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))+ M  \, _8 w" E4 v+ U" k: [1 I
   LED_B     <= `UD ~LED_B;
9 Q9 W7 T# o$ o/ r3 A) f* Q/ a) cend
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-28 20:36 , Processed in 0.156250 second(s), 28 queries , Gzip On.

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

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

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