找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1090|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

4

主题

43

帖子

913

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
913
7#
发表于 2014-1-22 09:58 | 只看该作者
你的设计是不是可以改成这样?
: ^* F* ~- ^0 S" T  |/ @always @ (posedge SYSCLK  or negedge RST_B)+ }  o8 F- D3 x! i$ q% x. t
begin
4 w( c0 f6 u* G2 m. Q# v& X+ }  if(!RST_B)
7 l. e5 {% y  x    TIME_CNT  <= `UD 20'h0;
1 G7 |2 t& b# {1 a* v+ gelse if(TIME_CNT == 20'hf4240)
, N! ]- Q0 S# ^7 P, |+ `    TIME_CNT  <= `UD 20'h0; * J7 X& g) D- ~3 t1 V3 D  J
else
7 p9 U& ?" C/ \, w6 h# F- l    TIME_CNT  <= `UD TIME_CNT +1'h1;
* N) A0 T6 w6 D, }$ F- ^5 gend" p8 s% T$ d. x. u) N

, f! n- ]' r7 p8 e//Save the key value when some key is press  a# q0 Z6 C9 Q/ n
always @ (posedge SYSCLK  or negedge RST_B)2 y3 c5 \* h% o% e% q8 D3 R
begin
% M9 l5 g/ K& z/ V7 R* Z  if(!RST_B)3 b" P2 k; E; ?" B& P% {6 ?+ ]
    KEY_REG   <= `UD 2'h3;( ?% ?& J, u8 h/ U. X- a
  else if(TIME_CNT == 20'h0)
1 m: _1 t- c" g! C1 H    KEY_REG   <= {KEY_REG[0] , KEY_B};
/ Q, Q3 a7 A: h- Jend4 `5 Y9 g1 _$ @( G6 |% l
) N* ]5 I* i6 u4 ^
2 p. }! a' J' f: V: y3 s  ~  `# {2 _
( I2 s4 U& \, d% B8 l) V
//Output control.5 L9 g8 J; O+ U' c: ?
always @ (posedge SYSCLK or negedge RST_B)
6 n4 x% m) {4 A2 ~+ mbegin
1 b9 [) n+ B9 F* j% z  if(!RST_B)2 J/ H7 x5 F9 B* E0 c
    LED_B     <= `UD 1'h1;
- y2 L1 d; M' j( `0 Q  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
9 @6 E# U# a; ^. R& H! {( f7 G   LED_B     <= `UD ~LED_B;
- `: t$ Z) C, [( m8 |& ^end

17

主题

93

帖子

378

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

49

主题

670

帖子

4310

积分

五级会员(50)

Rank: 5

积分
4310
5#
发表于 2013-7-27 08:55 | 只看该作者
always @ (posedge SYSCLK or negedge RST_B)
; A( n" A" h$ y0 @2 W5 wbegin
/ p' ~0 I2 L+ L% a  if(!RST_B)6 X& O' m6 |% [+ v2 Q) U  l
     ***********************************
* m- i- n4 P2 }9 F
7 v1 {* E! p5 Z1 \5 [应该是和这个有关系
硬件工程师[原理图+PCB],电驱动方面,无刷控制器,电动工具,太阳能无刷泵,锂电保护板,仅限Altium。

25

主题

95

帖子

447

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
447
4#
 楼主| 发表于 2013-7-21 10:48 | 只看该作者
来人啊!怎么没人哦!. w& C* A1 W8 D& y- X

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
2#
 楼主| 发表于 2013-7-21 00:06 | 只看该作者
下面贴上源代码!0 ^5 y8 n' X) w
`define        UD            #1( Q2 V+ z! r/ c; o# y

