找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1002|回复: 0
打印 上一主题 下一主题

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

[复制链接]

1

主题

2

帖子

-1万

积分

未知游客(0)

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

EDA365欢迎您!

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

x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。- T2 I- P4 b: a
过程如下:我使用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”。即初始化时所赋的值。* g! {; v) Y# g& y
然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。
. G6 k/ ?7 Q4 H  N2 |  q: G/ N8 f/ \7 x
现把这部分代码粘贴如下:0 V4 y9 c3 f- Z. I; f2 U* X
parameter   Data_First = "This is an App",                //液晶显示的第一行的数据4 q% f0 u3 \) z4 p, ^) U9 a9 G
            Data_R_U = "Shift Ri or Up",                      //液晶显示的第二行的数据1 x; i. U* v2 U. F$ q  o* n
            Data_B_RB = "Shift Be or RB",               
4 V; p0 c% {  [- k1 k1 t: ~; l( C            Data_L_LU = "Shift L or LUp",
* M6 m, F( @0 G# e1 R, A            Data_LB = "Shift Left_bel",! Y" M' _% x( Q  q" J& h
            Data_L_Button = "You Left click",
2 \' O' D) n' C: ^  _8 d! P. R8 ?- W* g            Data_R_Button = "You Righ click",2 k$ I  V* p# f4 H4 V( E
            Data_Static = "Mouse's silent";; \0 n- T) n/ s5 Q. j1 x1 t- z' j$ R
! z! D( _8 o7 _) g4 V" n
always@(posedge clk_48m or posedge rst)
4 s; q4 A3 {" z, l, y' O  Bbegin, K2 p; e9 b& k% L7 o8 t6 J
    if(rst)! r' H9 n1 B2 t, v+ ]8 l
        begin$ [( F0 Q  L+ r* x" L- S) E
            Data_Shift_Direction <= Data_Static;( O' S9 S- t- F; S$ q6 D  U
                    test_signal <= 3'b000;4 X. p# T( n1 `3 j$ K9 M4 e$ l
        end
1 W- {6 o/ \2 L0 m: Q    else
) O4 d  ~/ t+ G! Q8 `        begin
6 V, q9 E- y7 ^6 _: V: S* Q, c            if(pro_signal == 4'b0001)   //LED1 light* d6 R8 N6 H' Y4 x$ N  w  R
                begin
8 F9 A; }# T* E( S                    Data_Shift_Direction <= Data_R_U;$ R- W9 k6 U4 E0 l+ b, j
                    test_signal <= 3'b001;
+ i* w/ A  ?8 b0 ~( p1 p4 G                end' K- _. e$ @# G8 c3 L! P, S' T
            else if(pro_signal == 4'b0010)  //LED2 light- V0 V/ z! e0 n5 Z9 b% V
                begin6 Q* }$ F" B7 x$ A
                    Data_Shift_Direction <= Data_L_Button;
5 h8 D/ H+ P) W, t# S                    test_signal <= 3'b010;7 T; o6 U, h4 \) r
                end
3 |7 \' Z/ k9 a' q# S; v            else if(pro_signal == 4'b0011)  4 N+ L) J, m$ Y% b: j
                begin2 b& h/ I3 |" _
                    Data_Shift_Direction <= Data_R_Button;
7 `$ ?* M$ n( X! C. s  m! c1 q. f                    test_signal <= 3'b011;: [0 ^4 P! a: ?% x& L) o- o
                end  d- l; P3 d+ ~7 \% B1 u0 t: g
            else if(pro_signal == 4'b0100)  //LED3 light
0 J8 I0 ]" I0 x$ q/ c8 D                begin
2 l3 p6 Y. O' _, _& I                    Data_Shift_Direction <= Data_L_LU;
6 Z; F/ a- S& Y                    test_signal <= 3'b100;7 o* K* o( Q7 f" Q, Y" i9 K8 W
                end
) Q9 L7 ^( Q! J# g; w            else if(pro_signal == 4'b0101)  //LED4 light/ _! U- G+ Z# W. w0 @
                begin
9 K* x; A1 v" X/ g; e7 h$ T9 e                    Data_Shift_Direction <= Data_B_RB;
# Q7 \" J- H2 J5 a8 \  R3 L% R4 p                    test_signal <= 3'b101;
! J9 Q2 I) ?1 O3 }& E0 v                end                                                           ! s. G7 r3 }# \7 n- J
            else if(pro_signal == 4'b0110)  //LED5 light. @, S9 d  Q3 y) P
                begin
' ~# U# }! h3 W7 }$ [- Y1 x                    Data_Shift_Direction <= Data_LB;8 V$ `  }5 F  }# ~' R
                    test_signal <= 3'b110;' H, m, j" w+ b1 |7 W0 y/ `3 {  {
                end  c) D/ H- H7 ~& ?! {* O% {
            
! t9 ^/ a5 {, |: Q            else! D/ a' Z! z" @* [
                begin- Z! c4 S! f6 W, `$ ?
                    Data_Shift_Direction <= Data_Static;
5 i0 s8 y) T9 y" C7 r- }                    test_signal <= 3'b000;
, m8 o6 G( d+ d- P                end
# r  T" t- K! A8 o; H( q            % q4 G1 l5 b! q& T! s2 [1 {8 Z9 T# s
        end
  {( O* O, }: U% x; ~8 Iend/ I2 z/ r- T# o* N5 V* C
# l3 o" ]5 v& j/ g4 A; L* h( h
always @(posedge clk_500 or posedge rst)
2 `) N6 |6 d: w! `! i3 K" zbegin5 h/ `" ]3 o+ b
   if(rst)8 C# u3 m2 E; r& o7 T
      begin9 _2 U7 J0 m' ]% r0 T( Q# D* L
          RS <= 1'b0;                                       //复位:RS=0时为写指令;                       
, ^0 j& d4 m4 a9 m          DB8 <= 8'b0;                                      //复位:使DB8总线输出全0   
9 M! f7 e  g; u4 ^  o# q    end
' E9 G9 y* a" @. O. t   else7 M7 c6 B+ I  K) Z
      begin                                 
3 c% g5 s$ o  `2 j                if(disp_count == 14)                        //disp_count等于14时表示第一行数据已写完
* R' u# z2 L* i; v                    begin/ l( D* K8 l3 ?3 {% _8 p9 o
                        DB8 <= 8'b11000001;                 //送入写第二行的指令' |$ H, F5 ^. n9 g) r/ Z/ I8 a% v
                        RS <= 1'b0;& d# Y- }( V4 }3 c
                        disp_count <= 4'b0; ( W/ o: x8 @1 b  y6 f. n6 [1 U5 C
                        Data_Sec_Buf <= Data_Shift_Direction;
: ^7 ?0 p* q1 p% F5 K; N                        state <= Write_Data_Sec;         
: \: [- J. A4 W2 @                    end- O) U3 F- c9 b; A5 _, v
                else1 ~2 l  t, E! ], C0 j
                    begin
0 h; P8 v1 _9 s, m* x$ l                        DB8 <= Data_Fir_Buf[111:104];
4 J6 J5 l: V2 }& p, z% q$ V5 z1 f% n                        Data_Fir_Buf <= (Data_Fir_Buf << 8);. a/ |, A) _. i8 B9 F
                        RS <= 1'b1;                         //RS=1表示写数据7 |& T" w1 Y) T5 f0 {) C
                        disp_count <= disp_count + 1'b1;/ @6 \9 ~% `; r) S
                        state <= Write_Data_Fir;
) m! e( K* l6 M                    end
- ?7 ?1 u  F9 k# e) }/ _      end  X# r' r6 \' h5 Z( l' r6 ^' `
end
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-24 08:10 , Processed in 0.055106 second(s), 33 queries , Gzip On.

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

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

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