找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1091|回复: 6
打印 上一主题 下一主题

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

[复制链接]

25

主题

95

帖子

447

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

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

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

QQ图片20130721000424.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

25

主题

95

帖子

447

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
447
2#
 楼主| 发表于 2013-7-21 00:06 | 只看该作者
下面贴上源代码!0 H; n$ G! j- ]. H; u! Y
`define        UD            #1
5 Z, R0 x4 w% c
( \/ _2 u8 Y3 Y2 M9 hmodule KEY_TEST
0 I) W0 ^# ?* a* [2 n        (( d; S+ L6 x) R1 r
        //Input ports.
8 R" C2 c# T+ Z( B        SYSCLK,       % Q4 ]! b/ w# M/ L
        RST_B,
2 U( W' ^( V" Q  N2 l1 ^        KEY_B,( H2 l! T7 k% W) v0 \7 J
# e! i* J1 X( d
        //Output ports.1 F! r+ Z4 p4 I7 P8 _) k
        LED_B
. {" \4 s; Z, w) J1 }! ~) d        );. ~0 N- q* ]$ C/ Y" q. Q

; d* k$ y) t; ^  _5 h+ M% S//===========================================================================
, h6 W' ^' g$ t, E3 ~; X# z//Input and output declaration
4 o0 L/ u. b" q//===========================================================================
: i1 _& X: x6 S- Q5 ]9 T- I+ b* v: G2 E  P
input           SYSCLK;                //System clock, 50MHz.
& G2 Q4 S) d6 f9 w. n7 Hinput           RST_B;                //Global reset, low active.% Q- Z, U- p! U" [. }* Z
input                  KEY_B;                //Key input, low active.! I; w/ w$ C& p: e+ i: a1 i
0 h8 p1 ~* M7 N* e, L% s
output          LED_B;                //Led output, low active.2 ]9 _0 C- P7 [7 j+ {/ g$ J7 L

8 p' C, l' d# h//===========================================================================" b' [6 S: p+ X: P/ C' Q5 _
//Wire and reg declaration1 J. E& J. o2 ~; g- A
//===========================================================================
4 l& B  d( z/ _% u
1 H2 b/ \* c! R. ewire                   SYSCLK;0 O/ T5 x8 c6 x# G7 L7 `% J/ F
wire                   RST_B;
$ t- z& O" T# |2 s% [  O8 J& N% Gwire                  KEY_B;: y6 z7 L- N8 F8 x1 }
% Y5 O% N: _6 }* y! l
reg                  LED_B;
3 g$ R& W* k, K# r1 I" ~& a- f2 X) a/ h) Q
//===========================================================================
  n3 n8 U5 h: p4 X) o0 I' o* ~//Wire and reg in the module - d+ B( N/ s8 U9 \- ?( j+ F9 b
//===========================================================================1 m$ U2 z  L5 F4 S6 G3 N

