|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。
7 w% g t+ S% L" G0 [9 b9 l! l* 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”。即初始化时所赋的值。
7 c7 I$ Z/ W' {6 s; r5 h然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。8 M% q3 i$ P7 U/ f' d
3 \9 H8 A( L3 r8 U. Q
现把这部分代码粘贴如下:
% f& \, Q$ x! c' K& r4 Hparameter Data_First = "This is an App", //液晶显示的第一行的数据. D& A9 K- X# A0 K; }% e7 I
Data_R_U = "Shift Ri or Up", //液晶显示的第二行的数据, S1 j- ^$ Y% f$ H: p
Data_B_RB = "Shift Be or RB",
( s' P2 H) K0 T, Y# f* B Data_L_LU = "Shift L or LUp",
) E; W/ p7 S! j3 c# u Data_LB = "Shift Left_bel",% d) w& b0 `$ w. R4 X0 o! i7 f% }* ?
Data_L_Button = "You Left click",; k) A4 P$ u; r
Data_R_Button = "You Righ click",
7 z5 A& ]; M' J1 c# G) e5 p8 s Q& i Data_Static = "Mouse's silent";
2 S& O0 l. o9 d4 T/ ~! ?: Z5 B8 R6 ~, B' x* a3 u) J
always@(posedge clk_48m or posedge rst); A/ p" I$ |" a8 s; T
begin5 {: o) ?; a; p ~9 I5 I9 [
if(rst)* [2 I }5 a& [9 ]' [
begin
* e& B' I: V* |2 e, K4 } Data_Shift_Direction <= Data_Static;2 V6 k7 Z; N, @" I' c
test_signal <= 3'b000;* I7 w. u! c* C" \) w
end
2 ?' a8 p: J. i9 C; v/ G else
$ `! n+ G& e% [# p5 E begin+ \( e5 ~7 r9 ]" Q1 o
if(pro_signal == 4'b0001) //LED1 light" \' }& N5 ~& l( Q3 P6 } p
begin- K% v, a% p0 }
Data_Shift_Direction <= Data_R_U;/ P; \9 S9 b1 e+ Q! g" _) I7 v$ \0 k
test_signal <= 3'b001;! m) B- z' j0 z. V S x
end
- M0 ?! a4 W' C. x3 ` else if(pro_signal == 4'b0010) //LED2 light
# M& ?" k2 M% I+ ~' D6 k0 v begin/ |3 N' I3 d$ T( R) Q
Data_Shift_Direction <= Data_L_Button;6 t1 A; `9 \/ B
test_signal <= 3'b010;
* K: E1 d; G1 y1 {" Q end
* f" P6 _2 v; x! B* ~* \3 [6 E else if(pro_signal == 4'b0011)
' t& U$ s. C% v6 c8 P begin- x7 a, Y) \. ~8 D/ O
Data_Shift_Direction <= Data_R_Button;$ {3 O, M0 g% P9 j+ l
test_signal <= 3'b011;
+ R; n0 w3 \4 g7 J6 ]3 _( f end \9 V+ u8 L: l( Q/ L, y
else if(pro_signal == 4'b0100) //LED3 light
( u- ~2 k' \+ A+ A: V5 R begin2 U/ p$ `8 T& b! f: v
Data_Shift_Direction <= Data_L_LU;. d* z' H0 c& Z1 H
test_signal <= 3'b100;
; v9 [- ]/ ]- d" |# G' g end# s- X9 g6 h+ M0 o: Z- a% f; {
else if(pro_signal == 4'b0101) //LED4 light, n# E! K# L2 x9 }4 a1 }
begin$ M: T" m' Y% C+ X7 d0 \. w
Data_Shift_Direction <= Data_B_RB;: R. F2 Z: `' t* t+ z
test_signal <= 3'b101;, a) |/ d. ]: ^
end
0 R; a9 l+ I0 j else if(pro_signal == 4'b0110) //LED5 light
6 b) E" J6 L. W1 N' I begin
/ ~( k& B' v0 N2 I B8 T9 Y Data_Shift_Direction <= Data_LB;
2 Q$ W8 H: z! V0 o test_signal <= 3'b110;6 C2 }& E$ ]! C7 o7 E
end
! h+ ^) |% H, w. y: z# J
1 W; E3 i) N& b# O3 Y( { else
" X P+ K# a* f# }; E begin
: Q! ^. }- i" v4 W' z Data_Shift_Direction <= Data_Static;
8 \# y+ m' {' c: c0 ?! w test_signal <= 3'b000;% l2 w6 Y4 R- J+ a( x _& l
end# v, V- k! v8 f2 t# ~( x! U2 ~
# J( M; z$ T6 S/ y3 V' d9 G; p end7 x, G& O& N k8 B- `
end
6 W: @0 J0 L) U- v5 W
) A3 _2 `6 D0 G: ], T- O( f5 Palways @(posedge clk_500 or posedge rst)
. Q4 a4 E) [& zbegin: y Y7 H, }3 v% U7 W& F: O$ k
if(rst)
+ g* d7 N& E m begin
) }4 m9 e. J% m0 K# L RS <= 1'b0; //复位:RS=0时为写指令; 2 Y8 d& w: M6 v8 G; t& s! s* T
DB8 <= 8'b0; //复位:使DB8总线输出全0
: R5 u& I K: h* w; ^ end
, \# y4 r6 i0 x( g: c else
" ^6 v$ l, w5 ~ begin % `" G* Q. q! m; s( ]5 D& F
if(disp_count == 14) //disp_count等于14时表示第一行数据已写完5 l' l/ b2 ]# s! k* O
begin3 S1 ^$ E) z! y
DB8 <= 8'b11000001; //送入写第二行的指令
. F2 U1 |9 n) o- ~! j* f RS <= 1'b0;
3 `$ ]7 N9 Y4 j0 J/ o disp_count <= 4'b0;
) D6 V7 f1 j" T# y9 ^ Data_Sec_Buf <= Data_Shift_Direction;- A* @7 H3 `, z% Y- X
state <= Write_Data_Sec;
' y: B) }9 o0 g: l) u$ q end% a! @5 X, M( M
else& W q" p T+ |9 d
begin
* S0 `# T1 s9 {3 I DB8 <= Data_Fir_Buf[111:104];: {( Z" s0 \ L9 Q+ j
Data_Fir_Buf <= (Data_Fir_Buf << 8);4 ^0 F) W, A: e6 x3 W: t0 A; @
RS <= 1'b1; //RS=1表示写数据
: W$ G, R7 e1 x( e' G disp_count <= disp_count + 1'b1;
, g9 f1 V% R! j; S4 e& M state <= Write_Data_Fir;
1 j7 D7 t7 R7 P$ P/ D1 Y end5 b; v/ w c# z9 Y. W- F5 p/ m
end
5 \2 j$ Q6 h" v( @+ K pend |
|