找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划

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

查看数: 1088 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-7-21 00:04

正文摘要:

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

回复

lvsy 发表于 2014-1-22 09:58
你的设计是不是可以改成这样?" G, q! R. \7 \0 {6 c0 q" y
always @ (posedge SYSCLK  or negedge RST_B)
9 @4 P9 q9 ~) e! ]  W! |' R9 sbegin
0 z' G( z/ x# _) G; h  if(!RST_B)
( T) b$ S; E/ d7 |- _    TIME_CNT  <= `UD 20'h0;0 S* j# y/ C& N8 E! J
else if(TIME_CNT == 20'hf4240)
4 y9 n4 \7 Y7 p" N- M& _* r    TIME_CNT  <= `UD 20'h0;
; j5 \) Q4 ~9 j" d" P( w9 Oelse 0 y) M- `  B, s% h
    TIME_CNT  <= `UD TIME_CNT +1'h1;
7 j2 C! z- @# j: a- J; a7 Y- Tend3 m! c# l2 u6 T# P. {! j( k! ?1 f2 u

, d, z, Z2 v' c' I; |* T//Save the key value when some key is press8 h* \5 {  a( T' _7 c4 u  }
always @ (posedge SYSCLK  or negedge RST_B)
; p7 T7 L9 I6 ^5 Cbegin
! _' l6 T! U. {* Y* g  if(!RST_B); b" ]* V  x0 r
    KEY_REG   <= `UD 2'h3;
4 i" k+ r0 F" _* ~  g  else if(TIME_CNT == 20'h0)
  r3 h8 L( x; H8 O/ Z    KEY_REG   <= {KEY_REG[0] , KEY_B};
  T' W( F" K2 Q. Vend# j" n& d3 q7 e$ i6 @1 E5 w& j, t% o
) ]/ c" ^/ S- c' {5 ?0 ~: T. T+ G
: j# ~) ?) J3 g) F+ V: G$ v

0 [% y; K' J0 W8 _# C0 x- E) I//Output control.
! r) l9 z. b  aalways @ (posedge SYSCLK or negedge RST_B)5 B4 s; D) V. c8 n' ?/ W
begin) S2 F3 h  \/ w4 ]  `7 Q, l, I
  if(!RST_B)
