EDA365电子工程师网

标题: Verilog 寄存器数据类型更新问题(讨论) [打印本页]

作者: mrforever    时间: 2009-3-17 17:27
标题: Verilog 寄存器数据类型更新问题(讨论)
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。
* }' ?  D9 X5 w& J3 c/ M9 f$ H/ ^6 ^" [过程如下:我使用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”。即初始化时所赋的值。: }5 {% Y% b3 j6 t' B- J& b2 A3 p1 F
然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。
8 X/ {" R4 ^8 I" V$ A  o/ {9 b+ N; O& D% m; d, Y. ^# x
现把这部分代码粘贴如下:0 f9 V" K1 p& M1 L( b/ ^
parameter   Data_First = "This is an App",                //液晶显示的第一行的数据
. _5 W3 t+ [8 c' _& O6 N            Data_R_U = "Shift Ri or Up",                      //液晶显示的第二行的数据
. e9 ]6 f* n4 d0 S; a/ E            Data_B_RB = "Shift Be or RB",               
% L0 n% U/ m& g0 i& T            Data_L_LU = "Shift L or LUp"," M8 u/ w9 l5 ?8 ~& G) ]" u
            Data_LB = "Shift Left_bel"," i& a7 H: }4 L4 I& I/ ]. d$ l+ R
            Data_L_Button = "You Left click",, W7 A0 T. _: j& Z, [  }' w
            Data_R_Button = "You Righ click",
5 I' |! k& `4 T            Data_Static = "Mouse's silent";' n. z$ p+ _% P

+ {5 K6 R7 r+ k* Oalways@(posedge clk_48m or posedge rst)2 M$ V0 W$ ~* J) l- b
begin
; L. {: f" m+ E) m7 w    if(rst)
- I% @1 Q5 S5 A. K% Q* ]        begin  e& A5 b* E5 a; P* T# T2 {
            Data_Shift_Direction <= Data_Static;% F, N' h$ t, a
                    test_signal <= 3'b000;: Q% x5 y0 i8 v# q& ~" q
        end. D7 v  F/ s" \+ B. I! J) \% Q2 Z( ~
    else/ {: d0 r/ _8 p+ R, ]
        begin# F2 B% A1 z* }$ P- ?- f
            if(pro_signal == 4'b0001)   //LED1 light+ X7 E* y" M, |
                begin: I! J1 c  p) _. _4 W8 h$ d
                    Data_Shift_Direction <= Data_R_U;
& R  J1 [* o  z' R9 ^                    test_signal <= 3'b001;
7 s8 r# F) P- T4 \! h: |* Q                end
; f) Y) u* l. E; N) t% t            else if(pro_signal == 4'b0010)  //LED2 light
* I' ?. G4 U* u; a4 p: l                begin
, G* d9 Z5 [7 I% a) w) Y                    Data_Shift_Direction <= Data_L_Button;
( h7 O4 M" o5 s  \  s8 }5 A                    test_signal <= 3'b010;
2 f2 y, J9 L" k( H) N9 m  l) O, s+ _                end8 F" O' e+ X. M0 t0 a( J6 r9 t
            else if(pro_signal == 4'b0011)  : y1 |0 }- _, h) }, @' q2 u4 e
                begin8 i1 L! A$ U9 H+ r! r
                    Data_Shift_Direction <= Data_R_Button;; Z4 W& z5 A8 D( F# Y! W, a% ^% G
                    test_signal <= 3'b011;
$ }' m/ ~. Q, h7 U; W                end; S; C5 v4 d+ G! U% u( @; ]% H! W
            else if(pro_signal == 4'b0100)  //LED3 light
8 [- F. @& t4 _                begin
7 o) B6 I! G8 ~                    Data_Shift_Direction <= Data_L_LU;% N. M  K# C# f% `" L: D' K% A5 ]) Y
                    test_signal <= 3'b100;
: c0 I9 g/ e$ m$ o& N                end
! e+ _; u# {1 I: l$ B" l            else if(pro_signal == 4'b0101)  //LED4 light! f5 M) U) c+ t4 x5 E- l0 i: H
                begin2 V$ s9 [7 I1 W+ w
                    Data_Shift_Direction <= Data_B_RB;
9 N3 H0 `. A$ T4 z# X                    test_signal <= 3'b101;- k8 h: F* h) \3 H& g
                end                                                           / a4 |6 H/ Q+ B
            else if(pro_signal == 4'b0110)  //LED5 light
( L/ k9 {/ r& V& \                begin7 S' u- Q# j$ W* ~# X% @
                    Data_Shift_Direction <= Data_LB;$ g5 ]0 t3 B& V
                    test_signal <= 3'b110;
+ e) s5 t. O1 m4 l& ]                end
) Y% J, H6 W. G/ e- N8 I& z            ! V) |1 w6 b& i
            else
8 v0 I& V8 u2 Q$ F0 Q1 ^                begin* A* |: X( L- b7 q5 d1 a) |
                    Data_Shift_Direction <= Data_Static;: {+ l/ }7 d( ], r! |5 j: @
                    test_signal <= 3'b000;; |0 `; O* R3 [0 Q+ E
                end2 b& N: Z  b& Z' I" G/ b
            - u- k! s! L0 V
        end+ z. B8 o# Y5 _6 |2 V
end  N8 B2 n* _' M
) t) U3 k4 w, b& |3 B  o
always @(posedge clk_500 or posedge rst): `8 b5 \; r  {2 c' ^
begin5 n" S1 F8 C7 w$ {4 C
   if(rst)
& R7 ?2 g$ N! S5 P# n1 ?      begin# y9 {2 n: z* [, G1 u# L: C
          RS <= 1'b0;                                       //复位:RS=0时为写指令;                       ; H  ^$ N+ ~& M/ d  C5 h, g
          DB8 <= 8'b0;                                      //复位:使DB8总线输出全0    $ U7 r$ R* y2 O% b$ }* D
    end
" s/ `& J" \, T6 b   else% ?5 D, o6 v' y* Q
      begin                                 
! ^- l& I2 p3 }/ j/ J6 r                if(disp_count == 14)                        //disp_count等于14时表示第一行数据已写完
" f3 [; [, z- f- Q: l% h                    begin8 n& r% i4 D$ Z/ s" E* y
                        DB8 <= 8'b11000001;                 //送入写第二行的指令
# c0 k- e9 a4 M/ F  i. z                        RS <= 1'b0;
0 W1 Y+ X9 L8 U* c6 A) M- l3 y                        disp_count <= 4'b0;
% H$ n! c! V, G& \# s8 H! H                        Data_Sec_Buf <= Data_Shift_Direction;' l! ?' F5 M9 b% }+ v
                        state <= Write_Data_Sec;         : V1 a- A6 S3 S8 D) \
                    end
; \- V: X- n# T& R1 V" s& f                else7 i+ s! ~1 Z) o0 \5 e
                    begin5 t1 P. O* w* J0 D# Q# D, {( r
                        DB8 <= Data_Fir_Buf[111:104];
' b% U+ S. Z& a3 e/ b                        Data_Fir_Buf <= (Data_Fir_Buf << 8);
* T2 n) q, \( ?% A  X                        RS <= 1'b1;                         //RS=1表示写数据
8 b9 g, X/ H' V1 d6 t* ~3 Y, n+ x/ ~' `$ `                        disp_count <= disp_count + 1'b1;* a7 m$ d" U" J' A, Z8 V' I
                        state <= Write_Data_Fir;
6 X$ m9 N4 f7 u. a9 B  s                    end! X( m8 a$ ?" N0 w
      end1 {/ ~& ?3 W% c' h" J
end




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2