找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1087|回复: 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 | 只看该作者
下面贴上源代码!$ o4 u/ L3 T' e& w  U  n' g3 V
`define        UD            #14 h* b3 j9 N  l3 n8 j

( C( Z' ]+ L/ j( ^2 [* d3 R' F# o% x' Lmodule KEY_TEST
- O) V+ [' R8 {3 J% ]! O3 @        (4 W! I6 K3 c0 J' T, U0 G
        //Input ports.
4 J. I; G% r& y4 F. I        SYSCLK,      
% f3 O! F% p3 N$ [3 B8 m! p        RST_B,
) h! I' l( j$ Y8 p( X; S- o' `        KEY_B,1 P9 M' n0 ?; [# _2 ^

% ?+ {& L$ N# p2 P  U# l8 i5 \. i2 A        //Output ports.
* \& {% E: h9 I+ I" R0 }% n' q        LED_B
/ d( U3 P3 B- M        );
* v* P+ W  A7 y1 l, i
0 B) E5 m- @9 ^+ c3 f- L8 z' W3 i//===========================================================================! a4 q. O. M. P+ H9 ]  W% x$ V
//Input and output declaration1 d5 D1 e  o0 Y! M* B* |8 G4 r3 `
//===========================================================================
: ~8 L7 o! \+ G! |; X9 d6 S9 z8 E% W1 L$ j) }% n4 @' ?
input           SYSCLK;                //System clock, 50MHz.3 v: m3 s: @% O: m2 J% _5 J
input           RST_B;                //Global reset, low active.
7 A0 X+ c1 G, w8 k$ ?input                  KEY_B;                //Key input, low active.
1 J" v+ Y1 g) a  b) b
, X/ s3 D0 c* w/ woutput          LED_B;                //Led output, low active.
. s! I' x6 o$ U, Z/ y5 c" S2 ], e, [7 b
//===========================================================================" ]9 T. U1 r9 c& m6 {8 b( Z/ K7 J
//Wire and reg declaration
$ p& T8 T1 Z, ]3 Z. c6 l/ E3 M# |$ c" i//===========================================================================* z1 [; X% t6 A8 j" Z
+ b/ P9 w4 y3 K/ B- ]* i1 ^
wire                   SYSCLK;
( I+ z4 _) W( M0 _9 Kwire                   RST_B;
6 S7 `8 n! V3 ~/ L. e$ ]. l( z% c$ Owire                  KEY_B;3 Y' a' i: o7 ?5 k

. I* L  m% S% v, p" l2 Wreg                  LED_B;; _/ y  C6 c9 B- a
. a; {7 \+ g$ ^! _! `
//===========================================================================6 A7 M7 {( b3 {! T8 C/ k: m$ m  N
//Wire and reg in the module
: s) s" d* L! S& N9 `$ ~//===========================================================================9 }: p# Y/ i8 h( V7 u) |. o

