找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 999|回复: 0
打印 上一主题 下一主题

Verilog 寄存器数据类型更新问题(讨论)

[复制链接]

1

主题

2

帖子

-1万

积分

未知游客(0)

积分
-12027
跳转到指定楼层
1#
发表于 2009-3-17 17:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-24 04:38 , Processed in 0.056160 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表