搜索
bottom↓
回复: 4

请帮忙看看下面另外几个verilog HDL程序问题如何修改

[复制链接]

出390入22汤圆

发表于 2017-7-28 11:28:07 | 显示全部楼层 |阅读模式
本帖最后由 liudingding 于 2017-7-28 11:29 编辑

程序中第一个计数器能计数,想在几个特定数值输出脉冲信号,这几个脉冲信号作为清零信号或者合并后作为下一个计数器的时钟。但是第二个计数器不能计数。

另一个问题,第一个计数器程序中qy、hy、dec、yh等需要设定为reg(我理解reg型数据为寄存器型数据)型数据才能正常编译,我想把它们设定为门电路合并后数据,就是wire型数据,不想成为寄存器数据,怎么办。

第三个问题,三态数据d(程序中加************)想设定为八位,但是无论哪里加上[7:0],就是:d[7:0],程序都报错。我理解程序:assign d =!wr?fh[7:0]:8'bz;是八位但是引脚设置就一位。

module CPLD(cs1,cs2,in,out,ck_out,
            fh,d,ra,hs,vs,pclk,wr);
         input in,    wr;
         output out,ck_out,cs1,hs,vs,pclk,cs2;     
         assign out    =!in;
         output[9:0] fh;  //
         reg[9:0]    fh;
         
         inout d;//***************************************
         output[17:0] ra;//ra:ram地址
         reg[17:0]    ra;
         reg[1:0]     fj;
         reg[9:0]     fi;
         reg[1:0]     fk;
         
         reg v0,v1,v2,v3,fkk,vv,ve;
         reg js,qy,hy,dec,yh,fjk,hs,vs,he,hh;
         
         assign d =!wr?fh[7:0]:8'bz;//*****************************************
         
         assign ck_out = in;
         assign pclk   = in;
         assign cs1    = fj[0];
         assign cs2    = pclk;
             always @(posedge in)
                    begin
                           if(!js)    fh  <=  0;
                           else             fh  <= fh+1;
                                if(fh==0)     qy=1;
                                if(fh==48)    hy=1;
                                if(fh==88)   dec=1;
                                if(fh==850)   yh=1;
                           if(fh==928)   js=1;
                                 fjk=hy|dec|yh;
                                end
             always @(posedge fjk)
                    begin
                           if(!qy)   fj  <=  0;
                           else            fj  <= fj+1;
                                if(fj==0)    hh=1;
                           if(fj==2)    he=1;
                                   hs    =!hh;
                                end
             always @(posedge qy)
                    begin
                           if(!v3)    fi  <=  0;
                           else             fi  <= fi+1;
                                if(fi==0)     v0=1;
                           if(fi==3)     v1=1;
                                if(fi==29)    v2=1;
                                if(fi==525)   v3=1;
                                    fkk  = v1|v2;
                                end
             always @(posedge fkk)
                    begin
                           if(!v0)    fk  <=  0;
                           else             fk  <= fk+1;
                                if(fk==0)     vv=1;
                           if(fk==2)     ve=1;
                                        vs   =!vv;
                                end
        always @(posedge in)
                    begin  ra <=ra+1;   end
                         
endmodule

出0入0汤圆

发表于 2017-7-28 11:48:07 | 显示全部楼层
楼主代码问题很多,并且程序很杂乱,我想很多想帮忙的人都因为懒得梳理你的程序放弃帮忙了
我说几点:
1.时序逻辑里面最好只用 “《=”赋值,这是基本原则,否则你代码量大了之后,出问题后时序查找很麻烦;
2.不允许用中间变量当时钟用,非要这样用的话,请与全局时钟同步,理由如上;
3.时序逻辑里面 always 左值 只能是reg型变量,你想想看用wire型怎么输出,wire就只是一条导线,如何做逻辑变换?
4.代码风格混乱
... ...
综上,楼主HDL功底还很差,请多看看基础书籍,自己多找找答案再提问,论坛里面很多太基础的东西大家都不削于回答你,因为网上一大把资料
明白了吧?

出0入0汤圆

发表于 2017-7-29 12:19:02 | 显示全部楼层
楼主HDL功底还很差,请多看看基础书籍,100块我不敢要了

出390入22汤圆

 楼主| 发表于 2017-7-29 12:58:07 | 显示全部楼层
RAMILE 发表于 2017-7-29 12:19
楼主HDL功底还很差,请多看看基础书籍,100块我不敢要了

是我的AHDL语言程序,不是这段verilog HDL程序

出0入0汤圆

发表于 2017-7-29 13:47:34 | 显示全部楼层
liudingding 发表于 2017-7-29 12:58
是我的AHDL语言程序,不是这段verilog HDL程序

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

本版积分规则

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

GMT+8, 2024-4-20 01:43

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

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