3447|1

2113

帖子

0

TA的资源

裸片初长成(初级)

楼主
 

自己写的johnson计数器出问题了 [复制链接]

代码如下:

module johnson (clk,rst_n,sw1,sw2,sw3,led);
 input clk,rst_n;
 input sw1,sw2,sw3;
 output [3:0] led;
 reg [3:0] led;
 //-----------------------------------------
 reg[23:0] cnt1;
 always @(posedge clk or negedge rst_n)
  begin
   if (!rst_n) cnt1<=20'b0;
   else cnt1 <= cnt1+1'b1;
  end
 //-----------------------------------------
 always @(posedge clk or negedge rst_n)
  begin
   if    (!rst_n) led <= 3'b001;
   else  if (cnt1==24'hffffff && d1)
     begin
     if(d2)
        led<={led[0],led[3:1]};
              else if (d3)
     led<={led[2:0],led[3]};
     end
  end
 //-----------------------------------------
 reg [2:0] sw_rst;
 always @(posedge clk or negedge rst_n)
  begin
   if (!rst_n) sw_rst<=3'b111;
   else sw_rst<={sw3,sw2,sw1};
  end
 //-----------------------------------------
 reg[2:0] sw_rst_r;
 always @(posedge clk or negedge rst_n)
  begin
   if (!rst_n) sw_rst_r <= 3'b111;
   else sw_rst_r <= sw_rst;
  end
 //-----------------------------------------
 wire [2:0]sw_an =sw_rst_r & (~sw_rst);
 //-----------------------------------------
 reg[19:0] cnt;
 always @(posedge clk or negedge rst_n)
  begin
   if (!rst_n) cnt<=20'b0;
   else if   (sw_an) cnt<=20'b0;
     else cnt <= cnt+1'b1;
  end
 //-----------------------------------------
 reg[2:0] low_sw;
 always @(posedge clk or negedge rst_n)
  begin
   if   (!rst_n) low_sw<=3'b111;
   else if(cnt==20'hfffff)
     low_sw <={sw3,sw2,sw1};
     else
     low_sw<=low_sw;
  end
 //-----------------------------------------
 reg[2:0] low_sw_r;
 always @(posedge clk or negedge rst_n)
  begin
   if   (!rst_n) low_sw_r<=3'b111;
   else low_sw_r<=low_sw;
  end
 //-----------------------------------------
 wire [2:0] led_ctrl =low_sw_r & (~low_sw);
 //-----------------------------------------
 reg d1;
 reg d2;
 reg d3;
 always @(posedge clk or negedge rst_n)
   if   (!rst_n) begin
       d1<=1'b0;
       d2<=1'b0;
       d3<=1'b0;
        end
      else  begin
    if (led_ctrl[0])  d1<=~d1;
    if (led_ctrl[1])  d2<=~d2;
    if (led_ctrl[2])  d3<=~d3;
     end
endmodule

此帖出自FPGA/CPLD论坛
点赞 关注
 

回复
举报

2113

帖子

0

TA的资源

裸片初长成(初级)

沙发
 
关键是如果我将:
always @(posedge clk or negedge rst_n)
  begin
   if    (!rst_n) led <= 3'b001;
   else  if (cnt1==24'hffffff && d1)
     begin
     if(d2)
        led<={led[0],led[3:1]};
              else if (d3)
     led<={led[2:0],led[3]};
     end
  end
写成:
always @(posedge clk or negedge rst_n)
  begin
   if    (!rst_n) led <= 3'b001;
   else  if (cnt1==24'hffffff && led_ctrl【0】)
     begin
     if(led_ctrl【1】)
        led<={led[0],led[3:1]};
              else if led_(ctrl【2】)
     led<={led[2:0],led[3]};
     end
  end
程序就有问题
此帖出自FPGA/CPLD论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表