找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

2

帖子

-1万

积分

未知游客(0)

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

EDA365欢迎您!

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

x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。- x6 a( J6 e5 `$ K/ z% B$ V
过程如下:我使用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”。即初始化时所赋的值。
2 L: \* e% p+ F% }5 Q然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。
: G, H/ X$ q" X0 N% P$ ?' A7 a+ w4 x. e% z
现把这部分代码粘贴如下:
5 K0 i* A! @$ l3 ~7 Dparameter   Data_First = "This is an App",                //液晶显示的第一行的数据
' m' E8 z* n1 H+ {( \8 O            Data_R_U = "Shift Ri or Up",                      //液晶显示的第二行的数据; m$ B+ G, o# {. o, d, [& t- W
            Data_B_RB = "Shift Be or RB",                9 |, P7 B: D4 t, S( q0 b
            Data_L_LU = "Shift L or LUp",
2 G6 X9 ~! p& [; j+ k            Data_LB = "Shift Left_bel",* _! p& n1 O- s
            Data_L_Button = "You Left click",
$ j$ S2 R& X; p; p! O; u            Data_R_Button = "You Righ click",
+ Z; M8 P1 u0 P- H$ V! q            Data_Static = "Mouse's silent";% p, _: S2 r+ k5 n; b1 L0 |
* c: ^& A( i( n5 v
always@(posedge clk_48m or posedge rst)
) p" X. J3 i/ }- nbegin9 n& H0 M. K8 c
    if(rst)
9 L8 a2 o$ P& I) P, J        begin5 P# X* L5 C; M. z6 ~
            Data_Shift_Direction <= Data_Static;
8 v. P0 p% E+ D: ]5 W' R: z! g9 G* M+ k                    test_signal <= 3'b000;
1 @$ W) R% k3 w        end
+ h/ V! k3 p0 t5 o5 R' b    else7 X- M# q" f* R, ^- d: X  i
        begin
6 d" g( y6 D3 `) Y, Z0 @            if(pro_signal == 4'b0001)   //LED1 light8 _6 }! v" _+ b* W2 x! v2 M
                begin
& b- N3 m; x& Z/ X                    Data_Shift_Direction <= Data_R_U;# I( E: ]3 Y6 |' J1 b
                    test_signal <= 3'b001;- r* ~* ~; N. |8 g9 q0 q
                end
0 m- D  B' u, m  Y) Z            else if(pro_signal == 4'b0010)  //LED2 light
4 E" r6 B9 e2 c2 f                begin9 j! b" [- |% X8 z
                    Data_Shift_Direction <= Data_L_Button;
$ _: M  s- W& a  G: a                    test_signal <= 3'b010;
6 d, P& b  `: N4 _# _                end* T! R4 W" e3 w; B6 B- @$ B! W
            else if(pro_signal == 4'b0011)  4 B! X0 {- ], E% _' N" M5 f+ q* f
                begin
% M5 P0 k4 [6 C7 G                    Data_Shift_Direction <= Data_R_Button;4 j  F) z7 t) K5 u: ^$ i
                    test_signal <= 3'b011;
* r" k0 }: j" W# }" K0 X                end+ K  G/ G3 ^2 q" W8 \3 d2 f
            else if(pro_signal == 4'b0100)  //LED3 light
$ V# y/ \  \' v+ c; {                begin
+ R0 {( ?1 u, q  a9 t7 K5 @+ W$ N                    Data_Shift_Direction <= Data_L_LU;
9 S7 r5 i$ [8 V5 c1 p1 y6 q# g                    test_signal <= 3'b100;0 `. ~7 L3 Z! k9 ^* ~# c
                end. j4 ?- F! D/ X
            else if(pro_signal == 4'b0101)  //LED4 light  Y. ]4 f& [  w' u' W+ Y) C
                begin% X9 g3 N) b3 e& H2 A
                    Data_Shift_Direction <= Data_B_RB;" L% l" z% v1 W" a3 v" q
                    test_signal <= 3'b101;
4 }/ \- L+ \" \& Z5 C3 k  t                end                                                           0 ?$ E" o+ x! ?
            else if(pro_signal == 4'b0110)  //LED5 light& _' S( h$ M) H" u) r1 L  o* ~
                begin
! W3 R3 ?: U3 m8 @, G                    Data_Shift_Direction <= Data_LB;
$ |3 X$ h9 Y% a; `! y4 V. T3 Q                    test_signal <= 3'b110;
' P7 g9 \  k2 B) Z) j1 Y5 m/ o, M                end% S2 d; }" Z+ L, ]5 L. v/ }2 t
            ! s; @! a9 e4 _; G* Y" J6 ~5 F8 e  ]/ j0 H
            else
  o' q+ Z1 |7 d) v# Q                begin+ Z) Q/ Z6 @' ]; n& D6 J
                    Data_Shift_Direction <= Data_Static;1 R+ b- |, x" A3 }3 h' E
                    test_signal <= 3'b000;
* K$ c  W* M; {* w* \: E, F( }% f, S                end4 O6 X# F' C$ ^7 h% u
            
! h3 B) o0 O# c3 P" S( w( ?        end- v0 N, z# z9 Z6 t5 A, `
end9 K% P2 r8 N* }! v

' U0 p* s- e. L) Y! T, s: Yalways @(posedge clk_500 or posedge rst)
7 |5 H/ ~! X. C/ ?begin
0 f) f  v9 s! j( w2 B   if(rst)  z$ `' H& m4 e) L& y
      begin
0 j4 Y% \/ k# Q          RS <= 1'b0;                                       //复位:RS=0时为写指令;                       . |  C7 T- g0 O7 A7 j
          DB8 <= 8'b0;                                      //复位:使DB8总线输出全0    ( R/ \+ \9 m- z2 z! J
    end% F1 H! [# N  l7 Z" G, r- g3 @
   else1 O! f, G% R$ c
      begin                                 * ]' S% Z1 x3 N9 B6 F1 v! c' V
                if(disp_count == 14)                        //disp_count等于14时表示第一行数据已写完$ r0 n! \1 C  f7 b4 w8 R
                    begin' s5 O7 b" a/ s1 I$ C# W2 B
                        DB8 <= 8'b11000001;                 //送入写第二行的指令
9 s0 m6 d5 [- A) u# H                        RS <= 1'b0;
( j% \5 @" f6 G* h                        disp_count <= 4'b0; 6 `1 P1 ]4 j* p4 w$ e3 D  T
                        Data_Sec_Buf <= Data_Shift_Direction;
- A7 J6 Q$ }- C" D6 p* ?# }7 }                        state <= Write_Data_Sec;         
, r! X! Z( x/ r$ b                    end
  Q: f% t( v8 O1 [* Q                else
; w$ v" U2 S4 g$ b  U. u- M                    begin
2 b1 O* I/ b" [- N: ]: N: E2 f& b2 u                        DB8 <= Data_Fir_Buf[111:104];
3 y1 F! b5 z4 N  m8 f                        Data_Fir_Buf <= (Data_Fir_Buf << 8);
1 R/ i8 i$ y: l' S2 G( s, B                        RS <= 1'b1;                         //RS=1表示写数据9 l+ T" C4 K# I2 V
                        disp_count <= disp_count + 1'b1;
; m$ l; i# i0 S. _6 W8 p                        state <= Write_Data_Fir;
; D% d$ Z! Y* L( L! T                    end% Q. t' @- P( ^1 J8 [% b/ @
      end( K& H' q- B! k/ W$ M: D! D0 {
end
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-24 07:08 , Processed in 0.054044 second(s), 32 queries , Gzip On.

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

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

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