找回密码
 注册
关于网站域名变更的通知
查看: 1515|回复: 0
打印 上一主题 下一主题

Verilog 寄存器数据类型更新问题(讨论)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-3-17 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。& i- A8 [- s; `& T$ E0 `
过程如下:我使用Data_Shift_Direction作为寄存器类型缓存区。初始时,将下面参数中Data_Static赋值给Data_Shift_Direction。然后根据pro_signal信号的变化将其他的参数赋值给Data_Shift_Direction。但是液晶第二行上总是显示“Mouse's silent”。并没有更新显示。然后我就加了一个测试信号test_signal。看外部模块数据变化时,Data_Shift_Direction有没有更新。结果发现测试信号test_signal随着pro_signal信号的变化而正确变化。这就证明Data_Shift_Direction中的数据应该也更新了。可是液晶上第二行还是显示“Mouse's silent”。即初始化时所赋的值。6 ^. Q! W/ Y' |4 y3 W8 N5 \
然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。
8 X) m7 l1 R/ F. O4 q- ?/ V  G: M* E* f8 Z: _+ ]& y
现把这部分代码粘贴如下:
, Y% O- ]* U( g2 b1 O4 \parameter   Data_First = "This is an App",                //液晶显示的第一行的数据
5 S+ H/ p7 e- E3 n9 ~  E5 b, |            Data_R_U = "Shift Ri or Up",                      //液晶显示的第二行的数据
. @. I& {- x; n4 b* D$ l7 K4 m            Data_B_RB = "Shift Be or RB",               
# N) f$ n/ i9 v# }  j( t* |            Data_L_LU = "Shift L or LUp",
0 t* O" x. S& W6 ?+ Y0 i2 b            Data_LB = "Shift Left_bel",6 v7 J6 n/ U; V% y4 ~
            Data_L_Button = "You Left click",
& N( w) \" v# Y5 H( h! [: n- i            Data_R_Button = "You Righ click",
8 T5 p" V% a: O  u9 G            Data_Static = "Mouse's silent";, ~' W8 s2 k/ `; D( u9 V

  o) L7 V' u7 ]# {& O, Ralways@(posedge clk_48m or posedge rst)! f8 R9 @2 k! q3 y- s' J. e
begin4 Y! W/ T2 k: m8 T
    if(rst)
- J9 x2 `" g  z; J& B4 x4 P9 R        begin. p* N7 E5 [' a* \! ^
            Data_Shift_Direction <= Data_Static;
- N6 y  G7 h: E9 s/ {1 P6 z                    test_signal <= 3'b000;. x% u$ L* `4 q# c. d
        end3 F8 x& t. O; `, W( K/ |: G
    else: y0 P( l2 X' X8 p2 {& D
        begin+ Y) h5 V+ u1 W8 z4 w. g5 R
            if(pro_signal == 4'b0001)   //LED1 light
. C3 W  t0 F6 x( v+ }                begin
2 P- L& y% {3 h! u5 D7 u                    Data_Shift_Direction <= Data_R_U;: M- a, J6 D# u1 `3 g, n1 V
                    test_signal <= 3'b001;: K2 t; U' N/ M7 p( k
                end: a: P( f( }, d' B- k3 \8 A4 S
            else if(pro_signal == 4'b0010)  //LED2 light: _" e' Q* Y; r
                begin) t. p# o4 @9 J! }" e: b
                    Data_Shift_Direction <= Data_L_Button;
' z( k" W. b6 z                    test_signal <= 3'b010;; E9 x8 M& @. J
                end
4 J6 s1 M( ~2 `) Y            else if(pro_signal == 4'b0011)  ( S' }2 B. S5 E0 w
                begin# i* R2 `' O8 a6 C* H$ S
                    Data_Shift_Direction <= Data_R_Button;" T( W3 _# D6 H1 V+ u
                    test_signal <= 3'b011;8 W( a. b; T& P% j, r
                end2 D. |9 ?2 \6 z1 K
            else if(pro_signal == 4'b0100)  //LED3 light
6 q, _4 e, |( w! q                begin1 n, l2 }( c1 R! Z+ W3 S
                    Data_Shift_Direction <= Data_L_LU;
6 V7 W! X# S' A" T7 z                    test_signal <= 3'b100;, l1 g9 h( n9 S0 Z3 k3 i% I
                end
3 w) s! x# M) K( \# Z            else if(pro_signal == 4'b0101)  //LED4 light% A1 @  x, a; N6 ^
                begin
4 i1 S; I" N5 l! x2 w                    Data_Shift_Direction <= Data_B_RB;* r) N& c0 }0 V
                    test_signal <= 3'b101;1 Z( u, y/ |* U4 t
                end                                                           
2 V$ {! i, y* C) [1 k            else if(pro_signal == 4'b0110)  //LED5 light2 F, f+ _; ^" |3 @# g
                begin
! W" u, Q$ d- c: v1 e                    Data_Shift_Direction <= Data_LB;
( t8 {; `5 [0 h7 @# C) O5 ~2 k                    test_signal <= 3'b110;
0 A. E* k* k% R3 v5 S0 c+ w0 \& u                end
9 @  E% ~. r; G- F* Z. l              v9 s! Z7 G4 e1 [1 K' t$ Z3 f5 a1 `- @
            else
- s# m3 \; y, E9 Y                begin/ W6 f5 x5 p8 B% o' _% c
                    Data_Shift_Direction <= Data_Static;$ Y$ E" {% a1 g0 x! h9 m+ c
                    test_signal <= 3'b000;" L) ?+ c) l) P$ n8 _5 C; Y
                end! S$ N  V1 a" w$ ]& L
            
, v7 i) \2 C3 l. T3 k, d/ z6 Q        end# `5 m$ u" k* P5 _* A
end
& _. _3 h- n7 e; M" _
" N/ u7 @0 F2 E" Z7 ~always @(posedge clk_500 or posedge rst)) D6 M& S1 X/ b9 H
begin* m- w: w2 J4 w: X2 M( M
   if(rst)
0 z0 S5 h4 D$ H7 N8 H      begin
3 H2 n. J- o5 i# T5 \+ r& b          RS <= 1'b0;                                       //复位:RS=0时为写指令;                       
5 ]! _7 d( x/ ]0 }2 U) A( q, G          DB8 <= 8'b0;                                      //复位:使DB8总线输出全0   
7 t. w' e% B; v$ r; v. W7 X    end
. n! h+ G* g4 S- N! ~   else
2 W5 E6 h, A" R' V8 Y      begin                                 0 w9 e+ b( u0 K- A4 t1 f
                if(disp_count == 14)                        //disp_count等于14时表示第一行数据已写完* N' [# A  E, [$ B& l3 Y
                    begin5 I* V, d6 s! i% H  t
                        DB8 <= 8'b11000001;                 //送入写第二行的指令  q" X4 b/ U- J3 u2 L5 w  v8 L  Y
                        RS <= 1'b0;" ~( \0 Z' y6 F  r' _! J8 W
                        disp_count <= 4'b0;
0 Q1 H& N  S' i! L                        Data_Sec_Buf <= Data_Shift_Direction;
! f& w! u1 Q) F( _$ K- K                        state <= Write_Data_Sec;         
# V; H: f; `, c  ]4 m" X# j  n                    end# R7 p" Y+ y& l  W* R# D& O
                else, c" G- Y$ p! e& F/ a2 O
                    begin+ Q9 S# {; m& V) T9 u1 t! R9 ?$ n
                        DB8 <= Data_Fir_Buf[111:104];& u5 n& X( i9 l) m
                        Data_Fir_Buf <= (Data_Fir_Buf << 8);
1 x3 c) n( N6 d2 S. Q2 E                        RS <= 1'b1;                         //RS=1表示写数据) M8 f2 B8 Q2 n
                        disp_count <= disp_count + 1'b1;
. I" y7 B# J$ W6 I9 e$ f) w( x                        state <= Write_Data_Fir;
8 Y1 b  X  @, }                    end9 K7 X' e9 v4 t5 J0 Z+ J/ V. c
      end& K/ f% Y# }$ m0 C
end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-5 05:17 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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