|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。
% s$ }. E0 C) {/ g: C过程如下:我使用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”。即初始化时所赋的值。
" l/ C% H6 I i3 A然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。
& t# W5 ?& S. r1 J2 X+ F" L, X3 @3 \% w% q
现把这部分代码粘贴如下:' l2 F$ u6 e" r, ^
parameter Data_First = "This is an App", //液晶显示的第一行的数据( [7 v& _; ~3 G8 b) O* l
Data_R_U = "Shift Ri or Up", //液晶显示的第二行的数据% D c, H* t4 z O
Data_B_RB = "Shift Be or RB", : R! @- F0 G9 c' ?
Data_L_LU = "Shift L or LUp",% Q' g: I/ _ ~, X
Data_LB = "Shift Left_bel",
! A( }, d8 K1 z# K+ w, |4 B( _+ ` Data_L_Button = "You Left click",
8 m3 B% v5 y8 n, ]# p. c Data_R_Button = "You Righ click",
! N/ r8 b0 h- G! ^ _) U2 V Data_Static = "Mouse's silent";
" G/ \5 \. _! n; M: ?/ w1 _* ?/ z1 L) e0 ?: G% z1 m
always@(posedge clk_48m or posedge rst)! r5 ]) Y/ { @) g" S
begin
4 i8 A& a4 e* X( v3 u* O if(rst): ?7 ]0 Y9 H/ c% T
begin
; |2 N6 T( G7 ~+ D' z7 C Data_Shift_Direction <= Data_Static;
& z: v8 I* e( R' T test_signal <= 3'b000;- P K) A. F1 E$ t
end/ e G0 F4 v7 L) c5 ~
else8 n9 P' @2 l$ T4 }& R) g
begin
* |: G) E) j! |5 s- `# V if(pro_signal == 4'b0001) //LED1 light9 k/ S( i- V' I; j4 j+ G+ A E6 B
begin$ u- G. w# S7 F
Data_Shift_Direction <= Data_R_U;5 q, `% T C8 U9 N
test_signal <= 3'b001;3 [; i0 S# S+ z
end) z) Z+ A) z" S( L, P5 m% S/ a
else if(pro_signal == 4'b0010) //LED2 light
4 A7 M3 }6 H) E: ] begin
0 T5 i; x+ y0 a/ ^9 @. { Data_Shift_Direction <= Data_L_Button;4 G6 o: h7 ~! H& s9 _
test_signal <= 3'b010;. [2 H ^7 w4 t
end
6 ?; v1 d( W; \! i" S else if(pro_signal == 4'b0011)
z- A8 x1 a! E# K3 X4 o2 } begin
- n7 i. o! H4 T, N& h; u# N- E Data_Shift_Direction <= Data_R_Button;
7 p& e9 e1 h* \1 g test_signal <= 3'b011;' d @$ P2 D# ]" ?9 ?1 o
end# t; p4 K/ z4 e0 u3 @" w
else if(pro_signal == 4'b0100) //LED3 light
! u6 X+ k$ I5 b5 o6 ^; ?9 }, B# I$ ] begin
1 D! j8 p; s; s Data_Shift_Direction <= Data_L_LU;
6 M0 ^# H! I. K test_signal <= 3'b100;
- D) r% m- M* ~ W" s+ [5 D3 S5 n end7 {2 U6 P* u) i5 ?8 i) s
else if(pro_signal == 4'b0101) //LED4 light, x# L) b. P% ~, F" o9 Z
begin
5 f4 R5 O- \) |2 j1 [4 | Data_Shift_Direction <= Data_B_RB;9 F7 B3 I+ V- x( k# S; ]) k2 H& _
test_signal <= 3'b101;, e( q ~ Q- `7 Z3 i/ ~3 X
end
, p, e# i, _4 V. `$ c else if(pro_signal == 4'b0110) //LED5 light
/ l& A) o& t) H8 U* m begin; w c( Q, s0 u, S* W
Data_Shift_Direction <= Data_LB;
( y7 E; N( w, f test_signal <= 3'b110;. ~# m. ^% W8 b1 p
end" N. i6 R# m% n/ w' d
. W8 Y8 M& O) O3 o
else
, b" l. K" B% Q; V* P* ?) c begin
K5 v3 v8 i$ ~) w Data_Shift_Direction <= Data_Static;) ]& }/ ?5 m Y
test_signal <= 3'b000;
& Y; N+ j: O3 ~ end. b% g' Y5 o: }6 |5 M
' m" u. b2 W, S/ R! W2 i end7 _3 P& U. w0 M; t1 B: j. I3 a
end
% q' @" _2 M c5 ?$ P7 B3 t% O4 _- s( [) Q: d
always @(posedge clk_500 or posedge rst)5 h: X7 a' u- U, Z+ e. n4 o% t
begin
! Z. }4 i- c' G if(rst)
3 W4 S- W8 A- g$ O6 L4 O begin
8 p0 b+ @9 h5 D0 O6 }/ ~ RS <= 1'b0; //复位:RS=0时为写指令;
' X5 g% J4 `7 f) `+ O+ e DB8 <= 8'b0; //复位:使DB8总线输出全0
) G; r |! X# } F& b: _ end
. ]) y7 E2 J, v) s else7 Y- [3 J+ `/ Y8 c/ T% G0 L2 W6 j
begin % Y5 B/ D7 f& D! c R9 P, A
if(disp_count == 14) //disp_count等于14时表示第一行数据已写完( \! B" ?' T" u5 t+ g4 Q
begin0 ~ u+ a$ y. T- r# h& z5 ]
DB8 <= 8'b11000001; //送入写第二行的指令
5 Q+ X: q) l- Y: M& } RS <= 1'b0;
2 }* c7 N; v' o3 n+ g disp_count <= 4'b0; $ T, J! G$ F7 z. w- }9 K5 J5 `9 X. @
Data_Sec_Buf <= Data_Shift_Direction;- m* w* K& d6 V2 n N
state <= Write_Data_Sec;
) Z h4 U& a" x: D' t. f( f' }% e: Q- f end- A4 E( j) Z- r# L4 X, Z
else. F4 X ^# n5 }+ b; K" U7 _ m
begin: y, Q8 X1 U9 J* i' ?' [
DB8 <= Data_Fir_Buf[111:104]; B7 h7 [' N1 t) T4 U$ y
Data_Fir_Buf <= (Data_Fir_Buf << 8);
0 _" [7 D; y# a RS <= 1'b1; //RS=1表示写数据
9 s ]3 W. a% z- L disp_count <= disp_count + 1'b1;: X2 X: l7 \" H3 y
state <= Write_Data_Fir;
7 O8 L* H: K- @# P" B f' ~3 W end
; z" [% ~" {$ Q0 S end9 G& W. S( d8 P
end |
|