找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2267|回复: 4
收起左侧

Verilog流水灯设计的时序问题,求大神帮忙解答一下!!!

[复制链接]
ID:293807 发表于 2018-6-20 17:19 | 显示全部楼层 |阅读模式
module yiwei(clk_100hz, clr, led_cs, led_out);
    input clk_100hz;
    input clr;
    output led_cs;
    output reg [7:0] led_out;
  reg dir;
  assign led_cs=1;
  always@(posedge clk_100hz or negedge clr)
  if(!clr)
   begin
    dir<=0;
      led_out<=8'h80;
   end
  else
   begin
    if(dir==0)
     begin
      led_out<=led_out>>1;
      if(led_out==8'h01)
       dir<=1;
     end
    if(dir==1)
     begin
      led_out<=led_out<<1;
      if(led_out==8'h80)
       dir<=0;
     end
   end   
endmodule
输出时并没有8‘h01这一值,就7个灯来回闪烁,希望帮忙解答一下。
回复

使用道具 举报

ID:195836 发表于 2018-6-20 23:05 | 显示全部楼层
你这个100HZ的频率,你看得清流水的过程吗?如果只是原理的话,至少上个仿真软件去看看时序图吧
你主要是什么问题呢, led_out<=led_out>>1;  if(led_out==8'h01)  dir<=1;这三句连在一起,那么led_out=8'h01的一瞬间后,就把dir置1了。这个时候最好去仿真里面看时序图吧,感觉是可以的,具体为什么不行我没仿真也不清楚
所以两点建议。第一是一定要仿真,不要老想着编完了直接上板子实验,仿真仿真仿真!
第二,我觉得用位拼接写会更好,代码量会少,也不会出现这个bug(应该。。)吧
第三,这是51的论坛,你问个verilog的,问错地方了吧?

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:293807 发表于 2018-6-21 14:49 来自手机 | 显示全部楼层
奎尔塞拉 发表于 2018-6-20 23:05
你这个100HZ的频率,你看得清流水的过程吗?如果只是原理的话,至少上个仿真软件去看看时序图吧
你主要是 ...

那个第一次发帖提问,不好意思。频率分的是10hz的,我仿真过,时序图上8'h02存在了两次,并没有8'h01这一值,也就是<00000010><00000010><000000100>,逻辑上感觉没问题,就是时序上的问题吧
回复

使用道具 举报

ID:266943 发表于 2018-6-21 15:03 | 显示全部楼层
这你得看一下if语句并行是什么情况了,这种现象可能是dir=1后立即执行了第二个if语句led-out在同一个时钟上升沿从0x02变成0x01又变回了0x02,这样0x01就看不出来消失了,你需要调试一下或者仿真一下看看是不是这个原因
回复

使用道具 举报

ID:293807 发表于 2018-6-21 17:29 来自手机 | 显示全部楼层
出来逛逛 发表于 2018-6-21 15:03
这你得看一下if语句并行是什么情况了,这种现象可能是dir=1后立即执行了第二个if语句led-out在同一个时钟上 ...

嗯嗯,就是这问题。用if    else if就可以了,非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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