|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我在用Verilong代码做液晶显示时。有一个不能更新的寄存器数据类型的问题,现请教下各位大虾。
' l! v* _+ z8 |4 h过程如下:我使用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”。即初始化时所赋的值。- b# D5 |" U+ t; t4 s5 J: i
然后我想是不是时钟的问题。因为两段并行代码一个是48M的时钟,而另一个则是500Hz的时钟。但觉得这没有道理。因为pro_signal信号的变化我自己可以随时控制,让pro_signal信号变化就变化,不变化就不变化。只要pro_signal信号不变化的时候,那么Data_Shift_Direction的数据也不再变化。即使后面一段代码是500Hz触发的,也应该能够检测到Data_Shift_Direction里面的数据。不知道哪位大虾碰到过这种情况没。有的话,请一起来讨论讨论下吧。! ^" f5 b1 F7 \! n& @
# _1 s6 M: @2 O2 \! J6 i现把这部分代码粘贴如下:
4 u# g3 o" K* Xparameter Data_First = "This is an App", //液晶显示的第一行的数据
. v3 P2 H( S0 ?7 ^7 B Data_R_U = "Shift Ri or Up", //液晶显示的第二行的数据# p d. j1 h2 C7 e& e- K
Data_B_RB = "Shift Be or RB",
; S3 U+ z! v n: A/ t4 Y O Data_L_LU = "Shift L or LUp",- L8 o1 U6 D6 Q( K' q
Data_LB = "Shift Left_bel",7 m c5 ]2 K5 I* H: V# B2 h8 J% l
Data_L_Button = "You Left click",4 h* }2 Q$ G; L, K0 j
Data_R_Button = "You Righ click",0 w3 n- a+ v$ F* G$ q6 h
Data_Static = "Mouse's silent";6 h+ s$ ]: F! |6 Y3 ?0 n
: C& |: B9 \" [0 h6 @8 Palways@(posedge clk_48m or posedge rst): J# [0 d& \; [7 H: h5 P
begin- \5 G. e( L( ^$ [4 F2 i7 h4 ~! Y
if(rst) f0 l+ ~# b4 n" t
begin) \3 m. j2 M( x. e
Data_Shift_Direction <= Data_Static;* T7 e y: \: @% ^% a4 v
test_signal <= 3'b000;% g V3 a4 ?, W2 H) s6 z8 i4 x1 U
end
& b& s4 m( d5 l8 i' y! \" E else
. X, c2 } L! H begin: q# h: {; @8 k
if(pro_signal == 4'b0001) //LED1 light
4 W' K- B& r: W begin# x4 v) R+ O3 b2 [* ^' y
Data_Shift_Direction <= Data_R_U;4 |% x, H/ g) r' I& [1 ]( E
test_signal <= 3'b001;
6 ^& o! @- v2 P& E! A; a0 a end
& I- g( d+ D( O3 l, r6 R else if(pro_signal == 4'b0010) //LED2 light0 \% W) B# g' r) h" U0 ]# \ G
begin) J& c7 R1 @! i8 s9 X
Data_Shift_Direction <= Data_L_Button;. }) ]" e7 F7 q$ y1 b
test_signal <= 3'b010;4 r! k3 p/ e& K. n Y
end
8 B0 d3 V3 v s8 g0 l/ T1 X else if(pro_signal == 4'b0011)
0 A" }' \9 p# d$ Z+ Y, h. E begin
' D0 v( y( m0 Q0 s) X: g* I Data_Shift_Direction <= Data_R_Button;
+ [8 L" g& M$ J: l: ~' s test_signal <= 3'b011;
) S2 n/ u5 s* `! r2 j" ]) j8 n; ? end
9 o1 t6 v" k) ~) k# a else if(pro_signal == 4'b0100) //LED3 light, y1 t0 ]+ ?4 g* Z$ ~
begin
4 I" U! C& \6 m$ Q Data_Shift_Direction <= Data_L_LU;6 e2 W/ y9 r0 W2 ]' |. V
test_signal <= 3'b100;
5 R' \9 q8 F4 i5 ^ end
9 h; \7 t1 d0 { else if(pro_signal == 4'b0101) //LED4 light
2 k# I; G5 H+ m& v$ k begin
M9 b' V& A! `( V) m9 u" \ Data_Shift_Direction <= Data_B_RB;5 f2 U+ P0 g; x; U, b" w5 r* [
test_signal <= 3'b101;" t" c; ^0 k7 @+ |. F
end 1 t8 |( g0 d8 X
else if(pro_signal == 4'b0110) //LED5 light' f, X V O/ J! A, e2 {
begin2 r1 ]+ l. K3 K1 p; q0 c
Data_Shift_Direction <= Data_LB;# w* I% _; [2 v- _6 M5 t% D
test_signal <= 3'b110;2 n& ~; D7 m/ N
end
! [1 w$ O& ^- r : A9 e2 h7 u6 M
else' y" H- T, p+ Y0 C; j6 d( f
begin, b3 B+ ~2 R3 `9 h4 {3 {
Data_Shift_Direction <= Data_Static;
: `) p* q" y$ o; l4 _& {7 C: i8 } test_signal <= 3'b000;& D2 [* W3 k s9 d/ f4 B( t a
end
, ~3 k& r7 i' Q7 i4 _! c & A, f; B% }9 ^. L- a
end& F. Z' C1 I3 s
end
! q9 k6 d% r! _, v4 Y6 h6 v( e t$ p9 o3 K1 @1 Q& n2 j. ~* j1 v8 i7 {
always @(posedge clk_500 or posedge rst)- z# t/ @# S) S3 j0 j4 R
begin9 \3 G0 {" Y/ D. |3 p9 d
if(rst)5 g2 ~6 D8 W# y1 l
begin
9 R3 C, c# g, N$ d5 t/ X, f3 Y RS <= 1'b0; //复位:RS=0时为写指令; , W) [3 d/ B, j
DB8 <= 8'b0; //复位:使DB8总线输出全0
6 L- e% H$ ~ o. v( c: r" X; l4 O end0 C$ R" z* h7 j+ Q
else
# D- F; z, o9 n- k0 x begin + X: |" E0 k6 w) a. K8 a, A0 \6 [! l
if(disp_count == 14) //disp_count等于14时表示第一行数据已写完& m) \- {$ [; M3 U O) \
begin
7 |1 c3 I3 \$ s& X: {' g DB8 <= 8'b11000001; //送入写第二行的指令
. s6 X" T, n! Y Q3 z9 R6 ?5 }: Q RS <= 1'b0;4 }0 h! g- S: K0 \+ }& y! o( B
disp_count <= 4'b0;
9 L- S) s$ t+ C Data_Sec_Buf <= Data_Shift_Direction;1 ^7 `+ B( y3 y1 k* P \4 D1 c U
state <= Write_Data_Sec; % V2 _0 w4 e6 W: p
end# r$ k. @* F( r* G$ L0 x1 f
else
' j# e- Q* s7 D3 u begin
$ s3 n2 P/ X; _( z5 g+ m: ^ DB8 <= Data_Fir_Buf[111:104];* n' f' d* C- X/ }3 A% U% p$ ^
Data_Fir_Buf <= (Data_Fir_Buf << 8);% f9 g3 q7 i- e; G8 ?& y, B
RS <= 1'b1; //RS=1表示写数据
% {# K% Q4 w7 `: ` disp_count <= disp_count + 1'b1;
3 m6 O# M/ [9 {$ m5 M) k3 e0 F state <= Write_Data_Fir; : I+ E9 p; `* _/ J" W
end! V5 x; S7 ^1 t4 y8 p6 [9 h
end6 e: ?% x7 v. }
end |
|