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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2110|回复: 7

[求助] 我今天写了我生平第一个FPGA代码,遇到了问题向大神请教。

[复制链接]
发表于 2015-5-29 20:12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我写的是流水灯的代码,我的想法是把50MHZ的始终分频得到一个2HZ的时钟,然后检测到这个2HZ时钟的上升沿时改变LED的亮灭情况。实际效果是达到了,但是每当LED变化的一瞬间全部的LED总是快速闪烁一下。以下是我的代码请大家指教。module LED_Clock
(
        input sck,

input rst_n,

output led_en
);
reg [25:0] cnt;
always@(posedge sck or negedge rst_n)
begin

if(!rst_n)

cnt <= 26'd0;

else if(cnt<49_999_999)

cnt <= cnt+1'b1;

else

cnt <= 26'd0;
end
assign led_en = (cnt > 26'd25_000_000) ? 1'b1 : 1'b0;
endmodule

module LED_module
(
        input sck,

input rst_n,

input led_en,

output reg [3:0] LED_Data
);
always@ (posedge led_en or negedge rst_n)
begin

if(!rst_n)

LED_Data[3:0] <= 4'b0001;

else

LED_Data[3:0] <= {LED_Data[2:0],LED_Data[3]};
end
endmodule

module LED_Runing
(
   input sck,

input rst_n,

output [3:0] LED_Data
);
wire led_en;
LED_Clock LED_Clock_Init
(

.sck (sck),

.rst_n (rst_n),

.led_en (led_en)
);
LED_module LED_module_Init
(

.sck (sck),

.rst_n (rst_n),

.led_en (led_en),

.LED_Data (LED_Data)
);
endmodule
发表于 2015-5-29 22:10:23 | 显示全部楼层
建议楼主先做一下功能仿真看看,如果还是没发现问题,可以用时序仿真,或signaltap观测(quartus自带)。另外,写个流水灯不用这么麻烦,一个module就能搞定了,这样写有点乱,而且有可能会产生毛刺
 楼主| 发表于 2015-5-30 10:07:03 | 显示全部楼层
回复 2# 小工兵


   谢谢指点
发表于 2015-5-30 14:17:36 | 显示全部楼层
不要用分频时钟作为敏感性号,有毛刺的always@ (posedge led_en or negedge rst_n)
module test(
        input sck,
        input rst_n,
        output reg [2:0] LED_Data);
       
reg [25:0] cnt;
always@(posedge sck or negedge rst_n)
begin
        if(!rst_n)
                cnt <= 0;
        else if(cnt>26'd49_000_000)
                cnt <=0;
        else
                cnt<=cnt+1'b1;
end

always@ (posedge sck or negedge rst_n)      //要用系统时钟
        begin
        if(!rst_n)
                LED_Data[2:0] <= 3'b001;
        else if(cnt==0)          //改成这样就正常了
                LED_Data[2:0] <= {LED_Data[1:0],LED_Data[2]};
        end
       
endmodule

分成多个模块写是没有问题的
 楼主| 发表于 2015-6-1 08:55:35 | 显示全部楼层
回复 4# cyxhjnz


   多谢多谢,为什么用敏感信号作为时钟会有毛刺呢?
发表于 2015-6-11 11:56:26 | 显示全部楼层
回复 5# qinlu123


    可以去看看规范,不要用分频始终做敏感信号,至于为什么,我认为是不是因为在系统时钟的时候会产生两个时钟?
发表于 2015-6-12 07:54:46 | 显示全部楼层
为了学习而点的这个灯吧!弄得这么复杂还上原语了。。。。。
LED_Data[3:0] <= {LED_Data[2:0],LED_Data[3]};这句位拼接并没有指定具体的LED_Data每一位值给0还是1,难道是在原语里面操作的?如果没有指定,你这个亮完之后就有问题啦
发表于 2015-6-12 10:56:05 | 显示全部楼层
太复杂了吧 楼主 一个分频就可以了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-3-5 00:05 , Processed in 0.027724 second(s), 9 queries , Gzip On, Redis On.

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