5597|11

523

帖子

235

TA的资源

版主

楼主
 

FPGA(cyclone4)第二期流水灯程序真捉急 [复制链接]

本着“天下难事必作于易,天下大事必作于细”的思路指导,开始了我轰轰烈烈的FPGA开发板的学习,最经典的程序莫过于流水灯的程序了,因为以前有一些C语言的基础,想来VERILOG也不是什么难事,可是天不遂人愿,今早整整一上午,我被流水灯程序虐的体无完肤啊,真捉急啊,真捉急啊,程序虐我千百遍,我待程序如初恋,现在把问题贴出来,希望大家帮忙解决一下:
程序功能:
        在V1.20开发板上:
      ~(@^_^@)~ :实现D5不停的闪烁
      ~(@^_^@)~ :实现D2、D3、D4流水灯效果

运行中的问题:
   ~~o(>_<)o ~~:D5闪烁效果无法实现,一直是暗的
;流水灯效果正常
   ~~o(>_<)o ~~:大家看我贴的程序,会看到我注释掉了两条语句,不注释掉的话,流水灯的效果也无法实现
,D2灯常亮,D3、D4灯常灭;
程序如下:
module mix_module (sys_clk,sys_rstn,led_out);

input sys_clk,sys_rstn;
output led_out;
reg [3:0] led_out;

parameter T48M=26'd48_000_000;
reg [25:0] Count;
reg[1:0] i;
reg led;

always@(posedge sys_clk or negedge sys_rstn)
begin
    if(!sys_rstn)
        Count<=26'b0;
    else
        if(Count==T48M)
            Count<=26'b0;
        else
            Count<=Count+1'b1;
end