5 M6 g6 o) ]5 d8 x" treg        [19:0]        TIME_CNT;        //Counter, count press key time.
! c9 p( H( N. J9 F" K  Hreg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.7 g( Q  B& l5 |2 f: ]- \* W
reg                LED_B_N;        //Next value of LED_B.
$ D; \% c+ A# f- Q% N  d8 V5 t6 l, H4 Z8 K
wire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.
& P, b6 h1 L# a' a+ d+ treg        [1:0]        KEY_REG_N;        //Next value of KEY_REG.# h( F+ \7 J5 }* r0 s. f3 Y
& G3 {2 \' t$ m9 f8 X: x4 O  @9 m9 k
//===========================================================================1 [( |1 H  H. G/ g* [
//Logic% V! H" W) l/ }( w
//===========================================================================
3 X1 Z* L4 m5 S/ p# x
, s+ `3 S1 Z/ R) E//Count the time the key is pressed, free running.# }+ l  ?1 C1 T1 q' j
always @ (posedge SYSCLK  or negedge RST_B)4 t4 v" _! G8 G$ ]/ u, `
begin4 Y& e2 e4 x: s3 Q1 K8 {8 z1 `
  if(!RST_B)
5 C) E/ e6 o! K" `$ ?% W5 f    TIME_CNT  <= `UD 20'h0;
% g7 J3 o3 u3 E" K  else
5 O# e5 z( {/ f) I3 m/ M    TIME_CNT  <= `UD TIME_CNT_N;
9 h( ]* f1 U% Send. J) a) D$ n* f$ g; V2 W: ]+ \' ~$ S! M

0 {- W9 H3 }; E, N# d3 }4 H; L//Count cycle 20ms
, n; ~4 S4 D, S2 Z9 ?# ~# uassign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;
' W" D7 U$ F) n9 N$ N  D: F7 o3 F# l, G( {, |. W# N! @
//Save the key value when some key is press.
) h. H; {" H2 p5 e  ^always @ (posedge SYSCLK  or negedge RST_B)/ I9 \% C+ q% [
begin
  ^* c6 \3 ?( _% |, r  q  if(!RST_B)
) ?. I9 `4 c5 M% a+ g    KEY_REG   <= `UD 2'h3;0 {! P6 B4 N  `* x7 k$ X; n6 k
  else # Q  i& g0 r# v* F; F& Y2 D
    KEY_REG   <= `UD KEY_REG_N;
7 w; b! @4 e+ E% ]- J9 send
) F- d+ ~+ V: Z2 c9 N  x) T* B- w$ ^- o4 J% ?2 [4 Q2 i3 h
always @ (*)' Q& F! g4 B9 o1 }9 I
begin
' @( K9 J1 ~6 u  if(TIME_CNT == 20'h0)
8 m( x# G7 n$ S0 n    KEY_REG_N        = {KEY_REG[0] , KEY_B};
* f) z8 x+ c0 `. P2 R  else" A2 c0 P% E: \) a
    KEY_REG_N   = KEY_REG;$ r+ q: w  Q3 m
end. M  T) I! b% d! X* M! [- U
2 m/ T5 L4 \9 P, b. s
//Output control.! ]) |% a1 z5 ^: _1 ]3 A0 K" a
always @ (posedge SYSCLK or negedge RST_B)
2 w4 T0 g6 S& K2 J) A( Ebegin' z, n$ U$ z' V! W( L
  if(!RST_B)# J2 [, [$ j: Y  o9 q# U3 c6 r
    LED_B     <= `UD 1'h1;
' S5 }$ @9 c8 d  else
" d6 z" o6 ?' g, L4 P& L- J    LED_B     <= `UD LED_B_N;  |# h& D; q: `& O" h
end
6 g5 o' t9 P! D  U) {/ T4 F$ V3 W8 [8 P% l& G8 Y5 R
always @ (*)
2 y3 v0 s8 \; F  _( B/ ?" Hbegin  ?- i3 `  J; G3 z2 n- C
  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
# P& b2 Z8 C, }( Q& g$ B) J    LED_B_N        = ~LED_B;) k& d+ }6 l; k. Q- F. |% T
  else
+ l0 Y- h) f  k$ h4 o! W. P# t    LED_B_N        = LED_B;
' Y1 ~/ f5 L; ], j7 Vend, d# J1 O) r+ x- f! w+ x
# l" I( Y1 h- O: [7 U, D9 w  b
endmodule/ x: L( d0 B$ T2 V. x4 j! z

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 | 只看该作者
来人啊!怎么没人哦!
3 d) J9 E. g$ A$ E: i4 }

49

主题

670

帖子

4310

积分

五级会员(50)

Rank: 5

积分
4310
5#
发表于 2013-7-27 08:55 | 只看该作者
always @ (posedge SYSCLK or negedge RST_B)7 O* K- A. T) ?% u
begin
! i. t* F( b: E: g' s2 \8 b  if(!RST_B)! t, J8 _/ H) o, P
     ***********************************
4 S' W( L0 J3 o0 b
, x" p0 Q" M0 a( C9 q# P! g/ {# g应该是和这个有关系
硬件工程师[原理图+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 | 只看该作者
你的设计是不是可以改成这样?+ u' {. J, a: v% W2 ^
always @ (posedge SYSCLK  or negedge RST_B)
& g* v0 O" H8 b$ {6 y! fbegin
1 Y- }% K9 l. O5 f; k; V2 z  if(!RST_B)* y! \1 P4 d2 w' {7 U
    TIME_CNT  <= `UD 20'h0;
) o7 c* J- M7 f$ K+ u3 B8 T3 Nelse if(TIME_CNT == 20'hf4240)* E0 `* a" T- T' g. C5 P
    TIME_CNT  <= `UD 20'h0;
% Y, M. j# G. M9 A9 w$ ~9 Melse
! Z$ x6 U( R: [' ~/ |+ e    TIME_CNT  <= `UD TIME_CNT +1'h1;
' V8 Z" {( {; Z1 wend4 D% E0 R& J1 j. J& ]5 p! b/ q0 G

; }1 p  b( q5 ^2 I4 p3 a//Save the key value when some key is press& C1 }; d% I0 z* z2 w  Y3 Q
always @ (posedge SYSCLK  or negedge RST_B)$ p% `+ r" h/ C
begin  Z$ o& h$ b% n) ?! ]! c4 X! J
  if(!RST_B). I" N/ e- k- ^# ~& h+ d) y- i
    KEY_REG   <= `UD 2'h3;
* s8 _0 a0 v" T* T  else if(TIME_CNT == 20'h0)" K4 q$ r" f; b* n4 p1 V/ U1 L
    KEY_REG   <= {KEY_REG[0] , KEY_B};
) |9 c9 M7 q9 Z  Kend
1 ^- [  ]+ \  G: o7 o: f5 t( R& F/ q/ x" d+ z6 X: s' N5 Q
2 t+ \* s. G9 L; a, W) u% `
: h" L* f* f! A1 B+ n' t7 s* y
//Output control.
& _) k* f  o$ a, E/ y9 Palways @ (posedge SYSCLK or negedge RST_B): X$ O7 G5 B8 {; n+ c
begin
! F1 F; b! M/ f% q  if(!RST_B)
/ K1 R5 h3 m- x4 B. u: _    LED_B     <= `UD 1'h1;; A' e: s! T0 h2 T% @5 [% o) \: y  J
  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))6 S7 ]% c8 d4 m6 i6 m
   LED_B     <= `UD ~LED_B;7 o( q0 ^3 [1 m+ F: i: s. y
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-20 03:47 , Processed in 0.060297 second(s), 36 queries , Gzip On.

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

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

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