找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

1

主题

2

帖子

-1万

积分

未知游客(0)

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

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-24 01:35 , Processed in 0.056432 second(s), 33 queries , Gzip On.

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

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

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