* F0 c2 u9 z) g3 q5 i4 P; r    LED_B     <= `UD 1'h1;
7 y# X/ N. H2 `; Q  else  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
$ x% u9 ]7 l' I& u% N   LED_B     <= `UD ~LED_B;; y/ _9 C( }' s  G  ]
end
tsw446507564 发表于 2013-11-19 09:17
你检查一下always或者是initial这里面的敏感参数列表,如果一开始不能有触发状态可能导致未知状态出现
zgq800712 发表于 2013-7-27 08:55
always @ (posedge SYSCLK or negedge RST_B)
. x' d8 Q9 W5 A. Q" p( Q- Ibegin
; l7 o8 z+ [2 u2 T$ F( s% [  if(!RST_B)
  ]* {( T6 P3 F     ***********************************
# _9 r# e3 e8 w1 ?. h# ~7 `5 r$ r- ^' p$ c& D$ m
应该是和这个有关系
pipiliang 发表于 2013-7-21 10:48
来人啊!怎么没人哦!( K+ y# u1 T1 l: {# T
pipiliang 发表于 2013-7-21 00:12
另外,此程序是利用延时20ms的方法实现按键去抖动的,它是每隔20ms采样一次键值,我的疑问就是,它会不会刚好在20ms的时候,按键正在抖动,恰好把抖动的键值给采样了?
pipiliang 发表于 2013-7-21 00:06
下面贴上源代码!. g& {! v6 V% f3 G
`define        UD            #1; P7 E4 ]# r# P; N$ ^* z3 D
8 v* v9 J/ g; D. j5 T! F: c
module KEY_TEST* Q& n- E; a: _: V# `* F/ r6 r; z
        (+ i: ]% Z% U. r
        //Input ports.
# ?- }7 r/ s; O7 N" u$ I  H' U3 T        SYSCLK,      
; M! g& h9 Q9 G. p. B, k9 q        RST_B,
; u4 N. l, \1 P; [        KEY_B,
  V4 Z6 @0 R& z4 d' Z' _1 ]1 |: H6 \! Y2 t' F- T# f
        //Output ports.: t$ W4 l- T+ p( D1 B
        LED_B- _% B  T+ J% X/ u4 Z
        );% E5 u$ x" \5 E% l# h

1 b8 u+ |% n6 j4 }" [: f8 I//===========================================================================
2 J4 r4 E% n$ D4 k  q//Input and output declaration
$ Q! J' O$ f. j  r; x//===========================================================================
6 v. D( o4 e% Y0 ^, o  W9 n4 [- R8 @
input           SYSCLK;                //System clock, 50MHz.9 n9 j7 K0 a/ r" O  x3 W. H
input           RST_B;                //Global reset, low active.
' n/ }# z+ b( r8 m& o' f5 Ginput                  KEY_B;                //Key input, low active.# S9 Q- m; m* U+ e& f' k. G
- S9 k! @! q1 I
output          LED_B;                //Led output, low active.) m1 o5 J8 g7 X' @$ g7 b0 u+ v
  q( Y$ f7 V; b: W3 a7 N4 \
//===========================================================================
) ^/ w) J$ ~4 c! b* F9 G! \//Wire and reg declaration8 y8 l, X% a8 l6 m0 [
//===========================================================================
- J' X# Z$ v$ ^5 m1 G. X0 N9 ^7 Z5 E
wire                   SYSCLK;- R3 z8 h: H4 \
wire                   RST_B;1 Y+ l0 G0 B7 F, ^8 V
wire                  KEY_B;
1 q4 J' o/ r, T& s- w! P7 h* E3 H- L- ?1 t; H( D
reg                  LED_B;( V) w# D% R4 M( s2 f& G
2 H: f, s$ [$ l. N
//===========================================================================
* ^' [( A2 g9 V$ D//Wire and reg in the module - S! E) w" x$ F; `6 ]9 Q# J
//===========================================================================
4 _: X5 ^. P$ K4 F% h3 ~  t$ s4 t- ^  Z& `: u4 I6 W/ m
reg        [19:0]        TIME_CNT;        //Counter, count press key time.6 C+ ?! k8 P& z7 {, i/ l) j
reg        [1:0]        KEY_REG;        //Save the input one cycle every 20ms.
% X! j3 W5 Y3 y9 x0 ereg                LED_B_N;        //Next value of LED_B.* t9 T5 E- p# x( l4 C
! y: [2 [: s) X& p2 i$ E; Y1 d) }
wire        [19:0]        TIME_CNT_N;        //Next value of TIME_CNT.
7 _: @5 v% u$ J: H& H( lreg        [1:0]        KEY_REG_N;        //Next value of KEY_REG.
% u# M+ s) A" V) l* }, y! r8 B2 l8 Y4 r1 j# _4 e
//===========================================================================
. u# f+ v* a4 H( \7 \3 b! a//Logic
5 \) q% L- `: w: `//===========================================================================' B# t5 O6 b) b" F# F
3 U( m& q/ W1 W, A1 N! n
//Count the time the key is pressed, free running., B) i( g2 Q2 H7 T9 l
always @ (posedge SYSCLK  or negedge RST_B)
; h9 t( F3 I+ R& X, B4 _* c" Pbegin+ D" B5 I2 H$ b8 ^" M( I# p. _
  if(!RST_B)# [7 K3 _* M+ D; S- x
    TIME_CNT  <= `UD 20'h0;
: M$ G1 t( a: p  else
# v+ s( f0 V7 C: n7 s* X    TIME_CNT  <= `UD TIME_CNT_N;* _- {' ?* e" r
end
, B! W- u6 G) p, ^. @
& c$ }- G1 I: v  U% M//Count cycle 20ms( a$ z% H) s4 @* w, N
assign        TIME_CNT_N = (TIME_CNT == 20'hf4240) ? 20'h0 : TIME_CNT +1'h1;
6 f3 Z) z% p6 Y( j" x( p2 r
7 h. B  }7 w; _& _//Save the key value when some key is press.& V6 X1 j6 N! Y
always @ (posedge SYSCLK  or negedge RST_B)8 A9 J5 O5 b4 I' [, r2 U
begin
) |' H" B* p3 I  ^5 D' n9 `% k  if(!RST_B)
" n1 k. d* |, i: M1 O    KEY_REG   <= `UD 2'h3;
4 b+ d2 s* X* w! V- [  else
3 D* W  B! T2 k! B+ u    KEY_REG   <= `UD KEY_REG_N;( l9 k. t9 N! w5 {1 `# V
end
* ~1 j8 q. p, J7 `; G
6 `# Z9 P! u7 M/ Malways @ (*)
. C4 M% m/ l  |5 P, q. l6 mbegin: x3 F/ }. b3 r
  if(TIME_CNT == 20'h0)
  Z8 N) r8 P. ?0 B    KEY_REG_N        = {KEY_REG[0] , KEY_B};, l8 p& Z( \  W: ~! O8 ^
  else
+ ]' G. j$ v# P( [* V  F( Q) c1 c    KEY_REG_N   = KEY_REG;
2 Z) d! v4 p& l. k5 j4 m1 f+ N, Wend
' t6 B0 ~" d4 p! t, U
7 z/ n1 A6 A, w/ h" j7 y//Output control.
( {7 |% a- d4 |2 G9 P0 }  Valways @ (posedge SYSCLK or negedge RST_B)& m: x& [  |5 s- d6 q" I- i
begin' x+ s, c; E& j7 ^
  if(!RST_B)
9 F' A1 O- V- [4 o* q! X    LED_B     <= `UD 1'h1;/ D  ]2 ~" R9 |/ d) J
  else
& G5 ?  F/ i/ F2 j9 `" v    LED_B     <= `UD LED_B_N;
$ [7 `8 i* q$ T3 v# G8 o4 Dend8 e, d2 R, W; d  k, J6 R, P5 A- i$ g
# w: r9 }6 H/ ]7 m$ z$ x
always @ (*)1 @! A0 x" C9 y. t* c+ J
begin
5 @1 S# f( J% c( B. Q  if((KEY_REG == 2'b01) && (TIME_CNT == 20'hf4240))
, Z/ b1 ]9 d3 S+ a4 v    LED_B_N        = ~LED_B;! W' a3 Z2 J4 S6 Q2 w8 P
  else
6 N2 Z8 `: p- H/ C1 f4 v    LED_B_N        = LED_B;# O# O9 e* W/ W# i2 c& r
end
) S6 A7 b# `1 A) i; F- X$ f; S$ Q
endmodule
% q) X# g* }9 c" p$ r' N
关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-20 14:51 , Processed in 0.060158 second(s), 37 queries , Gzip On.

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

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

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