|
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 |
|