在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: jeamie

[讨论] 请求verilog高手指点程序问题!!!

[复制链接]
发表于 2011-11-3 14:21:24 | 显示全部楼层
本帖最后由 marsfabio 于 2011-11-3 14:23 编辑

回复 10# jeamie

你试着按我7楼的方法修改下测试程序的激励看看
 楼主| 发表于 2011-11-3 14:35:27 | 显示全部楼层
回复 7# marsfabio


    您的建议我都试了,clk的时钟周期改了很小,B信号的第一个edge 与A的第一个edge delay的时间加长,问题还是存在。

应该还是我使用了case嵌套带来的问题吧。

谢谢您!
发表于 2011-11-3 14:49:03 | 显示全部楼层
回复 12# jeamie

你能不能把完整的module和testbench发出来,我拿去跑一下,方便帮你分析
 楼主| 发表于 2011-11-3 14:59:05 | 显示全部楼层
回复 13# marsfabio


    您有QQ吗,我能否加你?
发表于 2011-11-3 15:10:50 | 显示全部楼层
2'b00:
    begin
      AO<=0;
      BO<=0;

      if(a2==0&a1==1&b1==b2==0) //a==b==0,but posedge of A comes first,A lead
      begin
        dependa<=1;
        AO<=~AO;
        state<=edgecount;  //goto count the edge of A,AO and BO change according their counters
      end
      else
      begin
        if(b2==0&b1==1&a1==a2==0) //a==b==0,but posedge of B comes first,B lead
        begin
          dependb<=1;
          BO<=~BO;
          state<=edgecount; //goto count the edge of A,AO and BO change according their counters
        end
        else state<=idle;
      end
    end

红字部分,在一个时钟跳变沿,如果进入if语句,A或者B将被赋两个值,虽然值相同,但是不知道有没有影响。
另外,想看是不是一直在idle中,最好看一下state信号。也许已经进入了edgecount,AO和BO只是由于ena和enb信号的变化而改变。
如果A(或B)跳变一次,ena(或enb)信号有效一次,那么AO和BO信号的输出也应该是现在这种情况。
 楼主| 发表于 2011-11-3 15:26:15 | 显示全部楼层
回复 15# Emersondjp


    edgecount中要完成的是判断计数边沿是否等于某个值,等于,则ena/enb为1,然后执行achange/bchange。

    只是以后的程序我都屏蔽掉了,只是想看看这个初值和第一个边沿到来时AO、BO的输出是否正确。如果正确应该是第一个边沿到来之后,AO、

    BO保持不变。而结果却是图中的波形。

   您说的两次赋值的问题我还要再想想。
 楼主| 发表于 2011-11-4 08:46:32 | 显示全部楼层
jeamie.rar (2.88 KB, 下载次数: 3 ) 回复 13# marsfabio


    marsfabio您好,附件中为程序代码和测试程序代码,麻烦您帮忙看看。
发表于 2011-11-4 12:11:06 | 显示全部楼层
回复 17# jeamie

擦,竟然还要费新币,呵呵
 楼主| 发表于 2011-11-4 12:34:56 | 显示全部楼层
哦,不好意思,让你破费
我没有设置,估计是论坛默认吧,或者是我放错地方了
发表于 2011-11-4 14:00:31 | 显示全部楼层
回复 19# jeamie
你内嵌case有很大的问题,你想a1,a2和b1,b2分别是A,B打1或者2拍之后的结果,你在进行沿检测的时候用A,B进行case,但里面的却用a1,a2,b1,b2来判断,这个逻辑怎么都对不上啊,至少AB对应的是沿跳变之后AB的值,而你用的是沿跳变的AB值去进行case选择。而且在一个语句中同时对AO进行了两次非阻塞赋值,这也是很有问题的,按照你的意思应该是默认AO=A,那应该放在else里面,而不是在一开始就用非阻塞赋值赋个默认值,默认赋值方法只有用阻塞赋值时才可以,具体两种赋值方法你自己去看书吧。我现在是用我的方法从idle状态跳出来了,但是我没有管其他的功能是否正确,因为你的代码写的风格问题很大,要想得到你的功能需要很大的改动
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 21:56 , Processed in 0.023377 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表