找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1086|回复: 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 | 只看该作者
下面贴上源代码!/ z( P7 r. d0 v) `/ d" a
`define        UD            #1
7 s1 N* c7 }% u! u3 \
, V8 j( l5 ~( hmodule KEY_TEST  [6 ]( g9 v" n' S: K& k
        (
6 M5 u. V6 `2 W        //Input ports.
, n( \  m3 X4 u1 R! s6 a. \& ~        SYSCLK,       ; {4 a- x; J6 p1 e% j: s- w
        RST_B,- W& u, v/ [+ l# Z* b9 P3 W; ?
        KEY_B,
7 |7 _" \+ i% c3 V
: f) s5 v- `3 R3 O$ x, g/ E        //Output ports.
- x# Q- |$ k6 z* P+ O        LED_B5 E" }" G$ h7 ?$ P9 f
        );
$ l8 \7 y6 H7 @& @! [/ t5 |# _! i* ]/ a9 D3 K2 T
//===========================================================================
% d: L8 m' Y( P# b7 Y2 ?* K. o//Input and output declaration
, q' ^+ m% K2 f, p3 z$ T& Z+ |//===========================================================================+ y6 @7 x, t3 j# [

8 O6 f5 i  \3 H' o; |% binput           SYSCLK;                //System clock, 50MHz.# k" Q1 i' R: w: Z/ h
input           RST_B;                //Global reset, low active.
  q* C. W- l4 z; E6 T1 [+ P$ u4 P3 ninput                  KEY_B;                //Key input, low active.
0 n2 U* }* Q/ k% Z, `. @2 u' w2 i( {
output          LED_B;                //Led output, low active.
+ i$ _, _9 O( v  P- k8 H" U6 p# }! w  g1 W- x' p
//===========================================================================
) S& l1 |! b# X. {+ {" \+ i//Wire and reg declaration& M( z/ w& ]# h
//===========================================================================) a2 H& Z# L$ K5 \

% t# o  M& p" f1 P, V( V5 ~wire                   SYSCLK;' Q$ i, r; v  }7 b
wire                   RST_B;: v" l; F) ^/ ?$ V* Y( l1 B- E9 g# c
wire                  KEY_B;
6 F& ]1 u# O+ `' B* W  `
$ @: u2 K: W" e/ v) x# }9 \reg                  LED_B;
2 [' `2 @. I. k3 \; L, [- W% C2 y* @# R) c% h' v# v8 X
//===========================================================================. v7 f4 P& G) _: D/ E1 h; {. G
//Wire and reg in the module
7 b! ?( s' V8 u( t& [7 [1 s. g% L//===========================================================================, u' S- m0 |" A2 b0 }$ z( J

, t: G! }0 l. W4 ~. b6 X$ r9 D: Xreg        [19:0]        TIME_CNT;        //Counter, count press key time.( H" ?5 f/ }" t1 m
reg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.9 d3 J" G" l1 z. [
reg                LED_B_N;        //Next value of LED_B.4 a% A1 z/ R% f$ }1 X. o: i
" Q/ C8 J, b) E
wire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.
  |; P: v) C  Y$ W& P; l, zreg        [1:0]        KEY_REG_N;        //Next value of KEY_REG.
, M8 L5 Z! s3 k- c
& A* d4 g6 J0 c) S# a, i8 B/ D//===========================================================================3 i! P7 ~7 F  X, Z1 r
//Logic3 A0 U; x; t  o% \- [
//===========================================================================# r9 b8 n8 `( r

& |; ^( W) a9 V& W: q4 p. M& v//Count the time the key is pressed, free running.
0 X3 o: |: Q' ?6 U' dalways @ (posedge SYSCLK  or negedge RST_B)# e! j8 H$ U4 R2 r, X: W0 \- R
begin6 q; r3 L- l  J; W7 r2 N# T
  if(!RST_B)
& q0 u' L3 W/ Y. X1 V4 p    TIME_CNT  <= `UD 20'h0;! \! B+ \6 K' y' }6 h3 |
  else 7 G* }; f; V% s- b9 K9 q1 R/ P, M, Y
    TIME_CNT  <= `UD TIME_CNT_N;
* h# }6 ^) P# {/ e6 R, Rend
+ v: R- R0 W3 A! |8 ?! G  _$ Y6 j. C4 q, l
//Count cycle 20ms" w7 W3 N/ _" i" W+ f! i) l/ F6 _: J
assign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;
' w8 G  p' O8 n! L8 y9 y6 w
" b  U- c1 W+ o6 r( k. g5 Y" w( ]//Save the key value when some key is press.- D- r' U& g2 ^1 V) x, M
always @ (posedge SYSCLK  or negedge RST_B)& g6 J8 K, [5 H
begin2 ~$ b9 z: w" v
  if(!RST_B)
" i- z# ?1 _$ M$ R! m. O" F    KEY_REG   <= `UD 2'h3;  o: w: r: Y. o, d% G; L
  else : Y. E$ I9 Q7 r) A" i+ v
    KEY_REG   <= `UD KEY_REG_N;
, y& p" T9 R! S) xend
/ n8 o2 `3 \- A- w# C" ~4 Y5 ?# J4 k0 Y9 x# `/ M" [
always @ (*)! I2 ?# B" ~% s  s/ T3 W
begin, r1 v6 C3 O$ w1 \5 K5 I, j
  if(TIME_CNT == 20'h0)9 s# H3 e9 V0 G
    KEY_REG_N        = {KEY_REG[0] , KEY_B};
; }) P% h; t" P* V; F( q. V$ ?. o  else
1 j8 X+ s' @4 k) E3 ?! u6 u: F* @    KEY_REG_N   = KEY_REG;7 |+ y0 g" g9 h, c: z% h* ^
end+ ~( i/ f( E7 v) b2 p# C3 \

- C. m2 @8 ^0 e  Z* J8 C! A//Output control.
  s& U( \! Y9 A' jalways @ (posedge SYSCLK or negedge RST_B)/ {, I9 d3 y# F7 T; l$ r6 D
begin1 k! ]1 J" B, c: t! S: x6 {" m, d
  if(!RST_B)
& G# \9 f$ @/ l% K# v    LED_B     <= `UD 1'h1;# X6 Y' \; f/ i; r* T" [. A/ S
  else
- j4 `4 o3 B% |    LED_B     <= `UD LED_B_N;
  |! t# a/ M9 F* }0 J: mend5 m3 y- G- t- k) ]3 C
7 C% F9 @4 Z0 ?8 r# T
always @ (*)
" a! S! }/ H6 P3 r- w3 Lbegin
2 y9 z$ T5 k5 V  I) g. U  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
, d7 k- j% K( d' c/ W" s    LED_B_N        = ~LED_B;! h; \; u" B- g8 j0 K1 R& f  @
  else5 W  A3 V2 K0 \' ], ?) i/ U
    LED_B_N        = LED_B;+ w# f) c" P' t9 r
end
5 i+ v/ f/ m8 h6 L1 d7 r& p
9 @2 M5 x/ ]3 rendmodule
0 e% `/ {/ b) k) N; |; \/ c

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 | 只看该作者
来人啊!怎么没人哦!. a" b# F% R: J" S/ y& o4 c" A* K

49

主题

670

帖子

4310

积分

五级会员(50)

Rank: 5

积分
4310
5#
发表于 2013-7-27 08:55 | 只看该作者
always @ (posedge SYSCLK or negedge RST_B)
) y7 D, |* y  D3 f4 jbegin$ z$ q9 ?5 F# J( K/ a$ m9 X4 s
  if(!RST_B)4 V. [* @+ g4 E
     ***********************************
- E0 I! l" a3 t  C) O, ^% C( N
/ U" T1 D- L5 U2 l( O# U应该是和这个有关系
硬件工程师[原理图+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% e7 J+ j- R+ b4 zalways @ (posedge SYSCLK  or negedge RST_B)4 M  T0 e  j; ^' d+ v
begin
$ X3 A$ Q  D- D, h* e  if(!RST_B), a, E% u% S( k. Z
    TIME_CNT  <= `UD 20'h0;/ w( g' ^' @5 `$ k6 z9 k* l
