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