" b5 W& @9 P5 Q7 C5 }  a) G' ?4 @module KEY_TEST
2 T/ o8 {: z1 S        (4 T4 `& k& {8 K0 W: i
        //Input ports.
% y- r1 k: H! K% J* ?4 @        SYSCLK,       6 c( ^0 A, }/ m5 C% r1 S$ K- @
        RST_B,
# p1 J2 Z$ x9 C1 @* o: s        KEY_B,8 v8 U) R0 G; K" z7 T/ D
# C$ x4 T+ f, L% G, O' T
        //Output ports.
; ?3 @0 S( _6 }* i/ u6 _% r' Q        LED_B
! }$ {% Q" `0 U1 F5 q2 i! M5 w  r        );
2 v, U0 k2 b3 o, k: D! g* M5 k" @. K) `% i+ X0 Z
//===========================================================================
# c. j0 k+ Z. a//Input and output declaration8 M+ q3 z3 F! q+ o
//===========================================================================$ R( A& P% X4 e5 s
* C0 v9 I8 ^9 _- `; z) s4 Q
input           SYSCLK;                //System clock, 50MHz." w# Y0 ~! G/ `/ F; F
input           RST_B;                //Global reset, low active.. m6 H" x, ?# q" s
input                  KEY_B;                //Key input, low active.: ^2 }9 R4 U8 m; Z9 H  Q. t0 A! d
  B% {" \1 N4 g' @" W
output          LED_B;                //Led output, low active.
% `0 Q* S# I6 U! f  I  p5 h! m4 C& Y) A
//===========================================================================
4 h" v; J1 T6 W' o5 J( S//Wire and reg declaration
/ p  K/ Y1 L; T' i1 y//===========================================================================
- y; G1 A, M; v) m) n4 }/ l* q3 t6 P! a$ ]
wire                   SYSCLK;2 n! I! `8 [& P* J; M+ \; {
wire                   RST_B;" V' |$ j6 C( n; s) ?" T1 s
wire                  KEY_B;8 y1 u1 Z4 A2 J2 O' B' m" e

5 T9 F+ z# D( \& a3 Z7 m* I8 m+ t+ F$ _reg                  LED_B;8 _/ S4 w% ?% \' k" y. B1 Z

/ v+ C  i5 c# v% |2 _: g2 w: b4 H% W//===========================================================================
7 M, m! i& p: [, X0 s  S0 g- t//Wire and reg in the module * I/ t" P/ ^/ V" M; H
//===========================================================================% W4 [- o* b6 B  N; e0 e2 I# W
9 G0 t5 v; ^- f" }1 O
reg        [19:0]        TIME_CNT;        //Counter, count press key time.
( R3 a4 {' c. ?reg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.; a; I: N4 J: a  [; Q* l
reg                LED_B_N;        //Next value of LED_B.
( G& q: o( E/ d
& T  I5 J, h8 f) F7 C& G2 Uwire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.
- X5 O  z, W0 O. t6 I* rreg        [1:0]        KEY_REG_N;        //Next value of KEY_REG.
0 Q& }6 s3 X* A+ O' p+ L' Y: k% Z  l% ]: k7 H; n" [( f
//===========================================================================
) J* ~7 i4 ~0 G; V2 T1 @; }, M//Logic5 K! `  m- ~# J/ ]1 i
//===========================================================================
/ B  c' U3 |5 r1 d
9 ?9 g; ~5 z, t- N: H//Count the time the key is pressed, free running.
* N8 }7 g+ D4 F: {always @ (posedge SYSCLK  or negedge RST_B)2 N' F' e8 ]& m1 I' Z& m: \6 G, i3 f
begin& @. y+ A2 H1 U0 u
  if(!RST_B)1 g9 |+ |1 i3 d. [" [+ v
    TIME_CNT  <= `UD 20'h0;
4 K% d9 n# \4 v  else / S( K4 a' q. s! Q
    TIME_CNT  <= `UD TIME_CNT_N;
; g/ A$ ]0 y2 \) V5 h9 bend- J4 Z. O, |+ K0 l6 H; C8 n
( @+ B) J3 y7 _: M! ~
//Count cycle 20ms9 D, H. `; L( }! X) N' v6 @6 y: d
assign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;
9 K# `; v0 O* i. u! |3 ^: v" T* q8 x, e5 F! S) l3 b
//Save the key value when some key is press.  X9 h. \5 x. X# w$ C( @' _! @- L0 k
always @ (posedge SYSCLK  or negedge RST_B)
, \; u+ `: J; R& e0 `begin
0 ~8 d0 r1 f4 y/ N# S  if(!RST_B)3 M( O- y, }# d7 B# r) H
    KEY_REG   <= `UD 2'h3;
% B  p" o0 O/ Q9 |8 u( T+ ^2 v" q  else : \+ R5 u0 [) l, W" f& w8 B! ]
    KEY_REG   <= `UD KEY_REG_N;: `, w& Z  z. |& o6 a2 n
end
' N! Y6 g2 {" }5 G
" t  o( o' O$ e( ?7 Malways @ (*)3 O# s1 S6 ]2 v$ k* g( a6 s. s
begin. E5 L9 z, m9 P& K8 f: N5 b
  if(TIME_CNT == 20'h0)
. o& F8 Y6 E4 l    KEY_REG_N        = {KEY_REG[0] , KEY_B};
7 d+ l' x8 C5 ?$ e( K  n8 n  else
" P& K0 ]5 w* G& i9 d    KEY_REG_N   = KEY_REG;
* \# L* O: X5 E8 Iend
5 j6 g9 x1 P5 p! b4 e/ Y/ V$ `9 _& ?0 a# `/ Q, o
//Output control.
' p5 C; n: ]( `! S" v' N: ?always @ (posedge SYSCLK or negedge RST_B)
7 }; X9 z: G/ `! J% sbegin
9 K: M! C* n) P3 k" g  l; l: q  if(!RST_B)( U: X  t( q- w$ A" Q3 m
    LED_B     <= `UD 1'h1;
: I6 Z$ {0 O/ R) a  else" p7 O* F: ~+ y- U2 ~
    LED_B     <= `UD LED_B_N;/ Z( s$ T1 S! B$ s# S/ J- h% u7 Z$ e6 h
end
6 ~8 b, f$ @* j& c* T! O# Z
3 y3 r( a2 E$ p7 g" Q+ d' C! I, valways @ (*)
3 @$ v5 n8 N5 P( f  P1 kbegin
' `, B' h1 @8 b( l3 ]  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
) H/ j; Z/ S3 ^8 p) c; B5 M8 t" n    LED_B_N        = ~LED_B;( T3 r( X+ |7 Q& U5 F& s' _4 l! l( I
  else  u8 l3 y/ J4 ?' P. R% V4 H
    LED_B_N        = LED_B;7 `5 V+ H3 J+ r; N7 t- _
end
  p  l. \: K$ D( w
; V/ O1 b4 d- o  Dendmodule
, d3 R1 I! a1 V$ b1 M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-20 15:13 , Processed in 0.076511 second(s), 36 queries , Gzip On.

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

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

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