|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。
; K! W6 P& b) e9 ]+ F: E过程如下:我使用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”。即初始化时所赋的值。4 R7 Q* G. B% k# c% t) j, I! j: ]
然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。
V/ e: r8 T# b; [. ?/ P: a% o6 o0 D) D* e6 k6 P) L
现把这部分代码粘贴如下:5 `' N, X+ C( p
parameter Data_First = "This is an App", //液晶显示的第一行的数据" N$ @7 S. Y" W$ a4 K
Data_R_U = "Shift Ri or Up", //液晶显示的第二行的数据. A0 z: l+ a# R* |( j+ @
Data_B_RB = "Shift Be or RB", : \) g& E9 h- O0 w
Data_L_LU = "Shift L or LUp",
7 [, Q0 l& W3 t( f) H( b Data_LB = "Shift Left_bel",
' q. l1 M0 f9 p& z" J7 }3 T Data_L_Button = "You Left click",
% n* y% H. m. Z5 o0 S Data_R_Button = "You Righ click",
" A3 b- B3 q& X Data_Static = "Mouse's silent"; |3 u" k, ?. t8 q* i9 u3 u" U
- X( [* \# Z! Halways@(posedge clk_48m or posedge rst)
7 `9 \1 a4 C% b+ Z- g1 h& Ibegin
& Y0 C9 n0 D7 D! l2 {" S if(rst)
- |& T, O# R1 C begin& y9 t. J- |, ?- b; K1 ]! I& n2 U
Data_Shift_Direction <= Data_Static;
G3 U. j2 | f4 o+ ?1 o7 t test_signal <= 3'b000;
+ ^) ]; x2 q" S9 L; x+ X. |2 n end; h' w2 a0 G; O( p+ S5 z! q, e
else
2 k4 s8 @2 l- w3 O begin% J# T- V1 v& \
if(pro_signal == 4'b0001) //LED1 light# t- O. v$ J4 |* }1 \
begin: U1 D/ D0 `9 d% K+ ^, ~8 ^: o
Data_Shift_Direction <= Data_R_U;
# s" v% n4 Z! [' B test_signal <= 3'b001;0 ~% h: M7 R; x
end
" Q* y0 N# r q7 R0 c0 E else if(pro_signal == 4'b0010) //LED2 light) [0 T0 X, m7 X" j/ R6 b, U( r; J
begin% M$ i$ T) h) _4 C% O
Data_Shift_Direction <= Data_L_Button;3 ?* X$ ?- q/ G9 T
test_signal <= 3'b010;- r$ Y" [9 R, F* d2 ^
end+ d' N' z; R, n3 H! c
else if(pro_signal == 4'b0011)
6 g) b- L- v4 T5 \: b begin% C% y$ u1 N" o8 k! P
Data_Shift_Direction <= Data_R_Button;5 w! C) \# @0 S4 F4 H) L% Y
test_signal <= 3'b011;
1 h3 w! ^* q5 e% c end @" ?, d c6 d3 t
else if(pro_signal == 4'b0100) //LED3 light+ M; B6 I. U& b, L. K. S
begin
' g" n! t6 | E# S- I$ \ Data_Shift_Direction <= Data_L_LU;
" U4 D/ v- ?6 x; I test_signal <= 3'b100;5 s Q' P- {9 f& m5 H5 i4 Y
end
0 [2 d" ]# u8 e0 z4 c) q5 N else if(pro_signal == 4'b0101) //LED4 light
, u2 [( B0 ?+ V/ F; u$ x begin
0 a& h. X" D2 C, O' m6 ]8 H1 ? L Data_Shift_Direction <= Data_B_RB;8 y& d2 y: l# V6 H/ j5 R4 @9 j# k
test_signal <= 3'b101;# O( W: z& D: f9 D+ A% I! {
end / C. `' S& ] H4 k* \
else if(pro_signal == 4'b0110) //LED5 light
1 s5 q1 R1 [! K5 u/ Q4 N# H. W begin
/ J4 P7 ?4 n4 d f2 Z6 L p: j Data_Shift_Direction <= Data_LB;
# S# u# i' K/ v5 K3 l Q) g' _+ T test_signal <= 3'b110;
+ l+ M* U4 L% [ end& Z9 C2 x$ t6 W* B
) J1 Y( E1 M& U% n/ S/ A$ `4 ~
else6 b3 e. k1 R q
begin
8 G' K6 @! x* v Data_Shift_Direction <= Data_Static;
( \* ^5 W7 i; ]" a test_signal <= 3'b000;$ S/ D( r& G9 g
end
! o& l4 j( n9 ?
' E" O) Z1 f+ e& J0 |1 k3 v4 i end# U Y. c1 s L- y6 _' w: Y/ ] T
end1 H/ @1 M$ R0 V- i- P+ D
$ a8 d/ C' J' S2 P$ I, V
always @(posedge clk_500 or posedge rst)
U% ~8 T k# W( d: A$ gbegin
1 s8 Q4 ?0 F. r8 m3 t7 o if(rst)
$ @. K S- x/ x& Z/ I8 U begin
- I) U7 L& r: R- U2 {; j5 T1 N0 ? RS <= 1'b0; //复位:RS=0时为写指令; |+ H. u& z: C' R
DB8 <= 8'b0; //复位:使DB8总线输出全0 , ^0 A2 h& x0 _0 D- P
end
/ T1 Z$ U7 g# N$ k else
' J$ Y5 @5 N- t5 N; d% X begin ( D) r9 y; i' M' A
if(disp_count == 14) //disp_count等于14时表示第一行数据已写完3 c: q' G8 P7 L3 r6 M
begin
( p0 Z+ Q6 p* [: Z! v DB8 <= 8'b11000001; //送入写第二行的指令" ^+ a" u! i/ \. t4 t
RS <= 1'b0;: T Q7 V2 q4 h
disp_count <= 4'b0;
& F+ v1 D( y3 {3 B- E Data_Sec_Buf <= Data_Shift_Direction;
. {! ~- y+ {. u state <= Write_Data_Sec; # D! ]+ L) c. j- ^) W8 o1 k- z
end
; K2 V) U* F4 F) v! |6 N9 C else- W/ N1 n9 f1 p8 f
begin
! I* r& R9 Q! c( }. b$ f DB8 <= Data_Fir_Buf[111:104];4 h1 \! |- y( z: G) T
Data_Fir_Buf <= (Data_Fir_Buf << 8);& C7 a. @+ J7 O9 E% A2 U! W
RS <= 1'b1; //RS=1表示写数据
. h) _ B, d/ P |# e8 v- b disp_count <= disp_count + 1'b1;0 w' h) u! O& U9 m- |! [! W
state <= Write_Data_Fir;
4 t! ?# I3 _. ] r end) F, n0 i* E8 o& c8 z+ n
end- M$ k, u/ X# l# d2 j7 o* s9 y8 b7 Z
end |
|