搜索
bottom↓
回复: 5

verilog 代码 访真中出现未知XXXX

[复制链接]

出0入0汤圆

发表于 2011-1-5 16:35:43 | 显示全部楼层 |阅读模式
请各位帮看一下这段的VERILOG代码为啥,oe,ce,we 会变化时出现一段时间的XXXXXXXX
先谢过!
图:  

(原文件名:1图.JPG)
程序段:

module vga(dclk,hs,vs,pspclk3,pspclk1,pspclk,ecudata,ao,wr,oe,ce,we,ramdata,ramaddress,hight);
input dclk,ao,wr;
input [7:0]ecudata;
output hs,vs,pspclk3,pspclk1,oe,ce,we,pspclk;
output [15:0]ramaddress;
output [3:0]hight;
inout [7:0]ramdata;
reg hs,vs,pspclk1,pspclk3,pspclk;
reg[10:0] count_v,count_h;
reg flag,j,start,nextstart;
reg [7:0]cmdreg;
reg [15:0]weARMADDR,rdARMADDR;
reg [7:0]ioreg,addl,addh,ramdata;
reg [3:0]hight1,low1,hight;
reg row,ce,oe,we;
wire si;
reg [21:0]sysen;
assign endata=(count_h>3&count_h<120)?1:0;
assign ramaddress=row?weARMADDR:rdARMADDR;
assign si=wr;
initial
        begin
                oe<=1;
                ce<=1;
                we<=1;
        end
//always @(negedge wr)
//begin
//        si<=1;
//end
always@ (posedge dclk or negedge si)//or negedge wr
begin
        if(!si)
        begin
                case (start)
        0:  
                begin
                        if(ao==1)//comm
                                cmdreg<=ecudata;
                        else//DATA
                                begin
                                        if(cmdreg==8'h00)//written low 8bit address command
                                                addl<=ecudata;
                                        else if(cmdreg==8'h02)////written hight 8bit address command
                                        begin
                                                addh<=ecudata;
                                                weARMADDR<={addh,addl};
                                        end
                                        else if(cmdreg==8'h04)//written data;
                                                ioreg<=ecudata;
                                end
                        start<=1;
                end
        1:       
                begin
                        ce<=0;oe<=1;we<=0; //input ram
                        start<=2;row<=1;
                end
        2:
                begin
                        if(weARMADDR==38399)
                                weARMADDR<=0;
                        start<=3;
                end
        3:
                begin
                        ramdata<=ioreg;
                        weARMADDR<=weARMADDR+1;
                        start<=0;ce<=1;
                end       
                endcase
        end
        else if(endata)
        begin
                case(nextstart)
                0:begin
                        ce<=0;oe<=0;we<=1;row<=1;
                        nextstart<=1;
                end
                1:begin
                        hight1<=ramdata[7:4];low1<=ramdata[3:0];
                        nextstart<=2;
                end
                2:begin
                        if(rdARMADDR==38399)
                                rdARMADDR<=0;
                        rdARMADDR<=rdARMADDR+1;
                        nextstart<=3;
                end
                3:begin
                        ce<=1;hight<=hight1;
                        nextstart<=4;
                end
                4:begin
                        nextstart<=5;
                end
                5:begin
                        nextstart<=6;
                       
                end
                6:begin
                        hight<=low1;
                        nextstart<=7;
                end
                7:begin
                        nextstart<=0;
                        ce<=1;
                end
                endcase
        end
end

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-1-5 16:36:17 | 显示全部楼层
自己先顶一下,  各位帮看看  谢谢

出0入0汤圆

发表于 2011-1-5 18:26:53 | 显示全部楼层
不行了,写的太晦涩难懂了。
请遵守以下2个准则:
1,一个always块中,只对有密切关系的寄存器赋值。最好是只对一个寄存器进行操作。
2,对于一个寄存器,仅在一个always块中赋值。

至于为什么会出不定态,我觉得是因为start没有赋初值的原因。请在这段代码中加入reset的逻辑,不要用initial来赋寄存器的初值。

出0入0汤圆

 楼主| 发表于 2011-1-5 21:00:02 | 显示全部楼层
回复【2楼】ngzhang 兽哥
-----------------------------------------------------------------------

我回去试试  我想start应该没问题吧  呃  这是我感觉的 谢啦

出0入0汤圆

 楼主| 发表于 2011-1-5 21:03:11 | 显示全部楼层
我的想法是在DCLK作用下每四个DCLK 完成一次SDRAM写  当然在WR有效期 ,当WR无效时,8个DCLK从SDRAM取数输出

大家帮看一下啊  闹死我了

出0入0汤圆

 楼主| 发表于 2011-1-6 08:12:04 | 显示全部楼层
将SI的沿检测去掉 就正常了  不解。。。。。。。。。

哪位了解VERILOG的兄弟帮看看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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