always@(posedge sys_clk or negedge sys_rstn)
begin
    if(!sys_rstn)
        i<=2'b00;
    else
        begin
            if(Count==T48M)
                i<=i+1'b1;
            else
                i<=i;
            if(i==2'b11)
                i<=2'b00;
            //else
                //i<=i;
        end
end

always@(i)
begin
    led=~led;
    if(i==2'b00)
        led_out={led,3'b110};
    else if(i==2'b01)
        led_out={led,3'b101};
    else
        led_out={led,3'b011};
end   
endmodule




[ 本帖最后由 wsdymg 于 2013-8-5 15:40 编辑 ]
查看本帖全部内容,请登录或者注册
此帖出自FPGA/CPLD论坛

最新回复

讲的挺细致的呀   详情 回复 发表于 2013-8-31 23:27
点赞 关注
 

回复
举报

579

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
先上个改过的例子吧。
parameter T48M=26'd48_000_000;
reg [25:0] Count;
initial Count = 26'h0;
reg [1:0] i;
initial i = 2'h0;
reg led;
initial led = 1'h0;
always@(posedge sys_clk or negedge sys_rstn)
begin
   if(!sys_rstn)
     Count<=26'b0;
   else
     if(Count==T48M)
     begin
     Count<=26'b0;
     i<=i+1'b1;
     end
     else
     Count<=Count+1'b1;
end
  
always@(i)
begin
  if(i==2'b00)
   begin
    led <= 0;
    led_out<={led,3'b110};
   end
  else if(i==2'b01)
   begin
    led <= 1;
    led_out<={led,3'b101};
   end
  else if(i==2'b10)
   begin
    led <= 0;
    led_out<={led,3'b011};
   end
  else if(i==2'b11)
   begin
    led <= 1;
    led_out<={led,3'b111};
   end
end
此帖出自FPGA/CPLD论坛

点评

按照版主的程序,调试好了,谢谢 [ 本帖最后由 wsdymg 于 2013-8-6 09:11 编辑 ]  详情 回复 发表于 2013-8-6 09:05
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 

回复

579

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
先恭喜一下楼主,虽然是闪灯程序,但是直击Verilog的本质,
就是灵活性,也是传说中的VHDL严谨的反义词。

还是老样子说下问题:
1、i作为变量名在HDL中一般不为之。很简单,C里面的i用完就完蛋了,叫做零食变量,就是吃完就完了。
HDL你写的每一个变量,只要不被优化掉的必然生成了一些东西,为表示重视,名字当然要多些
2、i是count翻转溢出,建议和count放在一起,方便理解
3、重点部分:always@(i)这种表达在不同综合器中是不同的,敏感变量列表中的敏感说明了问题
其实这种i的写法如果综合器功力深厚理应嗅探出其状态机的本质,
但很遗憾,Quartus比较大条,只能将LED=~LED,理解成了反馈寄存器,从而被优化掉。

最后强烈建议在HDL不是很熟练时候要非常的追求朴实,不花哨。多用套路性的东西。比如:状态机的几种写法,用最规范的一种。尽量避免综合器的误解。

最后,大招传授给你,独孤九剑啊!练会了以上可略过。直接看RTL综合结果,就知道综合器到底做了啥,随机应变就是啦。此谓之无招胜有招!
此帖出自FPGA/CPLD论坛

点评

首先看到回帖的时间,内心真是一阵一阵的感动啊!非常感谢版主披星戴月,不辞辛劳的帮我解答问题! :handshake :congratulate: 说的很好,很透彻,谢谢KDY。PS:本人对于并行执行与顺序执行不太明白,希望版主指导  详情 回复 发表于 2013-8-6 09:15
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

523

帖子

235

TA的资源

版主

4
 

回复 沙发kdy 的帖子

按照版主的程序,调试好了,谢谢


[ 本帖最后由 wsdymg 于 2013-8-6 09:11 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

523

帖子

235

TA的资源

版主

5
 

回复 板凳kdy 的帖子

首先看到回帖的时间,内心真是一阵一阵的感动啊!非常感谢版主披星戴月,不辞辛劳的帮我解答问题!
  说的很好,很透彻,谢谢KDY。PS:本人对于并行执行与顺序执行不太明白,希望版主指导一下!
此帖出自FPGA/CPLD论坛
 
 
 

回复

2万

帖子

71

TA的资源

管理员

6
 
确实很披星戴月,注意休息  kdy
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

275

帖子

0

TA的资源

纯净的硅(中级)

7
 
赞一个~
此帖出自FPGA/CPLD论坛
个人签名做自己喜欢的设计就是一种幸福~~~
 
 
 

回复

275

帖子

0

TA的资源

纯净的硅(中级)

8
 
我写了一个,仅供参考哦~
有兴趣可以一试哦

module led(
        input clk,
        output reg[3:0] led
);

reg clk_dis;       
reg[1:0] led_cnt;
reg[24:0] clk_cnt;
parameter  div_clk = 24_000_000;

always @(posedge clk)
begin
        if(clk_cnt == div_clk)
        begin
                clk_cnt <= 0;
                clk_dis <= ~clk_dis;
        end
        else
                clk_cnt <= clk_cnt + 1'b1;
end

always @(posedge clk_dis)
begin
        if(led_cnt == 3'd3)
        begin
                led_cnt <= 0;
        end
        led_cnt <= led_cnt + 1'b1;
end

always @(led_cnt)
begin
        led[3] = clk_dis;//D5不停闪烁
        case(led_cnt)//D4,D3,D2流水灯
                2'b00:led[2:0] <= 3'b110;
                2'b01:led[2:0] <= 3'b101;
                2'b10:led[2:0] <= 3'b011;
                2'b11:led[2:0] <= 3'b101;
        endcase
end

endmodule
此帖出自FPGA/CPLD论坛

点评

好的,谢谢:carnation:  详情 回复 发表于 2013-8-6 23:54
个人签名做自己喜欢的设计就是一种幸福~~~
 
 
 

回复

523

帖子

235

TA的资源

版主

9
 

回复 8楼Leo417love 的帖子

好的,谢谢:carnation:
此帖出自FPGA/CPLD论坛
 
 
 

回复

579

帖子

0

TA的资源

五彩晶圆(初级)

10
 
为什么我的TAP这么令人捉急呢?
还是Leo417love 的格式好看啊
此帖出自FPGA/CPLD论坛
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

275

帖子

0

TA的资源

纯净的硅(中级)

11
 
呵呵~其实我是按着敲单片机程序的格式来哒哦~

因为如果格式没对应齐的话,总感觉看着很头疼~

木有看下去的信心了~所以就逼着自己养成这般习惯啦~
此帖出自FPGA/CPLD论坛
个人签名做自己喜欢的设计就是一种幸福~~~
 
 
 

回复

28

帖子

10

TA的资源

一粒金砂(中级)

12
 
讲的挺细致的呀
此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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