2 N  J0 y5 M) H, Creg        [19:0]        TIME_CNT;        //Counter, count press key time.
( ?- E6 o8 D6 {6 C7 ?0 A7 lreg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.( J" H1 k/ }* F' {! @
reg                LED_B_N;        //Next value of LED_B.
  F$ o" x# S7 u5 @: g$ R
0 x" p. ?: _# I& b# ~wire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.: a: z( e: _1 V+ R, E  a8 H
reg        [1:0]        KEY_REG_N;        //Next value of KEY_REG./ C3 @3 P( i+ F" D9 `

. D' N4 \  H- [//===========================================================================! K( u2 a6 P0 ]8 D% L8 g# e. `
//Logic# k- X+ J% m; t3 }1 b1 u
//===========================================================================
* x% W- p+ ^( E9 W
$ s: I: O, }; X4 V1 k//Count the time the key is pressed, free running.
& n+ |) p+ U0 L, O# i: F0 talways @ (posedge SYSCLK  or negedge RST_B)
, r- }$ z2 o" I# o/ n% O% Cbegin
2 H4 e. y$ @& |: d  if(!RST_B). K. g& M4 S0 C
    TIME_CNT  <= `UD 20'h0;+ S! G% p- N7 e
  else
! V* H, Q7 d  i0 [    TIME_CNT  <= `UD TIME_CNT_N;
( {: \+ ^6 e6 t. Uend3 E, N0 G+ J9 v

3 C4 c6 ~* H) ^" v2 x4 Q  |9 T//Count cycle 20ms
/ ^; t3 {: L; {2 [. D8 Tassign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;( Q# X2 \' L- J2 ?# W2 Q
, ?8 L4 ]3 l2 D; m/ l" g4 A0 G
//Save the key value when some key is press.
/ p% E8 K# I# s: ~# Q2 t9 xalways @ (posedge SYSCLK  or negedge RST_B)
% g; {2 G3 L! ~4 u% [  Z3 m' Gbegin
. Q* l( m/ h, P) k0 _; B1 T/ Y$ K- h  if(!RST_B)
2 e# t9 S; Z5 R4 b" |    KEY_REG   <= `UD 2'h3;
' h6 O/ `  ?' E/ }& k! E  else
9 k, [! s! [- g% s1 \    KEY_REG   <= `UD KEY_REG_N;# r4 ^) _9 S6 }: X3 F/ q
end# D% k) N8 @/ o, F

, n: y2 @3 O: S" q  U5 u% |always @ (*)
+ T0 G: @2 m+ @# |begin1 f$ Q  j& O6 o$ N/ H; x" c/ j3 b
  if(TIME_CNT == 20'h0)
2 p$ V) [2 `& g+ j  J    KEY_REG_N        = {KEY_REG[0] , KEY_B};, b+ A2 _2 H. O4 }
  else
7 Y" w& S) p+ V, F5 @% r# t    KEY_REG_N   = KEY_REG;
* q- d3 L) m! |4 m6 I$ x) ^8 `! xend& f8 s8 E5 Q# [# r

% J' h9 b8 a3 m4 Y( o  N1 P* N) g//Output control.% O6 B! Y+ G/ U; ~
always @ (posedge SYSCLK or negedge RST_B)
8 s4 N5 @5 n5 ebegin
4 k7 n8 Z$ x1 u; k; Q' _  if(!RST_B)0 ^' A7 a& v, K# Z
    LED_B     <= `UD 1'h1;/ R$ z+ n% p' a5 L! {$ W
  else! \" A2 }9 B5 Z
    LED_B     <= `UD LED_B_N;
# d" B2 f# M1 N7 uend
3 @4 J& G0 ]4 R7 J* O
* p# o% b/ ]9 c& `/ \. S# ^# Z! |always @ (*)% [: q# X8 n; `4 H4 X$ r3 t' z7 f( Y
begin4 H) G, X2 W  I3 \
  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
+ K, r' D% c% g: f% j" d7 Z  r    LED_B_N        = ~LED_B;
1 A) \; F: e1 Z, {$ u- i( v  else7 u/ M/ X0 T$ S& W4 Z! Z
    LED_B_N        = LED_B;
4 b, ^5 A' {; `1 K% k$ t) F  q5 U% zend/ u+ n2 S( E) X
0 A% [$ x2 C2 r, h, |
endmodule
; X0 A" v* X( N! [! n

25

主题

95

帖子

447

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

25

主题

95

帖子

447

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
447
4#
 楼主| 发表于 2013-7-21 10:48 | 只看该作者
来人啊!怎么没人哦!6 [( K8 e! T) n  r2 i; K

49

主题

670

帖子

4310

积分

五级会员(50)

Rank: 5

积分
4310
5#
发表于 2013-7-27 08:55 | 只看该作者
always @ (posedge SYSCLK or negedge RST_B)
1 Z6 N4 G. C& n' p( @1 Y7 dbegin' i- t$ `  y! z5 B5 O# |5 b
  if(!RST_B)
/ c& V: {+ A6 X' ^) r3 U: f! W     ***********************************
4 t+ Y; o% l: c2 t
  W1 m% N- `  F  v应该是和这个有关系
硬件工程师[原理图+PCB],电驱动方面,无刷控制器,电动工具,太阳能无刷泵,锂电保护板,仅限Altium。

17

主题

93

帖子

378

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
7#
发表于 2014-1-22 09:58 | 只看该作者
你的设计是不是可以改成这样?( m) C' ^1 e6 }3 a' Y6 i& \
always @ (posedge SYSCLK  or negedge RST_B)
8 h3 K) {) G2 ?' F! Ebegin: b4 W3 K+ W. o, s3 W7 r
  if(!RST_B)
, T/ r0 W: n" b( w7 ]  B    TIME_CNT  <= `UD 20'h0;
+ g9 |" \6 v' \9 v2 l% B' Selse if(TIME_CNT == 20'hf4240)' s' g; S) h& c/ }* O$ ]
    TIME_CNT  <= `UD 20'h0; 2 t3 L. r9 Z) ~1 Q
else
) Z7 t# J  j& Y+ ?    TIME_CNT  <= `UD TIME_CNT +1'h1;
0 L6 \- q+ M& V1 W- \+ u) M* gend4 g' P. W  c9 |4 H4 W

( o, T# \  k" {4 H, L% \9 Z//Save the key value when some key is press1 r& u2 r: a% u5 O: U+ U
always @ (posedge SYSCLK  or negedge RST_B): d( \3 A% h9 A8 n: R
begin4 Q8 e+ k; z. O& K
  if(!RST_B)
" _4 c+ r: L3 Q7 m    KEY_REG   <= `UD 2'h3;
& y. K: {  |) |# K# q( o) c  else if(TIME_CNT == 20'h0)
1 z: k1 ?9 ?  S& i! Z) a5 I0 |    KEY_REG   <= {KEY_REG[0] , KEY_B};
) p* q- q0 w8 V. m  Q) Oend
) ~8 g# i, y. M5 M
) }) l% k+ q* z* |, ]+ I. ]+ _' ^1 b7 M7 k% r" ^- N4 E2 c' |0 j

7 i1 _' x: l7 F; i//Output control.; @- X! s: L9 V, [& a3 P
always @ (posedge SYSCLK or negedge RST_B)
4 ]2 S4 Q! w5 `- ~$ f0 ]# `begin
2 M% w0 r5 N1 U+ J  if(!RST_B)$ ~2 `% D! x3 s7 `) R' b
    LED_B     <= `UD 1'h1;- h. C* ~) o2 S$ r! M# x
  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
7 [0 W1 ]: g5 t: ]- V   LED_B     <= `UD ~LED_B;
4 z1 j# G! r, s, c# O; C) \end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-21 22:17 , Processed in 0.059771 second(s), 35 queries , Gzip On.

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

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

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