else if(TIME_CNT == 20'hf4240)
, j' M# g1 ?: H+ c3 d- Q    TIME_CNT  <= `UD 20'h0;
/ c$ F8 h+ [* H# u4 d3 qelse : D9 S% A: W0 P9 f2 \; f4 c
    TIME_CNT  <= `UD TIME_CNT +1'h1;7 s3 b. ~! |, R5 @
end8 W, |3 }1 ^& ~  T
+ b, h7 [) ^# x: b6 V2 ~/ m( s4 O
//Save the key value when some key is press6 F) a9 k( A2 {% E7 w9 c1 K
always @ (posedge SYSCLK  or negedge RST_B)3 n8 N0 L; K; S9 p& d
begin4 ]/ E, T- h* @' d& z
  if(!RST_B), [& d7 e  d$ Z0 q
    KEY_REG   <= `UD 2'h3;
/ p! Z" D2 T: t! d9 U$ W  else if(TIME_CNT == 20'h0)% F8 m+ F1 q% y
    KEY_REG   <= {KEY_REG[0] , KEY_B};6 Y9 q" z. d9 A0 H! x+ O7 e
end- P# g# D% J$ k: S# T+ l. Q

: u- o2 k" K# t( U! N
9 Z( a5 S8 V! p! S: e. W7 U4 Q3 W
//Output control.: Q4 C. q5 ?3 I) ]) S' z: B
always @ (posedge SYSCLK or negedge RST_B)
  L: F$ r' U+ P* G: nbegin
) S( g! r2 F# P1 h) c+ ]( A  if(!RST_B)/ X" F3 h) S9 J$ l9 C
    LED_B     <= `UD 1'h1;
# v5 F; B$ J9 N2 w  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
) \0 M: E: K" x* l9 ^" W: Z   LED_B     <= `UD ~LED_B;$ q1 e; J( V% i
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

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

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

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

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