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